You are here

class calendar_plugin_display_attachment in Calendar 7

Same name and namespace in other branches
  1. 6.2 includes/calendar_plugin_display_attachment.inc \calendar_plugin_display_attachment
  2. 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

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

Namesort descending Modifiers Type Description Overrides
calendar_plugin_display_attachment::attach_to function Attach only the appropriate displays for the current argument. Overrides views_plugin_display_attachment::attach_to
calendar_plugin_display_attachment::calendar_type function Identify the period of this display.
calendar_plugin_display_attachment::defaultable_sections function Take away the option to change these values. Overrides views_plugin_display::defaultable_sections
calendar_plugin_display_attachment::display_granularity 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::display_types function Create an array of possible display periods.
calendar_plugin_display_attachment::options function Override some of the parent options. Overrides views_object::options
calendar_plugin_display_attachment::options_form function Provide the default form for setting options. Overrides views_plugin_display_attachment::options_form
calendar_plugin_display_attachment::options_submit 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::options_submit
calendar_plugin_display_attachment::options_summary function Provide the summary for attachment options in the views UI. Overrides views_plugin_display_attachment::options_summary
calendar_plugin_display_attachment::option_definition function Add custom option definitions. Overrides views_plugin_display_attachment::option_definition
calendar_plugin_display_attachment::pre_execute function Set up any variables on the view prior to execution. Overrides views_plugin_display::pre_execute
calendar_plugin_display_attachment::query function Inject anything into the query that the display handler needs. Overrides views_plugin_display::query
calendar_plugin_display_attachment::render function Instead of going through the standard views_view.tpl.php, delegate this to the style handler. Overrides views_plugin_display::render
calendar_plugin_display_attachment::validate function Display validation. Overrides views_plugin_display::validate
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin_display::$extender public property Stores all available display extenders.
views_plugin_display::$handlers public property List of handlers for this display.
views_plugin_display::$view public property The top object of a view. Overrides views_plugin::$view
views_plugin_display::accept_attachments public function Can this display accept attachments?
views_plugin_display::access public function Determine if the user has access to this display of the view.
views_plugin_display::destroy public function Destructor. Overrides views_object::destroy
views_plugin_display::export_handler public function Special method to export items that have handlers.
views_plugin_display::export_option public function Override of export_option() Overrides views_object::export_option
views_plugin_display::export_plugin public function Special handling for plugin export.
views_plugin_display::export_style public function Special handling for the style export.
views_plugin_display::format_themes public function Format a list of theme templates for output by the theme info helper.
views_plugin_display::get_arguments_tokens public function Returns to tokens for arguments.
views_plugin_display::get_argument_text public function Provide some helpful text for the arguments. 1
views_plugin_display::get_field_labels public function List of fields for the current display with the associated relationship.
views_plugin_display::get_handler public function Get the handler object for a single handler.
views_plugin_display::get_handlers public function Get a full array of handlers for $type. This caches them.
views_plugin_display::get_link_display public function Check to see which display to use when creating links.
views_plugin_display::get_option public function Intelligently get an option either from this or default display.
views_plugin_display::get_pager_text public function Provide some helpful text for pagers. 1
views_plugin_display::get_path public function Return the base path to use for this display.
views_plugin_display::get_plugin public function Get the instance of a plugin, for example style or row.
views_plugin_display::get_special_blocks public function Provide the block system with any exposed widget blocks for this display.
views_plugin_display::get_style_type public function Displays can require a certain type of style plugin. 1
views_plugin_display::get_url public function
views_plugin_display::has_path public function Check to see if the display has a 'path' field. 1
views_plugin_display::hook_block_list public function If this display creates a block, implement one of these.
views_plugin_display::hook_menu public function If this display creates a page with a menu item, implement it here.
views_plugin_display::init public function 1
views_plugin_display::is_defaulted public function Determine if a given option is set to use the default or current display.
views_plugin_display::is_default_display public function If this display is the 'default' display which contains fallback settings. 1
views_plugin_display::is_identifier_unique public function Check if the provided identifier is unique.
views_plugin_display::options_override public function If override/revert was clicked, perform the proper toggle.
views_plugin_display::options_validate public function Validate the options form. Overrides views_plugin::options_validate 1
views_plugin_display::option_link 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::override_option public function Set an option and force it to be an override.
views_plugin_display::preview public function Fully render the display. 1
views_plugin_display::render_area public function
views_plugin_display::render_empty public function
views_plugin_display::render_filters public function Not all display plugins will support filtering.
views_plugin_display::render_footer public function Render the footer of the view.
views_plugin_display::render_header public function Render the header of the view.
views_plugin_display::render_more_link public function Render the 'more' link.
views_plugin_display::set_option public function Intelligently set an option either from this display or from the default display, if directed to do so.
views_plugin_display::set_override public function Flip the override setting for the given section.
views_plugin_display::unpack_handler public function Special method to unpack items that have handlers.
views_plugin_display::unpack_plugin public function Special handling for plugin unpacking.
views_plugin_display::unpack_style public function
views_plugin_display::uses_breadcrumb public function Check to see if the display needs a breadcrumb. 1
views_plugin_display::uses_exposed_form_in_block public function Check to see if the display can put the exposed form in a block.
views_plugin_display::uses_fields public function Determine if the display's style uses fields.
views_plugin_display::uses_link_display public function Check to see if the display has some need to link to another display. 1
views_plugin_display::use_ajax public function Does the display use AJAX?
views_plugin_display::use_group_by public function Does the display have groupby enabled?
views_plugin_display::use_more public function Does the display have a more link enabled?
views_plugin_display::use_more_always public function Should the enabled display more link be shown when no more items?
views_plugin_display::use_more_open_new_window public function Should the enabled display more link being opened in an new window?
views_plugin_display::use_more_text public function Does the display have custom link text?
views_plugin_display::view_special_blocks public function Render any special blocks provided for this display.
views_plugin_display_attachment::attachment_positions public function
views_plugin_display_attachment::displays_exposed 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::displays_exposed
views_plugin_display_attachment::execute public function When used externally, this is how a view gets run and returns data in the format required. Overrides views_plugin_display::execute
views_plugin_display_attachment::render_pager public function Not all display plugins will suppert pager rendering. Overrides views_plugin_display::render_pager
views_plugin_display_attachment::uses_exposed 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::uses_exposed
views_plugin_display_attachment::use_pager public function Does the display have a pager enabled? Overrides views_plugin_display::use_pager