forked from GNUsocial/gnu-social
Give users more control over URL shortening
Users and administrators can set how long an URL can be before it's shortened, and how long a notice can be before all its URLs are shortened. They can also turn off shortening altogether. Squashed commit of the following: commitd136b39011
Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:39:00 2010 -0400 use site and user settings to determine when to shorten URLs commit1e1c851ff3
Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:38:40 2010 -0400 add a method to force shortening URLs commit4d29ca0b91
Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:37:41 2010 -0400 static method for getting best URL shortening service commita9c6a3bace
Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:37:11 2010 -0400 allow 0 in numeric entries in othersettings commit767ff2f7ec
Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:36:46 2010 -0400 allow 0 or blank string in inputs commit1e21af42a6
Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:01:11 2010 -0400 add more URL-shortening options to othersettings commit869a6be0f5
Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:22:51 2010 -0400 move url shortener superclass to lib from plugin commit9c0c9863d5
Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:20:28 2010 -0400 documentation and whitespace on UrlShortenerPlugin commit7a1dd5798f
Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:05:46 2010 -0400 add defaults for URL shortening commitd259c37ad2
Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 13:40:10 2010 -0400 Add User_urlshortener_prefs Add a table for URL shortener prefs, a corresponding class, and the correct mumbo-jumbo in statusnet.ini to make everything work.
This commit is contained in:
54
lib/util.php
54
lib/util.php
@@ -828,9 +828,21 @@ function common_linkify($url) {
|
||||
|
||||
function common_shorten_links($text)
|
||||
{
|
||||
$maxLength = Notice::maxContent();
|
||||
if ($maxLength == 0 || mb_strlen($text) <= $maxLength) return $text;
|
||||
return common_replace_urls_callback($text, array('File_redirection', 'makeShort'));
|
||||
common_debug("common_shorten_links() called");
|
||||
|
||||
$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)
|
||||
@@ -1392,7 +1404,7 @@ function common_valid_tag($tag)
|
||||
* Determine if given domain or address literal is valid
|
||||
* eg for use in JIDs and URLs. Does not check if the domain
|
||||
* exists!
|
||||
*
|
||||
*
|
||||
* @param string $domain
|
||||
* @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,
|
||||
* 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
|
||||
*
|
||||
* @fixme provide a way to specify a particular shortener
|
||||
* @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);
|
||||
|
||||
$user = common_current_user();
|
||||
if (empty($user)) {
|
||||
// common current user does not find a user when called from the XMPP daemon
|
||||
// therefore we'll set one here fix, so that XMPP given URLs may be shortened
|
||||
$shortenerName = 'ur1.ca';
|
||||
} else {
|
||||
$shortenerName = $user->urlshorteningservice;
|
||||
|
||||
$maxUrlLength = User_urlshortener_prefs::maxUrlLength($user);
|
||||
common_debug("maxUrlLength = $maxUrlLength");
|
||||
|
||||
// $force forces shortening even if it's not strictly needed
|
||||
|
||||
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
|
||||
return $long_url;
|
||||
}else{
|
||||
} else {
|
||||
//URL was shortened, so return the result
|
||||
return trim($shortenedUrl);
|
||||
}
|
||||
|
Reference in New Issue
Block a user