View source
<?php
class calendar_plugin_display_attachment extends views_plugin_display_attachment {
function render() {
if (!empty($this->view->date_info->forbid)) {
return '';
}
return $this->view->style_plugin
->render($this->view->result);
}
function display_types($type = 'month') {
$types = calendar_display_types();
return $types[$type];
}
function calendar_type() {
$types = calendar_display_types();
$default = $this
->get_option('calendar_type');
if (!array_key_exists($default, $types)) {
$default = 'month';
}
return $default;
}
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++;
}
if ($argument == $wildcard) {
$view_granularity = $default_granularity;
}
elseif (!empty($argument)) {
require_once './' . drupal_get_path('module', 'date_api') . '/date_api_sql.inc';
$date_handler = new date_sql_handler();
$view_granularity = $date_handler
->arg_granularity($argument);
}
else {
$view_granularity = $default_granularity;
}
return $view_granularity;
}
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;
}
function attach_to($display_id) {
$display_granularity = $this
->calendar_type();
$view_granularity = $this
->display_granularity($display_id);
if ($view_granularity != $display_granularity) {
unset($this->display);
return;
}
$this->view->date_info->parent_id = $display_id;
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() {
parent::pre_execute();
$this->view->date_info->display_granularity = $this
->calendar_type();
$this->view->date_info->calendar_type = $this
->calendar_type();
}
function query() {
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();
}
function options(&$display) {
parent::options($display);
$display['inherit_argments'] = TRUE;
$display['inherit_filters'] = TRUE;
$display['attachment_position'] = 'after';
}
function option_definition() {
$options = parent::option_definition();
$options['calendar_type'] = array(
'default' => $this
->calendar_type(),
);
return $options;
}
function options_form(&$form, &$form_state) {
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;
}
}
function options_submit($form, &$form_state) {
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;
}
}
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()],
);
}
function defaultable_sections($section = NULL) {
if (in_array($section, array(
'inherit_argments',
'inherit_filters',
'attachment_position',
))) {
return FALSE;
}
return parent::defaultable_sections($section);
}
}