Index: dynamicload/dynamicload.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/jstools/dynamicload/dynamicload.module,v
retrieving revision 1.19
diff -u -r1.19 dynamicload.module
--- dynamicload/dynamicload.module	11 Feb 2007 18:10:05 -0000	1.19
+++ dynamicload/dynamicload.module	12 Feb 2007 05:36:44 -0000
@@ -13,11 +13,25 @@
   $items = array();
   if ($may_cache) {
     $items[] = array(
+      'path' => 'dynamicload',
+      'title' => t('Personalized dashboard'),
+      'access' => user_access('access content'),
+      'type' => MENU_SUGGESTED_ITEM,
+      'callback' => 'dynamicload_dashboard',
+     );
+    $items[] = array(
       'path' => 'dynamicload/js',
-      'title' => t('dynamicload'),
+      'title' => t('Dynamicload page'),
+      'access' => user_access('access content'),
+      'type' => MENU_CALLBACK,
+      'callback' => 'dynamicload_js',
+     );
+    $items[] = array(
+      'path' => 'dynamicload/block',
+      'title' => t('Dynamicload block'),
       'access' => user_access('access content'),
       'type' => MENU_CALLBACK,
-      'callback' => 'dynamicload_js'
+      'callback' => 'dynamicload_block',
      );
   }
   else {
@@ -71,6 +85,9 @@
   return '';
 }
 
+/**
+ * Implementation of hook_form_alter().
+ */
 function dynamicload_form_alter($form_id, &$form) {
   if ($form_id == 'block_admin_configure') {
     $block_id = '#block-' . $form['module']['#value'] . '-' . $form['delta']['#value'];
@@ -104,10 +121,16 @@
   }
 }
 
+/**
+ * Register settings.
+ */
 function dynamicload_submit($form_id, $edit) {
   dynamicload_set('#block-' . $edit['module'] . '-' . $edit['delta'], $edit['dynamicload_target'], !$edit['dynamicload_apply']);
 }
 
+/**
+ * Helper function to register settings.
+ */
 function dynamicload_set($block_id, $target, $remove = FALSE) {
   $settings = variable_get('dynamicload_settings', array());
   if ($remove) {
@@ -119,6 +142,104 @@
   variable_set('dynamicload_settings', $settings);
 }
 
+/**
+ * Menu callback to present a dashboard for loading customized block-based views.
+ */
+function dynamicload_dashboard() {
+  drupal_add_js(drupal_get_path('module', 'dynamicload') .'/dynamicload_dashboard.js');
+  $blocks = drupal_get_form('dynamicload_block_list_form');
+  print theme('dynamicload_dashboard', $blocks);
+}
+
+/**
+ * List blocks available to the current user on the current page.
+ */
+function dynamicload_block_list() {
+  global $theme_key;
+  $blocks = array();
+  if ($theme_key) {
+    $regions = system_region_list($theme_key);
+    foreach (array_keys($regions) as $region) {
+      $block_list = block_list($region);
+      foreach (array_keys($block_list) as $key) {
+        _dynamicload_block_unset($block_list[$key]);
+      }
+      $blocks = array_merge($blocks, $block_list);
+    }
+  }
+  return $blocks;
+}
+
+/**
+ * Helper function to unset unneeded keys in a block array before sending to the client.
+ */
+function _dynamicload_block_unset(&$block) {
+  // Unset unneeded keys.
+  foreach (array_keys($block) as $key) {
+    if (!in_array($key, array('module', 'delta', 'region', 'title'))) {
+      unset($block[$key]);
+    }
+  }
+}
+
+/**
+ * Form to select a block to load.
+ */
+function dynamicload_block_list_form() {
+  $options = array(
+    0 => t('select a block'),
+  );
+  foreach (dynamicload_block_list() as $key => $block) {
+    $options[$key] = $block->title;
+  }
+  $form array(
+    '#prefix' => '<div id="dynamicload-block">',
+    '#suffix' => '</div>',
+  );
+  $form['blocks'] = = array(
+    '#type' => 'select',
+    '#title' => t('Blocks'),
+    '#description' => t('Select a block to load.'),
+    '#options' => $options,
+    '#default_value' => 0,
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Load'),
+  );
+  return $form;
+}
+
+function dynamicload_block_list_form_submit($form_id, $form_values) {
+  
+}
+
+function dynamicload_set_user_block($block) {
+  global $user;
+
+  if ($user->uid) {
+    $blocks = $user->blocks;
+    $blocks[$block->module .'_'. $block->delta] = $block;
+    $user = user_save($user, array('dynamicload_blocks' => $blocks));
+  }
+  else {
+    $blocks = $_SESSION['blocks'] ? $_SESSION['blocks'] : array();
+    $blocks[$block->module .'_'. $block->delta] = $block;
+    $_SESSION['blocks'] = $blocks;
+  }
+}
+
+/**
+ * Menu callback to return a rendered block in JSON format.
+ */
+function dynamicload_block($module, $delta, $region) {
+  $blocks = block_list($region);
+  return drupal_to_js(array(
+    'result' => TRUE,
+    'content' => theme('block', $blocks[$module .'_'. $delta]),
+  ));
+}
+
 function dynamicload_js() {
   // The path requested is the current q arg minus the 'dynamicload/js/'.
   if ($path = substr($_GET['q'], 15)) {
@@ -173,4 +294,8 @@
   }
   print drupal_to_js($result);
   exit();
+}
+
+function theme_dynamicload_dashboard($blocks) {
+  return $blocks;
 }
\ No newline at end of file
