summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--EVENTS.txt8
-rw-r--r--actions/apitimelineuser.php46
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)