Squashed commit of the following:
commit bd23a7da105d635414643dfcedd9c8f710d565b8 Author: Evan Prodromou <evan@e14n.com> Date: Sat Jun 29 07:49:03 2013 -0400 Make the after flag work correctly commit 5c5845a2f866f0bbffedd8e2e5d1f512f87d5329 Author: Evan Prodromou <evan@e14n.com> Date: Sat Jun 29 06:14:43 2013 -0400 Add an 'after' flag for backup script
This commit is contained in:
parent
557105b86d
commit
66f4a39105
@ -42,11 +42,12 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
* 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)
|
||||
function __construct($user, $indent = true, $outputMode = UserActivityStream::OUTPUT_STRING, $after = null)
|
||||
{
|
||||
parent::__construct($user, null, $indent);
|
||||
|
||||
$this->outputMode = $outputMode;
|
||||
|
||||
if ($this->outputMode == self::OUTPUT_STRING) {
|
||||
// String buffering? Grab all the notices now.
|
||||
$notices = $this->getNotices();
|
||||
@ -65,6 +66,8 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
throw new Exception('Invalid outputMode provided to ' . __METHOD__);
|
||||
}
|
||||
|
||||
$this->after = $after;
|
||||
|
||||
// Assume that everything but notices is feasible
|
||||
// to pull at once and work with in memory...
|
||||
|
||||
@ -123,7 +126,7 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
$notices = $this->getNoticesBetween($start, $end);
|
||||
foreach ($notices as $noticeAct) {
|
||||
try {
|
||||
$nact = $noticeAct->asActivity();
|
||||
$nact = $noticeAct->asActivity($this->user);
|
||||
if ($format == Feed::ATOM) {
|
||||
$nact->outputTo($this, false, false);
|
||||
} else {
|
||||
@ -172,10 +175,14 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
if ($this->outputMode == self::OUTPUT_RAW) {
|
||||
// Grab anything after the last pre-sorted activity.
|
||||
try {
|
||||
if (!empty($this->after)) {
|
||||
$notices = $this->getNoticesBetween($this->after, $end);
|
||||
} else {
|
||||
$notices = $this->getNoticesBetween(0, $end);
|
||||
}
|
||||
foreach ($notices as $noticeAct) {
|
||||
try {
|
||||
$nact = $noticeAct->asActivity();
|
||||
$nact = $noticeAct->asActivity($this->user);
|
||||
if ($format == Feed::ATOM) {
|
||||
$nact->outputTo($this, false, false);
|
||||
} else {
|
||||
@ -195,6 +202,7 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($this->after) || strtotime($this->user->created) > $this->after) {
|
||||
// We always add the registration activity at the end, even if
|
||||
// they have older activities (from restored backups) in their stream.
|
||||
|
||||
@ -214,6 +222,7 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function compareObject($a, $b)
|
||||
{
|
||||
@ -231,6 +240,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
|
||||
$sub->subscriber = $this->user->id;
|
||||
|
||||
if (!empty($this->after)) {
|
||||
$sub->whereAdd("created > '" . common_sql_date($this->after) . "'");
|
||||
}
|
||||
|
||||
if ($sub->find()) {
|
||||
while ($sub->fetch()) {
|
||||
if ($sub->subscribed != $this->user->id) {
|
||||
@ -250,6 +263,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
|
||||
$sub->subscribed = $this->user->id;
|
||||
|
||||
if (!empty($this->after)) {
|
||||
$sub->whereAdd("created > '" . common_sql_date($this->after) . "'");
|
||||
}
|
||||
|
||||
if ($sub->find()) {
|
||||
while ($sub->fetch()) {
|
||||
if ($sub->subscriber != $this->user->id) {
|
||||
@ -269,6 +286,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
|
||||
$fave->user_id = $this->user->id;
|
||||
|
||||
if (!empty($this->after)) {
|
||||
$fave->whereAdd("modified > '" . common_sql_date($this->after) . "'");
|
||||
}
|
||||
|
||||
if ($fave->find()) {
|
||||
while ($fave->fetch()) {
|
||||
$faves[] = clone($fave);
|
||||
@ -292,6 +313,17 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
|
||||
$notice->profile_id = $this->user->id;
|
||||
|
||||
// Only stuff after $this->after
|
||||
|
||||
if (!empty($this->after)) {
|
||||
if ($start) {
|
||||
$start = max($start, $this->after);
|
||||
}
|
||||
if ($end) {
|
||||
$end = max($end, $this->after);
|
||||
}
|
||||
}
|
||||
|
||||
if ($start) {
|
||||
$tsstart = common_sql_date($start);
|
||||
$notice->whereAdd("created >= '$tsstart'");
|
||||
@ -314,8 +346,12 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
|
||||
function getNotices()
|
||||
{
|
||||
if (!empty($this->after)) {
|
||||
return $this->getNoticesBetween($this->after);
|
||||
} else {
|
||||
return $this->getNoticesBetween();
|
||||
}
|
||||
}
|
||||
|
||||
function getGroups()
|
||||
{
|
||||
@ -325,6 +361,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
|
||||
$gm->profile_id = $this->user->id;
|
||||
|
||||
if (!empty($this->after)) {
|
||||
$gm->whereAdd("created > '" . common_sql_date($this->after) . "'");
|
||||
}
|
||||
|
||||
if ($gm->find()) {
|
||||
while ($gm->fetch()) {
|
||||
$groups[] = clone($gm);
|
||||
@ -338,14 +378,31 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||
{
|
||||
$msgMap = Memcached_DataObject::listGet('Message', 'to_profile', array($this->user->id));
|
||||
|
||||
return $msgMap[$this->user->id];
|
||||
$messages = $msgMap[$this->user->id];
|
||||
|
||||
if (!empty($this->after)) {
|
||||
$messages = array_filter($messages, array($this, 'createdAfter'));
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
function getMessagesFrom()
|
||||
{
|
||||
$msgMap = Memcached_DataObject::listGet('Message', 'from_profile', array($this->user->id));
|
||||
|
||||
return $msgMap[$this->user->id];
|
||||
$messages = $msgMap[$this->user->id];
|
||||
|
||||
if (!empty($this->after)) {
|
||||
$messages = array_filter($messages, array($this, 'createdAfter'));
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
function createdAfter($item) {
|
||||
$created = strtotime((empty($item->created)) ? $item->modified : $item->created);
|
||||
return ($created >= $this->after);
|
||||
}
|
||||
|
||||
function writeJSON($handle)
|
||||
|
@ -19,8 +19,8 @@
|
||||
|
||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
||||
|
||||
$shortoptions = 'i:n:f:j';
|
||||
$longoptions = array('id=', 'nickname=', 'file=', 'json');
|
||||
$shortoptions = 'i:n:f:a:j';
|
||||
$longoptions = array('id=', 'nickname=', 'file=', 'after=', 'json');
|
||||
|
||||
$helptext = <<<END_OF_EXPORTACTIVITYSTREAM_HELP
|
||||
exportactivitystream.php [options]
|
||||
@ -29,6 +29,7 @@ Export a StatusNet user history to a file
|
||||
-i --id ID of user to export
|
||||
-n --nickname nickname of the user to export
|
||||
-j --json Output JSON (default Atom)
|
||||
-a --after Only activities after the given date
|
||||
|
||||
END_OF_EXPORTACTIVITYSTREAM_HELP;
|
||||
|
||||
@ -36,7 +37,13 @@ require_once INSTALLDIR.'/scripts/commandline.inc';
|
||||
|
||||
try {
|
||||
$user = getUser();
|
||||
if (have_option('a', 'after')) {
|
||||
$afterStr = get_option_value('a', 'after');
|
||||
$after = strtotime($afterStr);
|
||||
$actstr = new UserActivityStream($user, true, UserActivityStream::OUTPUT_RAW, $after);
|
||||
} else {
|
||||
$actstr = new UserActivityStream($user, true, UserActivityStream::OUTPUT_RAW);
|
||||
}
|
||||
if (have_option('j', 'json')) {
|
||||
$actstr->writeJSON(STDOUT);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user