From c263bbcca7910e789c6ec1a5330e56433d0b3278 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Mon, 27 Oct 2014 14:24:16 +0100 Subject: [PATCH] EventPlugin now uses event handling instead of NLI adapter --- plugins/Event/EventPlugin.php | 186 +++++++++++++++++++++++--- plugins/Event/classes/RSVP.php | 1 - plugins/Event/lib/eventlistitem.php | 194 ---------------------------- plugins/Event/lib/rsvplistitem.php | 75 ----------- 4 files changed, 168 insertions(+), 288 deletions(-) delete mode 100644 plugins/Event/lib/eventlistitem.php delete mode 100644 plugins/Event/lib/rsvplistitem.php diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index bfc9c91606..305d80fa3c 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -254,24 +254,6 @@ class EventPlugin extends MicroAppPlugin return true; } - function adaptNoticeListItem($nli) - { - $notice = $nli->notice; - - switch ($notice->object_type) { - case Happening::OBJECT_TYPE: - return new EventListItem($nli); - break; - case RSVP::POSITIVE: - case RSVP::NEGATIVE: - case RSVP::POSSIBLE: - return new RSVPListItem($nli); - break; - } - return null; - } - - /** * Form for our app * @@ -329,4 +311,172 @@ class EventPlugin extends MicroAppPlugin } return true; } + + protected function showNoticeItemNotice(NoticeListItem $nli) + { + $nli->showAuthor(); + $nli->showContent(); + } + + protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null) + { + switch ($stored->object_type) { + case Happening::OBJECT_TYPE: + $this->showEvent($stored, $out, $scoped); + break; + case RSVP::POSITIVE: + case RSVP::NEGATIVE: + case RSVP::POSSIBLE: + $this->showRSVP($stored, $out, $scoped); + break; + } + } + + protected function showEvent(Notice $stored, HTMLOutputter $out, Profile $scoped=null) + { + $profile = $stored->getProfile(); + $event = Happening::fromNotice($stored); + + if (!$event instanceof Happening) { + // TRANS: Content for a deleted RSVP list item (RSVP stands for "please respond"). + $out->element('p', null, _m('Deleted.')); + return; + } + + $out->elementStart('div', 'h-event'); + + $out->elementStart('h3', 'p-summary p-name'); + + try { + $out->element('a', array('href' => $event->getUrl()), $event->title); + } catch (InvalidUrlException $e) { + $out->text($event->title); + } + + $out->elementEnd('h3'); + + $now = new DateTime(); + $startDate = new DateTime($event->start_time); + $endDate = new DateTime($event->end_time); + $userTz = new DateTimeZone(common_timezone()); + + // Localize the time for the observer + $now->setTimeZone($userTz); + $startDate->setTimezone($userTz); + $endDate->setTimezone($userTz); + + $thisYear = $now->format('Y'); + $startYear = $startDate->format('Y'); + $endYear = $endDate->format('Y'); + + $dateFmt = 'D, F j, '; // e.g.: Mon, Aug 31 + + if ($startYear != $thisYear || $endYear != $thisYear) { + $dateFmt .= 'Y,'; // append year if we need to think about years + } + + $startDateStr = $startDate->format($dateFmt); + $endDateStr = $endDate->format($dateFmt); + + $timeFmt = 'g:ia'; + + $startTimeStr = $startDate->format($timeFmt); + $endTimeStr = $endDate->format("{$timeFmt} (T)"); + + $out->elementStart('div', 'event-times'); // VEVENT/EVENT-TIMES IN + + // TRANS: Field label for event description. + $out->element('strong', null, _m('Time:')); + + $out->element('time', array('class' => 'dt-start', + 'datetime' => common_date_iso8601($event->start_time)), + $startDateStr . ' ' . $startTimeStr); + $out->text(' – '); + $out->element('time', array('class' => 'dt-end', + 'datetime' => common_date_iso8601($event->end_time)), + $startDateStr != $endDateStr + ? "$endDateStr $endTimeStr" + : $endTimeStr); + + $out->elementEnd('div'); // VEVENT/EVENT-TIMES OUT + + if (!empty($event->location)) { + $out->elementStart('div', 'event-location'); + // TRANS: Field label for event description. + $out->element('strong', null, _m('Location:')); + $out->element('span', 'p-location', $event->location); + $out->elementEnd('div'); + } + + if (!empty($event->description)) { + $out->elementStart('div', 'event-description'); + // TRANS: Field label for event description. + $out->element('strong', null, _m('Description:')); + $out->element('div', 'p-description', $event->description); + $out->elementEnd('div'); + } + + $rsvps = $event->getRSVPs(); + + $out->elementStart('div', 'event-rsvps'); + + // TRANS: Field label for event description. + $out->element('strong', null, _m('Attending:')); + $out->elementStart('ul', 'attending-list'); + + foreach ($rsvps as $verb => $responses) { + $out->elementStart('li', 'rsvp-list'); + switch ($verb) { + case RSVP::POSITIVE: + $out->text(_('Yes:')); + break; + case RSVP::NEGATIVE: + $out->text(_('No:')); + break; + case RSVP::POSSIBLE: + $out->text(_('Maybe:')); + break; + } + $ids = array(); + foreach ($responses as $response) { + $ids[] = $response->profile_id; + } + $ids = array_slice($ids, 0, ProfileMiniList::MAX_PROFILES + 1); + $minilist = new ProfileMiniList(Profile::multiGet('id', $ids), $out); + $minilist->show(); + + $out->elementEnd('li'); + } + + $out->elementEnd('ul'); + $out->elementEnd('div'); + + if ($scoped instanceof Profile) { + $rsvp = $event->getRSVP($scoped); + + if (empty($rsvp)) { + $form = new RSVPForm($event, $out); + } else { + $form = new CancelRSVPForm($rsvp, $out); + } + + $form->show(); + } + $out->elementEnd('div'); + } + + protected function showRSVP(Notice $stored, HTMLOutputter $out, Profile $scoped=null) + { + $rsvp = RSVP::fromNotice($stored); + + if (empty($rsvp)) { + // TRANS: Content for a deleted RSVP list item (RSVP stands for "please respond"). + $out->element('p', null, _m('Deleted.')); + return; + } + + $out->elementStart('div', 'rsvp'); + $out->raw($rsvp->asHTML()); + $out->elementEnd('div'); + } } diff --git a/plugins/Event/classes/RSVP.php b/plugins/Event/classes/RSVP.php index de3307fad4..7266ea7493 100644 --- a/plugins/Event/classes/RSVP.php +++ b/plugins/Event/classes/RSVP.php @@ -342,7 +342,6 @@ class RSVP extends Managed_DataObject // TRANS: Exception thrown when requesting a user's RSVP status for a non-existing response code. // TRANS: %s is the non-existing response code. throw new Exception(sprintf(_m('Unknown response code %s.'),$response)); - break; } if (empty($event)) { diff --git a/plugins/Event/lib/eventlistitem.php b/plugins/Event/lib/eventlistitem.php deleted file mode 100644 index 9ad5ee29f0..0000000000 --- a/plugins/Event/lib/eventlistitem.php +++ /dev/null @@ -1,194 +0,0 @@ -. - * - * @category Event - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} - -/** - * Notice-list representation of an event - * - * @category General - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ -class EventListItem extends NoticeListItemAdapter -{ - function showNotice() - { - $this->nli->showAuthor(); - $this->showContent(); - } - - function showContent() - { - $notice = $this->nli->notice; - $out = $this->nli->out; - - $profile = $notice->getProfile(); - $event = Happening::fromNotice($notice); - - if (empty($event)) { - // TRANS: Content for a deleted RSVP list item (RSVP stands for "please respond"). - $out->element('p', null, _m('Deleted.')); - return; - } - - // e-content since we're part of a h-entry - $out->elementStart('div', 'h-event e-content'); // VEVENT IN - - $out->elementStart('h3', 'p-summary p-name'); // VEVENT/H3 IN - - try { - $out->element('a', array('href' => $event->getUrl()), $event->title); - } catch (InvalidUrlException $e) { - $out->text($event->title); - } - - $out->elementEnd('h3'); // VEVENT/H3 OUT - - $now = new DateTime(); - $startDate = new DateTime($event->start_time); - $endDate = new DateTime($event->end_time); - $userTz = new DateTimeZone(common_timezone()); - - // Localize the time for the observer - $now->setTimeZone($userTz); - $startDate->setTimezone($userTz); - $endDate->setTimezone($userTz); - - $thisYear = $now->format('Y'); - $startYear = $startDate->format('Y'); - $endYear = $endDate->format('Y'); - - $dateFmt = 'D, F j, '; // e.g.: Mon, Aug 31 - - if ($startYear != $thisYear || $endYear != $thisYear) { - $dateFmt .= 'Y,'; // append year if we need to think about years - } - - $startDateStr = $startDate->format($dateFmt); - $endDateStr = $endDate->format($dateFmt); - - $timeFmt = 'g:ia'; - - $startTimeStr = $startDate->format($timeFmt); - $endTimeStr = $endDate->format("{$timeFmt} (T)"); - - $out->elementStart('div', 'event-times'); // VEVENT/EVENT-TIMES IN - - // TRANS: Field label for event description. - $out->element('strong', null, _m('Time:')); - - $out->element('time', array('class' => 'dt-start', - 'datetime' => common_date_iso8601($event->start_time)), - $startDateStr . ' ' . $startTimeStr); - $out->text(' – '); - $out->element('time', array('class' => 'dt-end', - 'datetime' => common_date_iso8601($event->end_time)), - $startDateStr != $endDateStr - ? "$endDateStr $endTimeStr" - : $endTimeStr); - - $out->elementEnd('div'); // VEVENT/EVENT-TIMES OUT - - if (!empty($event->location)) { - $out->elementStart('div', 'event-location'); - // TRANS: Field label for event description. - $out->element('strong', null, _m('Location:')); - $out->element('span', 'p-location', $event->location); - $out->elementEnd('div'); - } - - if (!empty($event->description)) { - $out->elementStart('div', 'event-description'); - // TRANS: Field label for event description. - $out->element('strong', null, _m('Description:')); - $out->element('div', 'p-description', $event->description); - $out->elementEnd('div'); - } - - $rsvps = $event->getRSVPs(); - - $out->elementStart('div', 'event-rsvps'); - - // TRANS: Field label for event description. - $out->element('strong', null, _m('Attending:')); - $out->elementStart('ul', 'attending-list'); - - foreach ($rsvps as $verb => $responses) { - $out->elementStart('li', 'rsvp-list'); - switch ($verb) { - case RSVP::POSITIVE: - $out->text(_('Yes:')); - break; - case RSVP::NEGATIVE: - $out->text(_('No:')); - break; - case RSVP::POSSIBLE: - $out->text(_('Maybe:')); - break; - } - $ids = array(); - foreach ($responses as $response) { - $ids[] = $response->profile_id; - } - $ids = array_slice($ids, 0, ProfileMiniList::MAX_PROFILES + 1); - $minilist = new ProfileMiniList(Profile::multiGet('id', $ids), $out); - $minilist->show(); - - $out->elementEnd('li'); - } - - $out->elementEnd('ul'); - $out->elementEnd('div'); - - $user = common_current_user(); - - if (!empty($user)) { - $rsvp = $event->getRSVP($user->getProfile()); - - if (empty($rsvp)) { - $form = new RSVPForm($event, $out); - } else { - $form = new CancelRSVPForm($rsvp, $out); - } - - $form->show(); - } - - $out->elementEnd('div'); // vevent out - } -} diff --git a/plugins/Event/lib/rsvplistitem.php b/plugins/Event/lib/rsvplistitem.php deleted file mode 100644 index fef1c9debb..0000000000 --- a/plugins/Event/lib/rsvplistitem.php +++ /dev/null @@ -1,75 +0,0 @@ -. - * - * @category Cache - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} - -/** - * Class comment - * - * @category General - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ -class RSVPListItem extends NoticeListItemAdapter -{ - function showNotice() - { - $this->nli->out->elementStart('div', 'entry-title'); - $this->nli->showAuthor(); - $this->showContent(); - $this->nli->out->elementEnd('div'); - } - - function showContent() - { - $notice = $this->nli->notice; - $out = $this->nli->out; - - $rsvp = RSVP::fromNotice($notice); - - if (empty($rsvp)) { - // TRANS: Content for a deleted RSVP list item (RSVP stands for "please respond"). - $out->element('p', null, _m('Deleted.')); - return; - } - - $out->elementStart('div', 'rsvp'); - $out->raw($rsvp->asHTML()); - $out->elementEnd('div'); - return; - } -}