summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@controlyourself.ca>2009-02-13 10:52:26 -0500
committerEvan Prodromou <evan@controlyourself.ca>2009-02-13 10:52:26 -0500
commit4ad5d55ecf65fb1c9f58211b37f8f111e9ca0c7b (patch)
treeb1ccd94f9114696d07de76f87e0c0627dd0a9f6c
parent47c5d508b36d4351f2bd94e7b36738fdf040b0aa (diff)
Add events for filtering and logging new notices
-rw-r--r--EVENTS.txt8
-rw-r--r--actions/newnotice.php17
-rw-r--r--classes/Notice.php43
3 files changed, 41 insertions, 27 deletions
diff --git a/EVENTS.txt b/EVENTS.txt
index 16ca9ea06..af0bee587 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 5e7691f33..9face9644 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 329988368..6db59c96e 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -154,32 +154,37 @@ 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.');
- }
-
- # Update the URI after the notice is in the database
- if (!$uri) {
- $orig = clone($notice);
- $notice->uri = common_notice_uri($notice);
+ $id = $notice->insert();
- if (!$notice->update($orig)) {
- common_log_db_error($notice, 'UPDATE', __FILE__);
+ if (!$id) {
+ common_log_db_error($notice, 'INSERT', __FILE__);
return _('Problem saving notice.');
}
- }
- # XXX: do we need to change this for remote users?
+ # 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->saveReplies();
+ $notice->saveTags();
+ $notice->saveGroups();
- $notice->addToInboxes();
- $notice->query('COMMIT');
+ $notice->addToInboxes();
+ $notice->query('COMMIT');
+
+ Event::handle('EndNoticeSave', array($notice));
+ }
# Clear the cache for subscribed users, so they'll update at next request
# XXX: someone clever could prepend instead of clearing the cache