add more URL-shortening options to othersettings

This commit is contained in:
Evan Prodromou 2010-04-26 02:01:11 -04:00
parent 869a6be0f5
commit 1e21af42a6
2 changed files with 97 additions and 2 deletions

View File

@ -98,8 +98,10 @@ class OthersettingsAction extends AccountSettingsAction
$this->hidden('token', common_session_token());
$this->elementStart('ul', 'form_data');
$shorteners = array();
$shorteners = array(_('[none]') => array('freeService' => false));
Event::handle('GetUrlShorteners', array(&$shorteners));
$services = array();
foreach($shorteners as $name=>$value)
{
@ -119,8 +121,22 @@ class OthersettingsAction extends AccountSettingsAction
$this->elementEnd('li');
}
$this->elementStart('li');
$this->input('maxurllength',
_('URL longer than'),
($this->arg('maxurllength')) ?
$this->arg('maxurllength') : User_urlshortener_prefs::maxUrlLength($user),
_('URLs longer than this will be shortened.'));
$this->elementEnd('li');
$this->elementStart('li');
$this->input('maxnoticelength',
_('Text longer than'),
($this->arg('maxnoticelength')) ?
$this->arg('maxnoticelength') : User_urlshortener_prefs::maxNoticeLength($user),
_('URLs in notices longer than this will be shortened.'));
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('viewdesigns', _('View profile designs'),
$user->viewdesigns, _('Show or hide profile designs.'));
- $user->viewdesigns, _('Show or hide profile designs.'));
$this->elementEnd('li');
$this->elementEnd('ul');
$this->submit('save', _('Save'));
@ -156,6 +172,18 @@ class OthersettingsAction extends AccountSettingsAction
$viewdesigns = $this->boolean('viewdesigns');
$maxurllength = $this->trimmed('maxurllength');
if (!Validate::number($maxurllength, array('min' => 0))) {
throw new ClientException(_('Invalid number for max url length.'));
}
$maxnoticelength = $this->trimmed('maxnoticelength');
if (!Validate::number($maxnoticelength, array('min' => 0))) {
throw new ClientException(_('Invalid number for max notice length.'));
}
$user = common_current_user();
assert(!is_null($user)); // should already be checked
@ -175,6 +203,32 @@ class OthersettingsAction extends AccountSettingsAction
return;
}
$prefs = User_urlshortener_prefs::getPrefs($user);
$orig = null;
if (empty($prefs)) {
$prefs = new User_urlshortener_prefs();
$prefs->user_id = $user->id;
$prefs->created = common_sql_now();
} else {
$orig = clone($prefs);
}
$prefs->urlshorteningservice = $urlshorteningservice;
$prefs->maxurllength = $maxurllength;
$prefs->maxnoticelength = $maxnoticelength;
if (!empty($orig)) {
$result = $prefs->update($orig);
} else {
$result = $prefs->insert();
}
if (!$result) {
throw new ServerException(_('Error saving user URL shortening preferences.'));
}
$user->query('COMMIT');
$this->showForm(_('Preferences saved.'), true);

View File

@ -44,4 +44,45 @@ class User_urlshortener_prefs extends Memcached_DataObject
{
return array(false, false, false);
}
static function maxUrlLength($user)
{
$def = common_config('url', 'maxlength');
$prefs = self::getPrefs($user);
if (empty($prefs)) {
return $def;
} else {
return $prefs->maxurllength;
}
}
static function maxNoticeLength($user)
{
$def = common_config('url', 'maxnoticelength');
if ($def == -1) {
$def = Notice::maxContent();
}
$prefs = self::getPrefs($user);
if (empty($prefs)) {
return $def;
} else {
return $prefs->maxnoticelength;
}
}
static function getPrefs($user)
{
if (empty($user)) {
return null;
}
$prefs = User_urlshortener_prefs::staticGet('user_id', $user->id);
return $prefs;
}
}