views_content_plugin_display_ctools_context.inc in Chaos Tool Suite (ctools) 7
Same filename and directory in other branches
Contains the block display plugin.
File
views_content/plugins/views/views_content_plugin_display_ctools_context.incView source
<?php
/**
* @file
* Contains the block display plugin.
*/
/**
* The plugin that handles a block.
*
* @ingroup views_display_plugins
*/
class views_content_plugin_display_ctools_context extends views_plugin_display {
/**
* If this variable is true, this display counts as a context. We use this
* variable so that we can easily build plugins against this display type.
*/
public $context_display = TRUE;
public function get_style_type() {
return 'context';
}
public function defaultable_sections($section = NULL) {
if (in_array($section, array(
'style_options',
'style_plugin',
'row_options',
'row_plugin',
))) {
return FALSE;
}
return parent::defaultable_sections($section);
}
public function option_definition() {
$options = parent::option_definition();
$options['admin_title'] = array(
'default' => '',
'translatable' => TRUE,
);
// Overrides for standard stuff:
$options['style_plugin']['default'] = 'ctools_context';
$options['row_plugin']['default'] = 'fields';
$options['defaults']['default']['style_plugin'] = FALSE;
$options['defaults']['default']['style_options'] = FALSE;
$options['defaults']['default']['row_plugin'] = FALSE;
$options['defaults']['default']['row_options'] = FALSE;
$options['inherit_panels_path'] = array(
'default' => 0,
);
$options['argument_input'] = array(
'default' => array(),
);
return $options;
}
/**
* The display block handler returns the structure necessary for a block.
*/
public function execute() {
$this->executing = TRUE;
return $this->view
->render();
}
public function preview() {
$this->previewing = TRUE;
return $this->view
->render();
}
/**
* Render this display.
*/
public function render() {
if (!empty($this->previewing)) {
return theme($this
->theme_functions(), array(
'view' => $this->view,
));
}
else {
// We want to process the view like we're theming it, but not actually
// use the template part. Therefore we run through all the preprocess
// functions which will populate the variables array.
$hooks = theme_get_registry();
$info = $hooks[$this->definition['theme']];
if (!empty($info['file'])) {
@(include_once './' . $info['path'] . '/' . $info['file']);
}
$this->variables = array(
'view' => &$this->view,
);
if (isset($info['preprocess functions']) && is_array($info['preprocess functions'])) {
foreach ($info['preprocess functions'] as $preprocess_function) {
if (function_exists($preprocess_function)) {
$preprocess_function($this->variables, $this->definition['theme']);
}
}
}
}
return $this->variables;
}
/**
* Provide the summary for page options in the views UI.
*
* This output is returned as an array.
*/
public function options_summary(&$categories, &$options) {
// It is very important to call the parent function here:
parent::options_summary($categories, $options);
$categories['context'] = array(
'title' => t('Context settings'),
'column' => 'second',
'build' => array(
'#weight' => -10,
),
);
$admin_title = $this
->get_option('admin_title');
if (empty($admin_title)) {
$admin_title = t('Use view name');
}
if (drupal_strlen($admin_title) > 16) {
$admin_title = drupal_substr($admin_title, 0, 16) . '...';
}
$options['admin_title'] = array(
'category' => 'context',
'title' => t('Admin title'),
'value' => $admin_title,
);
$options['inherit_panels_path'] = array(
'category' => 'context',
'title' => t('Use Panel path'),
'value' => $this
->get_option('inherit_panels_path') ? t('Yes') : t('No'),
);
$options['argument_input'] = array(
'category' => 'context',
'title' => t('Argument input'),
'value' => t('Edit'),
);
}
/**
* Provide the default form for setting options.
*/
public function options_form(&$form, &$form_state) {
// It is very important to call the parent function here:
parent::options_form($form, $form_state);
switch ($form_state['section']) {
case 'row_plugin':
// This just overwrites the existing row_plugin which is using the wrong options.
$form['row_plugin']['#options'] = views_fetch_plugin_names('row', 'normal', array(
$this->view->base_table,
));
break;
case 'admin_title':
$form['#title'] .= t('Administrative title');
$form['admin_title'] = array(
'#type' => 'textfield',
'#default_value' => $this
->get_option('admin_title'),
'#description' => t('This is the title that will appear for this view context in the configure context dialog. If left blank, the view name will be used.'),
);
break;
case 'inherit_panels_path':
$form['#title'] .= t('Inherit path from panel display');
$form['inherit_panels_path'] = array(
'#type' => 'select',
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => $this
->get_option('inherit_panels_path'),
'#description' => t('If yes, all links generated by Views, such as more links, summary links, and exposed input links will go to the panels display path, not the view, if the display has a path.'),
);
break;
case 'argument_input':
$form['#title'] .= t('Choose the data source for view arguments');
$argument_input = $this
->get_argument_input();
ctools_include('context');
ctools_include('dependent');
$form['argument_input']['#tree'] = TRUE;
$converters = ctools_context_get_all_converters();
ksort($converters);
foreach ($argument_input as $id => $argument) {
$form['argument_input'][$id] = array(
'#tree' => TRUE,
);
$safe = str_replace(array(
'][',
'_',
' ',
':',
), '-', $id);
$type_id = 'edit-argument-input-' . $safe;
$form['argument_input'][$id]['type'] = array(
'#type' => 'select',
'#options' => array(
'none' => t('No argument'),
'context' => t('From context'),
),
'#id' => $type_id,
'#title' => t('@arg source', array(
'@arg' => $argument['name'],
)),
'#default_value' => $argument['type'],
);
$form['argument_input'][$id]['context'] = array(
'#type' => 'select',
'#title' => t('Required context'),
'#description' => t('If "From context" is selected, which type of context to use.'),
'#default_value' => $argument['context'],
'#options' => $converters,
'#dependency' => array(
$type_id => array(
'context',
),
),
);
$form['argument_input'][$id]['context_optional'] = array(
'#type' => 'checkbox',
'#title' => t('Context is optional'),
'#description' => t('This context need not be present for the pane to function. If you plan to use this, ensure that the argument handler can handle empty values gracefully.'),
'#default_value' => $argument['context_optional'],
'#dependency' => array(
$type_id => array(
'context',
),
),
);
}
break;
}
}
/**
* Perform any necessary changes to the form values prior to storage.
* There is no need for this function to actually store the data.
*/
public function options_submit(&$form, &$form_state) {
// It is very important to call the parent function here:
parent::options_submit($form, $form_state);
switch ($form_state['section']) {
case 'admin_title':
case 'argument_input':
case 'inherit_panels_path':
$this
->set_option($form_state['section'], $form_state['values'][$form_state['section']]);
break;
}
}
/**
* Adjust the array of argument input to match the current list of
* arguments available for this display. This ensures that changing
* the arguments doesn't cause the argument input field to just
* break.
*/
public function get_argument_input() {
$arguments = $this
->get_option('argument_input');
$handlers = $this
->get_handlers('argument');
// We use a separate output so as to seamlessly discard info for
// arguments that no longer exist.
$output = array();
foreach ($handlers as $id => $handler) {
if (empty($arguments[$id])) {
$output[$id] = array(
'type' => 'none',
'context' => 'any',
'context_optional' => FALSE,
'name' => $handler
->ui_name(),
);
}
else {
$output[$id] = $arguments[$id];
$output[$id]['name'] = $handler
->ui_name();
}
}
return $output;
}
public function get_path() {
if ($this
->get_option('link_display') == 'custom_url' && ($override_path = $this
->get_option('link_url'))) {
return $override_path;
}
if ($this
->get_option('inherit_panels_path')) {
return $_GET['q'];
}
return parent::get_path();
}
}
Classes
Name | Description |
---|---|
views_content_plugin_display_ctools_context | The plugin that handles a block. |