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
|
* Raw output mode will attempt to stream, keeping less
|
||||||
* data in memory but will leave $this->activities incomplete.
|
* 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);
|
parent::__construct($user, null, $indent);
|
||||||
|
|
||||||
$this->outputMode = $outputMode;
|
$this->outputMode = $outputMode;
|
||||||
|
|
||||||
if ($this->outputMode == self::OUTPUT_STRING) {
|
if ($this->outputMode == self::OUTPUT_STRING) {
|
||||||
// String buffering? Grab all the notices now.
|
// String buffering? Grab all the notices now.
|
||||||
$notices = $this->getNotices();
|
$notices = $this->getNotices();
|
||||||
|
@ -65,6 +66,8 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
throw new Exception('Invalid outputMode provided to ' . __METHOD__);
|
throw new Exception('Invalid outputMode provided to ' . __METHOD__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->after = $after;
|
||||||
|
|
||||||
// Assume that everything but notices is feasible
|
// Assume that everything but notices is feasible
|
||||||
// to pull at once and work with in memory...
|
// to pull at once and work with in memory...
|
||||||
|
|
||||||
|
@ -123,7 +126,7 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
$notices = $this->getNoticesBetween($start, $end);
|
$notices = $this->getNoticesBetween($start, $end);
|
||||||
foreach ($notices as $noticeAct) {
|
foreach ($notices as $noticeAct) {
|
||||||
try {
|
try {
|
||||||
$nact = $noticeAct->asActivity();
|
$nact = $noticeAct->asActivity($this->user);
|
||||||
if ($format == Feed::ATOM) {
|
if ($format == Feed::ATOM) {
|
||||||
$nact->outputTo($this, false, false);
|
$nact->outputTo($this, false, false);
|
||||||
} else {
|
} else {
|
||||||
|
@ -172,10 +175,14 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
if ($this->outputMode == self::OUTPUT_RAW) {
|
if ($this->outputMode == self::OUTPUT_RAW) {
|
||||||
// Grab anything after the last pre-sorted activity.
|
// Grab anything after the last pre-sorted activity.
|
||||||
try {
|
try {
|
||||||
|
if (!empty($this->after)) {
|
||||||
|
$notices = $this->getNoticesBetween($this->after, $end);
|
||||||
|
} else {
|
||||||
$notices = $this->getNoticesBetween(0, $end);
|
$notices = $this->getNoticesBetween(0, $end);
|
||||||
|
}
|
||||||
foreach ($notices as $noticeAct) {
|
foreach ($notices as $noticeAct) {
|
||||||
try {
|
try {
|
||||||
$nact = $noticeAct->asActivity();
|
$nact = $noticeAct->asActivity($this->user);
|
||||||
if ($format == Feed::ATOM) {
|
if ($format == Feed::ATOM) {
|
||||||
$nact->outputTo($this, false, false);
|
$nact->outputTo($this, false, false);
|
||||||
} else {
|
} 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
|
// We always add the registration activity at the end, even if
|
||||||
// they have older activities (from restored backups) in their stream.
|
// they have older activities (from restored backups) in their stream.
|
||||||
|
|
||||||
|
@ -214,6 +222,7 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function compareObject($a, $b)
|
function compareObject($a, $b)
|
||||||
{
|
{
|
||||||
|
@ -231,6 +240,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
$sub->subscriber = $this->user->id;
|
$sub->subscriber = $this->user->id;
|
||||||
|
|
||||||
|
if (!empty($this->after)) {
|
||||||
|
$sub->whereAdd("created > '" . common_sql_date($this->after) . "'");
|
||||||
|
}
|
||||||
|
|
||||||
if ($sub->find()) {
|
if ($sub->find()) {
|
||||||
while ($sub->fetch()) {
|
while ($sub->fetch()) {
|
||||||
if ($sub->subscribed != $this->user->id) {
|
if ($sub->subscribed != $this->user->id) {
|
||||||
|
@ -250,6 +263,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
$sub->subscribed = $this->user->id;
|
$sub->subscribed = $this->user->id;
|
||||||
|
|
||||||
|
if (!empty($this->after)) {
|
||||||
|
$sub->whereAdd("created > '" . common_sql_date($this->after) . "'");
|
||||||
|
}
|
||||||
|
|
||||||
if ($sub->find()) {
|
if ($sub->find()) {
|
||||||
while ($sub->fetch()) {
|
while ($sub->fetch()) {
|
||||||
if ($sub->subscriber != $this->user->id) {
|
if ($sub->subscriber != $this->user->id) {
|
||||||
|
@ -269,6 +286,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
$fave->user_id = $this->user->id;
|
$fave->user_id = $this->user->id;
|
||||||
|
|
||||||
|
if (!empty($this->after)) {
|
||||||
|
$fave->whereAdd("modified > '" . common_sql_date($this->after) . "'");
|
||||||
|
}
|
||||||
|
|
||||||
if ($fave->find()) {
|
if ($fave->find()) {
|
||||||
while ($fave->fetch()) {
|
while ($fave->fetch()) {
|
||||||
$faves[] = clone($fave);
|
$faves[] = clone($fave);
|
||||||
|
@ -292,6 +313,17 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
$notice->profile_id = $this->user->id;
|
$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) {
|
if ($start) {
|
||||||
$tsstart = common_sql_date($start);
|
$tsstart = common_sql_date($start);
|
||||||
$notice->whereAdd("created >= '$tsstart'");
|
$notice->whereAdd("created >= '$tsstart'");
|
||||||
|
@ -314,8 +346,12 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
function getNotices()
|
function getNotices()
|
||||||
{
|
{
|
||||||
|
if (!empty($this->after)) {
|
||||||
|
return $this->getNoticesBetween($this->after);
|
||||||
|
} else {
|
||||||
return $this->getNoticesBetween();
|
return $this->getNoticesBetween();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getGroups()
|
function getGroups()
|
||||||
{
|
{
|
||||||
|
@ -325,6 +361,10 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
|
|
||||||
$gm->profile_id = $this->user->id;
|
$gm->profile_id = $this->user->id;
|
||||||
|
|
||||||
|
if (!empty($this->after)) {
|
||||||
|
$gm->whereAdd("created > '" . common_sql_date($this->after) . "'");
|
||||||
|
}
|
||||||
|
|
||||||
if ($gm->find()) {
|
if ($gm->find()) {
|
||||||
while ($gm->fetch()) {
|
while ($gm->fetch()) {
|
||||||
$groups[] = clone($gm);
|
$groups[] = clone($gm);
|
||||||
|
@ -338,14 +378,31 @@ class UserActivityStream extends AtomUserNoticeFeed
|
||||||
{
|
{
|
||||||
$msgMap = Memcached_DataObject::listGet('Message', 'to_profile', array($this->user->id));
|
$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()
|
function getMessagesFrom()
|
||||||
{
|
{
|
||||||
$msgMap = Memcached_DataObject::listGet('Message', 'from_profile', array($this->user->id));
|
$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)
|
function writeJSON($handle)
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
||||||
|
|
||||||
$shortoptions = 'i:n:f:j';
|
$shortoptions = 'i:n:f:a:j';
|
||||||
$longoptions = array('id=', 'nickname=', 'file=', 'json');
|
$longoptions = array('id=', 'nickname=', 'file=', 'after=', 'json');
|
||||||
|
|
||||||
$helptext = <<<END_OF_EXPORTACTIVITYSTREAM_HELP
|
$helptext = <<<END_OF_EXPORTACTIVITYSTREAM_HELP
|
||||||
exportactivitystream.php [options]
|
exportactivitystream.php [options]
|
||||||
|
@ -29,6 +29,7 @@ Export a StatusNet user history to a file
|
||||||
-i --id ID of user to export
|
-i --id ID of user to export
|
||||||
-n --nickname nickname of the user to export
|
-n --nickname nickname of the user to export
|
||||||
-j --json Output JSON (default Atom)
|
-j --json Output JSON (default Atom)
|
||||||
|
-a --after Only activities after the given date
|
||||||
|
|
||||||
END_OF_EXPORTACTIVITYSTREAM_HELP;
|
END_OF_EXPORTACTIVITYSTREAM_HELP;
|
||||||
|
|
||||||
|
@ -36,7 +37,13 @@ require_once INSTALLDIR.'/scripts/commandline.inc';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$user = getUser();
|
$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);
|
$actstr = new UserActivityStream($user, true, UserActivityStream::OUTPUT_RAW);
|
||||||
|
}
|
||||||
if (have_option('j', 'json')) {
|
if (have_option('j', 'json')) {
|
||||||
$actstr->writeJSON(STDOUT);
|
$actstr->writeJSON(STDOUT);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user