diff options
author | millette <millette@controlyourself.ca> | 2008-11-28 16:01:14 -0500 |
---|---|---|
committer | millette <millette@controlyourself.ca> | 2008-11-28 16:01:14 -0500 |
commit | ce0883330306ccb9bd50aef4d7963351284bd698 (patch) | |
tree | 48797bd1dac83f1dd08e39a77f11540f53bed249 | |
parent | 4fca9960cd5388ff2a12472b956e2504a5af7549 (diff) |
shorten urls for posts > 140 chars only, from anywhere. Only show long urls in title attributes for links we shortened ourselves.
darcs-hash:20081128210114-099f7-4e4cde0a983c2ac6d41efb59b46cb7dbf45dc7a6.gz
-rw-r--r-- | actions/newmessage.php | 9 | ||||
-rw-r--r-- | actions/newnotice.php | 10 | ||||
-rw-r--r-- | actions/postnotice.php | 12 | ||||
-rw-r--r-- | actions/twitapidirect_messages.php | 4 | ||||
-rw-r--r-- | actions/twitapistatuses.php | 6 | ||||
-rw-r--r-- | classes/Message.php | 2 | ||||
-rw-r--r-- | classes/Notice.php | 2 | ||||
-rw-r--r-- | lib/util.php | 6 | ||||
-rwxr-xr-x | scripts/maildaemon.php | 5 | ||||
-rwxr-xr-x | scripts/xmppdaemon.php | 10 |
10 files changed, 37 insertions, 29 deletions
diff --git a/actions/newmessage.php b/actions/newmessage.php index d4e289465..67695210e 100644 --- a/actions/newmessage.php +++ b/actions/newmessage.php @@ -51,13 +51,12 @@ class NewmessageAction extends Action { if (!$content) { $this->show_form(_('No content!')); return; -// } else if (mb_strlen($content) > 140) { } else { - $content = common_shorten_links($content); + $content_shortened = common_shorten_links($content); - if (mb_strlen($content) > 140) { - common_debug("Content = '$content'", __FILE__); - common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__); + if (mb_strlen($content_shortened) > 140) { + common_debug("Content = '$content_shortened'", __FILE__); + common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__); $this->show_form(_('That\'s too long. Max message size is 140 chars.')); return; } diff --git a/actions/newnotice.php b/actions/newnotice.php index a79d0a1a2..932099c60 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -51,11 +51,11 @@ class NewnoticeAction extends Action { $this->show_form(_('No content!')); return; } else { - $content = common_shorten_links($content); + $content_shortened = common_shorten_links($content); - if (mb_strlen($content) > 140) { - common_debug("Content = '$content'", __FILE__); - common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__); + if (mb_strlen($content_shortened) > 140) { + common_debug("Content = '$content_shortened'", __FILE__); + common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__); $this->show_form(_('That\'s too long. Max notice size is 140 chars.')); return; } @@ -63,7 +63,7 @@ class NewnoticeAction extends Action { $inter = new CommandInterpreter(); - $cmd = $inter->handle_command($user, $content); + $cmd = $inter->handle_command($user, $content_shortened); if ($cmd) { $cmd->execute(new WebChannel()); diff --git a/actions/postnotice.php b/actions/postnotice.php index 243aa3163..243081f12 100644 --- a/actions/postnotice.php +++ b/actions/postnotice.php @@ -58,13 +58,11 @@ class PostnoticeAction extends Action { return false; } $content = $req->get_parameter('omb_notice_content'); -// if (!$content || strlen($content) > 140) { - $content = common_shorten_links($content); - if (mb_strlen($content) > 140) { - common_user_error(_('Invalid notice content'), 400); - return false; - } -// } + $content_shortened = common_shorten_links($content); + if (mb_strlen($content_shortened) > 140) { + common_user_error(_('Invalid notice content'), 400); + return false; + } $notice_uri = $req->get_parameter('omb_notice'); if (!Validate::uri($notice_uri) && !common_valid_tag($notice_uri)) { diff --git a/actions/twitapidirect_messages.php b/actions/twitapidirect_messages.php index a04ae5fa7..a14a9e567 100644 --- a/actions/twitapidirect_messages.php +++ b/actions/twitapidirect_messages.php @@ -115,8 +115,8 @@ class Twitapidirect_messagesAction extends TwitterapiAction { $this->client_error(_('No message text!'), $code = 406, $apidata['content-type']); // } else if (mb_strlen($status) > 140) { } else { - $status = common_shorten_links($status); - if (mb_strlen($status) > 140) { + $content_shortened = common_shorten_links($content); + if (mb_strlen($content_shortened) > 140) { $this->client_error(_('That\'s too long. Max message size is 140 chars.'), $code = 406, $apidata['content-type']); return; diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php index 6d6d5266f..947d21032 100644 --- a/actions/twitapistatuses.php +++ b/actions/twitapistatuses.php @@ -255,9 +255,9 @@ class TwitapistatusesAction extends TwitterapiAction { // } else if (mb_strlen($status) > 140) { } else { - $status = common_shorten_links($status); + $status_shortened = common_shorten_links($status); - if (mb_strlen($status) > 140) { + if (mb_strlen($status_shortened) > 140) { // XXX: Twitter truncates anything over 140, flags the status // as "truncated." Sending this error may screw up some clients @@ -271,7 +271,7 @@ class TwitapistatusesAction extends TwitterapiAction { // Check for commands $inter = new CommandInterpreter(); - $cmd = $inter->handle_command($user, $status); + $cmd = $inter->handle_command($user, $status_shortened); if ($cmd) { diff --git a/classes/Message.php b/classes/Message.php index 8674f7f80..ef4bd0316 100644 --- a/classes/Message.php +++ b/classes/Message.php @@ -41,7 +41,7 @@ class Message extends Memcached_DataObject $msg->from_profile = $from; $msg->to_profile = $to; - $msg->content = $content; + $msg->content = common_shorten_links($content); $msg->rendered = common_render_text($content); $msg->created = common_sql_now(); $msg->source = $source; diff --git a/classes/Notice.php b/classes/Notice.php index ceec7a2fa..83862ae95 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -127,7 +127,7 @@ class Notice extends Memcached_DataObject $notice->reply_to = $reply_to; $notice->created = common_sql_now(); - $notice->content = $content; + $notice->content = common_shorten_links($content); $notice->rendered = common_render_content($notice->content, $notice); $notice->source = $source; $notice->uri = $uri; diff --git a/lib/util.php b/lib/util.php index b14d121e6..c3d11b074 100644 --- a/lib/util.php +++ b/lib/util.php @@ -837,10 +837,10 @@ function common_longurl2($uri) { function common_shorten_links($text) { if (mb_strlen($text) <= 140) return $text; + static $cache = array(); + if (isset($cache[$text])) return $cache[$text]; // \s = not a horizontal whitespace character (since PHP 5.2.4) - // RYM this should prevent * preceded URLs from being processed but it its a char -// $r = preg_replace('@[^*](https?://[^)\]>\s]+)@e', "common_shorten_link('\\1')", $r); - return preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text); + return $cache[$text] = preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text); } function common_shorten_link($long_url) { diff --git a/scripts/maildaemon.php b/scripts/maildaemon.php index 64f913bf9..8b809f646 100755 --- a/scripts/maildaemon.php +++ b/scripts/maildaemon.php @@ -120,6 +120,9 @@ class MailerDaemon { } function add_notice($user, $msg) { + // should test + // $msg_shortened = common_shorten_links($msg); + // if (mb_strlen($msg_shortened) > 140) ERROR and STOP $notice = Notice::saveNew($user->id, $msg, 'mail'); if (is_string($notice)) { $this->log(LOG_ERR, $notice); @@ -209,4 +212,4 @@ class MailerDaemon { } $md = new MailerDaemon(); -$md->handle_message('php://stdin');
\ No newline at end of file +$md->handle_message('php://stdin'); diff --git a/scripts/xmppdaemon.php b/scripts/xmppdaemon.php index 90506a0f4..e55b9e3e9 100755 --- a/scripts/xmppdaemon.php +++ b/scripts/xmppdaemon.php @@ -236,7 +236,15 @@ class XMPPDaemon extends Daemon { } function add_notice(&$user, &$pl) { - $notice = Notice::saveNew($user->id, trim(mb_substr($pl['body'], 0, 140)), 'xmpp'); + $content_shortened = common_shorten_link($pl['body']); + if (mb_strlen($content_shortened) > 140) { + $content = trim(mb_substr($pl['body'], 0, 140)); + $content_shortened = common_shorten_link($content); + } + else { + $content = $pl['body']; + } + $notice = Notice::saveNew($user->id, $content, 'xmpp'); if (is_string($notice)) { $this->log(LOG_ERR, $notice); return; |