function nodequeue_contextual_links_view_alter in Nodequeue 7.2
Implements hook_contextual_links_view_alter().
File
- ./
nodequeue.module, line 445 - Maintains queues of nodes in arbitrary order.
Code
function nodequeue_contextual_links_view_alter(&$element, $items) {
// Bail if the user doesn't have access to edit nodequeues.
if (!user_access('manipulate queues')) {
return;
}
if (!variable_get('nodequeue_show_contextual_links', TRUE)) {
return;
}
// Contextual links for Blocks.
$has_context = isset($element['#element']['#contextual_links']);
if ($has_context) {
$empty_context = empty($element['#element']['#contextual_links']['views_ui']);
if ($empty_context) {
return;
}
$views_info = $element['#element']['#contextual_links'];
}
// Contextual links for Views.
$has_views_context = isset($element['#element']['#views_contextual_links_info']);
if ($has_views_context) {
$empty_views_context = empty($element['#element']['#views_contextual_links_info']['views_ui']);
if ($empty_views_context) {
return;
}
$views_info = $element['#element']['#views_contextual_links_info'];
}
// Contextual links for Context blocks, or DS blocks.
$has_views_content_context = isset($element['#element']['content']['#views_contextual_links_info']);
if ($has_views_content_context) {
$empty_views_content_context = empty($element['#element']['content']['#views_contextual_links_info']['views_ui']);
if ($empty_views_context) {
return;
}
$views_info = $element['#element']['content']['#views_contextual_links_info'];
}
// Return if there is no view info.
if (!isset($views_info)) {
return;
}
$display_id = $views_info['views_ui']['view_display_id'];
$view_name = $views_info['views_ui']['view_name'];
$view = views_get_view($view_name, TRUE);
// Return if the view wasn't saved yet or has no display objects.
if (empty($view)) {
return;
}
$view
->build($display_id);
$nodequeue_rels = array(
'nodequeue_handler_relationship_nodequeue',
);
$subqueue_arg_titles = array(
'Subqueue reference',
'Subqueue reference (optional)',
);
$elview = $element['#element']['#views_contextual_links_info']['views_ui']['view'];
$relationship = '';
if (!empty($elview->display_handler->handlers['argument']['name']->relationship)) {
$relationship = $elview->display_handler->handlers['argument']['name']->relationship;
}
if (!empty($relationship) && $relationship == 'nodequeue_nodes_node') {
$argument = $elview->display_handler->handlers['argument']['name']->argument;
}
// Cycle through all the relationships to find ones provided by nodequeue.
// We'll use this as a trigger to attach the links.
foreach ($view->relationship as $rel) {
if (!in_array(get_class($rel), $nodequeue_rels, TRUE)) {
continue;
}
foreach ($rel->options['names'] as $queue_name) {
if (gettype($queue_name) != 'string') {
if (empty($argument)) {
continue;
}
else {
$queue_name = $argument;
}
}
$qid_map = nodequeue_get_qid_map();
$qid = $qid_map[$queue_name];
$queue = nodequeue_load($qid);
$element['#links'][$queue_name] = array(
'title' => t('Edit queue'),
'href' => 'admin/structure/nodequeue/' . $qid . '/view',
'query' => array(
'destination' => current_path(),
),
);
// Cycle through all arguments to find ones that limit us by subqueue.
// If we find some, add further links to subqueues.
foreach ($view->argument as $arg) {
$is_subqueue_arg = $arg->options['relationship'] == $rel->options['id'] && in_array($arg->definition['title'], $subqueue_arg_titles, TRUE);
if (!$is_subqueue_arg) {
continue;
}
// Provide contextual links for each of the subqueues.
$subqueues = nodequeue_load_subqueues_by_reference(array(
$qid => $arg->value,
));
foreach ($subqueues as $sqid => $subqueue) {
$element['#links'][$queue_name . '_' . $sqid] = array(
'title' => t('Edit Subqueue'),
'href' => 'admin/structure/nodequeue/' . $qid . '/view/' . $sqid,
'query' => array(
'destination' => current_path(),
),
);
}
}
}
}
}