diff --git a/actions/urlsettings.php b/actions/urlsettings.php index 02a895955d..837d4df1d0 100644 --- a/actions/urlsettings.php +++ b/actions/urlsettings.php @@ -145,7 +145,7 @@ class UrlsettingsAction extends SettingsAction (!is_null($this->arg('maxnoticelength'))) ? $this->arg('maxnoticelength') : User_urlshortener_prefs::maxNoticeLength($user), // TRANS: Field title in URL settings in profile. - _('URLs in notices longer than this will be shortened, 0 means always shorten.')); + _('URLs in notices longer than this will always be shortened, -1 means shorten only if notice text exceeds maximum length.')); $this->elementEnd('li'); $this->elementEnd('ul'); // TRANS: Button text for saving "Other settings" in profile. @@ -190,7 +190,7 @@ class UrlsettingsAction extends SettingsAction $maxnoticelength = $this->trimmed('maxnoticelength'); - if (!Validate::number($maxnoticelength, array('min' => 0))) { + if (!Validate::number($maxnoticelength, array('min' => -1))) { // TRANS: Client exception thrown when the maximum notice length settings value is invalid in profile URL settings. throw new ClientException(_('Invalid number for maximum notice length.')); } diff --git a/classes/User_urlshortener_prefs.php b/classes/User_urlshortener_prefs.php index 9cb5a4cb0e..146c8b8087 100755 --- a/classes/User_urlshortener_prefs.php +++ b/classes/User_urlshortener_prefs.php @@ -44,7 +44,7 @@ class User_urlshortener_prefs extends Managed_DataObject 'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user'), 'urlshorteningservice' => array('type' => 'varchar', 'length' => 50, 'default' => 'internal', 'description' => 'service to use for auto-shortening URLs'), 'maxurllength' => array('type' => 'int', 'not null' => true, 'description' => 'urls greater than this length will be shortened, 0 = always, null = never'), - 'maxnoticelength' => array('type' => 'int', 'not null' => true, 'description' => 'notices with content greater than this value will have all urls shortened, 0 = always, null = never'), + 'maxnoticelength' => array('type' => 'int', 'not null' => true, 'description' => 'notices with content greater than this value will have all urls shortened, 0 = always, -1 = only if notice text is longer than max allowed'), 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), @@ -74,7 +74,12 @@ class User_urlshortener_prefs extends Managed_DataObject $def = common_config('url', 'maxnoticelength'); if ($def == -1) { - $def = Notice::maxContent(); + /* + * maxContent==0 means infinite length, + * but maxNoticeLength==0 means "always shorten" + * so if maxContent==0 we must set this to -1 + */ + $def = Notice::maxContent() ?: -1; } $prefs = self::getPrefs($user); diff --git a/lib/util.php b/lib/util.php index 52de9ccef9..2e9ba29ff3 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1046,7 +1046,7 @@ function common_shorten_links($text, $always = false, User $user=null) $maxLength = User_urlshortener_prefs::maxNoticeLength($user); - if ($always || mb_strlen($text) > $maxLength) { + if ($always || ($maxLength != -1 && mb_strlen($text) > $maxLength)) { return common_replace_urls_callback($text, array('File_redirection', 'forceShort'), $user); } else { return common_replace_urls_callback($text, array('File_redirection', 'makeShort'), $user);