summaryrefslogtreecommitdiff
path: root/kolab.org/www/drupal-7.15/sites/all/modules/ctools/includes/menu.inc
diff options
context:
space:
mode:
Diffstat (limited to 'kolab.org/www/drupal-7.15/sites/all/modules/ctools/includes/menu.inc')
-rw-r--r--kolab.org/www/drupal-7.15/sites/all/modules/ctools/includes/menu.inc98
1 files changed, 98 insertions, 0 deletions
diff --git a/kolab.org/www/drupal-7.15/sites/all/modules/ctools/includes/menu.inc b/kolab.org/www/drupal-7.15/sites/all/modules/ctools/includes/menu.inc
new file mode 100644
index 0000000..e725ea4
--- /dev/null
+++ b/kolab.org/www/drupal-7.15/sites/all/modules/ctools/includes/menu.inc
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * @file
+ * General menu helper functions.
+ */
+
+/**
+ * Dynamically add a tab to the current path.
+ *
+ * This function is a simplified interface for adding tabs to the current path.
+ * Some considerations when doing this:
+ *
+ * - First, if there is only 1 tab, Drupal will not show it. Therefore, if
+ * you are only adding one tab, you should find a way to make sure there is
+ * already tab, or instead add 2.
+ * - Second, the caller is responsible for providing access control to these
+ * links.
+ *
+ * @param $link
+ * An array describing this link. It must contain:
+ * - 'title': The printed title of the link.
+ * - 'href': The path of the link. This is an argument to l() so it has all
+ * of those features and limitations.
+ * - 'options': Any options that go to l, including query, fragment and html
+ * options necessary.
+ * - 'weight': The weight to use in ordering the tabs.
+ * - 'type': Optional. If set to MENU_DEFAULT_LOCAL_TASK this can be used to
+ * add a fake 'default' local task, which is useful if you have to add
+ * tabs to a page that has none.
+ */
+function ctools_menu_add_tab($link = NULL) {
+ $links = &drupal_static(__FUNCTION__, array());
+ if (isset($link)) {
+ $links[$link['href']] = $link;
+ }
+
+ return $links;
+}
+
+/**
+ * Re-sort menu items after we have modified them.
+ */
+function ctools_menu_sort($a, $b) {
+ $a_weight = (is_array($a) && isset($a['#link']['weight'])) ? $a['#link']['weight'] : 0;
+ $b_weight = (is_array($b) && isset($b['#link']['weight'])) ? $b['#link']['weight'] : 0;
+ if ($a_weight == $b_weight) {
+ $a_title = (is_array($a) && isset($a['#link']['title'])) ? $a['#link']['title'] : 0;
+ $b_title = (is_array($b) && isset($b['#link']['title'])) ? $b['#link']['title'] : 0;
+ if ($a_title == $b_title) {
+ return 0;
+ }
+
+ return ($a_title < $b_title) ? -1 : 1;
+ }
+
+ return ($a_weight < $b_weight) ? -1 : 1;
+}
+
+function _ctools_menu_add_dynamic_items(&$data, &$router_item, &$root_path) {
+ if ($additions = ctools_menu_add_tab()) {
+ // If none of the static local tasks are active allow one of the dynamic
+ // active tasks to be marked as such.
+ $has_active = FALSE;
+ if (!empty($data['tabs'][0]['output'])) {
+ foreach ($data['tabs'][0]['output'] as $element) {
+ if (!empty($element['#link']['#active'])) {
+ $has_active = TRUE;
+ }
+ }
+ }
+ foreach ($additions as $addition) {
+ $addition['localized_options'] = isset($addition['options']) ? $addition['options'] : array();
+ if (isset($addition['type']) && $addition['type'] == MENU_LOCAL_ACTION) {
+ $data['actions']['output'][] = array(
+ '#theme' => 'menu_local_action',
+ '#link' => $addition,
+ );
+ }
+ else {
+ $data['tabs'][0]['output'][] = array(
+ '#theme' => 'menu_local_task',
+ '#link' => $addition,
+ '#active' => (!$has_active && $root_path === $addition['href']),
+ );
+ }
+ }
+ if (!empty($data['tabs'][0]['output'])) {
+ uasort($data['tabs'][0]['output'], 'ctools_menu_sort');
+ $data['tabs'][0]['count'] = count($data['tabs'][0]['output']);
+ }
+
+ if (!empty($data['actions']['output'])) {
+ uasort($data['actions']['output'], 'ctools_menu_sort');
+ $data['actions']['count'] = count($data['actions']['output']);
+ }
+ }
+}