class calendar_plugin_display_attachment in Calendar 7
Same name and namespace in other branches
- 6.2 includes/calendar_plugin_display_attachment.inc \calendar_plugin_display_attachment
- 7.2 includes/calendar_plugin_display_attachment.inc \calendar_plugin_display_attachment
The plugin that handles calendar attachment displays.
Adding year/month/day/week pages as attachments makes it possible to use any style type, so they could be tables, lists, teasers, or nodes as well as traditional calendar pages.
Force 'inherit_arguments' and 'inherit_filters' to TRUE, and 'attachment_position' to 'after', and don't display those options in the UI.
Allows paging (regular attachments do not), and adds an option to choose what calendar period this display represents.
Hierarchy
- class \views_object
- class \views_plugin
Expanded class hierarchy of calendar_plugin_display_attachment
1 string reference to 'calendar_plugin_display_attachment'
- calendar_views_plugins in includes/
calendar.views.inc - Implementation of hook_views_plugins
File
- includes/
calendar_plugin_display_attachment.inc, line 23 - Views display plugin for the Calendar module.
View source
class calendar_plugin_display_attachment extends views_plugin_display_attachment {
/**
* Instead of going through the standard views_view.tpl.php, delegate this
* to the style handler.
*/
function render() {
if (!empty($this->view->date_info->forbid)) {
return '';
}
return $this->view->style_plugin
->render($this->view->result);
}
/**
* Create an array of possible display periods.
*/
function display_types($type = 'month') {
$types = calendar_display_types();
return $types[$type];
}
/**
* Identify the period of this display.
*/
function calendar_type() {
$types = calendar_display_types();
$default = $this
->get_option('calendar_type');
if (!array_key_exists($default, $types)) {
$default = 'month';
}
return $default;
}
/**
* Inspect argument and view information to see which calendar
* period we should show. The argument tells us what to use
* if there is no value, the view args tell us what to use
* if there are values.
*/
function display_granularity($display_id) {
$arguments = $this->view
->get_items('argument', $display_id);
$wildcard = '';
$argument = '';
$default_granularity = '';
$i = 0;
foreach ($arguments as $argument) {
if ($argument['id'] == 'date_argument') {
$pos = $i;
$default_granularity = $argument['granularity'];
$wildcard = $argument['wildcard'];
$argument = !empty($this->view->args) && !empty($this->view->args[$pos]) ? $this->view->args[$pos] : '';
break;
}
$i++;
}
// TODO Anything else we need to do for 'all' arguments?
if ($argument == $wildcard) {
$view_granularity = $default_granularity;
}
elseif (!empty($argument)) {
module_load_include('inc', 'date_api', 'date_api_sql');
$date_handler = new date_sql_handler();
$view_granularity = $date_handler
->arg_granularity($argument);
}
else {
$view_granularity = $default_granularity;
}
return $view_granularity;
}
/**
* Display validation.
*/
function validate() {
$errors = parent::validate();
$arguments = $this->display->handler
->get_option('arguments');
if (!in_array('date_argument', array_keys($arguments))) {
if (empty($this->view->date_info->arg_missing)) {
$errors[] = t("A Calendar period display will not work without a Date argument.");
}
$this->view->date_info->arg_missing = TRUE;
}
elseif ($arguments['date_argument']['default_action'] != 'default' || $arguments['date_argument']['default_argument_type'] != 'date') {
if (empty($this->view->date_info->arg_missing_default)) {
$errors[] = calendar_errors('missing_argument_default');
}
$this->view->date_info->arg_missing_default = TRUE;
}
return $errors;
}
/**
* Attach only the appropriate displays for the current argument.
*/
function attach_to($display_id) {
$display_granularity = $this
->calendar_type();
$view_granularity = $this
->display_granularity($display_id);
// If this is not the right display to show,
// don't attach it, just exit.
if ($view_granularity != $display_granularity) {
unset($this->display);
return;
}
$this->view->date_info->parent_id = $display_id;
// See if we're attaching to a block rather than a page.
if (substr($display_id, 0, 14) == 'calendar_block') {
$this->view->date_info->mini = TRUE;
$this->view->date_info->block = TRUE;
$this->view->date_info->calendar_popup = FALSE;
if (!isset($this->view->date_info->block_identifier)) {
$this->view->date_info->block_identifier = 'mini';
}
}
elseif (substr($display_id, 0, 9) == 'calendar_') {
$this->view->date_info->calendar_colors = $this->view->display[$display_id]->handler->options['calendar_colors'];
$this->view->date_info->calendar_colors_taxonomy = $this->view->display[$display_id]->handler->options['calendar_colors_taxonomy'];
$this->view->date_info->calendar_colors_group = $this->view->display[$display_id]->handler->options['calendar_colors_group'];
$this->view->date_info->calendar_popup = $this->view->display[$display_id]->handler->options['calendar_popup'];
$this->view->date_info->calendar_date_link = $this->view->display[$display_id]->handler->options['calendar_date_link'];
}
parent::attach_to($display_id);
}
function pre_execute() {
// Make sure parent function is called so things like items per page get set.
parent::pre_execute();
$this->view->date_info->display_granularity = $this
->calendar_type();
$this->view->date_info->calendar_type = $this
->calendar_type();
}
function query() {
// If we are using legend colors based on taxonomy, make sure the
// node vid field is added to the query so the theme can use it.
if (!empty($this->view->date_info->calendar_colors_taxonomy)) {
if (empty($this->additional_fields)) {
$this->additional_fields = array();
}
$this->view->query
->add_field('node', 'vid');
}
parent::query();
}
/**
* Override some of the parent options.
*/
function options(&$display) {
parent::options($display);
$display['inherit_argments'] = TRUE;
$display['inherit_filters'] = TRUE;
$display['attachment_position'] = 'after';
}
/**
* Add custom option definitions.
*/
function option_definition() {
$options = parent::option_definition();
$options['calendar_type'] = array(
'default' => $this
->calendar_type(),
);
return $options;
}
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 'calendar_type':
$form['#title'] .= t('Calendar period');
$form['calendar_type'] = array(
'#type' => 'select',
'#description' => t('Select the calendar time period for this display.'),
'#default_value' => $this
->calendar_type(),
'#options' => calendar_display_types(),
);
break;
}
}
/**
* Perform any necessary changes to the form values prior to storage.
* There is no need for this function to actually store the data.
*/
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 'calendar_type':
$this
->set_option($form_state['section'], $form_state['values'][$form_state['section']]);
break;
}
}
/**
* Provide the summary for attachment options in the views UI.
*
* This output is returned as an array.
*/
function options_summary(&$categories, &$options) {
parent::options_summary($categories, $options);
$types = calendar_display_types();
$categories['calendar_settings'] = array(
'title' => t('Calendar settings'),
);
$options['calendar_type'] = array(
'category' => 'calendar_settings',
'title' => t('Calendar period'),
'value' => $types[$this
->calendar_type()],
);
}
/**
* Take away the option to change these values.
*/
function defaultable_sections($section = NULL) {
if (in_array($section, array(
'inherit_argments',
'inherit_filters',
'attachment_position',
))) {
return FALSE;
}
return parent::defaultable_sections($section);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
calendar_plugin_display_attachment:: |
function |
Attach only the appropriate displays for the current argument. Overrides views_plugin_display_attachment:: |
||
calendar_plugin_display_attachment:: |
function | Identify the period of this display. | ||
calendar_plugin_display_attachment:: |
function |
Take away the option to change these values. Overrides views_plugin_display:: |
||
calendar_plugin_display_attachment:: |
function | Inspect argument and view information to see which calendar period we should show. The argument tells us what to use if there is no value, the view args tell us what to use if there are values. | ||
calendar_plugin_display_attachment:: |
function | Create an array of possible display periods. | ||
calendar_plugin_display_attachment:: |
function |
Override some of the parent options. Overrides views_object:: |
||
calendar_plugin_display_attachment:: |
function |
Provide the default form for setting options. Overrides views_plugin_display_attachment:: |
||
calendar_plugin_display_attachment:: |
function |
Perform any necessary changes to the form values prior to storage.
There is no need for this function to actually store the data. Overrides views_plugin_display_attachment:: |
||
calendar_plugin_display_attachment:: |
function |
Provide the summary for attachment options in the views UI. Overrides views_plugin_display_attachment:: |
||
calendar_plugin_display_attachment:: |
function |
Add custom option definitions. Overrides views_plugin_display_attachment:: |
||
calendar_plugin_display_attachment:: |
function |
Set up any variables on the view prior to execution. Overrides views_plugin_display:: |
||
calendar_plugin_display_attachment:: |
function |
Inject anything into the query that the display handler needs. Overrides views_plugin_display:: |
||
calendar_plugin_display_attachment:: |
function |
Instead of going through the standard views_view.tpl.php, delegate this
to the style handler. Overrides views_plugin_display:: |
||
calendar_plugin_display_attachment:: |
function |
Display validation. Overrides views_plugin_display:: |
||
views_object:: |
public | property | Handler's definition. | |
views_object:: |
public | property | Except for displays, options for the object will be held here. | 1 |
views_object:: |
function | Collect this handler's option definition and alter them, ready for use. | ||
views_object:: |
public | function | Views handlers use a special construct function. | 4 |
views_object:: |
public | function | ||
views_object:: |
public | function | Always exports the option, regardless of the default value. | |
views_object:: |
public | function | Set default options. | |
views_object:: |
public | function | Let the handler know what its full definition is. | |
views_object:: |
public | function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | |
views_object:: |
public | function | Unpack a single option definition. | |
views_object:: |
public | function | Unpacks each handler to store translatable texts. | |
views_object:: |
public | function | ||
views_plugin:: |
public | property | The current used views display. | |
views_plugin:: |
public | property | The plugin name of this plugin, for example table or full. | |
views_plugin:: |
public | property | The plugin type of this plugin, for example style or query. | |
views_plugin:: |
public | function | Provide a list of additional theme functions for the theme info page. | |
views_plugin:: |
public | function | Return the human readable name of the display. | |
views_plugin:: |
public | function | Returns the summary of the settings in the display. | 8 |
views_plugin:: |
public | function | Provide a full list of possible theme templates used by this style. | |
views_plugin_display:: |
public | property | Stores all available display extenders. | |
views_plugin_display:: |
public | property | List of handlers for this display. | |
views_plugin_display:: |
public | property |
The top object of a view. Overrides views_plugin:: |
|
views_plugin_display:: |
public | function | Can this display accept attachments? | |
views_plugin_display:: |
public | function | Determine if the user has access to this display of the view. | |
views_plugin_display:: |
public | function |
Destructor. Overrides views_object:: |
|
views_plugin_display:: |
public | function | Special method to export items that have handlers. | |
views_plugin_display:: |
public | function |
Override of export_option() Overrides views_object:: |
|
views_plugin_display:: |
public | function | Special handling for plugin export. | |
views_plugin_display:: |
public | function | Special handling for the style export. | |
views_plugin_display:: |
public | function | Format a list of theme templates for output by the theme info helper. | |
views_plugin_display:: |
public | function | Returns to tokens for arguments. | |
views_plugin_display:: |
public | function | Provide some helpful text for the arguments. | 1 |
views_plugin_display:: |
public | function | List of fields for the current display with the associated relationship. | |
views_plugin_display:: |
public | function | Get the handler object for a single handler. | |
views_plugin_display:: |
public | function | Get a full array of handlers for $type. This caches them. | |
views_plugin_display:: |
public | function | Check to see which display to use when creating links. | |
views_plugin_display:: |
public | function | Intelligently get an option either from this or default display. | |
views_plugin_display:: |
public | function | Provide some helpful text for pagers. | 1 |
views_plugin_display:: |
public | function | Return the base path to use for this display. | |
views_plugin_display:: |
public | function | Get the instance of a plugin, for example style or row. | |
views_plugin_display:: |
public | function | Provide the block system with any exposed widget blocks for this display. | |
views_plugin_display:: |
public | function | Displays can require a certain type of style plugin. | 1 |
views_plugin_display:: |
public | function | ||
views_plugin_display:: |
public | function | Check to see if the display has a 'path' field. | 1 |
views_plugin_display:: |
public | function | If this display creates a block, implement one of these. | |
views_plugin_display:: |
public | function | If this display creates a page with a menu item, implement it here. | |
views_plugin_display:: |
public | function | 1 | |
views_plugin_display:: |
public | function | Determine if a given option is set to use the default or current display. | |
views_plugin_display:: |
public | function | If this display is the 'default' display which contains fallback settings. | 1 |
views_plugin_display:: |
public | function | Check if the provided identifier is unique. | |
views_plugin_display:: |
public | function | If override/revert was clicked, perform the proper toggle. | |
views_plugin_display:: |
public | function |
Validate the options form. Overrides views_plugin:: |
1 |
views_plugin_display:: |
public | function | Because forms may be split up into sections, this provides an easy URL to exactly the right section. Don't override this. | |
views_plugin_display:: |
public | function | Set an option and force it to be an override. | |
views_plugin_display:: |
public | function | Fully render the display. | 1 |
views_plugin_display:: |
public | function | ||
views_plugin_display:: |
public | function | ||
views_plugin_display:: |
public | function | Not all display plugins will support filtering. | |
views_plugin_display:: |
public | function | Render the footer of the view. | |
views_plugin_display:: |
public | function | Render the header of the view. | |
views_plugin_display:: |
public | function | Render the 'more' link. | |
views_plugin_display:: |
public | function | Intelligently set an option either from this display or from the default display, if directed to do so. | |
views_plugin_display:: |
public | function | Flip the override setting for the given section. | |
views_plugin_display:: |
public | function | Special method to unpack items that have handlers. | |
views_plugin_display:: |
public | function | Special handling for plugin unpacking. | |
views_plugin_display:: |
public | function | ||
views_plugin_display:: |
public | function | Check to see if the display needs a breadcrumb. | 1 |
views_plugin_display:: |
public | function | Check to see if the display can put the exposed form in a block. | |
views_plugin_display:: |
public | function | Determine if the display's style uses fields. | |
views_plugin_display:: |
public | function | Check to see if the display has some need to link to another display. | 1 |
views_plugin_display:: |
public | function | Does the display use AJAX? | |
views_plugin_display:: |
public | function | Does the display have groupby enabled? | |
views_plugin_display:: |
public | function | Does the display have a more link enabled? | |
views_plugin_display:: |
public | function | Should the enabled display more link be shown when no more items? | |
views_plugin_display:: |
public | function | Should the enabled display more link being opened in an new window? | |
views_plugin_display:: |
public | function | Does the display have custom link text? | |
views_plugin_display:: |
public | function | Render any special blocks provided for this display. | |
views_plugin_display_attachment:: |
public | function | ||
views_plugin_display_attachment:: |
public | function |
If an attachment is set to inherit the exposed filter settings from its
parent display, then don't render and display a second set of exposed
filter widgets. Overrides views_plugin_display:: |
|
views_plugin_display_attachment:: |
public | function |
When used externally, this is how a view gets run and returns
data in the format required. Overrides views_plugin_display:: |
|
views_plugin_display_attachment:: |
public | function |
Not all display plugins will suppert pager rendering. Overrides views_plugin_display:: |
|
views_plugin_display_attachment:: |
public | function |
Attachment displays only use exposed widgets if they are set to inherit
the exposed filter settings of their parent display. Overrides views_plugin_display:: |
|
views_plugin_display_attachment:: |
public | function |
Does the display have a pager enabled? Overrides views_plugin_display:: |