/**
  * 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;
 }
{
    $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}");
    }
    $auth = twitterAuthForUser($user);
 /**
  * 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;
 }
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;
}
 /**
  * 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);
     }
 }
 /**
  * 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;
 }