function system_get_module_admin_tasks

Same name in other branches
  1. 9 core/modules/system/system.module \system_get_module_admin_tasks()
  2. 8.9.x core/modules/system/system.module \system_get_module_admin_tasks()
  3. 10 core/modules/system/system.module \system_get_module_admin_tasks()

Generate a list of tasks offered by a specified module.

Parameters

$module: Module name.

$info: The module's information, as provided by system_get_info().

Return value

An array of task links.

2 calls to system_get_module_admin_tasks()
help_page in modules/help/help.admin.inc
Menu callback; prints a page listing general help for a module.
system_admin_index in modules/system/system.admin.inc
Menu callback; prints a listing of admin tasks, organized by module.

File

modules/system/system.module, line 2994

Code

function system_get_module_admin_tasks($module, $info) {
    $links =& drupal_static(__FUNCTION__);
    if (!isset($links)) {
        $links = array();
        $query = db_select('menu_links', 'ml', array(
            'fetch' => PDO::FETCH_ASSOC,
        ));
        $query->join('menu_router', 'm', 'm.path = ml.router_path');
        $query->fields('ml')
            ->fields('m', array_diff(drupal_schema_fields_sql('menu_router'), array(
            'weight',
        )))
            ->condition('ml.link_path', 'admin/%', 'LIKE')
            ->condition('ml.hidden', 0, '>=')
            ->condition('ml.module', 'system')
            ->condition('m.number_parts', 1, '>')
            ->condition('m.page_callback', 'system_admin_menu_block_page', '<>');
        foreach ($query->execute() as $link) {
            _menu_link_translate($link);
            if ($link['access']) {
                $links[$link['router_path']] = $link;
            }
        }
    }
    $admin_tasks = array();
    $titles = array();
    if ($menu = module_invoke($module, 'menu')) {
        foreach ($menu as $path => $item) {
            if (isset($links[$path])) {
                $task = $links[$path];
                // The link description, either derived from 'description' in
                // hook_menu() or customized via menu module is used as title attribute.
                if (!empty($task['localized_options']['attributes']['title'])) {
                    $task['description'] = $task['localized_options']['attributes']['title'];
                    unset($task['localized_options']['attributes']['title']);
                }
                // Check the admin tasks for duplicate names. If one is found,
                // append the parent menu item's title to differentiate.
                $duplicate_path = array_search($task['title'], $titles);
                if ($duplicate_path !== FALSE) {
                    if ($parent = menu_link_load($task['plid'])) {
                        // Append the parent item's title to this task's title.
                        $task['title'] = t('@original_title (@parent_title)', array(
                            '@original_title' => $task['title'],
                            '@parent_title' => $parent['title'],
                        ));
                    }
                    if ($parent = menu_link_load($admin_tasks[$duplicate_path]['plid'])) {
                        // Append the parent item's title to the duplicated task's title.
                        // We use $links[$duplicate_path] in case there are triplicates.
                        $admin_tasks[$duplicate_path]['title'] = t('@original_title (@parent_title)', array(
                            '@original_title' => $links[$duplicate_path]['title'],
                            '@parent_title' => $parent['title'],
                        ));
                    }
                }
                else {
                    $titles[$path] = $task['title'];
                }
                $admin_tasks[$path] = $task;
            }
        }
    }
    // Append link for permissions.
    if (module_hook($module, 'permission')) {
        $item = menu_get_item('admin/people/permissions');
        if (!empty($item['access'])) {
            $item['link_path'] = $item['href'];
            $item['title'] = t('Configure @module permissions', array(
                '@module' => $info['name'],
            ));
            unset($item['description']);
            $item['localized_options']['fragment'] = 'module-' . $module;
            $admin_tasks["admin/people/permissions#module-{$module}"] = $item;
        }
    }
    return $admin_tasks;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.