Merge branch 'master' into 0.9.x
This commit is contained in:
commit
880b1b666e
|
@ -118,11 +118,13 @@ class BackupaccountAction extends Action
|
||||||
{
|
{
|
||||||
$cur = common_current_user();
|
$cur = common_current_user();
|
||||||
|
|
||||||
$stream = new UserActivityStream($cur);
|
$stream = new UserActivityStream($cur, true, UserActivityStream::OUTPUT_RAW);
|
||||||
|
|
||||||
header('Content-Disposition: attachment; filename='.$cur->nickname.'.atom');
|
header('Content-Disposition: attachment; filename='.$cur->nickname.'.atom');
|
||||||
header('Content-Type: application/atom+xml; charset=utf-8');
|
header('Content-Type: application/atom+xml; charset=utf-8');
|
||||||
|
|
||||||
|
// @fixme atom feed logic is in getString...
|
||||||
|
// but we just want it to output to the outputter.
|
||||||
$this->raw($stream->getString());
|
$this->raw($stream->getString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,15 +29,48 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
{
|
{
|
||||||
public $activities = array();
|
public $activities = array();
|
||||||
|
|
||||||
function __construct($user, $indent = true)
|
const OUTPUT_STRING = 1;
|
||||||
|
const OUTPUT_RAW = 2;
|
||||||
|
public $outputMode = self::OUTPUT_STRING;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param User $user
|
||||||
|
* @param boolean $indent
|
||||||
|
* @param boolean $outputMode: UserActivityStream::OUTPUT_STRING to return a string,
|
||||||
|
* or UserActivityStream::OUTPUT_RAW to go to raw output.
|
||||||
|
* Raw output mode will attempt to stream, keeping less
|
||||||
|
* data in memory but will leave $this->activities incomplete.
|
||||||
|
*/
|
||||||
|
function __construct($user, $indent = true, $outputMode = UserActivityStream::OUTPUT_STRING)
|
||||||
{
|
{
|
||||||
parent::__construct($user, null, $indent);
|
parent::__construct($user, null, $indent);
|
||||||
|
|
||||||
|
$this->outputMode = $outputMode;
|
||||||
|
if ($this->outputMode == self::OUTPUT_STRING) {
|
||||||
|
// String buffering? Grab all the notices now.
|
||||||
|
$notices = $this->getNotices();
|
||||||
|
} elseif ($this->outputMode == self::OUTPUT_RAW) {
|
||||||
|
// Raw output... need to restructure from the stringer init.
|
||||||
|
$this->xw = new XMLWriter();
|
||||||
|
$this->xw->openURI('php://output');
|
||||||
|
if(is_null($indent)) {
|
||||||
|
$indent = common_config('site', 'indent');
|
||||||
|
}
|
||||||
|
$this->xw->setIndent($indent);
|
||||||
|
|
||||||
|
// We'll fetch notices later.
|
||||||
|
$notices = array();
|
||||||
|
} else {
|
||||||
|
throw new Exception('Invalid outputMode provided to ' . __METHOD__);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assume that everything but notices is feasible
|
||||||
|
// to pull at once and work with in memory...
|
||||||
$subscriptions = $this->getSubscriptions();
|
$subscriptions = $this->getSubscriptions();
|
||||||
$subscribers = $this->getSubscribers();
|
$subscribers = $this->getSubscribers();
|
||||||
$groups = $this->getGroups();
|
$groups = $this->getGroups();
|
||||||
$faves = $this->getFaves();
|
$faves = $this->getFaves();
|
||||||
$notices = $this->getNotices();
|
|
||||||
|
|
||||||
$objs = array_merge($subscriptions, $subscribers, $groups, $faves, $notices);
|
$objs = array_merge($subscriptions, $subscribers, $groups, $faves, $notices);
|
||||||
|
|
||||||
|
@ -45,16 +78,44 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
usort($objs, 'UserActivityStream::compareObject');
|
usort($objs, 'UserActivityStream::compareObject');
|
||||||
|
|
||||||
|
// We'll keep these around for later, and interleave them into
|
||||||
|
// the output stream with the user's notices.
|
||||||
foreach ($objs as $obj) {
|
foreach ($objs as $obj) {
|
||||||
$this->activities[] = $obj->asActivity();
|
$this->activities[] = $obj->asActivity();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interleave the pre-sorted subs/groups/faves with the user's
|
||||||
|
* notices, all in reverse chron order.
|
||||||
|
*/
|
||||||
function renderEntries()
|
function renderEntries()
|
||||||
{
|
{
|
||||||
|
$end = time() + 1;
|
||||||
foreach ($this->activities as $act) {
|
foreach ($this->activities as $act) {
|
||||||
|
$start = $act->time;
|
||||||
|
|
||||||
|
if ($this->outputMode == self::OUTPUT_RAW && $start != $end) {
|
||||||
|
// In raw mode, we haven't pre-fetched notices.
|
||||||
|
// Grab the chunks of notices between other activities.
|
||||||
|
$notices = $this->getNoticesBetween($start, $end);
|
||||||
|
foreach ($notices as $noticeAct) {
|
||||||
|
$noticeAct->asActivity()->outputTo($this, false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Only show the author sub-element if it's different from default user
|
// Only show the author sub-element if it's different from default user
|
||||||
$act->outputTo($this, false, ($act->actor->id != $this->user->uri));
|
$act->outputTo($this, false, ($act->actor->id != $this->user->uri));
|
||||||
|
|
||||||
|
$end = $start;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->outputMode == self::OUTPUT_RAW) {
|
||||||
|
// Grab anything after the last pre-sorted activity.
|
||||||
|
$notices = $this->getNoticesBetween(0, $end);
|
||||||
|
foreach ($notices as $noticeAct) {
|
||||||
|
$noticeAct->asActivity()->outputTo($this, false, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +182,13 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
return $faves;
|
return $faves;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNotices()
|
/**
|
||||||
|
*
|
||||||
|
* @param int $start unix timestamp for earliest
|
||||||
|
* @param int $end unix timestamp for latest
|
||||||
|
* @return array of Notice objects
|
||||||
|
*/
|
||||||
|
function getNoticesBetween($start=0, $end=0)
|
||||||
{
|
{
|
||||||
$notices = array();
|
$notices = array();
|
||||||
|
|
||||||
|
@ -129,6 +196,17 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
$notice->profile_id = $this->user->id;
|
$notice->profile_id = $this->user->id;
|
||||||
|
|
||||||
|
if ($start) {
|
||||||
|
$tsstart = common_sql_date($start);
|
||||||
|
$notice->whereAdd("created >= '$tsstart'");
|
||||||
|
}
|
||||||
|
if ($end) {
|
||||||
|
$tsend = common_sql_date($end);
|
||||||
|
$notice->whereAdd("created < '$tsend'");
|
||||||
|
}
|
||||||
|
|
||||||
|
$notice->orderBy('created DESC');
|
||||||
|
|
||||||
if ($notice->find()) {
|
if ($notice->find()) {
|
||||||
while ($notice->fetch()) {
|
while ($notice->fetch()) {
|
||||||
$notices[] = clone($notice);
|
$notices[] = clone($notice);
|
||||||
|
@ -138,6 +216,11 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
return $notices;
|
return $notices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getNotices()
|
||||||
|
{
|
||||||
|
return $this->getNoticesBetween();
|
||||||
|
}
|
||||||
|
|
||||||
function getGroups()
|
function getGroups()
|
||||||
{
|
{
|
||||||
$groups = array();
|
$groups = array();
|
||||||
|
|
|
@ -179,28 +179,22 @@ class FacebookBridgePlugin extends Plugin
|
||||||
// Always add the admin panel route
|
// Always add the admin panel route
|
||||||
$m->connect('admin/facebook', array('action' => 'facebookadminpanel'));
|
$m->connect('admin/facebook', array('action' => 'facebookadminpanel'));
|
||||||
|
|
||||||
// Only add these routes if an application has been setup on
|
$m->connect(
|
||||||
// Facebook for the plugin to use.
|
'main/facebooklogin',
|
||||||
if ($this->hasApplication()) {
|
array('action' => 'facebooklogin')
|
||||||
|
);
|
||||||
$m->connect(
|
$m->connect(
|
||||||
'main/facebooklogin',
|
'main/facebookfinishlogin',
|
||||||
array('action' => 'facebooklogin')
|
array('action' => 'facebookfinishlogin')
|
||||||
);
|
);
|
||||||
$m->connect(
|
$m->connect(
|
||||||
'main/facebookfinishlogin',
|
'settings/facebook',
|
||||||
array('action' => 'facebookfinishlogin')
|
array('action' => 'facebooksettings')
|
||||||
);
|
);
|
||||||
$m->connect(
|
$m->connect(
|
||||||
'settings/facebook',
|
'facebook/deauthorize',
|
||||||
array('action' => 'facebooksettings')
|
array('action' => 'facebookdeauthorize')
|
||||||
);
|
);
|
||||||
$m->connect(
|
|
||||||
'facebook/deauthorize',
|
|
||||||
array('action' => 'facebookdeauthorize')
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,14 @@ class Facebookclient
|
||||||
function __construct($notice)
|
function __construct($notice)
|
||||||
{
|
{
|
||||||
$this->facebook = self::getFacebook();
|
$this->facebook = self::getFacebook();
|
||||||
$this->notice = $notice;
|
|
||||||
|
if (empty($this->facebook)) {
|
||||||
|
throw new FacebookApiException(
|
||||||
|
"Could not create Facebook client! Bad application ID or secret?"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->notice = $notice;
|
||||||
|
|
||||||
$this->flink = Foreign_link::getByUserID(
|
$this->flink = Foreign_link::getByUserID(
|
||||||
$notice->profile_id,
|
$notice->profile_id,
|
||||||
|
@ -89,6 +96,22 @@ class Facebookclient
|
||||||
$secret = common_config('facebook', 'global_secret');
|
$secret = common_config('facebook', 'global_secret');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($appId)) {
|
||||||
|
common_log(
|
||||||
|
LOG_WARNING,
|
||||||
|
"Couldn't find Facebook application ID!",
|
||||||
|
__FILE__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($secret)) {
|
||||||
|
common_log(
|
||||||
|
LOG_WARNING,
|
||||||
|
"Couldn't find Facebook application ID!",
|
||||||
|
__FILE__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return new Facebook(
|
return new Facebook(
|
||||||
array(
|
array(
|
||||||
'appId' => $appId,
|
'appId' => $appId,
|
||||||
|
@ -174,6 +197,9 @@ class Facebookclient
|
||||||
return $this->sendGraph();
|
return $this->sendGraph();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dequeue
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -36,7 +36,7 @@ require_once INSTALLDIR.'/scripts/commandline.inc';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$user = getUser();
|
$user = getUser();
|
||||||
$actstr = new UserActivityStream($user);
|
$actstr = new UserActivityStream($user, true, UserActivityStream::OUTPUT_RAW);
|
||||||
print $actstr->getString();
|
print $actstr->getString();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
print $e->getMessage()."\n";
|
print $e->getMessage()."\n";
|
||||||
|
|
Loading…
Reference in New Issue
Block a user