You are here

menu_node_access.module in Panels Extras 7

Same filename and directory in other branches
  1. 6 menu_node_access/menu_node_access.module

menu_node_access.module Add a node selection rule "Node : Belongs to a Menu"

File

menu_node_access/menu_node_access.module
View source
<?php

// $Id$ menu_node_access.module,v 1.1 2011/03/02 11:58:48 chriscalip Exp $

/**
 * @file menu_node_access.module
 * Add a node selection rule "Node : Belongs to a Menu"
 */

/**
 * Implements hook_ctools_plugin_directory().
 */
function menu_node_access_ctools_plugin_directory($module, $plugin) {
  if ($module == 'ctools' && $plugin == 'access') {
    return "plugins/access";
  }
}

/**
 * Implements hook_node_load().
 */
function menu_node_access_node_load($nodes, $types) {
  if (!is_array($nodes)) {
    return;
  }

  // TODO: Optimize for multiple nodes.
  foreach ($nodes as $node) {

    // Ensure the menu object is loaded.
    $node->menu_node_links = menu_node_access_get_links($node->nid);
  }
}

/**
 * Get the relevant menu links for a node.
 *
 * @param $nid
 *   The node id.
 * @param $router
 *   Boolean flag indicating whether to attach the menu router link to the $item object.
 *   If set to TRUE, the router will be set as $item->menu_router.
 * @return
 *   An array of complete menu_link objects or an empy array on failure.
 */
function menu_node_access_get_links($nid, $router = FALSE) {
  $result = db_query("SELECT * FROM {menu_links} WHERE link_path = :link_path", array(
    ':link_path' => 'node/' . $nid,
  ));
  $items = array();
  foreach ($result as $data) {
    if ($router) {
      $data->menu_router = menu_get_item('node/' . $nid);
    }
    $items[$data->mlid] = $data;
  }
  return $items;
}

Functions