views_menu_children_sort_handler.inc in Views Menu Node Children Filter 7
File
includes/views_menu_children_sort_handler.inc
View source
<?php
class views_menu_children_sort_handler extends \views_handler_sort {
function set_definition($definition) {
$this->table_alias = 'menu_links';
parent::set_definition(array(
'field' => 'weight',
));
}
function option_definition() {
$options = parent::option_definition();
$options['target_menu'] = array(
'default' => '',
);
return $options;
}
function can_expose() {
return false;
}
function options_submit(&$form, &$form_state) {
if (isset($form['target_menu']['#attributes']['disabled'])) {
$form_state['values']['target_menu'] = $this
->hasAttachedContextFilter();
}
parent::options_submit($form, $form_state);
}
function query() {
$target_menu = $this
->hasAttachedContextFilter();
if (empty($target_menu)) {
$target_menu = $this->options['target_menu'];
}
\views_menu_children_argument::joinMenuLinksTableToNode($this->query, $target_menu);
$this
->ensure_my_table();
$this->query
->add_orderby($this->table_alias, $this->real_field, $this->options['order']);
$this->query
->add_orderby($this->table_alias, 'link_title', $this->options['order']);
$this->query
->add_orderby($this->table_alias, 'mlid', $this->options['order']);
}
function pre_query() {
parent::pre_query();
}
function ui_name($short = FALSE) {
return t('Content: Menu children');
}
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$conflicting_selected_menu = $this
->hasAttachedContextFilter();
$default_value = !$conflicting_selected_menu ? $this->options['target_menu'] : $conflicting_selected_menu;
\views_menu_children_argument::buildMenuSelectForm($form, $form_state, $default_value . '');
if (!empty($conflicting_selected_menu)) {
$form['target_menu']['#attributes']['disabled'] = 'disabled';
$form['target_menu']['#description'] = t("This option is locked because you have a \"Menu children\" contextual filter already configured for this view.\n<br />When a Menu Children context filter and Menu Children sort are applied to the same view, they must use the same target menu.\n<br/>To change the target menu, make the change to the contextual filter.");
}
}
private function hasAttachedContextFilter() {
$filters = $this->view->display_handler
->get_option('arguments');
if (isset($filters['menu_children_filter'])) {
return $filters['menu_children_filter']['target_menu'];
}
return null;
}
}