? 426646-hook-dashboard.patch Index: dashboard.admin.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/dashboard/dashboard.admin.inc,v retrieving revision 1.1 diff -u -p -r1.1 dashboard.admin.inc --- dashboard.admin.inc 10 Apr 2009 17:09:12 -0000 1.1 +++ dashboard.admin.inc 10 Apr 2009 19:13:44 -0000 @@ -1,8 +1,8 @@ 'dashboard_page_title', + 'page callback' => 'dashboard_page', + 'page arguments' => array(1), + 'access arguments' => array('access '. $dashboard['key'] .' dashboard'), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ); + return $dashboard; +} + +/** + * Populate the base dashboard page re-order menu item. + */ +function dashboard_menu_reorder_pages($dashboard) { + $dashboard += array( + 'page callback' => 'dashboard_page_reorder', + 'access callback' => 'dashboard_valid_token', + 'access arguments' => array(1), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ); + return $dashboard; +} + +/** + * Populate the base dashboard gadget re-order menu item. + */ +function dashboard_menu_reorder_gadgets($dashboard) { + $dashboard += array( + 'page callback' => 'dashboard_gadget_reorder', + 'page arguments' => array(1), + 'access callback' => 'dashboard_valid_token', + 'access arguments' => array(1), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ); + return $dashboard; +} + +/** + * Populate the base dashboard gadget re-order menu item. + */ +function dashboard_menu_rename($dashboard) { + $dashboard += array( + 'page callback' => 'dashboard_page_rename', + 'page arguments' => array(1), + 'access arguments' => array('access '. $dashboard['key'] .' dashboard'), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ); + return $dashboard; +} + +/** + * Populate the base dashboard administrative menu item. + */ +function dashboard_menu_administer($dashboard) { + if (!isset($dashboard['admin arguments'])) { + $dashboard['page arguments'] = array('dashboard_settings_form', 3); + } + $dashboard += array( + 'title' => t('Dashboard'), + 'page callback' => 'drupal_get_form', + 'access arguments' => array('administer '. $dashboard['key'] .' dashboard'), + 'description' => t('Configure dashboard widgets.'), + 'file' => 'dashboard.admin.inc', + ); + return $dashboard; +} + +/* + 'dashboard/%dashboard_user_page/reorder-pages' => array( + 'page callback' => 'dashboard_page_reorder', + 'access callback' => 'dashboard_valid_token', + 'access arguments' => array(1), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ), + 'dashboard/%dashboard_user_page/reorder-gadgets' => array( + 'page callback' => 'dashboard_gadget_reorder', + 'page arguments' => array(1), + 'access callback' => 'dashboard_valid_token', + 'access arguments' => array(1), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ), + 'dashboard/%dashboard_user_page/rename' => array( + 'page callback' => 'dashboard_page_rename', + 'page arguments' => array(1), + 'access arguments' => array('access user dashboard'), + 'type' => MENU_CALLBACK, + 'file' => 'dashboard.page.inc', + ), + + ); + */ Index: dashboard.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/dashboard/dashboard.module,v retrieving revision 1.16 diff -u -p -r1.16 dashboard.module --- dashboard.module 10 Apr 2009 17:09:12 -0000 1.16 +++ dashboard.module 10 Apr 2009 19:13:47 -0000 @@ -10,54 +10,51 @@ function dashboard_menu() { } } - return array( - 'dashboard' => array( + $items = array(); + // Default menu items. + $items['dashboard'] = array( 'title callback' => 'dashboard_page_title', 'page callback' => 'dashboard_page', 'access arguments' => array('access user dashboard'), 'type' => MENU_CALLBACK, 'file' => 'dashboard.page.inc', - ), - 'dashboard/%dashboard_user_page' => array( - 'title callback' => 'dashboard_page_title', - 'page callback' => 'dashboard_page', - 'page arguments' => array(1), - 'access arguments' => array('access user dashboard'), - 'type' => MENU_CALLBACK, - 'file' => 'dashboard.page.inc', - ), - 'dashboard/%dashboard_user_page/reorder-pages' => array( - 'page callback' => 'dashboard_page_reorder', - 'access callback' => 'dashboard_valid_token', - 'access arguments' => array(1), - 'type' => MENU_CALLBACK, - 'file' => 'dashboard.page.inc', - ), - 'dashboard/%dashboard_user_page/reorder-gadgets' => array( - 'page callback' => 'dashboard_gadget_reorder', - 'page arguments' => array(1), - 'access callback' => 'dashboard_valid_token', - 'access arguments' => array(1), - 'type' => MENU_CALLBACK, - 'file' => 'dashboard.page.inc', - ), - 'dashboard/%dashboard_user_page/rename' => array( - 'page callback' => 'dashboard_page_rename', - 'page arguments' => array(1), - 'access arguments' => array('access user dashboard'), - 'type' => MENU_CALLBACK, - 'file' => 'dashboard.page.inc', - ), - - 'admin/settings/dashboard' => array( - 'title' => t('Dashboard'), - 'page callback' => 'drupal_get_form', - 'page arguments' => array('dashboard_settings_form'), - 'access arguments' => array('administer dashboard'), - 'description' => t('Configure dashboard widgets.'), - 'file' => 'dashboard.admin.inc', - ), ); + $items['admin/settings/dashboard'] = array( + 'title' => t('Dashboard'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('dashboard_settings_form'), + 'access arguments' => array('administer all dashboards'), + 'description' => t('Configure dashboard widgets.'), + 'file' => 'dashboard.admin.inc', + ); + $items['admin/settings/dashboard/default'] = array( + 'title' => t('Default settings'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('dashboard_settings_form', 'default'), + 'access arguments' => array('administer all dashboards'), + 'description' => t('Configure dashboard widgets.'), + 'file' => 'dashboard.admin.inc', + ); + // hook_dashboard defined menu items. + $dashboards = module_invoke_all('dashboard'); + $elements = array('page', 'reorder-pages', 'reorder-gadgets', 'rename'); + foreach ($dashboards as $key => $dashboard) { + foreach ($elements as $element) { + $path = ($element == 'page') ? '' : '/'. $element; + $items[$dashboard['base path'] . $path] = dashboard_build_menu($dashboard, $element); + } + if (!empty($dashboard['admin'])) { + $items['admin/settings/dashboard/'. $key] = dashboard_build_menu($dashboard, 'administer'); + } + } + + return $items; +} + +function dashboard_build_menu($dashboard, $element) { + module_load_include('inc', 'dashboard', 'dashboard.menu'); + $func = 'dashboard_menu_'. str_replace('-', '_', $element); + return $func($dashboard); } function dashboard_init() { @@ -68,7 +65,39 @@ function dashboard_init() { } function dashboard_perm() { - return array('administer dashboard', 'access user dashboard'); + $perms = array('administer all dashboards'); + $dashboards = module_invoke_all('dashboard'); + foreach ($dashboards as $key => $dashboard) { + $options = array('access', 'update', 'administer'); + foreach ($options as $option) { + $perms[] = $option .' '. $key .' dashboard'; + } + } + return $perms; +} + +function dashboard_dashboard() { + $dashboard['user'] = array( + 'key' => 'user', + 'title' => t('User dashboard'), + 'base path' => 'dashboard/%dashboard_user_page', + 'page arguments' => array(1), + 'admin' => TRUE, + 'weight' => 5, + ); + $dashboard['presets'] = array( + 'key' => 'presents', + 'title' => t('Dashboard presets'), + 'base path' => 'admin/dashboard/presets/%dashboard_preset_page', + 'page arguments' => array(3), + 'admin' => TRUE, + 'weight' => 10, + ); + return $dashboard; +} + +function dashboard_load_settings($dashboard) { + return array(); } function dashboard_valid_token($page) {