예제 #1
0
 static function getByForeignID($foreign_id, $service)
 {
     $flink = new Foreign_link();
     $flink->service = $service;
     $flink->foreign_id = $foreign_id;
     $flink->limit(1);
     if ($flink->find(true)) {
         return $flink;
     }
     return null;
 }
예제 #2
0
 static function getByForeignID($foreign_id, $service)
 {
     if (empty($foreign_id) || empty($service)) {
         return null;
     } else {
         $flink = new Foreign_link();
         $flink->service = $service;
         $flink->foreign_id = $foreign_id;
         $flink->limit(1);
         $result = $flink->find(true);
         return empty($result) ? null : $flink;
     }
 }
예제 #3
0
 static function getByForeignID($foreign_id, $service)
 {
     if (empty($foreign_id) || empty($service)) {
         throw new ServerException('Empty foreign_id or service for Foreign_link::getByForeignID');
     }
     $flink = new Foreign_link();
     $flink->service = $service;
     $flink->foreign_id = $foreign_id;
     $flink->limit(1);
     if (!$flink->find(true)) {
         throw new NoResultException($flink);
     }
     return $flink;
 }
예제 #4
0
 /**
  * Find all the Twitter foreign links for users who have requested
  * automatically subscribing to their Twitter friends locally.
  *
  * @return array flinks an array of Foreign_link objects
  */
 function getObjects()
 {
     $flinks = array();
     $flink = new Foreign_link();
     $conn =& $flink->getDatabaseConnection();
     $flink->service = TWITTER_SERVICE;
     $flink->orderBy('last_friendsync');
     $flink->limit(25);
     // sync this many users during this run
     $flink->find();
     while ($flink->fetch()) {
         if (($flink->friendsync & FOREIGN_FRIEND_RECV) == FOREIGN_FRIEND_RECV) {
             $flinks[] = clone $flink;
         }
     }
     $conn->disconnect();
     global $_DB_DATAOBJECT;
     unset($_DB_DATAOBJECT['CONNECTIONS']);
     return $flinks;
 }
예제 #5
0
function dumpMessage($flink, $data)
{
    $msg = prepMessage($flink, $data);
    print json_encode($msg) . "\r\n";
}
function prepMessage($flink, $data)
{
    $msg->for_user = $flink->foreign_id;
    $msg->message = $data;
    return $msg;
}
if (have_option('all')) {
    $users = array();
    $flink = new Foreign_link();
    $flink->service = TWITTER_SERVICE;
    $flink->find();
    while ($flink->fetch()) {
        if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) {
            $users[] = $flink->user_id;
        }
    }
} else {
    $user = User::getKV('nickname', $nickname);
    $users = array($user->id);
}
$output = array();
foreach ($users as $id) {
    $user = User::getKV('id', $id);
    if (!$user) {
        throw new Exception("No user for id {$id}");
    }
 /**
  * Saves a Foreign_link between Twitter user and local user,
  * which includes the access token and secret.
  *
  * @param int        $user_id StatusNet user ID
  * @param int        $twuid   Twitter user ID
  * @param OAuthToken $token   the access token to save
  *
  * @return nothing
  */
 function saveForeignLink($user_id, $twuid, $access_token)
 {
     $flink = new Foreign_link();
     $flink->user_id = $user_id;
     $flink->service = TWITTER_SERVICE;
     // delete stale flink, if any
     $result = $flink->find(true);
     if (!empty($result)) {
         $flink->safeDelete();
     }
     $flink->user_id = $user_id;
     $flink->foreign_id = $twuid;
     $flink->service = TWITTER_SERVICE;
     $creds = TwitterOAuthClient::packToken($access_token);
     $flink->credentials = $creds;
     $flink->created = common_sql_now();
     // Defaults: noticesync on, everything else off
     $flink->set_flags(true, false, false, false);
     $flink_id = $flink->insert();
     if (empty($flink_id)) {
         common_log_db_error($flink, 'INSERT', __FILE__);
         // TRANS: Server error displayed when linking to a Twitter account fails.
         $this->serverError(_m('Could not link your Twitter account.'));
     }
     return $flink_id;
 }
예제 #7
0
 /**
  * Find all the Twitter foreign links for users who have requested
  * importing of their friends' timelines
  *
  * @return array flinks an array of Foreign_link objects
  */
 function getObjects()
 {
     global $_DB_DATAOBJECT;
     $flink = new Foreign_link();
     $conn =& $flink->getDatabaseConnection();
     $flink->service = TWITTER_SERVICE;
     $flink->orderBy('last_noticesync');
     $flink->find();
     $flinks = array();
     while ($flink->fetch()) {
         if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) {
             $flinks[] = clone $flink;
             common_log(LOG_INFO, "sync: foreign id {$flink->foreign_id}");
         } else {
             common_log(LOG_INFO, "nothing to sync");
         }
     }
     $flink->free();
     unset($flink);
     $conn->disconnect();
     unset($_DB_DATAOBJECT['CONNECTIONS']);
     return $flinks;
 }
예제 #8
0
function siteStreamForOwner(User $user)
{
    // The user we auth as must be the owner of the application.
    $auth = twitterAuthForUser($user);
    if (have_option('apiroot')) {
        $stream = new TwitterSiteStream($auth, get_option_value('apiroot'));
    } else {
        $stream = new TwitterSiteStream($auth);
    }
    // Pull Twitter user IDs for all users we want to pull data for
    $userIds = array();
    $flink = new Foreign_link();
    $flink->service = TWITTER_SERVICE;
    $flink->find();
    while ($flink->fetch()) {
        if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) {
            $userIds[] = $flink->foreign_id;
        }
    }
    $stream->followUsers($userIds);
    return $stream;
}
예제 #9
0
 /**
  * Pull the site's active Twitter-importing users and start spawning
  * some data streams for them!
  *
  * @fixme check their last-id and check whether we'll need to do a manual pull.
  * @fixme abstract out the fetching so we can work over multiple sites.
  */
 protected function initStreams()
 {
     common_log(LOG_INFO, 'init...');
     // Pull Twitter user IDs for all users we want to pull data for
     $flink = new Foreign_link();
     $flink->service = TWITTER_SERVICE;
     // @fixme probably should do the bitfield check in a whereAdd but it's ugly :D
     $flink->find();
     $userIds = array();
     while ($flink->fetch()) {
         if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) {
             $userIds[] = $flink->foreign_id;
             if (count($userIds) >= self::USERS_PER_STREAM) {
                 $this->spawnStream($userIds);
                 $userIds = array();
             }
         }
     }
     if (count($userIds)) {
         $this->spawnStream($userIds);
     }
 }
예제 #10
0
 /**
  * Refresh the foreign links for this user
  *
  * @return void
  */
 function refreshFlinks()
 {
     $flink = new Foreign_link();
     $flink->service = 1;
     // Twitter
     $flink->orderBy('last_noticesync');
     $cnt = $flink->find();
     if (defined('SCRIPT_DEBUG')) {
         common_debug('Updating Twitter friends subscriptions' . " for {$cnt} users.");
     }
     $flinks = array();
     while ($flink->fetch()) {
         if (($flink->noticesync & FOREIGN_NOTICE_RECV) == FOREIGN_NOTICE_RECV) {
             $flinks[] = clone $flink;
         }
     }
     $flink->free();
     unset($flink);
     return $flinks;
 }