--- flickr_block.module.orig	2007-06-09 19:56:44.000000000 +0100
+++ flickr_block.module	2008-02-05 17:36:08.000000000 +0000
@@ -6,162 +6,79 @@
 /**
  * Implementation of hook_block().
  */
-function flickr_block($op = 'list', $delta = 0, $edit = array()) {
+function flickr_block($op = 'list', $delta = 0, $edit = array()) { 
   switch ($op) {
-  case 'list':
-    // User base blocks
-    $blocks[0]['info'] = t("Flickr user page recent photos");
-    $blocks[1]['info'] = t("Flickr user page photosets");
-    $blocks[2]['info'] = t("Flickr user page random photos");
-
-    // Site wide blocks
-    $blocks[3]['info'] = t('Flickr recent photos');
-    $blocks[4]['info'] = t('Flickr recent photosets');
-    $blocks[5]['info'] = t('Flickr random photos');
-
-    return $blocks;
+  case 'list':	
+    if ($flickr_entries = variable_get('flickr_entries', array())) {        
+      $blocks = array();   
+      foreach ($flickr_entries as $delta => $flickr_entry) { 
+        $blocks[$delta]['info']  = "Flickr entry : " . $flickr_entry['name'];
+      } 
+    }
+    
+  return $blocks;
 
   case 'configure':
     $count_options = array(1 => '1', 2 => '2', 3 => '3',  4 => '4', 5 => '5', 6 => '6', 7 => '7',  8 => '8', 9 => '9', 10 => '10', 15 => '15', 20 => '20', 25 => '25', 30 => '30');
-    // remove the large and original sizes
     $size_options = array();
     foreach (flickr_photo_sizes() as $size => $info) {
-      $size_options[$size] = $info['label'] .' - '. $info['description'];
+      $size_options[$size] = $info['label'] . ' - ' . $info['description'];
     }
     unset($size_options['b']);
     unset($size_options['o']);
-
-    $settings = variable_get('flickr_block_'. $delta, array('user_id' => '', 'show_n' => 4, 'size' => 's'));
+	
+    $flickr_entries = variable_get('flickr_entries', array());
+	$show_n = $flickr_entries[$delta]['show_n'] ? $flickr_entries[$delta]['show_n'] : 4;
+	$size = $flickr_entries[$delta]['size'] ? $flickr_entries[$delta]['size'] : 's';
+	$user_id = $flickr_entries[$delta]['user_id'] ? $flickr_entries[$delta]['user_id'] : variable_get('flickr_default_userid', '');	
+	$settings = array('user_id' => $user_id, 'show_n' => $show_n, 'size' => $size);
 
     $form = array();
-    $form["flickr_block_{$delta}_user_id"] = array(
+    $form["flickr_block_user_id"] = array(
       '#type' => 'textfield',
       '#title' => t('Flickr User Id'),
       '#default_value' => $settings['user_id'],
       '#description' => t("The user id of a Flickr user. If this is left blank, the sites's default user will be used. Current default id is " . variable_get('flickr_default_userid', '')),
     );
-    $form["flickr_block_{$delta}_show_n"] = array(
+    $form["flickr_block_show_n"] = array(
       '#type' => 'select',
       '#options' => $count_options,
       '#title' => t('Show the last <em>n</em> photos'),
       '#default_value' => $settings['show_n'],
       '#description' => t("The block will display this many photos.")
     );
-    $form["flickr_block_{$delta}_size"] = array(
+    $form["flickr_block_size"] = array(
       '#type' => 'select',
       '#options' => $size_options,
       '#title' => t('Size of photos'),
       '#default_value' => $settings['size'],
       '#description' => t("Select the size of photos you'd like to display in the block.")
     );
-
-    switch ($delta) {
-    case 0: // user page, recent
-      unset($form["flickr_block_{$delta}_user_id"]);
-      break;
-    case 1: // user page, photosets
-      unset($form["flickr_block_{$delta}_user_id"]);
-      // photoset, not photos
-      $form["flickr_block_{$delta}_show_n"]['#title'] = t('Show the last <em>n</em> photosets');
-      $form["flickr_block_{$delta}_show_n"]['#description'] = t("The block will show this many of the user's photosets.");
-      break;
-    case 2: // user page, random
-      unset($form["flickr_block_{$delta}_user_id"]);
-      break;
-
-    case 3: // sitewide, recent
-      break;
-    case 4: // sitewite photoset, not photos
-      $form["flickr_block_{$delta}_show_n"]['#title'] = t('Show the last <em>n</em> photosets');
-      $form["flickr_block_{$delta}_show_n"]['#description'] = t("The block will show this many of the user's photosets.");
-      break;
-    case 5: // sitewide, random
-      break;
-    }
-
+ 
     return $form;
-
+		
   case 'save':
-    switch ($delta) {
-    case 0:
-    case 1:
-    case 2:
-      variable_set('flickr_block_'. $delta, array(
-        'show_n' => (int) $edit["flickr_block_{$delta}_show_n"],
-        'size' => $edit["flickr_block_{$delta}_size"],
-      ));
-      break;
-
-    case 3:
-    case 4:
-    case 5:
-      variable_set('flickr_block_'. $delta, array(
-        'user_id' => $edit["flickr_block_{$delta}_user_id"],
-        'show_n' => (int) $edit["flickr_block_{$delta}_show_n"],
-        'size' => $edit["flickr_block_{$delta}_size"],
-      ));
-      break;
-    }
+	$flickr_entries = variable_get('flickr_entries', array());
+	$flickr_entries[$delta]['user_id'] = $edit["flickr_block_user_id"];
+	$flickr_entries[$delta]['show_n'] = (int)$edit["flickr_block_show_n"];
+	$flickr_entries[$delta]['size'] = $edit["flickr_block_size"];
+	variable_set('flickr_entries', $flickr_entries);	
+		
     break;
 
-  case 'view': default:
-    $settings = variable_get('flickr_block_'. $delta, array(
-      'user_id' => '',
-      'show_n' => 4,
-      'size' => 's',
-    ));
-    // Get the default user id as a fallback
-    if (isset($settings['user_id'])) {
-      $settings['user_id'] = variable_get('flickr_default_userid', '');
-    }
-
-    // Get per user nsid if necessary
-    if ($delta < 3) {
-      if (arg(0) == 'user' && ($uid = (int) arg(1))) {
-        if ($user = user_load(array('uid' => $uid))) {
-          if ($user->flickr['nsid']) {
-            if ($delta == 0) {
-              $block['subject'] = t("%username's recent Flickr photos", array('%username' => $user->name));
-              $block['content'] = _flickr_block_recent($user->flickr['nsid'], $settings['show_n'], $settings['size']);
-            }
-            elseif ($delta == 1) {
-              $block['subject'] = t("%username's recent Flickr photosets", array('%username' => $user->name));
-              $block['content'] = _flickr_block_photosets($user->flickr['nsid'], $settings['show_n'], $settings['size']);
-            }
-            elseif ($delta == 2) {
-              $block['subject'] = t("%username's random Flickr photos", array('%username' => $user->name));
-              $block['content'] = _flickr_block_random($user->flickr['nsid'], $settings['show_n'], $settings['size']);
-            }
-          }
-        }
-      }
-    }
-    elseif ($delta == 3) {
-      $block['subject'] = t('Flickr recent photos');
-      $block['content'] = _flickr_block_recent($settings['user_id'], $settings['show_n'], $settings['size']);
-    }
-    elseif ($delta == 4) {
-      $block['subject'] = t('Flickr recent photosets');
-      $block['content'] = _flickr_block_photosets($settings['user_id'], $settings['show_n'], $settings['size']);
-    }
-    elseif ($delta == 5) {
-      $block['subject'] = t('Flickr random photos');
-      $block['content'] = _flickr_block_random($settings['user_id'], $settings['show_n'], $settings['size']);
-    }
+   case 'view': default:
+    $flickr_entries = variable_get('flickr_entries', array());
+	$user_id = $flickr_entries[$delta]['user_id'] ? $flickr_entries[$delta]['user_id'] : variable_get('flickr_default_userid', '');
+    $show_n = $flickr_entries[$delta]['show_n'] ? $flickr_entries[$delta]['show_n'] : 4;
+	$size = $flickr_entries[$delta]['size'] ? $flickr_entries[$delta]['size'] : 's';
+    $settings = array('user_id' => $user_id, 'show_n' => $show_n, 'size' => $size);	
+	$block['subject'] = t('Flickr entry : ' . $flickr_entries[$delta]['name']);  
+    $block['content'] = _flickr_entry($settings['user_id'], $settings['show_n'], $settings['size'], $flickr_entries[$delta]); 
+ 
     return $block;
   }
 }
 
-function _flickr_block_recent($nsid, $show_n, $size) {
-  $output = '';
-  if ($photos = flickr_photos_search($nsid, 1, array('per_page' => $show_n))) {
-    foreach($photos['photo'] as $photo) {
-      $output .= theme('flickr_block_photo', $photo, $size);
-    }
-  }
-  return $output;
-}
-
 function _flickr_block_photosets($nsid, $show_n, $size) {
   $photosets = flickr_photoset_get_list($nsid);
   $output = '';
@@ -172,30 +89,60 @@ function _flickr_block_photosets($nsid, 
   return $output;
 }
 
-function _flickr_block_random($nsid, $show_n, $size) {
-  $output = '';
-  if ($photos = flickr_photos_search($nsid, 1, array('per_page' => 500))) {
-    $page_count = $photos['pages'];
 
-    // we shouldn't try to return more than the total number of photos
-    $to = min($show_n, $photos['total']);
-    $output = '';
-    for ($i = 0; $i < $to; $i++) {
-      sleep(0.125);
-      // request a random page
-      $photos = flickr_photos_search($nsid, rand(1, $page_count), array('per_page' => 500));
-      // then select a random photo
-      $index = rand(0, count($photos['photo']) - 1);
-      $output .= theme('flickr_block_photo', $photos['photo'][$index], $size);
-    }
-  }
-  return $output;
+
+function theme_flickr_block_photoset($ps, $owner, $size) {
+  return theme_flickr_photoset($ps, $owner, $size);
 }
 
+
+
 function theme_flickr_block_photo($p, $size = NULL) {
   return theme_flickr_photo($p, $size);
 }
 
-function theme_flickr_block_photoset($ps, $owner, $size) {
-  return theme_flickr_photoset($ps, $owner, $size);
+
+function _flickr_block_random($nsid, $show_n, $size, $tags = "") { 
+  $request =  array('user_id' => $nsid, 'per_page' => $show_n, 'tags' => $tags); 	 
+  $result = flickr_request('flickr.photos.search', $request); 
+  $page_count = $result['photos']['pages']; 
+  $to = min($show_n, $result['photos']['total']); 
+  $output = '';
+  for ($i = 0; $i < $to; $i++) {
+    sleep(0.125);
+    // request a random page
+    $request['page'] = rand(1, $page_count-1); 
+    $result = flickr_request('flickr.photos.search', $request);
+    // then select a random photo   
+    $index = rand(0, count($result['photos']['photo'])-1); 
+    $output .= theme('flickr_photo', $result['photos']['photo'][$index], $size);
+  }
+  return $output ;
+}
+
+
+function _flickr_block_recent($nsid, $show_n, $size, $tags = "") { 
+  $request = array('user_id' => $nsid, 'per_page' => $show_n, 'tags' => $tags); 
+  $result = flickr_request('flickr.photos.search', $request);   $output = '';
+  foreach ((array)$result['photos']['photo'] as $photo) {
+    $output .= theme('flickr_photo', $photo, $size);
+  }
+  return $output;
+}
+
+
+function _flickr_entry($user_id, $show_n, $size, $flickr_entry = array()) { 
+  $tags = $flickr_entry['tags'];
+  if (($flickr_entry['genre'] == 'ra') && ($flickr_entry['scope'] == 'all')) {
+    return  _flickr_block_random(NULL, $show_n, $size, $tags);
+  }
+  if (($flickr_entry['genre'] == 're') && ($flickr_entry['scope'] == 'all')) {
+    return _flickr_block_recent(NULL, $show_n, $size, $tags);
+  }
+  if (($flickr_entry['genre'] == 'ra') && ($flickr_entry['scope'] == 'you')) {   
+    return _flickr_block_random($user_id, $show_n, $size, $tags);
+  }
+  if (($flickr_entry['genre'] == 're') && ($flickr_entry['scope'] == 'you')) {
+    return _flickr_block_recent($user_id, $show_n, $size, $tags);
+  } 
 }
