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: commitd136b39011Author: 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 commit1e1c851ff3Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:38:40 2010 -0400 add a method to force shortening URLs commit4d29ca0b91Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:37:41 2010 -0400 static method for getting best URL shortening service commita9c6a3baceAuthor: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:37:11 2010 -0400 allow 0 in numeric entries in othersettings commit767ff2f7ecAuthor: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:36:46 2010 -0400 allow 0 or blank string in inputs commit1e21af42a6Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:01:11 2010 -0400 add more URL-shortening options to othersettings commit869a6be0f5Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:22:51 2010 -0400 move url shortener superclass to lib from plugin commit9c0c9863d5Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:20:28 2010 -0400 documentation and whitespace on UrlShortenerPlugin commit7a1dd5798fAuthor: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:05:46 2010 -0400 add defaults for URL shortening commitd259c37ad2Author: 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.
		
			
				
	
	
		
			237 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * StatusNet, the distributed open-source microblogging tool
 | 
						|
 *
 | 
						|
 * Miscellaneous settings
 | 
						|
 *
 | 
						|
 * PHP version 5
 | 
						|
 *
 | 
						|
 * LICENCE: This program is free software: you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU Affero General Public License as published by
 | 
						|
 * the Free Software Foundation, either version 3 of the License, or
 | 
						|
 * (at your option) any later version.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 * GNU Affero General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Affero General Public License
 | 
						|
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 *
 | 
						|
 * @category  Settings
 | 
						|
 * @package   StatusNet
 | 
						|
 * @author    Robin Millette <millette@status.net>
 | 
						|
 * @author    Evan Prodromou <evan@status.net>
 | 
						|
 * @copyright 2008-2009 StatusNet, Inc.
 | 
						|
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 | 
						|
 * @link      http://status.net/
 | 
						|
 */
 | 
						|
 | 
						|
if (!defined('STATUSNET') && !defined('LACONICA')) {
 | 
						|
    exit(1);
 | 
						|
}
 | 
						|
 | 
						|
require_once INSTALLDIR.'/lib/accountsettingsaction.php';
 | 
						|
 | 
						|
/**
 | 
						|
 * Miscellaneous settings actions
 | 
						|
 *
 | 
						|
 * Currently this just manages URL shortening.
 | 
						|
 *
 | 
						|
 * @category Settings
 | 
						|
 * @package  StatusNet
 | 
						|
 * @author   Robin Millette <millette@status.net>
 | 
						|
 * @author   Zach Copley <zach@status.net>
 | 
						|
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 | 
						|
 * @link     http://status.net/
 | 
						|
 */
 | 
						|
 | 
						|
class OthersettingsAction extends AccountSettingsAction
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Title of the page
 | 
						|
     *
 | 
						|
     * @return string Title of the page
 | 
						|
     */
 | 
						|
 | 
						|
    function title()
 | 
						|
    {
 | 
						|
        return _('Other settings');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Instructions for use
 | 
						|
     *
 | 
						|
     * @return instructions for use
 | 
						|
     */
 | 
						|
 | 
						|
    function getInstructions()
 | 
						|
    {
 | 
						|
        return _('Manage various other options.');
 | 
						|
    }
 | 
						|
 | 
						|
    function showScripts()
 | 
						|
    {
 | 
						|
        parent::showScripts();
 | 
						|
        $this->autofocus('urlshorteningservice');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Content area of the page
 | 
						|
     *
 | 
						|
     * Shows a form for uploading an avatar.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
 | 
						|
    function showContent()
 | 
						|
    {
 | 
						|
        $user = common_current_user();
 | 
						|
 | 
						|
        $this->elementStart('form', array('method' => 'post',
 | 
						|
                                          'id' => 'form_settings_other',
 | 
						|
                                          'class' => 'form_settings',
 | 
						|
                                          'action' =>
 | 
						|
                                          common_local_url('othersettings')));
 | 
						|
        $this->elementStart('fieldset');
 | 
						|
        $this->hidden('token', common_session_token());
 | 
						|
        $this->elementStart('ul', 'form_data');
 | 
						|
 | 
						|
        $shorteners = array(_('[none]') => array('freeService' => false));
 | 
						|
 | 
						|
        Event::handle('GetUrlShorteners', array(&$shorteners));
 | 
						|
 | 
						|
        $services = array();
 | 
						|
        foreach($shorteners as $name=>$value)
 | 
						|
        {
 | 
						|
            $services[$name]=$name;
 | 
						|
            if($value['freeService']){
 | 
						|
                $services[$name].=_(' (free service)');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if($services)
 | 
						|
        {
 | 
						|
            asort($services);
 | 
						|
 | 
						|
            $this->elementStart('li');
 | 
						|
            $this->dropdown('urlshorteningservice', _('Shorten URLs with'),
 | 
						|
                            $services, _('Automatic shortening service to use.'),
 | 
						|
                            false, $user->urlshorteningservice);
 | 
						|
            $this->elementEnd('li');
 | 
						|
        }
 | 
						|
        $this->elementStart('li');
 | 
						|
        $this->input('maxurllength',
 | 
						|
                     _('URL longer than'),
 | 
						|
                     (!is_null($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'),
 | 
						|
                     (!is_null($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.'));
 | 
						|
        $this->elementEnd('li');
 | 
						|
        $this->elementEnd('ul');
 | 
						|
        $this->submit('save', _('Save'));
 | 
						|
        $this->elementEnd('fieldset');
 | 
						|
        $this->elementEnd('form');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Handle a post
 | 
						|
     *
 | 
						|
     * Saves the changes to url-shortening prefs and shows a success or failure
 | 
						|
     * message.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
 | 
						|
    function handlePost()
 | 
						|
    {
 | 
						|
        // CSRF protection
 | 
						|
        $token = $this->trimmed('token');
 | 
						|
        if (!$token || $token != common_session_token()) {
 | 
						|
            $this->showForm(_('There was a problem with your session token. '.
 | 
						|
                              'Try again, please.'));
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        $urlshorteningservice = $this->trimmed('urlshorteningservice');
 | 
						|
 | 
						|
        if (!is_null($urlshorteningservice) && strlen($urlshorteningservice) > 50) {
 | 
						|
            $this->showForm(_('URL shortening service is too long (max 50 chars).'));
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        $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
 | 
						|
 | 
						|
        $user->query('BEGIN');
 | 
						|
 | 
						|
        $original = clone($user);
 | 
						|
 | 
						|
        $user->urlshorteningservice = $urlshorteningservice;
 | 
						|
        $user->viewdesigns          = $viewdesigns;
 | 
						|
 | 
						|
        $result = $user->update($original);
 | 
						|
 | 
						|
        if ($result === false) {
 | 
						|
            common_log_db_error($user, 'UPDATE', __FILE__);
 | 
						|
            $this->serverError(_('Couldn\'t update user.'));
 | 
						|
            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);
 | 
						|
    }
 | 
						|
}
 |