diff options
-rw-r--r-- | EVENTS.txt | 8 | ||||
-rw-r--r-- | actions/apitimelineuser.php | 46 |
2 files changed, 38 insertions, 16 deletions
diff --git a/EVENTS.txt b/EVENTS.txt index 8e730945a..2df21f01a 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -1158,3 +1158,11 @@ StartRevokeRole: when a role is being revoked EndRevokeRole: when a role has been revoked - $profile: profile that lost the role - $role: string name of the role + +StartAtomPubNewActivity: When a new activity comes in through Atom Pub API +- &$activity: received activity + +EndAtomPubNewActivity: When a new activity comes in through Atom Pub API +- $activity: received activity +- $notice: notice that was created + diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index 69cd9c2cb..7e7663646 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -325,20 +325,38 @@ class ApiTimelineUserAction extends ApiBareAuthAction $activity = new Activity($dom->documentElement); - if ($activity->verb != ActivityVerb::POST) { - $this->clientError(_('Can only handle post activities.')); - return; - } + if (Event::handle('StartAtomPubNewActivity', array(&$activity))) { - $note = $activity->objects[0]; + if ($activity->verb != ActivityVerb::POST) { + $this->clientError(_('Can only handle post activities.')); + return; + } - if (!in_array($note->type, array(ActivityObject::NOTE, - ActivityObject::BLOGENTRY, - ActivityObject::STATUS))) { - $this->clientError(sprintf(_('Cannot handle activity object type "%s"', - $note->type))); - return; + $note = $activity->objects[0]; + + if (!in_array($note->type, array(ActivityObject::NOTE, + ActivityObject::BLOGENTRY, + ActivityObject::STATUS))) { + $this->clientError(sprintf(_('Cannot handle activity object type "%s"', + $note->type))); + return; + } + + $saved = $this->postNote($activity); + + Event::handle('EndAtomPubNewActivity', array($activity, $saved)); + } + + if (!empty($saved)) { + header("Location: " . common_local_url('ApiStatusesShow', array('notice_id' => $saved->id, + 'format' => 'atom'))); + $this->showSingleAtomStatus($saved); } + } + + function postNote($activity) + { + $note = $activity->objects[0]; // Use summary as fallback for content @@ -458,11 +476,7 @@ class ApiTimelineUserAction extends ApiBareAuthAction 'atompub', // TODO: deal with this $options); - if (!empty($saved)) { - header("Location: " . common_local_url('ApiStatusesShow', array('notice_id' => $saved->id, - 'format' => 'atom'))); - $this->showSingleAtomStatus($saved); - } + return $saved; } function purify($content) |