'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']; } unset($size_options['b']); unset($size_options['o']); $settings = variable_get('flickr_block_'. $delta, array('user_id' => '', 'show_n' => 4, 'size' => 's', 'photoset_id' => '')); $form = array(); $form["flickr_block_{$delta}_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 site's default user will be used. Current default id is @default_id", array('@default_id' => variable_get('flickr_default_userid',''))) ); $form["flickr_block_{$delta}_show_n"] = array( '#type' => 'select', '#options' => $count_options, '#title' => t('Show n photos'), '#default_value' => $settings['show_n'], '#description' => t("The block will display this many photos.") ); $form["flickr_block_{$delta}_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 n 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: // sitewide photoset, not photos $form["flickr_block_{$delta}_show_n"]['#title'] = t('Show the last n 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; case 6: // sitewide, group $form["flickr_block_{$delta}_user_id"]['#title'] = t('Flickr Group ID'); $form["flickr_block_{$delta}_user_id"]['#description'] = t('The block will show photos from this group'); break; case 7: // sitewide, random $form["flickr_block_{$delta}_photoset"] = array( '#type' => 'textfield', '#title' => t('Flickr Photoset ID'), '#default_value' => $settings['photoset_id'], '#description' => t("The id of a Flickr photoset."), '#required' => TRUE, ); 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: case 6: 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; case 7: 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"], 'photoset_id' => $edit["flickr_block_{$delta}_photoset"], )); } break; case 'view': default: drupal_add_css(drupal_get_path('module', 'flickr') .'/flickr.css'); $settings = variable_get('flickr_block_' . $delta, array( 'user_id' => '', 'show_n' => 4, 'size' => 's', )); // Get the default user id as a fallback if ($settings['user_id'] == "") { $settings['user_id'] = variable_get('flickr_default_userid', ''); // TODO: better name would be flickr_default_identifier } $settings['user_id'] = flickr_user_find_by_identifier($settings['user_id']); $block = array(); // 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 (!empty($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']); } elseif ($delta == 6) { $block['subject'] = t('Flickr Group photos'); $block['content'] = _flickr_block_group_recent($settings['user_id'], $settings['show_n'], $settings['size']); } elseif ($delta == 7) { $block['subject'] = t('Flickr random photoset photos'); $block['content'] = _flickr_block_photoset_random($settings['user_id'], $settings['show_n'], $settings['size'], $settings['photoset_id']); } 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 = ''; $to = min($show_n, count($photosets)); for ($i = 0; $i < $to; $i++) { $output .= theme('flickr_block_photoset', $photosets[$i], $nsid, $size); } return $output; } function _flickr_block_random($nsid, $show_n, $size) { $output = ''; $random_photos = array(); 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); $photo_id = $photos['photo'][$index]['id']; if (in_array($photo_id, $random_photos)) { $i--; // photo already added } else { $random_photos[] = $photo_id; $output .= theme('flickr_block_photo', $photos['photo'][$index], $size); } } } return $output; } function _flickr_block_photoset_random($nsid, $show_n, $size, $photoset_id) { // Get information about the photoset, including the owner. $info = flickr_photoset_get_info($photoset_id); if (!$info) { return; } $repsonse = flickr_photoset_get_photos($photoset_id); if (!$response) { return; } // Randomly display $show_n of them $photos = $response['photoset']['photo']; shuffle($photos); // we shouldn't try to return more than the total number of photos $output = ''; $to = min($show_n, count($photos)); for ($i = 0; $i < $to; $i++) { //insert owner into $photo because theme_flickr_photo needs it $photos[$i]['owner'] = $info['owner']; $output .= theme('flickr_block_photo', $photos[$i], $size); } return $output; } /* * This renders a block with photos from the selected groupid */ function _flickr_block_group_recent($group_id, $show_n, $size) { $output = ''; if ($photos = flickr_get_group_photos($group_id, 1, array('per_page' => $show_n))) { foreach ($photos['photo'] as $photo) { $output .= theme('flickr_block_photo', $photo, $size); } } return $output; } /** * Implementation of hook_theme(). */ function flickr_block_theme() { return array( 'flickr_block_photo' => array( 'arguments' => array('p', 'size' => NULL), ), 'flickr_block_photoset' => array( 'arguments' => array('ps', 'owner', 'size'), ), ); } function theme_flickr_block_photo($photo, $size = NULL) { return theme('flickr_photo', $photo, $size); } function theme_flickr_block_photoset($photoset, $owner, $size) { return theme('flickr_photoset', $photoset, $owner, $size); }