Add events for filtering and logging new notices

This commit is contained in:
Evan Prodromou 2009-02-13 10:52:26 -05:00
parent 47c5d508b3
commit 4ad5d55ecf
3 changed files with 43 additions and 29 deletions

View File

@ -30,7 +30,7 @@ EndShowLaconicaStyles: End showing Laconica Style links; good place to add hand
StartShowUAStyles: Showing custom UA Style links StartShowUAStyles: Showing custom UA Style links
- $action: the current action - $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 - $action: the current action
StartShowScripts: Showing JavaScript links StartShowScripts: Showing JavaScript links
@ -76,3 +76,9 @@ StartShowContentBlock: Showing before the content container
EndShowContentBlock: Showing after the content container EndShowContentBlock: Showing after the content container
- $action: the current action - $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)

View File

@ -98,7 +98,12 @@ class NewnoticeAction extends Action
return; return;
} }
$this->saveNewNotice(); try {
$this->saveNewNotice();
} catch (Exception $e) {
$this->showForm($e->getMessage());
return;
}
} else { } else {
$this->showForm(); $this->showForm();
} }
@ -123,15 +128,13 @@ class NewnoticeAction extends Action
$content = $this->trimmed('status_textarea'); $content = $this->trimmed('status_textarea');
if (!$content) { if (!$content) {
$this->showForm(_('No content!')); $this->clientError(_('No content!'));
return;
} else { } else {
$content_shortened = common_shorten_links($content); $content_shortened = common_shorten_links($content);
if (mb_strlen($content_shortened) > 140) { if (mb_strlen($content_shortened) > 140) {
$this->showForm(_('That\'s too long. '. $this->clientError(_('That\'s too long. '.
'Max notice size is 140 chars.')); 'Max notice size is 140 chars.'));
return;
} }
} }
@ -154,7 +157,7 @@ class NewnoticeAction extends Action
($replyto == 'false') ? null : $replyto); ($replyto == 'false') ? null : $replyto);
if (is_string($notice)) { if (is_string($notice)) {
$this->showForm($notice); $this->clientError($notice);
return; return;
} }

View File

@ -154,33 +154,38 @@ class Notice extends Memcached_DataObject
$notice->source = $source; $notice->source = $source;
$notice->uri = $uri; $notice->uri = $uri;
$id = $notice->insert(); if (Event::handle('StartNoticeSave', array(&$notice))) {
if (!$id) { $id = $notice->insert();
common_log_db_error($notice, 'INSERT', __FILE__);
return _('Problem saving notice.');
}
# Update the URI after the notice is in the database if (!$id) {
if (!$uri) { common_log_db_error($notice, 'INSERT', __FILE__);
$orig = clone($notice);
$notice->uri = common_notice_uri($notice);
if (!$notice->update($orig)) {
common_log_db_error($notice, 'UPDATE', __FILE__);
return _('Problem saving notice.'); 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 # Clear the cache for subscribed users, so they'll update at next request
# XXX: someone clever could prepend instead of clearing the cache # XXX: someone clever could prepend instead of clearing the cache