? dashboard-admin.patch
Index: dashboard.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/dashboard/dashboard.admin.inc,v
retrieving revision 1.5
diff -u -p -r1.5 dashboard.admin.inc
--- dashboard.admin.inc	13 Apr 2009 19:45:56 -0000	1.5
+++ dashboard.admin.inc	13 Apr 2009 20:40:24 -0000
@@ -11,8 +11,58 @@
  * FormsAPI for module settings page.
  */
 function dashboard_settings_form(&$form_state, $dashboard = 'default') {
-  $form = array();
   dashboard_add_tools();
 
+  $form = array();
+  // Get a list of all widgets.
+  $widgets = module_invoke_all('dashboard_widget');
+  $options = array();
+  foreach ($widgets as $key => $widget) {
+    $options[$key] = check_plain($widget['title']);
+  }
+  $form['widgets'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Active widgets'),
+    '#collapsible' => TRUE,
+  );
+  $form['widgets']['dashboard_'. $dashboard .'_widgets'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Available widgets'),
+    '#default_value' => variable_get('dashboard_'. $dashboard .'_widgets', array()),
+    '#options' => $options,
+  );
+  $form['limits'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Dashboard limits'),
+    '#collapsible' => TRUE,
+  );
+  $form['limits']['dashboard_'. $dashboard .'_max_pages'] = array(
+    '#type' => 'select',
+    '#title' => t('Maximum pages per dashboard'),
+    
+    '#options' => drupal_map_assoc(array(1, 2, 3, 5, 8, 10, 15, 20)),
+    '#default_value' => variable_get('dashboard_'. $dashboard .'_max_pages', 10),
+    '#description' => t('Sets the limit for the number of tabs that can be added to a Dashboard.'),
+  );
+  $form['limits']['dashboard_'. $dashboard .'_max_widgets'] = array(
+    '#type' => 'select',
+    '#title' => t('Maximum widgets per page'),
+    
+    '#options' => drupal_map_assoc(array(5, 10, 15, 20, 25, 30, 35, 40, 45, 50)),
+    '#default_value' => variable_get('dashboard_'. $dashboard .'_max_widgets', 15),
+    '#description' => t('Sets the limit for the number of widgets that can be added to a Dashboard tab.'),
+  );
+  return system_settings_form($form);
+}
+
+/**
+ * FormsAPI for configuring a widget for a dashboard.
+ */
+function dashboard_widget_settings_form(&$form_state, $dashboard, $widget) {
+  dashboard_add_tools();
+  $form = array();
+  $form['header'] = array(
+    '#value' => '<p>'. t('Settings for %widget for %dashboard', array('%widget' => $widget, '%dashboard' => $dashboard)) .'</p>',
+  );
   return system_settings_form($form);
 }
Index: dashboard.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/dashboard/dashboard.module,v
retrieving revision 1.27
diff -u -p -r1.27 dashboard.module
--- dashboard.module	13 Apr 2009 19:52:40 -0000	1.27
+++ dashboard.module	13 Apr 2009 20:40:24 -0000
@@ -34,7 +34,26 @@ function dashboard_menu() {
       'title' => 'Defaults',
       'type' => MENU_DEFAULT_LOCAL_TASK,
     ),
-  );
+    'admin/settings/dashboard/default/settings' => array(
+      'title' => 'Settings',
+      'type' => MENU_DEFAULT_LOCAL_TASK,
+      'weight' => -10,
+    ),
+  );  
+  $widgets = module_invoke_all('dashboard_widget');
+  foreach ($widgets as $key => $widget) {
+    $items += array(
+      'admin/settings/dashboard/default/'. $key => array(
+        'title' => $widget['title'] .' settings',
+        'page callback' => 'drupal_get_form',
+        'page arguments' => array('dashboard_widget_settings_form', 'default', 4),
+        'access arguments' => array('administer dashboard defaults'),
+        'description' => t('Administer widget settings for default dashboard.'),
+        'type' => MENU_LOCAL_TASK,
+        'file' => 'dashboard.admin.inc',
+      ),
+    );
+  }
   // Create deffault menu items for all Dashboard implementations.
   foreach (module_invoke_all('dashboard') as $type => $info) {
     $items += array(
@@ -94,12 +113,30 @@ function dashboard_menu() {
         'page callback' => 'drupal_get_form',
         'page arguments' => array('dashboard_settings_form', 3),
         'access arguments' => array('administer '. $type .' dashboard'),
-        'description' => t('Administer default dashboard settings.'),
+        'description' => t('Administer '. $type .' dashboard settings.'),
         'type' => MENU_LOCAL_TASK,
         'weight' => $info['weight'],
         'file' => 'dashboard.admin.inc',
       ),
+      'admin/settings/dashboard/'. $type .'/settings' => array(
+        'title' => 'Settings',
+        'type' => MENU_DEFAULT_LOCAL_TASK,
+        'weight' => -10,
+      ),
     );
+    foreach ($widgets as $key => $widget) {
+      $items += array(
+        'admin/settings/dashboard/'. $type .'/'. $key => array(
+          'title' => $widget['title'] .' settings',
+          'page callback' => 'drupal_get_form',
+          'page arguments' => array('dashboard_widget_settings_form', 3, 4),
+          'access arguments' => array('administer '. $type .' dashboard'),
+          'description' => t('Administer widget settings for  '. $type .' dashboard.'),
+          'type' => MENU_LOCAL_TASK,
+          'file' => 'dashboard.admin.inc',
+        ),
+      );
+    }
   }
 
   return $items;
@@ -182,25 +219,16 @@ function dashboard_dashboard() {
  */
 function dashboard_dashboard_widget() {
   return array(
-    /*
-    array(
-      'path' => menu router path for add to dashboard link,
-      'name' => machine-readable name,
-      'title' => human-readable name,
+    'example' => array(
+      'path' => 'node/%',
+      'name' => 'example',
+      'title' => 'Example widget',
+    ),
+    'block' => array(
+      'path' => '',
+      'name' => 'block',
+      'title' => 'Block widget',
     ),
-    */
-  );
-}
-
-/**
- * Sample implementatin of hook_dashboard_widget().
- * DEPRACATED?
- */
-function dashboard_example_dashboard_widget($widget_id) {
-  return array(
-    'title' => 'Widget '. $widget_id,
-    'link' => 'http://example.com',
-    'content' => 'Hello world',
   );
 }
 
