forked from GNUsocial/gnu-social
		
	Merge branch 'master' of gitorious.org:statusnet/mainline
This commit is contained in:
		| @@ -125,8 +125,17 @@ class Fave extends Managed_DataObject | ||||
|     function asActivity() | ||||
|     { | ||||
|         $notice = Notice::staticGet('id', $this->notice_id); | ||||
|  | ||||
|         if (!$notice) { | ||||
|             throw new Exception("Fave for non-existent notice: " . $this->notice_id); | ||||
|         } | ||||
|  | ||||
|         $profile = Profile::staticGet('id', $this->user_id); | ||||
|  | ||||
|         if (!$profile) { | ||||
|             throw new Exception("Fave by non-existent profile: " . $this->user_id); | ||||
|         } | ||||
|  | ||||
|         $act = new Activity(); | ||||
|  | ||||
|         $act->verb = ActivityVerb::FAVORITE; | ||||
|   | ||||
| @@ -75,61 +75,121 @@ class UserActivityStream extends AtomUserNoticeFeed | ||||
|  | ||||
|         $objs = array_merge($subscriptions, $subscribers, $groups, $faves, $notices); | ||||
|  | ||||
|         $subscriptions = null; | ||||
|         $subscribers   = null; | ||||
|         $groups        = null; | ||||
|         $faves         = null; | ||||
|  | ||||
|         unset($subscriptions); | ||||
|         unset($subscribers); | ||||
|         unset($groups); | ||||
|         unset($faves); | ||||
|  | ||||
|         // Sort by create date | ||||
|  | ||||
|         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) { | ||||
|             try { | ||||
|                 $this->activities[] = $obj->asActivity(); | ||||
|             } catch (Exception $e) { | ||||
|                 // Continue | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $this->objs = $objs; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Interleave the pre-sorted subs/groups/faves with the user's | ||||
|      * notices, all in reverse chron order. | ||||
|      */ | ||||
|     function renderEntries() | ||||
|     function renderEntries($format=Feed::ATOM, $handle=null) | ||||
|     { | ||||
|         $haveOne = false; | ||||
|  | ||||
|         $end = time() + 1; | ||||
|         foreach ($this->activities as $act) { | ||||
|         foreach ($this->objs as $obj) { | ||||
|             try { | ||||
|                 $act = $obj->asActivity(); | ||||
|             } catch (Exception $e) { | ||||
|                 common_log(LOG_ERR, $e->getMessage()); | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             $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. | ||||
|                 try { | ||||
|                     $notices = $this->getNoticesBetween($start, $end); | ||||
|                     foreach ($notices as $noticeAct) { | ||||
|                         try { | ||||
|                             $nact = $noticeAct->asActivity(); | ||||
|                             if ($format == Feed::ATOM) { | ||||
|                                 $nact->outputTo($this, false, false); | ||||
|                     } catch (Exception $e) { | ||||
|                         // Continue | ||||
|                             } else { | ||||
|                                 if ($haveOne) { | ||||
|                                     fwrite($handle, ","); | ||||
|                                 } | ||||
|                                 fwrite($handle, json_encode($nact->asArray())); | ||||
|                                 $haveOne = true; | ||||
|                             } | ||||
|                         } catch (Exception $e) { | ||||
|                             common_log(LOG_ERR, $e->getMessage()); | ||||
|                             continue; | ||||
|                         } | ||||
|                         $nact = null; | ||||
|                         unset($nact); | ||||
|                     } | ||||
|                 } catch (Exception $e) { | ||||
|                     common_log(LOG_ERR, $e->getMessage()); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             $notices = null; | ||||
|             unset($notices); | ||||
|  | ||||
|             try { | ||||
|                 if ($format == Feed::ATOM) { | ||||
|                     // Only show the author sub-element if it's different from default user | ||||
|                     $act->outputTo($this, false, ($act->actor->id != $this->user->uri)); | ||||
|                 } else { | ||||
|                     if ($haveOne) { | ||||
|                         fwrite($handle, ","); | ||||
|                     } | ||||
|                     fwrite($handle, json_encode($act->asArray())); | ||||
|                     $haveOne = true; | ||||
|                 } | ||||
|             } catch (Exception $e) { | ||||
|                 common_log(LOG_ERR, $e->getMessage()); | ||||
|             } | ||||
|  | ||||
|             $act = null; | ||||
|             unset($act); | ||||
|  | ||||
|             $end = $start; | ||||
|         } | ||||
|  | ||||
|         if ($this->outputMode == self::OUTPUT_RAW) { | ||||
|             // Grab anything after the last pre-sorted activity. | ||||
|             try { | ||||
|                 $notices = $this->getNoticesBetween(0, $end); | ||||
|                 foreach ($notices as $noticeAct) { | ||||
|                     try { | ||||
|                         $nact = $noticeAct->asActivity(); | ||||
|                         if ($format == Feed::ATOM) { | ||||
|                             $nact->outputTo($this, false, false); | ||||
|                 } catch (Exception $e) { | ||||
|                     // Continue | ||||
|                         } else { | ||||
|                             if ($haveOne) { | ||||
|                                 fwrite($handle, ","); | ||||
|                             } | ||||
|                             fwrite($handle, json_encode($nact->asArray())); | ||||
|                             $haveOne = true; | ||||
|                         } | ||||
|                     } catch (Exception $e) { | ||||
|                         common_log(LOG_ERR, $e->getMessage()); | ||||
|                         continue; | ||||
|                     } | ||||
|                 } | ||||
|             } catch (Exception $e) { | ||||
|                 common_log(LOG_ERR, $e->getMessage()); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -271,4 +331,12 @@ class UserActivityStream extends AtomUserNoticeFeed | ||||
|  | ||||
|         return $groups; | ||||
|     } | ||||
|  | ||||
|     function writeJSON($handle) | ||||
|     { | ||||
|         require_once INSTALLDIR.'/lib/activitystreamjsondocument.php'; | ||||
|         fwrite($handle, '{"items": ['); | ||||
|         $this->renderEntries(Feed::JSON, $handle); | ||||
|         fwrite($handle, ']}'); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -19,8 +19,8 @@ | ||||
|  | ||||
| define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); | ||||
|  | ||||
| $shortoptions = 'i:n:f:'; | ||||
| $longoptions = array('id=', 'nickname=', 'file='); | ||||
| $shortoptions = 'i:n:f:j'; | ||||
| $longoptions = array('id=', 'nickname=', 'file=', 'json'); | ||||
|  | ||||
| $helptext = <<<END_OF_EXPORTACTIVITYSTREAM_HELP | ||||
| exportactivitystream.php [options] | ||||
| @@ -28,7 +28,7 @@ Export a StatusNet user history to a file | ||||
|  | ||||
|   -i --id       ID of user to export | ||||
|   -n --nickname nickname of the user to export | ||||
|   -f --file     file to export to (default STDOUT) | ||||
|   -j --json     Output JSON (default Atom) | ||||
|  | ||||
| END_OF_EXPORTACTIVITYSTREAM_HELP; | ||||
|  | ||||
| @@ -37,7 +37,11 @@ require_once INSTALLDIR.'/scripts/commandline.inc'; | ||||
| try { | ||||
|     $user = getUser(); | ||||
|     $actstr = new UserActivityStream($user, true, UserActivityStream::OUTPUT_RAW); | ||||
|     if (have_option('j', 'json')) { | ||||
|         $actstr->writeJSON(STDOUT); | ||||
|     } else { | ||||
|         print $actstr->getString(); | ||||
|     } | ||||
| } catch (Exception $e) { | ||||
|     print $e->getMessage()."\n"; | ||||
|     exit(1); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user