function api_utils_flickr_ensure_token_perms(&$user, $str_perms)
{
    $perms_map = flickr_api_authtoken_perms_map();
    $flickr_user = flickr_users_get_by_user_id($user['id']);
    if ($perms_map[$flickr_user['token_perms']] != $str_perms) {
        api_output_error(999, "Insufficient Flickr API permissions");
    }
    return $flickr_user;
}
function flickr_geobookmarks_import_for_nsid($nsid, $more = array())
{
    $flickr_user = flickr_users_get_by_nsid($nsid);
    $user = users_get_by_id($flickr_user['user_id']);
    if (!$user) {
        return not_okay("Not a valid user");
    }
    $flickr_user = flickr_users_get_by_user_id($user['id']);
    $method = 'flickr.people.geoBookmarks.getList';
    $args = array('auth_token' => $flickr_user['auth_token']);
    $rsp = flickr_api_call($method, $args);
    if (!$rsp['ok']) {
        return $rsp;
    }
    if (!$rsp['rsp']['bookmarks']['count']) {
        return okay();
    }
    $bookmarks = array();
    # mark everything as private for now since none of that stuff
    # got turned on before I left, sad face... (20120217/straup)
    $geo_perms = flickr_geo_permissions_map("string keys");
    $geo_private = $geo_perms['private'];
    foreach ($rsp['rsp']['bookmarks']['bookmark'] as $bm) {
        $bm['user_id'] = $user['id'];
        $bm['name'] = $bm['label'];
        $bm['geocontext'] = $bm['context'];
        $bm['geoperms'] = $geo_private;
        $bm['woeid'] = 0;
        unset($bm['label']);
        unset($bm['pretty_name']);
        unset($bm['context']);
        $geo_method = 'flickr.places.findByLatLon';
        $geo_args = array('lat' => $bm['latitude'], 'lon' => $bm['longitude'], 'accuracy' => $bm['accuracy']);
        $geo_rsp = flickr_api_call($geo_method, $geo_args);
        if ($geo_rsp['ok']) {
            # I still miss xpath...
            $bm['woeid'] = $geo_rsp['rsp']['places']['place'][0]['woeid'];
        }
        $bookmarks[] = $bm;
    }
    $rsp = flickr_geobookmarks_purge_for_user($user);
    if (!$rsp['ok']) {
        return $rsp;
    }
    $count = 0;
    foreach ($bookmarks as $bm) {
        $rsp = flickr_geobookmarks_add($bm);
        $count += $rsp['ok'];
    }
    return okay(array('count_imported' => $count));
}
function flickr_push_unsubscribe($subscription)
{
    $flickr_user = flickr_users_get_by_user_id($subscription['user_id']);
    $callback = "{$GLOBALS['cfg']['abs_root_url']}push/{$subscription['secret_url']}/";
    $method = 'flickr.push.unsubscribe';
    $map = flickr_push_topic_map();
    $topic = $map[$subscription['topic_id']];
    $args = array('auth_token' => $flickr_user['auth_token'], 'topic' => $topic, 'verify' => 'sync', 'verify_token' => $subscription['verify_token'], 'callback' => $callback);
    if ($topic_args = $subscription['topic_args']) {
        if (!is_array($topic_args)) {
            $topic_args = json_decode($topic_args, "as hash");
        }
        $args = array_merge($args, $topic_args);
    }
    $rsp = flickr_api_call($method, $args);
    return $rsp;
}
function flickr_photos_metadata_fetch(&$photo, $inflate = 0)
{
    loadlib("flickr_api");
    loadlib("flickr_users");
    $flickr_user = flickr_users_get_by_user_id($photo['user_id']);
    $method = 'flickr.photos.getInfo';
    $args = array('photo_id' => $photo['id'], 'auth_token' => $flickr_user['auth_token']);
    $more = array();
    if (!$inflate) {
        $more['raw'] = 1;
    }
    $rsp = flickr_api_call($method, $args, $more);
    if ($rsp['ok']) {
        $data = $inflate ? $rsp['rsp'] : $rsp['body'];
        $rsp = okay(array('data' => $data));
    }
    return $rsp;
}
function flickr_urls_path_alias_for_user(&$user)
{
    $flickr_user = flickr_users_get_by_user_id($user['id']);
    $alias = null;
    if ($GLOBALS['cfg']['enable_feature_path_alias_redirects']) {
        loadlib("flickr_users_path_aliases");
        $alias = flickr_users_path_aliases_current_for_user($user);
    }
    if (!$alias) {
        # see notes in flickr_users_create_user
        if (!$flickr_user['path_alias'] || $flickr_user['path_alias_taken_by']) {
            $alias = $flickr_user['nsid'];
        } else {
            $alias = $flickr_user['path_alias'];
        }
    }
    return $alias;
}
            if (!$rsp['ok']) {
                error_404();
            }
        } else {
            error_404();
        }
    }
    echo get_str("challenge");
    exit;
}
# TO DO: check $subscription['topic_id'] here against
# the 'flickr_push_enable_*' flags (20111203/straup)
$xml = file_get_contents('php://input');
$atom = syndication_atom_parse_str($xml);
$user = users_get_by_id($subscription['user_id']);
$flickr_user = flickr_users_get_by_user_id($user['id']);
$do_push_backups = features_is_enabled("flickr_push_backups");
$is_push_backup = flickr_push_subscriptions_is_push_backup($subscription);
$is_backup_user = flickr_backups_is_registered_user($user, "ensure enabled");
$to_backup = array();
$new = 0;
foreach ($atom->items as $e) {
    # for debugging...
    # $fh = fopen("/tmp/wtf.json", "w");
    # fwrite($fh, json_encode($e));
    # fclose($fh);
    # TO DO: check $subscription['topic_id'] here because
    # at some point if we start to use the push stuff to
    # track things we're backing we'll need to store the
    # data in another table (20111203/straup)
    if (!preg_match("!.*/(\\d+)\$!", $e['id'], $m)) {
function _flickr_photos_import_flickr_meta_urls($photo, $more = array())
{
    $req = array();
    # basic photo info
    if ($more['auth_token']) {
        $auth_token = $more['auth_token'];
    } else {
        $flickr_user = flickr_users_get_by_user_id($photo['user_id']);
        $auth_token = $flickr_user['auth_token'];
    }
    $method = 'flickr.photos.getInfo';
    $args = array('auth_token' => $auth_token, 'photo_id' => $photo['id']);
    list($url, $args) = flickr_api_call_build($method, $args);
    $api_call = $url . "?" . http_build_query($args);
    $req['info'] = $api_call;
    # fetch comments, which is to say check to see if there
    # are any new photos worth storing
    $fetch_comments = 1;
    if ($more['min_date']) {
        $method = 'flickr.photos.comments.getList';
        $args = array('photo_id' => $photo['id'], 'min_comment_date' => $more['min_date']);
        $rsp = flickr_api_call($method, $args);
        if ($rsp['ok'] && !isset($rsp['rsp']['comments']['comment'])) {
            $fetch_comments = 0;
        }
    }
    if ($fetch_comments) {
        $method = 'flickr.photos.comments.getList';
        $args = array('photo_id' => $photo['id']);
        list($url, $args) = flickr_api_call_build($method, $args);
        $api_call = $url . "?" . http_build_query($args);
        $req['comments'] = $api_call;
    }
    return $req;
}
Example #8
0
        $more = array('viewer_id' => $GLOBALS['cfg']['user']['id']);
        $bookends = flickr_photos_get_bookends($photo, $more);
    }
}
$GLOBALS['smarty']->assign_by_ref("before", $bookends['before']);
$GLOBALS['smarty']->assign_by_ref("after", $bookends['after']);
# meta, geo, etc.
# $meta = flickr_photos_metadata_load($photo);
# $GLOBALS['smarty']->assign_by_ref("metadata", $meta['data']);
$photo['can_view_geo'] = $photo['hasgeo'] && flickr_geo_permissions_can_view_photo($photo, $GLOBALS['cfg']['user']['id']) ? 1 : 0;
if ($photo['can_view_geo']) {
    $geo_perms_map = flickr_geo_permissions_map();
    $photo['str_geoperms'] = $geo_perms_map[$photo['geoperms']];
    # NOTE: this has the potential to slow things down if the
    # Flickr API is being wonky. On the other hand if you're
    # just running this for yourself (or maybe a handful of
    # friends) it shouldn't be a big deal. Also, caching.
    if ($place = flickr_places_get_by_woeid($photo['woeid'])) {
        $GLOBALS['smarty']->assign_by_ref("place", $place);
    }
}
if ($GLOBALS['cfg']['user']['id']) {
    $perms_map = flickr_api_authtoken_perms_map();
    # the currently logged in viewer
    $_flickr_user = flickr_users_get_by_user_id($GLOBALS['cfg']['user']['id']);
    $perms = $_flickr_user['token_perms'];
    $has_write_token = $perms_map[$perms] == 'write' ? 1 : 0;
    $GLOBALS['smarty']->assign('has_write_token', $has_write_token);
}
$GLOBALS['smarty']->display("page_flickr_photo.txt");
exit;
function flickr_backups_get_contacts(&$user)
{
    $backups = flickr_backups_for_user($user);
    if (!isset($backups['contacts'])) {
        return array('ok' => 0, 'error' => 'backups not registered');
    }
    $backup = $backups['contacts'];
    $update = array();
    $start_time = time();
    $rsp = flickr_contacts_purge_contacts($user);
    if ($rsp['ok']) {
        $flickr_user = flickr_users_get_by_user_id($user['id']);
        $rsp = flickr_contacts_import_for_nsid($flickr_user['nsid']);
    }
    if ($rsp['ok']) {
        $update['date_lastupdate'] = $start_time;
        $update['details'] = "count: {$rsp['count_imported']}";
        if (!$backup['date_firstupdate']) {
            $update['date_firstupdate'] = $update['date_lastupdate'];
        }
    } else {
        $update['details'] = "update failed ({$start_time}) : {$rsp['error']}";
    }
    flickr_backups_update($backup, $update);
    return $rsp;
}
function flickr_backups_get_geobookmarks(&$user)
{
    $backups = flickr_backups_for_user($user);
    if (!isset($backups['geobookmarks'])) {
        # return not_okay("backups not registered");
    }
    $backup = $backups['geobookmarks'];
    $update = array();
    $start_time = time();
    $flickr_user = flickr_users_get_by_user_id($user['id']);
    $rsp = flickr_geobookmarks_import_for_nsid($flickr_user['nsid'], $more);
    if ($rsp['ok']) {
        $update['date_lastupdate'] = $start_time;
        $update['details'] = "count: {$rsp['count_imported']}";
        if (!$backup['date_firstupdate']) {
            $update['date_firstupdate'] = $update['date_lastupdate'];
        }
    } else {
        $update['details'] = "update failed ({$start_time}) : {$rsp['error']}";
    }
    flickr_backups_update($backup, $update);
    return $rsp;
}
function flickr_users_get_by_path_alias($alias)
{
    if (!$GLOBALS['cfg']['enable_feature_path_alias_redirects']) {
        return _flickr_users_get_by_path_alias($alias);
    }
    loadlib("flickr_users_path_aliases");
    if ($row = flickr_users_path_aliases_get_by_alias($alias)) {
        return flickr_users_get_by_user_id($row['user_id']);
    }
    return null;
}