'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);
}