diff --git a/lib/activityhandlerplugin.php b/lib/activityhandlerplugin.php index b826a705ac..b093198703 100644 --- a/lib/activityhandlerplugin.php +++ b/lib/activityhandlerplugin.php @@ -182,17 +182,6 @@ abstract class ActivityHandlerPlugin extends Plugin return true; } $object = $this->saveObjectFromActivity($act, $stored, $options); - try { - // In the future we probably want to use something like ActivityVerb_DataObject for the kind - // of objects which are returned from saveObjectFromActivity. - if ($object instanceof Managed_DataObject) { - // If the verb handling plugin figured out some more attention URIs, add them here to the - // original activity. This is only done if a separate object is actually needed to be saved. - $act->context->attention = array_merge($act->context->attention, $object->getAttentionArray()); - } - } catch (Exception $e) { - common_debug('WARNING: Could not get attention list from object '.get_class($object).'!'); - } return false; } diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index 14dadbc247..1756e851bf 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -40,11 +40,8 @@ if (!defined('GNUSOCIAL')) { exit(1); } * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ -class EventPlugin extends MicroAppPlugin +class EventPlugin extends ActivityVerbHandlerPlugin { - - var $oldSaveNew = true; - /** * Set up our tables (event and rsvp) * @@ -131,22 +128,64 @@ class EventPlugin extends MicroAppPlugin RSVP::POSSIBLE); } - protected function saveObjectFromActivity(Activity $activity, Notice $stored, array $options=array()) + public function newFormAction() { + // such as 'newbookmark' or 'newevent' route + return 'new'.$this->tag(); + } + + function onStartShowEntryForms(&$tabs) + { + $tabs[$this->tag()] = array('title' => $this->appTitle(), + 'href' => common_local_url($this->newFormAction()), + ); + return true; + } + + function onStartMakeEntryForm($tag, $out, &$form) + { + if ($tag == $this->tag()) { + $form = $this->entryForm($out); + return false; + } + + return true; + } + + protected function getActionTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped) + { + return $verb; + } + + protected function doActionPreparation(ManagedAction $action, $verb, Notice $target, Profile $scoped) + { + return true; + } + + protected function doActionPost(ManagedAction $action, $verb, Notice $target, Profile $scoped) + { + throw new ServerException('Event does not handle doActionPost yet', 501); + } + + protected function getActivityForm(ManagedAction $action, $verb, Notice $target, Profile $scoped) + { + return new RSVPForm(Happening::fromNotice($target), $action); + } + + protected function saveObjectFromActivity(Activity $act, Notice $stored, array $options=array()) { if (count($act->objects) !== 1) { // TRANS: Exception thrown when there are too many activity objects. throw new Exception(_m('Too many activity objects.')); } - $actobj = $activity->objects[0]; + $actobj = $act->objects[0]; - switch ($activity->verb) { + switch ($act->verb) { case ActivityVerb::POST: - $actobj = $activity->objects[0]; if (!ActivityUtils::compareTypes($actobj->type, array(Happening::OBJECT_TYPE))) { // TRANS: Exception thrown when event plugin comes across a non-event type object. throw new Exception(_m('Wrong type for object.')); } - return Happening::saveActivityObject($actobj, $stored->getProfile()); + return Happening::saveActivityObject($actobj, $stored); break; case RSVP::POSITIVE: case RSVP::NEGATIVE: @@ -157,9 +196,9 @@ class EventPlugin extends MicroAppPlugin // TRANS: Exception thrown when trying to RSVP for an unknown event. throw new Exception(_m('RSVP for unknown event.')); } - $object = RSVP::saveNewFromNotice($stored, $happening, $activity->verb); + $object = RSVP::saveNewFromNotice($stored, $happening, $act->verb); // Our data model expects this - $stored->object_type = $activity->verb; + $stored->object_type = $act->verb; return $object; break; default: diff --git a/plugins/Event/classes/Happening.php b/plugins/Event/classes/Happening.php index 8d23dc676e..7b7121903f 100644 --- a/plugins/Event/classes/Happening.php +++ b/plugins/Event/classes/Happening.php @@ -100,93 +100,7 @@ class Happening extends Managed_DataObject ); } - static function saveNew(Profile $profile, $start_time, $end_time, $title, $location, $description, $url, $options=array()) - { - if (array_key_exists('uri', $options)) { - $other = Happening::getKV('uri', $options['uri']); - if ($other instanceof Happening) { - // TRANS: Client exception thrown when trying to create an event that already exists. - throw new ClientException(_m('Event already exists.')); - } - } - - $ev = new Happening(); - - $ev->id = UUID::gen(); - $ev->profile_id = $profile->getID(); - $ev->start_time = $start_time; - $ev->end_time = $end_time; - $ev->title = $title; - $ev->location = $location; - $ev->description = $description; - $ev->url = $url; - - if (array_key_exists('created', $options)) { - $ev->created = $options['created']; - } else { - $ev->created = common_sql_now(); - } - - if (array_key_exists('uri', $options)) { - $ev->uri = $options['uri']; - } else { - $ev->uri = common_local_url('showevent', - array('id' => $ev->id)); - } - - $ev->insert(); - - // XXX: does this get truncated? - - // TRANS: Event description. %1$s is a title, %2$s is start time, %3$s is end time, - // TRANS: %4$s is location, %5$s is a description. - $content = sprintf(_m('"%1$s" %2$s - %3$s (%4$s): %5$s'), - $title, - common_exact_date($ev->start_time), - common_exact_date($ev->end_time), - $location, - $description); - - // TRANS: Rendered microformats2 tagged event description. - // TRANS: %1$s is a title, %2$s is start time, %3$s is start time, - // TRANS: %4$s is end time, %5$s is end time, %6$s is location, %7$s is description. - // TRANS: Class names should not be translated. - $rendered = sprintf(_m('
%1$s
'. - ' - '. - ' '. - '(%6$s): '. - '