? 426646-hook-dashboard.patch
? 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	13 Apr 2009 15:52:09 -0000
@@ -1,8 +1,7 @@
 <?php
 
-function dashboard_settings_form(&$form_state) {
+function dashboard_settings_form(&$form_state, $dashboard = 'default') {
   $form = array();
-
   $fields = array();
   $result = db_query("SELECT name FROM {profile_fields}");
   while ($field = db_fetch_object($result)) {
Index: dashboard.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/dashboard/dashboard.module,v
retrieving revision 1.19
diff -u -p -r1.19 dashboard.module
--- dashboard.module	12 Apr 2009 05:47:11 -0000	1.19
+++ dashboard.module	13 Apr 2009 15:52:10 -0000
@@ -10,67 +10,102 @@ function dashboard_menu() {
     }
   }
 
-  return array(
-    '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/widgets' => array(
-      'title callback' => 'dashboard_page_title',
-      'page callback' => 'dashboard_gadgets_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/remove-gadget' => array(
-      'page callback' => 'dashboard_gadget_remove',
-      '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',
-    ),
-
+  $items = array(
     'admin/settings/dashboard' => array(
-      'title' => t('Dashboard'),
+      'title' => 'Dashboard',
       'page callback' => 'drupal_get_form',
       'page arguments' => array('dashboard_settings_form'),
-      'access arguments' => array('administer dashboard'), 
-      'description' => t('Configure dashboard widgets.'),
+      'access arguments' => array('administer dashboard defaults'),
+      'description' => t('Administer default dashboard settings.'),
       'file' => 'dashboard.admin.inc',
     ),
+    'admin/settings/dashboard/default' => array(
+      'title' => 'Defaults',
+      'type' => MENU_DEFAULT_LOCAL_TASK,
+    ),
+  );
+
+  foreach (module_invoke_all('dashboard') as $type => $info) {
+    $items += array(
+      $info['path'] => array(
+        'title callback' => 'dashboard_page_title',
+        'page callback' => 'dashboard_page',
+        'access arguments' => array('access '. $type .' dashboard'),
+        'type' => MENU_CALLBACK,
+        'file' => 'dashboard.page.inc',
+      ),
+      $info['path'] .'/%dashboard_'. $type .'_page' => array(
+        'title callback' => 'dashboard_page_title',
+        'page callback' => 'dashboard_page',
+        'page arguments' => array(1),
+        'access arguments' => array('access '. $type .' dashboard'),
+        'type' => MENU_CALLBACK,
+        'file' => 'dashboard.page.inc',
+      ),
+      $info['path'] .'/%dashboard_'. $type .'_page/gadgets' => array(
+        'title callback' => 'dashboard_page_title',
+        'page callback' => 'dashboard_gadgets_page',
+        'access arguments' => array('update '. $type .' dashboard'),
+        'type' => MENU_CALLBACK,
+        'file' => 'dashboard.page.inc',
+      ),
+      $info['path'] .'/%dashboard_'. $type .'_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',
+      ),
+      $info['path'] .'/%dashboard_'. $type .'_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',
+      ),
+      $info['path'] .'/%dashboard_'. $type .'_page/remove-gadget' => array(
+        'page callback' => 'dashboard_gadget_remove',
+        'access callback' => 'dashboard_valid_token',
+        'access arguments' => array(1),
+        'type' => MENU_CALLBACK,
+        'file' => 'dashboard.page.inc',
+      ),
+      $info['path'] .'/%dashboard_'. $type .'_page/rename' => array(
+        'page callback' => 'dashboard_page_rename',
+        'page arguments' => array(1),
+        'access arguments' => array('update '. $type .' dashboard'),
+        'type' => MENU_CALLBACK,
+        'file' => 'dashboard.page.inc',
+      ),
+     'admin/settings/dashboard/'. $type => array(
+        'title' => $info['name'],
+        'page callback' => 'drupal_get_form',
+        'page arguments' => array('dashboard_settings_form', 3),
+        'access arguments' => array('administer '. $type .' dashboard'), 
+        'description' => t('Administer default dashboard settings.'),
+        'type' => MENU_LOCAL_TASK,
+        'weight' => $info['weight'],
+        'file' => 'dashboard.admin.inc',
+      ),
+    );
+  }
+
+  return $items;
+}
+
+function dashboard_dashboard() {
+  return array(
+    'user' => array(
+      'path' => 'dashboard',
+      'name' => 'User dashboard',
+      'weight' => 0,
+    ),
+    'defaults' => array(
+      'path' => 'dashboard-defaults',
+      'name' => 'Default content',
+      'weight' => 5,
+    ),
   );
 }
 
@@ -82,7 +117,14 @@ function dashboard_init() {
 }
 
 function dashboard_perm() {
-  return array('administer dashboard', 'access user dashboard');
+  $perms = array('administer dashboard defaults');
+  $dashboards = module_invoke_all('dashboard');
+  foreach ($dashboards as $type => $dashboard) {
+    foreach(array('access', 'update', 'delete', 'administer') as $perm) {
+      $perms[] = $perm .' '. $type .' dashboard';
+    }
+  }
+  return $perms;
 }
 
 function dashboard_valid_token($page) {
