use site and user settings to determine when to shorten URLs

This commit is contained in:
Evan Prodromou 2010-04-26 02:39:00 -04:00
parent 1e1c851ff3
commit d136b39011

View File

@ -828,9 +828,21 @@ function common_linkify($url) {
function common_shorten_links($text) function common_shorten_links($text)
{ {
$maxLength = Notice::maxContent(); common_debug("common_shorten_links() called");
if ($maxLength == 0 || mb_strlen($text) <= $maxLength) return $text;
return common_replace_urls_callback($text, array('File_redirection', 'makeShort')); $user = common_current_user();
$maxLength = User_urlshortener_prefs::maxNoticeLength($user);
common_debug("maxLength = $maxLength");
if (mb_strlen($text) > $maxLength) {
common_debug("Forcing shortening");
return common_replace_urls_callback($text, array('File_redirection', 'forceShort'));
} else {
common_debug("Not forcing shortening");
return common_replace_urls_callback($text, array('File_redirection', 'makeShort'));
}
} }
function common_xml_safe_str($str) function common_xml_safe_str($str)
@ -1392,7 +1404,7 @@ function common_valid_tag($tag)
* Determine if given domain or address literal is valid * Determine if given domain or address literal is valid
* eg for use in JIDs and URLs. Does not check if the domain * eg for use in JIDs and URLs. Does not check if the domain
* exists! * exists!
* *
* @param string $domain * @param string $domain
* @return boolean valid or not * @return boolean valid or not
*/ */
@ -1734,30 +1746,42 @@ function common_database_tablename($tablename)
/** /**
* Shorten a URL with the current user's configured shortening service, * Shorten a URL with the current user's configured shortening service,
* or ur1.ca if configured, or not at all if no shortening is set up. * or ur1.ca if configured, or not at all if no shortening is set up.
* Length is not considered.
* *
* @param string $long_url * @param string $long_url original URL
* @param boolean $force Force shortening (used when notice is too long)
*
* @return string may return the original URL if shortening failed * @return string may return the original URL if shortening failed
* *
* @fixme provide a way to specify a particular shortener * @fixme provide a way to specify a particular shortener
* @fixme provide a way to specify to use a given user's shortening preferences * @fixme provide a way to specify to use a given user's shortening preferences
*/ */
function common_shorten_url($long_url)
function common_shorten_url($long_url, $force = false)
{ {
common_debug("Shortening URL '$long_url' (force = $force)");
$long_url = trim($long_url); $long_url = trim($long_url);
$user = common_current_user(); $user = common_current_user();
if (empty($user)) {
// common current user does not find a user when called from the XMPP daemon $maxUrlLength = User_urlshortener_prefs::maxUrlLength($user);
// therefore we'll set one here fix, so that XMPP given URLs may be shortened common_debug("maxUrlLength = $maxUrlLength");
$shortenerName = 'ur1.ca';
} else { // $force forces shortening even if it's not strictly needed
$shortenerName = $user->urlshorteningservice;
if (mb_strlen($long_url) < $maxUrlLength && !$force) {
common_debug("Skipped shortening URL.");
return $long_url;
} }
if(Event::handle('StartShortenUrl', array($long_url,$shortenerName,&$shortenedUrl))){ $shortenerName = User_urlshortener_prefs::urlShorteningService($user);
common_debug("Shortener name = '$shortenerName'");
if (Event::handle('StartShortenUrl', array($long_url, $shortenerName, &$shortenedUrl))) {
//URL wasn't shortened, so return the long url //URL wasn't shortened, so return the long url
return $long_url; return $long_url;
}else{ } else {
//URL was shortened, so return the result //URL was shortened, so return the result
return trim($shortenedUrl); return trim($shortenedUrl);
} }