@link", array('@link' => url('http://www.flickr.com/services/api/keys/apply/'))); case 'admin/help#flickr': return t('The flickr module uses XML-RPC to connect to Flickr\'s API and retreive photo information.'); } } function flickr_perm () { return array( 'view own flickr photos', 'view all flickr photos', 'administer flickr', ); } /** * Implementation of hook_menu(). */ function flickr_menu($may_cache) { global $user; $items = array(); if ($may_cache) { $items[] = array( 'path' => 'admin/settings/flickr', 'title' => t('Flickr'), 'callback' => 'drupal_get_form', 'callback arguments' => array('flickr_admin_settings'), 'access' => user_access('administer site configuration'), 'type' => MENU_NORMAL_ITEM, 'description' => t('Change settings for the flickr module.')); $items[] = array( 'path' => 'flickr', 'title' => t('Flickr photos'), 'access' => TRUE, 'type' => MENU_CALLBACK, 'callback' => 'flickr_photos', 'description' => t('Flickr photos of default user id.')); $items[] = array( 'path' => 'flickr/auth', 'access' => TRUE, 'type' => MENU_CALLBACK, 'callback' => 'flickr_auth_callback'); } else { if (arg(0) == 'flickr' && is_numeric(arg(1)) && arg(1) > 0) { $account = user_load(array('uid' => arg(1))); if ($account !== FALSE && isset($account->flickr['nsid'])) { $nsid = $account->flickr['nsid']; $admin_access = user_access('administer flickr'); // let a user view their own account or all if they have permission $view_access |= (user_access('view own flickr photos') && ($user->uid == arg(1))) || user_access('view all flickr photos'); // Only admins can view blocked accounts $view_access &= $account->status || $admin_access; //main flickr user page(photos) $items[] = array( 'path' => 'flickr/' . arg(1), 'title' => t("@user's Flickr", array('@user' => $account->name)), 'type' => MENU_CALLBACK, 'callback' => 'flickr_photos', 'callback arguments' => array(arg(1)), 'access' => $view_access, ); $items[] = array( 'path' => 'flickr/'. arg(1) .'/photos', 'title' => t('Photos'), 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10, 'access' => $view_access, ); } elseif ($account !== FALSE && !isset($account->flickr['nsid'])) { drupal_set_message(t('%user does not have a Flickr account', array('%user'=>$account->name)), 'error'); } } } return $items; } /** * Implementation of hook_settings */ function flickr_admin_settings() { $form['#validate'] = array('flickr_admin_settings_validate' => array()); $form['flickr_api_key'] = array( '#type' => 'textfield', '#title' => t('API Key'), '#required' => TRUE, '#default_value' => variable_get('flickr_api_key', ''), '#description' => t('API Key from Flickr'), ); $form['flickr_api_secret'] = array( '#type' => 'textfield', '#title' => t('API Shared Secret'), '#required' => TRUE, '#default_value' => variable_get('flickr_api_secret', ''), '#description' => t("API key's secret from Flickr."), ); $form['flickr_default_userid'] = array( '#type' => 'textfield', '#title' => t('Default Flickr User Id'), '#default_value' => variable_get('flickr_default_userid', ''), '#description' => t("An, optional, default Flickr username or user id. This will be used when no user is specified."), ); $times = array(900, 1800, 2700, 3600, 7200, 10800, 14400, 18000, 21600, 43200, 86400); $ageoptions = drupal_map_assoc($times, 'format_interval'); $form['flickr_cache_duration'] = array( '#type' => 'select', '#title' => t('Cache for'), '#options' => $ageoptions, '#default_value' => variable_get('flickr_cache_duration', 3600), '#description' => t("Results from Flickr API requests will be cached for at least this long."), ); // we need an api key before we can verify usernames if (!$form['flickr_api_key']['#default_value']) { $form['flickr_default_userid']['#disabled'] = TRUE; $form['flickr_default_userid']['#description'] .= t(" Disabled until a valid API Key is set."); } return system_settings_form($form); } function flickr_admin_settings_validate($form_id, $form) { $key = trim($form['flickr_api_key']); $sec = trim($form['flickr_api_secret']); $uid = trim($form['flickr_default_userid']); if ($key && (preg_match('/^[A-Fa-f\d]{32}$/', $key) != 1)) { form_set_error('flickr_api_key', t('This does not appear to be a Flickr API key.')); } if ($sec && (preg_match('/^[A-Fa-f\d]{16}$/', $sec) != 1)) { form_set_error('flickr_api_secret', t('This does not appear to be a Flickr API secret.')); } if ($uid) { if (flickr_is_nsid($uid)) { // it's already a uid } else { $user = flickr_user_find_by_username($uid); if (!$user) { form_set_error('flickr_default_userid', t('%uid is not a Flickr user id and it does not appear to be a valid user name. Flickr reported %error-message', array('%uid' => $uid, '%error-message' => $response['message']))); } } } } function flickr_admin_settings_submit($form_id, $form) { // clean up the data ... $form['flickr_api_key'] = trim($form['flickr_api_key']); $form['flickr_api_secret'] = trim($form['flickr_api_secret']); $form['flickr_default_userid'] = trim($form['flickr_default_userid']); // ... replace the usernames with a user id ... if (!flickr_is_nsid($form['flickr_default_userid'])) { $username = $form['flickr_default_userid']; if ($user = flickr_user_find_by_username($username)) { drupal_set_message(t("The Flickr username %username has been replaced with the corresponding user id %uid.", array('%username' => $form['flickr_default_userid'], '%uid' => $user['id']))); $form['flickr_default_userid'] = $user['id']; } } // ... and save the settings system_settings_form_submit($form_id, $form); } function theme_flickr_photo($p, $size = NULL, $format = NULL, $attribs = NULL) { $img = flickr_img($p, $size, $attribs); $photo_url = flickr_photo_page_url($p['owner'], $p['id']); $title = is_array($p['title']) ? $p['title']['_content'] : $p['title']; return l($img, $photo_url, array('title' => $title), NULL, NULL, TRUE, TRUE); } function theme_flickr_photo_box($p, $size = NULL, $format = NULL, $attribs = NULL) { $img = flickr_img($p, $size, $attribs); $title = is_array($p['title']) ? $p['title']['_content'] : $p['title']; $photo_url = flickr_photo_page_url($p['owner'], $p['id']); $output .= "