trac31 url_auto_shortening by sgmurphy
darcs-hash:20081106205926-099f7-6bcfd7969a159a12b1ba6a9ee254e44a07b94761.gz
This commit is contained in:
parent
1e8d26baec
commit
15c1d4f5e4
|
@ -53,10 +53,15 @@ class NewmessageAction extends Action {
|
||||||
$this->show_form(_('No content!'));
|
$this->show_form(_('No content!'));
|
||||||
return;
|
return;
|
||||||
} else if (mb_strlen($content) > 140) {
|
} else if (mb_strlen($content) > 140) {
|
||||||
common_debug("Content = '$content'", __FILE__);
|
|
||||||
common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__);
|
$content = common_shorten_links($content);
|
||||||
$this->show_form(_('That\'s too long. Max message size is 140 chars.'));
|
|
||||||
return;
|
if (mb_strlen($content) > 140) {
|
||||||
|
common_debug("Content = '$content'", __FILE__);
|
||||||
|
common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__);
|
||||||
|
$this->show_form(_('That\'s too long. Max message size is 140 chars.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$other = User::staticGet('id', $to);
|
$other = User::staticGet('id', $to);
|
||||||
|
|
|
@ -51,10 +51,15 @@ class NewnoticeAction extends Action {
|
||||||
$this->show_form(_('No content!'));
|
$this->show_form(_('No content!'));
|
||||||
return;
|
return;
|
||||||
} else if (mb_strlen($content) > 140) {
|
} else if (mb_strlen($content) > 140) {
|
||||||
common_debug("Content = '$content'", __FILE__);
|
|
||||||
common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__);
|
$content = common_shorten_links($content);
|
||||||
$this->show_form(_('That\'s too long. Max notice size is 140 chars.'));
|
|
||||||
return;
|
if (mb_strlen($content) > 140) {
|
||||||
|
common_debug("Content = '$content'", __FILE__);
|
||||||
|
common_debug("mb_strlen(\$content) = " . mb_strlen($content), __FILE__);
|
||||||
|
$this->show_form(_('That\'s too long. Max notice size is 140 chars.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$inter = new CommandInterpreter();
|
$inter = new CommandInterpreter();
|
||||||
|
|
|
@ -59,8 +59,11 @@ class PostnoticeAction extends Action {
|
||||||
}
|
}
|
||||||
$content = $req->get_parameter('omb_notice_content');
|
$content = $req->get_parameter('omb_notice_content');
|
||||||
if (!$content || strlen($content) > 140) {
|
if (!$content || strlen($content) > 140) {
|
||||||
common_user_error(_('Invalid notice content'), 400);
|
$content = common_shorten_links($content);
|
||||||
return false;
|
if (mb_strlen($content) > 140) {
|
||||||
|
common_user_error(_('Invalid notice content'), 400);
|
||||||
|
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) &&
|
||||||
|
|
|
@ -224,8 +224,8 @@ class ProfilesettingsAction extends SettingsAction {
|
||||||
} else if ($this->nickname_exists($nickname)) {
|
} else if ($this->nickname_exists($nickname)) {
|
||||||
$this->show_form(_('Nickname already in use. Try another one.'));
|
$this->show_form(_('Nickname already in use. Try another one.'));
|
||||||
return;
|
return;
|
||||||
} else if (!is_null($language) && strlen($language) > 50) {
|
} else if (!is_null($language) && strlen($language) > 50) {
|
||||||
$this->show_form(_('Language is too long (max 50 chars).'));
|
$this->show_form(_('Language is too long (max 50 chars).'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = common_current_user();
|
$user = common_current_user();
|
||||||
|
|
|
@ -113,9 +113,12 @@ class Twitapidirect_messagesAction extends TwitterapiAction {
|
||||||
if (!$content) {
|
if (!$content) {
|
||||||
$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) {
|
||||||
$this->client_error(_('That\'s too long. Max message size is 140 chars.'),
|
$status = common_shorten_links($status);
|
||||||
$code = 406, $apidata['content-type']);
|
if (mb_strlen($status) > 140) {
|
||||||
return;
|
$this->client_error(_('That\'s too long. Max message size is 140 chars.'),
|
||||||
|
$code = 406, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$other = $this->get_user($this->trimmed('user'));
|
$other = $this->get_user($this->trimmed('user'));
|
||||||
|
|
|
@ -254,12 +254,18 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||||
|
|
||||||
} else if (mb_strlen($status) > 140) {
|
} else if (mb_strlen($status) > 140) {
|
||||||
|
|
||||||
// XXX: Twitter truncates anything over 140, flags the status
|
$status = common_shorten_links($status);
|
||||||
// as "truncated." Sending this error may screw up some clients
|
|
||||||
// that assume Twitter will truncate for them. Should we just
|
if (mb_strlen($status) > 140) {
|
||||||
// truncate too? -- Zach
|
|
||||||
$this->client_error(_('That\'s too long. Max notice size is 140 chars.'), $code = 406, $apidata['content-type']);
|
// XXX: Twitter truncates anything over 140, flags the status
|
||||||
return;
|
// as "truncated." Sending this error may screw up some clients
|
||||||
|
// that assume Twitter will truncate for them. Should we just
|
||||||
|
// truncate too? -- Zach
|
||||||
|
$this->client_error(_('That\'s too long. Max notice size is 140 chars.'), $code = 406, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for commands
|
// Check for commands
|
||||||
|
|
|
@ -197,9 +197,14 @@ class MessageCommand extends Command {
|
||||||
$channel->error($this->user, _('No content!'));
|
$channel->error($this->user, _('No content!'));
|
||||||
return;
|
return;
|
||||||
} else if ($len > 140) {
|
} else if ($len > 140) {
|
||||||
$channel->error($this->user, sprintf(_('Message too long - maximum is 140 characters, you sent %d'), $len));
|
$content = common_shorten_links($content);
|
||||||
return;
|
if (mb_strlen($content) > 140) {
|
||||||
} else if (!$other) {
|
$channel->error($this->user, sprintf(_('Message too long - maximum is 140 characters, you sent %d'), $len));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$other) {
|
||||||
$channel->error($this->user, _('No such user.'));
|
$channel->error($this->user, _('No such user.'));
|
||||||
return;
|
return;
|
||||||
} else if (!$this->user->mutuallySubscribed($other)) {
|
} else if (!$this->user->mutuallySubscribed($other)) {
|
||||||
|
|
|
@ -55,6 +55,7 @@ class User extends Memcached_DataObject
|
||||||
public $smsemail; // varchar(255)
|
public $smsemail; // varchar(255)
|
||||||
public $uri; // varchar(255) unique_key
|
public $uri; // varchar(255) unique_key
|
||||||
public $autosubscribe; // tinyint(1)
|
public $autosubscribe; // tinyint(1)
|
||||||
|
public $urlshorteningservice; // varchar(50)
|
||||||
public $created; // datetime() not_null
|
public $created; // datetime() not_null
|
||||||
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
|
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
|
||||||
|
|
||||||
|
|
|
@ -295,6 +295,7 @@ smsreplies = 17
|
||||||
smsemail = 2
|
smsemail = 2
|
||||||
uri = 2
|
uri = 2
|
||||||
autosubscribe = 17
|
autosubscribe = 17
|
||||||
|
urlshorteningservice = 2
|
||||||
created = 142
|
created = 142
|
||||||
modified = 384
|
modified = 384
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ create table user (
|
||||||
smsemail varchar(255) comment 'built from sms and carrier',
|
smsemail varchar(255) comment 'built from sms and carrier',
|
||||||
uri varchar(255) unique key comment 'universally unique identifier, usually a tag URI',
|
uri varchar(255) unique key comment 'universally unique identifier, usually a tag URI',
|
||||||
autosubscribe tinyint default 0 comment 'automatically subscribe to users who subscribe to us',
|
autosubscribe tinyint default 0 comment 'automatically subscribe to users who subscribe to us',
|
||||||
|
urlshorteningservice varchar(50) default 'metamark.net' comment 'service to use for auto-shortening URLs',
|
||||||
created datetime not null comment 'date this record was created',
|
created datetime not null comment 'date this record was created',
|
||||||
modified timestamp comment 'date this record was modified',
|
modified timestamp comment 'date this record was modified',
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,10 @@ class SettingsAction extends Action {
|
||||||
_('Updates by instant messenger (IM)')),
|
_('Updates by instant messenger (IM)')),
|
||||||
'twittersettings' =>
|
'twittersettings' =>
|
||||||
array(_('Twitter'),
|
array(_('Twitter'),
|
||||||
_('Twitter integration options')));
|
_('Twitter integration options')),
|
||||||
|
'othersettings' =>
|
||||||
|
array(_('Other'),
|
||||||
|
_('Other options')));
|
||||||
|
|
||||||
$action = $this->trimmed('action');
|
$action = $this->trimmed('action');
|
||||||
common_element_start('ul', array('id' => 'nav_views'));
|
common_element_start('ul', array('id' => 'nav_views'));
|
||||||
|
|
44
lib/util.php
44
lib/util.php
|
@ -747,6 +747,50 @@ function common_render_uri_thingy($matches) {
|
||||||
return '<a href="' . $uri . '" class="extlink">' . $uri . '</a>' . $trailer;
|
return '<a href="' . $uri . '" class="extlink">' . $uri . '</a>' . $trailer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function common_shorten_links($text) {
|
||||||
|
$r = htmlspecialchars($text);
|
||||||
|
$r = preg_replace('@https?://[^)\]>\s]+@e', "common_shorten_link('\\0')", $r);
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function common_shorten_link($long_url) {
|
||||||
|
|
||||||
|
$user = common_current_user();
|
||||||
|
|
||||||
|
$curlh = curl_init();
|
||||||
|
curl_setopt($curlh, CURLOPT_CONNECTTIMEOUT, 20); // # seconds to wait
|
||||||
|
curl_setopt($curlh, CURLOPT_USERAGENT, 'Laconica');
|
||||||
|
curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
|
||||||
|
switch($user->urlshorteningservice) {
|
||||||
|
case 'is.gd':
|
||||||
|
curl_setopt($curlh, CURLOPT_URL, 'http://is.gd/api.php?longurl='.urlencode($long_url));
|
||||||
|
$short_url = curl_exec($curlh);
|
||||||
|
break;
|
||||||
|
case 'snipr.com':
|
||||||
|
curl_setopt($curlh, CURLOPT_URL, 'http://snipr.com/site/snip?r=simple&link='.urlencode($long_url));
|
||||||
|
$short_url = curl_exec($curlh);
|
||||||
|
break;
|
||||||
|
case 'metamark.net':
|
||||||
|
curl_setopt($curlh, CURLOPT_URL, 'http://metamark.net/api/rest/simple?long_url='.urlencode($long_url));
|
||||||
|
$short_url = curl_exec($curlh);
|
||||||
|
break;
|
||||||
|
case 'tinyurl.com':
|
||||||
|
curl_setopt($curlh, CURLOPT_URL, 'http://tinyurl.com/api-create.php?url='.urlencode($long_url));
|
||||||
|
$short_url = curl_exec($curlh);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$short_url = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_close($curlh);
|
||||||
|
|
||||||
|
if ($short_url) {
|
||||||
|
return $short_url;
|
||||||
|
}
|
||||||
|
return $long_url;
|
||||||
|
}
|
||||||
|
|
||||||
function common_xml_safe_str($str) {
|
function common_xml_safe_str($str) {
|
||||||
$xmlStr = htmlentities(iconv('UTF-8', 'UTF-8//IGNORE', $str), ENT_NOQUOTES, 'UTF-8');
|
$xmlStr = htmlentities(iconv('UTF-8', 'UTF-8//IGNORE', $str), ENT_NOQUOTES, 'UTF-8');
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user