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) {
$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;
}

View File

@ -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());

View File

@ -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) {
$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)) {

View File

@ -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;

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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);

View File

@ -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;