Add event hooks for customizing ActivityObject output to Atom and JSON, and helpers for MicroAppPlugin.
New hooks: * StartActivityObjectOutputAtom * EndActivityObjectOutputAtom $obj ActivityObject $out XMLOutputter * StartActivityObjectOutputJson * EndActivityObjectOutputJson $obj ActivityObject &$out array
This commit is contained in:
parent
843ace580d
commit
3146c9fae8
16
EVENTS.txt
16
EVENTS.txt
@ -1115,3 +1115,19 @@ StartGroupProfileElements: Start showing stuff about the group on its profile pa
|
||||
EndGroupProfileElements: Start showing stuff about the group on its profile page
|
||||
- $action: action being executed (for output and params)
|
||||
- $group: group for the page
|
||||
|
||||
StartActivityObjectOutputAtom: Called at start of Atom XML output generation for ActivityObject chunks, just inside the <activity:object>. Cancel the event to take over its output completely (you're responsible for calling the matching End event if so)
|
||||
- $obj: ActivityObject
|
||||
- $out: XMLOutputter to append custom output
|
||||
|
||||
EndActivityObjectOutputAtom: Called at end of Atom XML output generation for ActivityObject chunks, just inside the </activity:object>
|
||||
- $obj: ActivityObject
|
||||
- $out: XMLOutputter to append custom output
|
||||
|
||||
StartActivityObjectOutputJson: Called at start of JSON output generation for ActivityObject chunks: the array has not yet been filled out. Cancel the event to take over its output completely (you're responsible for calling the matching End event if so)
|
||||
- $obj ActivityObject
|
||||
- &$out: array to be serialized; you're free to modify it
|
||||
|
||||
EndActivityObjectOutputJson: Called at end of JSON output generation for ActivityObject chunks: the array has not yet been filled out.
|
||||
- $obj ActivityObject
|
||||
- &$out: array to be serialized; you're free to modify it
|
||||
|
@ -533,6 +533,7 @@ class ActivityObject
|
||||
$xo->elementStart($tag);
|
||||
}
|
||||
|
||||
if (Event::handle('StartActivityObjectOutputAtom', array($this, $xo))) {
|
||||
$xo->element('activity:object-type', null, $this->type);
|
||||
|
||||
// <author> uses URI
|
||||
@ -620,6 +621,9 @@ class ActivityObject
|
||||
$xo->element($extraTag, $attrs, $content);
|
||||
}
|
||||
|
||||
Event::handle('EndActivityObjectOutputAtom', array($this, $xo));
|
||||
}
|
||||
|
||||
if (!empty($tag)) {
|
||||
$xo->elementEnd($tag);
|
||||
}
|
||||
@ -647,6 +651,7 @@ class ActivityObject
|
||||
{
|
||||
$object = array();
|
||||
|
||||
if (Event::handle('StartActivityObjectOutputJson', array($this, &$object))) {
|
||||
// XXX: attachedObjects are added by Activity
|
||||
|
||||
// displayName
|
||||
@ -734,7 +739,8 @@ class ActivityObject
|
||||
if (!empty($this->poco)) {
|
||||
$object['contact'] = $this->poco->asArray();
|
||||
}
|
||||
|
||||
Event::handle('EndActivityObjectOutputJson', array($this, &$object));
|
||||
}
|
||||
return array_filter($object);
|
||||
}
|
||||
}
|
||||
|
@ -212,6 +212,44 @@ abstract class MicroAppPlugin extends Plugin
|
||||
in_array($activity->objects[0]->type, $types));
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when generating Atom XML ActivityStreams output from an
|
||||
* ActivityObject belonging to this plugin. Gives the plugin
|
||||
* a chance to add custom output.
|
||||
*
|
||||
* Note that you can only add output of additional XML elements,
|
||||
* not change existing stuff here.
|
||||
*
|
||||
* If output is already handled by the base Activity classes,
|
||||
* you can leave this base implementation as a no-op.
|
||||
*
|
||||
* @param ActivityObject $obj
|
||||
* @param XMLOutputter $out to add elements at end of object
|
||||
*/
|
||||
function activityObjectOutputAtom(ActivityObject $obj, XMLOutputter $out)
|
||||
{
|
||||
// default is a no-op
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when generating JSON ActivityStreams output from an
|
||||
* ActivityObject belonging to this plugin. Gives the plugin
|
||||
* a chance to add custom output.
|
||||
*
|
||||
* Modify the array contents to your heart's content, and it'll
|
||||
* all get serialized out as JSON.
|
||||
*
|
||||
* If output is already handled by the base Activity classes,
|
||||
* you can leave this base implementation as a no-op.
|
||||
*
|
||||
* @param ActivityObject $obj
|
||||
* @param array &$out JSON-targeted array which can be modified
|
||||
*/
|
||||
public function activityObjectOutputJson(ActivityObject $obj, array &$out)
|
||||
{
|
||||
// default is a no-op
|
||||
}
|
||||
|
||||
/**
|
||||
* When a notice is deleted, delete the related objects
|
||||
* by calling the overridable $this->deleteRelated().
|
||||
@ -439,6 +477,46 @@ abstract class MicroAppPlugin extends Plugin
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event handler gives the plugin a chance to add custom
|
||||
* Atom XML ActivityStreams output from a previously filled-out
|
||||
* ActivityObject.
|
||||
*
|
||||
* The atomOutput method is called if it's one of
|
||||
* our matching types.
|
||||
*
|
||||
* @param ActivityObject $obj
|
||||
* @param XMLOutputter $out to add elements at end of object
|
||||
* @return boolean hook return value
|
||||
*/
|
||||
function onEndActivityObjectOutputAtom(ActivityObject $obj, XMLOutputter $out)
|
||||
{
|
||||
if (in_array($obj->type, $this->types())) {
|
||||
$this->activityObjectOutputAtom($obj, $out);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event handler gives the plugin a chance to add custom
|
||||
* JSON ActivityStreams output from a previously filled-out
|
||||
* ActivityObject.
|
||||
*
|
||||
* The activityObjectOutputJson method is called if it's one of
|
||||
* our matching types.
|
||||
*
|
||||
* @param ActivityObject $obj
|
||||
* @param array &$out JSON-targeted array which can be modified
|
||||
* @return boolean hook return value
|
||||
*/
|
||||
function onEndActivityObjectOutputJson(ActivityObject $obj, array &$out)
|
||||
{
|
||||
if (in_array($obj->type, $this->types())) {
|
||||
$this->activityObjectOutputJson($obj, &$out);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function onStartShowEntryForms(&$tabs)
|
||||
{
|
||||
$tabs[$this->tag()] = $this->appTitle();
|
||||
|
Loading…
Reference in New Issue
Block a user