You are here

flickr_block.module in Flickr 5

Same filename and directory in other branches
  1. 6 block/flickr_block.module
  2. 7 block/flickr_block.module

File

block/flickr_block.module
View source
<?php

/**
 * Implementation of hook_block().
 */
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 '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'];
      }
      unset($size_options['b']);
      unset($size_options['o']);
      $settings = variable_get('flickr_block_' . $delta, array(
        'user_id' => '',
        'show_n' => 4,
        'size' => 's',
      ));
      $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 sites's default user will be used. Current default id is " . variable_get('flickr_default_userid', '')),
      );
      $form["flickr_block_{$delta}_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(
        '#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;
      }
      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']);
      }
      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 = '';
  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_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);
}