function views_ui_preview
3.x admin.inc | views_ui_preview($view, |
2.x admin.inc | views_ui_preview($js, $view) |
Page callback for the live preview.
@todo make this use a template
1 string reference to 'views_ui_preview'
File
Code
function views_ui_preview($js, $view) {
// Take off the items we know so that we can have just the args passed
// in for later use.
$func_args = func_get_args();
array_shift($func_args); // $js
array_shift($func_args); // $view
$display_id = (count($func_args)) ? array_shift($func_args) : 'default';
$form_state = array(
'display_id' => $display_id,
'view_args' => $func_args ? implode('/', $func_args) : '',
'rerender' => TRUE,
'no_redirect' => TRUE,
'view' => &$view,
'ajax' => $js
);
$output = drupal_build_form('views_ui_preview_form', $form_state);
$args = array();
if (isset($form_state['view_args']) && $form_state['view_args'] !== '') {
$args = explode('/', $form_state['view_args']);
}
$errors = $view->validate();
if ($errors === TRUE) {
$view->ajax = $js;
$view->live_preview = TRUE;
// Store the current view URL for later use:
$view->set_display($form_state['display_id']);
$view->set_arguments($args);
if ($view->display_handler->get_option('path')) {
$path = $view->get_url();
}
// Make view links come back to preview.
$view->override_path = 'admin/build/views/nojs/preview/' . $view->name . '/' . $form_state['display_id'];
// also override $_GET['q'] so we get the pager
$_GET['q'] = $view->override_path;
if ($form_state['view_args']) {
$_GET['q'] .= '/' . $form_state['view_args'];
}
$preview = $view->preview($form_state['display_id'], $args);
// Get information from the preview for display.
if (!empty($view->build_info['query'])) {
$rows = array();
$query = db_prefix_tables($view->build_info['query']);
if ($view->build_info['query_args']) {
_db_query_callback($view->build_info['query_args'], TRUE);
$query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
}
$rows[] = array('<strong>' . t('Query') . '</strong>', '<pre>' . check_plain($query) . '</pre>');
if (!empty($view->additional_queries)) {
$queries = '<strong>' . t('These queries were run during view rendering:') . '</strong>';
foreach ($view->additional_queries as $query) {
if ($queries) {
$queries .= "\n";
}
$queries .= t('[@time ms]', array('@time' => intval($query[1] * 100000) / 100)) . ' ' . check_plain($query[0]);
}
$rows[] = array('<strong>' . t('Other queries') . '</strong>', '<pre>' . $queries . '</pre>');
}
$rows[] = array('<strong>' . t('Title') . '</strong>', filter_xss_admin($view->get_title()));
if (isset($path)) {
$path = l($path, $path);
}
else {
$path = t('This display has no path.');
}
$rows[] = array('<strong>' . t('Path') . '</strong>', $path);
$rows[] = array('<strong>' . t('Query build time') . '</strong>', t('@time ms', array('@time' => intval($view->build_time * 100000) / 100)));
$rows[] = array('<strong>' . t('Query execute time') . '</strong>', t('@time ms', array('@time' => intval($view->execute_time * 100000) / 100)));
$rows[] = array('<strong>' . t('View render time') . '</strong>', t('@time ms', array('@time' => intval($view->render_time * 100000) / 100)));
drupal_alter('views_preview_info', $rows, $view);
$info = theme('table', array(), $rows);
}
else {
$info = theme('table', array(), array(array('<strong>' . t('Query') . '</strong>', t('No query was run'))));
}
}
else {
foreach ($errors as $error) {
drupal_set_message($error, 'error');
}
$preview = t('Unable to preview due to validation errors.');
$info = '';
}
$info = '<div class="views-query-info">' . $info . '</div>';
if (variable_get('views_ui_query_on_top', FALSE)) {
$output .= $info . $preview;
}
else {
$output .= $preview . $info;
}
if (!$js) {
views_add_css('views-admin');
drupal_set_title($view->get_title());
return $output;
}
else {
views_include('ajax');
$object = new stdClass();
if (!empty($view->js_settings)) {
$object->js = $view->js_settings;
}
$object->display = '';
if ($messages = theme('status_messages')) {
$object->display = '<div class="views-messages">' . $messages . '</div>';
}
$object->display .= $output;
$object->title = $view->get_title();
views_ajax_render($object);
}
}