diff --git a/EVENTS.txt b/EVENTS.txt index 16ca9ea066..af0bee587c 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -30,7 +30,7 @@ EndShowLaconicaStyles: End showing Laconica Style links; good place to add hand StartShowUAStyles: Showing custom UA Style links - $action: the current action -EndShowUAStyles: End showing custom UA Style links; good place to add user-agent (e.g., filter, -webkit, -moz) specific styles +EndShowUAStyles: End showing custom UA Style links; good place to add user-agent (e.g., filter, -webkit, -moz) specific styles - $action: the current action StartShowScripts: Showing JavaScript links @@ -76,3 +76,9 @@ StartShowContentBlock: Showing before the content container EndShowContentBlock: Showing after the content container - $action: the current action +StartNoticeSave: before inserting a notice (good place for content filters) +- $notice: notice being saved (no ID or URI) + +EndNoticeSave: after inserting a notice and related code +- $notice: notice that was saved (with ID and URI) + diff --git a/actions/newnotice.php b/actions/newnotice.php index 5e7691f33d..9face96443 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -98,7 +98,12 @@ class NewnoticeAction extends Action return; } - $this->saveNewNotice(); + try { + $this->saveNewNotice(); + } catch (Exception $e) { + $this->showForm($e->getMessage()); + return; + } } else { $this->showForm(); } @@ -123,15 +128,13 @@ class NewnoticeAction extends Action $content = $this->trimmed('status_textarea'); if (!$content) { - $this->showForm(_('No content!')); - return; + $this->clientError(_('No content!')); } else { $content_shortened = common_shorten_links($content); if (mb_strlen($content_shortened) > 140) { - $this->showForm(_('That\'s too long. '. - 'Max notice size is 140 chars.')); - return; + $this->clientError(_('That\'s too long. '. + 'Max notice size is 140 chars.')); } } @@ -154,7 +157,7 @@ class NewnoticeAction extends Action ($replyto == 'false') ? null : $replyto); if (is_string($notice)) { - $this->showForm($notice); + $this->clientError($notice); return; } diff --git a/classes/Notice.php b/classes/Notice.php index 3299883686..6db59c96ef 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -154,33 +154,38 @@ class Notice extends Memcached_DataObject $notice->source = $source; $notice->uri = $uri; - $id = $notice->insert(); + if (Event::handle('StartNoticeSave', array(&$notice))) { - if (!$id) { - common_log_db_error($notice, 'INSERT', __FILE__); - return _('Problem saving notice.'); - } + $id = $notice->insert(); - # Update the URI after the notice is in the database - if (!$uri) { - $orig = clone($notice); - $notice->uri = common_notice_uri($notice); - - if (!$notice->update($orig)) { - common_log_db_error($notice, 'UPDATE', __FILE__); + if (!$id) { + common_log_db_error($notice, 'INSERT', __FILE__); return _('Problem saving notice.'); } + + # Update the URI after the notice is in the database + if (!$uri) { + $orig = clone($notice); + $notice->uri = common_notice_uri($notice); + + if (!$notice->update($orig)) { + common_log_db_error($notice, 'UPDATE', __FILE__); + return _('Problem saving notice.'); + } + } + + # XXX: do we need to change this for remote users? + + $notice->saveReplies(); + $notice->saveTags(); + $notice->saveGroups(); + + $notice->addToInboxes(); + $notice->query('COMMIT'); + + Event::handle('EndNoticeSave', array($notice)); } - # XXX: do we need to change this for remote users? - - $notice->saveReplies(); - $notice->saveTags(); - $notice->saveGroups(); - - $notice->addToInboxes(); - $notice->query('COMMIT'); - # Clear the cache for subscribed users, so they'll update at next request # XXX: someone clever could prepend instead of clearing the cache