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
This commit is contained in:
millette 2008-11-28 16:01:14 -05:00
parent 4fca9960cd
commit ce08833303
10 changed files with 37 additions and 29 deletions

View File

@ -51,13 +51,12 @@ class NewmessageAction extends Action {
if (!$content) { if (!$content) {
$this->show_form(_('No content!')); $this->show_form(_('No content!'));
return; return;
// } else if (mb_strlen($content) > 140) {
} else { } else {
$content = common_shorten_links($content); $content_shortened = common_shorten_links($content);
if (mb_strlen($content) > 140) { if (mb_strlen($content_shortened) > 140) {
common_debug("Content = '$content'", __FILE__); common_debug("Content = '$content_shortened'", __FILE__);
common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__); common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__);
$this->show_form(_('That\'s too long. Max message size is 140 chars.')); $this->show_form(_('That\'s too long. Max message size is 140 chars.'));
return; return;
} }

View File

@ -51,11 +51,11 @@ class NewnoticeAction extends Action {
$this->show_form(_('No content!')); $this->show_form(_('No content!'));
return; return;
} else { } else {
$content = common_shorten_links($content); $content_shortened = common_shorten_links($content);
if (mb_strlen($content) > 140) { if (mb_strlen($content_shortened) > 140) {
common_debug("Content = '$content'", __FILE__); common_debug("Content = '$content_shortened'", __FILE__);
common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__); common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__);
$this->show_form(_('That\'s too long. Max notice size is 140 chars.')); $this->show_form(_('That\'s too long. Max notice size is 140 chars.'));
return; return;
} }
@ -63,7 +63,7 @@ class NewnoticeAction extends Action {
$inter = new CommandInterpreter(); $inter = new CommandInterpreter();
$cmd = $inter->handle_command($user, $content); $cmd = $inter->handle_command($user, $content_shortened);
if ($cmd) { if ($cmd) {
$cmd->execute(new WebChannel()); $cmd->execute(new WebChannel());

View File

@ -58,13 +58,11 @@ class PostnoticeAction extends Action {
return false; return false;
} }
$content = $req->get_parameter('omb_notice_content'); $content = $req->get_parameter('omb_notice_content');
// if (!$content || strlen($content) > 140) { $content_shortened = common_shorten_links($content);
$content = common_shorten_links($content); if (mb_strlen($content_shortened) > 140) {
if (mb_strlen($content) > 140) { common_user_error(_('Invalid notice content'), 400);
common_user_error(_('Invalid notice content'), 400); return false;
return false; }
}
// }
$notice_uri = $req->get_parameter('omb_notice'); $notice_uri = $req->get_parameter('omb_notice');
if (!Validate::uri($notice_uri) && if (!Validate::uri($notice_uri) &&
!common_valid_tag($notice_uri)) { !common_valid_tag($notice_uri)) {

View File

@ -115,8 +115,8 @@ class Twitapidirect_messagesAction extends TwitterapiAction {
$this->client_error(_('No message text!'), $code = 406, $apidata['content-type']); $this->client_error(_('No message text!'), $code = 406, $apidata['content-type']);
// } else if (mb_strlen($status) > 140) { // } else if (mb_strlen($status) > 140) {
} else { } else {
$status = common_shorten_links($status); $content_shortened = common_shorten_links($content);
if (mb_strlen($status) > 140) { if (mb_strlen($content_shortened) > 140) {
$this->client_error(_('That\'s too long. Max message size is 140 chars.'), $this->client_error(_('That\'s too long. Max message size is 140 chars.'),
$code = 406, $apidata['content-type']); $code = 406, $apidata['content-type']);
return; return;

View File

@ -255,9 +255,9 @@ class TwitapistatusesAction extends TwitterapiAction {
// } else if (mb_strlen($status) > 140) { // } else if (mb_strlen($status) > 140) {
} else { } 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 // XXX: Twitter truncates anything over 140, flags the status
// as "truncated." Sending this error may screw up some clients // as "truncated." Sending this error may screw up some clients
@ -271,7 +271,7 @@ class TwitapistatusesAction extends TwitterapiAction {
// Check for commands // Check for commands
$inter = new CommandInterpreter(); $inter = new CommandInterpreter();
$cmd = $inter->handle_command($user, $status); $cmd = $inter->handle_command($user, $status_shortened);
if ($cmd) { if ($cmd) {

View File

@ -41,7 +41,7 @@ class Message extends Memcached_DataObject
$msg->from_profile = $from; $msg->from_profile = $from;
$msg->to_profile = $to; $msg->to_profile = $to;
$msg->content = $content; $msg->content = common_shorten_links($content);
$msg->rendered = common_render_text($content); $msg->rendered = common_render_text($content);
$msg->created = common_sql_now(); $msg->created = common_sql_now();
$msg->source = $source; $msg->source = $source;

View File

@ -127,7 +127,7 @@ class Notice extends Memcached_DataObject
$notice->reply_to = $reply_to; $notice->reply_to = $reply_to;
$notice->created = common_sql_now(); $notice->created = common_sql_now();
$notice->content = $content; $notice->content = common_shorten_links($content);
$notice->rendered = common_render_content($notice->content, $notice); $notice->rendered = common_render_content($notice->content, $notice);
$notice->source = $source; $notice->source = $source;
$notice->uri = $uri; $notice->uri = $uri;

View File

@ -837,10 +837,10 @@ function common_longurl2($uri) {
function common_shorten_links($text) { function common_shorten_links($text) {
if (mb_strlen($text) <= 140) return $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) // \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 return $cache[$text] = preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text);
// $r = preg_replace('@[^*](https?://[^)\]>\s]+)@e', "common_shorten_link('\\1')", $r);
return preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $text);
} }
function common_shorten_link($long_url) { function common_shorten_link($long_url) {

View File

@ -120,6 +120,9 @@ class MailerDaemon {
} }
function add_notice($user, $msg) { 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'); $notice = Notice::saveNew($user->id, $msg, 'mail');
if (is_string($notice)) { if (is_string($notice)) {
$this->log(LOG_ERR, $notice); $this->log(LOG_ERR, $notice);

View File

@ -236,7 +236,15 @@ class XMPPDaemon extends Daemon {
} }
function add_notice(&$user, &$pl) { 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)) { if (is_string($notice)) {
$this->log(LOG_ERR, $notice); $this->log(LOG_ERR, $notice);
return; return;