You are here

class menu_reference_plugin_argument_default_menu_trail in Menu Reference 7

Default argument plugin to return current page menu trail.

Hierarchy

Expanded class hierarchy of menu_reference_plugin_argument_default_menu_trail

1 string reference to 'menu_reference_plugin_argument_default_menu_trail'
menu_reference_views_plugins in views/menu_reference.views.inc
Implements hook_views_plugins().

File

views/plugins/menu_reference_plugin_argument_default_menu_trail.inc, line 10
Views plugin for argument default value.

View source
class menu_reference_plugin_argument_default_menu_trail extends views_plugin_argument_default {
  function option_definition() {
    $options = parent::option_definition();
    $options['allowed_menu'] = array(
      'default' => '',
    );
    $options['depth'] = array(
      'default' => 9,
    );
    $options['include_front'] = array(
      'default' => TRUE,
    );
    return $options;
  }
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['allowed_menu'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Allowed menus'),
      '#options' => menu_get_menus(TRUE),
      '#default_value' => is_array($this->options['allowed_menu']) ? array_filter($this->options['allowed_menu']) : array(),
      '#description' => t('Determine menu reference only in selected options. If you don\'t choose any option all available menus will be used to determine active trail.'),
    );
    $form['depth'] = array(
      '#type' => 'select',
      '#title' => t('Depth'),
      '#options' => array(
        0 => t('0 (only current item)'),
        1 => 1,
        2 => 2,
        3 => 3,
        4 => 4,
        5 => 5,
        6 => 6,
        7 => 7,
        8 => 8,
        9 => 9,
      ),
      '#default_value' => $this->options['depth'],
      '#description' => t('Set how deep in active trail should be menu reference determined. (Default: <em>9</em>, up to deepest level in menu hierarchy)'),
    );
    $form['include_front'] = array(
      '#type' => 'checkbox',
      '#title' => t('Include front page link in active trail'),
      '#default_value' => $this->options['include_front'],
      '#description' => t('Check this option if you want to include front page link in active menu trail to determine menu reference.'),
    );
  }
  function get_argument() {
    $allowed_menu = is_array($this->options['allowed_menu']) ? array_filter($this->options['allowed_menu']) : array();
    $depth = $this->options['depth'];
    $include_front = $this->options['include_front'];
    $current_path = $_GET['q'];
    $menu_links = $this
      ->get_menu_links_by_path($current_path, $allowed_menu);
    $mlids_priority = array();
    foreach ($menu_links as $link) {
      $mlids_priority[0][] = $link->mlid;
      for ($l = $depth; $l > 0; $l--) {
        $key = 'p' . $l;
        if ($link->{$key} > 0 && $link->mlid != $link->{$key}) {
          $mlids_priority[$l][] = $link->{$key};
        }
      }
    }
    if ($include_front) {
      $menu_front_links = $this
        ->get_menu_links_by_path('<front>', $allowed_menu);
      foreach ($menu_front_links as $link) {
        $mlids_priority[99][] = $link->mlid;
      }
    }
    $mlids = array();
    foreach ($mlids_priority as $set) {
      foreach ($set as $item) {
        $mlids[] = $item;
      }
    }
    foreach ($mlids as $key => $value) {
      $result = db_select($this->argument->table)
        ->fields($this->argument->table, array(
        $this->argument->field,
      ))
        ->condition($this->argument->field, $value, '=')
        ->execute()
        ->fetchAssoc();
      if (empty($result[$this->argument->field])) {
        unset($mlids[$key]);
      }
    }
    if (!empty($mlids)) {
      reset($mlids);
      return current($mlids);
    }
    else {
      return NULL;
    }
  }
  function get_menu_links_by_path($path, $allowed_menu = array()) {
    static $menu_links_by_path;
    if (isset($menu_links_by_path[$path])) {
      $result = $menu_links_by_path[$path];
    }
    else {
      $query = db_select('menu_links')
        ->fields('menu_links', array(
        'mlid',
        'p1',
        'p2',
        'p3',
        'p4',
        'p5',
        'p6',
        'p7',
        'p8',
        'p9',
      ))
        ->condition('link_path', $path, '=')
        ->orderBy('mlid', 'DESC');
      if (!empty($allowed_menu)) {
        $query
          ->condition('menu_name', $allowed_menu, 'IN');
      }
      $result = $menu_links_by_path[$path] = $query
        ->execute()
        ->fetchAll();
    }
    return $result;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
menu_reference_plugin_argument_default_menu_trail::get_argument function Return the default argument. Overrides views_plugin_argument_default::get_argument
menu_reference_plugin_argument_default_menu_trail::get_menu_links_by_path function
menu_reference_plugin_argument_default_menu_trail::options_form function Provide the default form for setting options. Overrides views_plugin_argument_default::options_form
menu_reference_plugin_argument_default_menu_trail::option_definition function Retrieve the options when this is a new access control plugin. Overrides views_plugin_argument_default::option_definition
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::destroy public function Destructor. 2
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
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::$view public property The top object of a view. Overrides views_object::$view 1
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::query public function Add anything to the query that we might need to. 7
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::validate public function Validate that the plugin is correct and can be saved. 3
views_plugin_argument_default::access public function Determine if the administrator has the privileges to use this plugin. 1
views_plugin_argument_default::check_access public function If we don't have access to the form but are showing it anyway, ensure that the form is safe and cannot be changed from user input.
views_plugin_argument_default::convert_options public function Convert options from the older style. 3
views_plugin_argument_default::init public function Initialize this plugin with the view and the argument it is linked to. 1
views_plugin_argument_default::options_submit public function Provide the default form form for submitting options. Overrides views_plugin::options_submit 1
views_plugin_argument_default::options_validate public function Provide the default form form for validating options. Overrides views_plugin::options_validate