+
+ function getProfile()
+ {
+ $profile = Profile::staticGet('id', $this->profile_id);
+ if (empty($profile)) {
+ // TRANS: Exception thrown when requesting a non-existing profile.
+ // TRANS: %s is the ID of the non-existing profile.
+ throw new Exception(sprintf(_m('No profile with ID %s.'),$this->profile_id));
+ }
+ return $profile;
+ }
+
+ function getEvent()
+ {
+ $event = Happening::staticGet('id', $this->event_id);
+ if (empty($event)) {
+ // TRANS: Exception thrown when requesting a non-existing event.
+ // TRANS: %s is the ID of the non-existing event.
+ throw new Exception(sprintf(_m('No event with ID %s.'),$this->event_id));
+ }
+ return $event;
+ }
+
+ function asHTML()
+ {
+ $event = Happening::staticGet('id', $this->event_id);
+
+ return self::toHTML($this->getProfile(),
+ $event,
+ $this->response);
+ }
+
+ function asString()
+ {
+ $event = Happening::staticGet('id', $this->event_id);
+
+ return self::toString($this->getProfile(),
+ $event,
+ $this->response);
+ }
+
+ static function toHTML($profile, $event, $response)
+ {
+ $fmt = null;
+
+ switch ($response) {
+ case 'Y':
+ // TRANS: HTML version of an RSVP ("please respond") status for a user.
+ // TRANS: %1$s is a profile URL, %2$s a profile name,
+ // TRANS: %3$s is an event URL, %4$s an event title.
+ $fmt = _m("<span class='automatic event-rsvp'><a href='%1\$s'>%2\$s</a> is attending <a href='%3\$s'>%4\$s</a>.</span>");
+ break;
+ case 'N':
+ // TRANS: HTML version of an RSVP ("please respond") status for a user.
+ // TRANS: %1$s is a profile URL, %2$s a profile name,
+ // TRANS: %3$s is an event URL, %4$s an event title.
+ $fmt = _m("<span class='automatic event-rsvp'><a href='%1\$s'>%2\$s</a> is not attending <a href='%3\$s'>%4\$s</a>.</span>");
+ break;
+ case '?':
+ // TRANS: HTML version of an RSVP ("please respond") status for a user.
+ // TRANS: %1$s is a profile URL, %2$s a profile name,
+ // TRANS: %3$s is an event URL, %4$s an event title.
+ $fmt = _m("<span class='automatic event-rsvp'><a href='%1\$s'>%2\$s</a> might attend <a href='%3\$s'>%4\$s</a>.</span>");
+ break;
+ default:
+ // 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)) {
+ $eventUrl = '#';
+ // TRANS: Used as event title when not event title is available.
+ // TRANS: Used as: Username [is [not ] attending|might attend] an unknown event.
+ $eventTitle = _m('an unknown event');
+ } else {
+ $notice = $event->getNotice();
+ $eventUrl = $notice->bestUrl();
+ $eventTitle = $event->title;
+ }
+
+ return sprintf($fmt,
+ htmlspecialchars($profile->profileurl),
+ htmlspecialchars($profile->getBestName()),
+ htmlspecialchars($eventUrl),
+ htmlspecialchars($eventTitle));
+ }
+
+ static function toString($profile, $event, $response)
+ {
+ $fmt = null;
+
+ switch ($response) {
+ case 'Y':
+ // TRANS: Plain text version of an RSVP ("please respond") status for a user.
+ // TRANS: %1$s is a profile name, %2$s is an event title.
+ $fmt = _m('%1$s is attending %2$s.');
+ break;
+ case 'N':
+ // TRANS: Plain text version of an RSVP ("please respond") status for a user.
+ // TRANS: %1$s is a profile name, %2$s is an event title.
+ $fmt = _m('%1$s is not attending %2$s.');
+ break;
+ case '?':
+ // TRANS: Plain text version of an RSVP ("please respond") status for a user.
+ // TRANS: %1$s is a profile name, %2$s is an event title.
+ $fmt = _m('%1$s might attend %2$s.');
+ break;
+ default:
+ // 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)) {
+ // TRANS: Used as event title when not event title is available.
+ // TRANS: Used as: Username [is [not ] attending|might attend] an unknown event.
+ $eventTitle = _m('an unknown event');
+ } else {
+ $notice = $event->getNotice();
+ $eventTitle = $event->title;
+ }
+
+ return sprintf($fmt,
+ $profile->getBestName(),
+ $eventTitle);
+ }
+
+ function delete()
+ {
+ self::blow('rsvp:for-event:%s', $event->id);
+ parent::delete();
+ }