Fix for tickets #2917, #2262: user URL shortening options not being applied in non-web channels

common_shorten_links() can only access the web session's logged-in user, so never properly took user options into effect for posting via XMPP, API, mail, etc.

Adds an optional $user parameter on common_shorten_links(), and a $user->shortenLinks() as a clearer interface for that.
Tweaked some lower-level functions so $user gets passed down -- making the $notice_id param previously there for saving URLs at notice save time generalized a little.

Note also ticket #2919: there's a lot of duplicate code calling the shortening, checking the length, and reporting near-identical error messages. These should be consolidated to aid in code and translation maintenance.
This commit is contained in:
Brion Vibber
2010-12-02 10:56:44 -08:00
parent c4f67f7647
commit aa96c3c1d9
15 changed files with 98 additions and 34 deletions

View File

@@ -187,13 +187,14 @@ class File_redirection extends Memcached_DataObject
* may be saved.
*
* @param string $long_url
* @param User $user whose shortening options to use; defaults to the current web session user
* @return string
*/
function makeShort($long_url) {
function makeShort($long_url, $user=null) {
$canon = File_redirection::_canonUrl($long_url);
$short_url = File_redirection::_userMakeShort($canon);
$short_url = File_redirection::_userMakeShort($canon, $user);
// Did we get one? Is it shorter?
if (!empty($short_url) && mb_strlen($short_url) < mb_strlen($long_url)) {
@@ -203,8 +204,8 @@ class File_redirection extends Memcached_DataObject
}
}
function _userMakeShort($long_url) {
$short_url = common_shorten_url($long_url);
function _userMakeShort($long_url, User $user=null) {
$short_url = common_shorten_url($long_url, $user);
if (!empty($short_url) && $short_url != $long_url) {
$short_url = (string)$short_url;
// store it