gnu-social/lib/modules/UrlShortenerPlugin.php

156 lines
4.3 KiB
PHP
Raw Normal View History

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: commit d136b390115829c4391b3666bb1967f190a0de35 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 commit 1e1c851ff3cb2da5e0dc3a0b06239a9d9c618488 Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:38:40 2010 -0400 add a method to force shortening URLs commit 4d29ca0b91201f6df42940297ed5b64b070efe49 Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:37:41 2010 -0400 static method for getting best URL shortening service commit a9c6a3bace0af44bcf38d1c790425a7be9c72147 Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:37:11 2010 -0400 allow 0 in numeric entries in othersettings commit 767ff2f7ecfd7e76e8418fc79d45e61898f09382 Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:36:46 2010 -0400 allow 0 or blank string in inputs commit 1e21af42a685f600f4a53f49a194013e78b12f20 Author: Evan Prodromou <evan@status.net> Date: Mon Apr 26 02:01:11 2010 -0400 add more URL-shortening options to othersettings commit 869a6be0f5779aff69018d02f9ac0273946040d9 Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:22:51 2010 -0400 move url shortener superclass to lib from plugin commit 9c0c9863d532942b99184f14e923fc3c050f8177 Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:20:28 2010 -0400 documentation and whitespace on UrlShortenerPlugin commit 7a1dd5798f0fcf2c03d1257a18ddcb9008879de0 Author: Evan Prodromou <evan@status.net> Date: Sat Apr 24 14:05:46 2010 -0400 add defaults for URL shortening commit d259c37ad231ca0010c60e5cfd397bb1732874a4 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.
2010-04-26 07:40:36 +01:00
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Superclass for plugins that do URL shortening
*
* 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 Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @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);
}
/**
* Superclass for plugins that do URL shortening
*
* @category Plugin
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
abstract class UrlShortenerPlugin extends Plugin
{
public $shortenerName;
public $freeService = false;
// Url Shortener plugins should implement some (or all)
// of these methods
/**
* Make an URL shorter.
*
* @param string $url URL to shorten
*
* @return string shortened version of the url, or null on failure
*/
protected abstract function shorten($url);
/**
* Utility to get the data at an URL
*
* @param string $url URL to fetch
*
* @return string response body
*
* @todo rename to code-standard camelCase httpGet()
*/
protected function http_get($url)
{
$request = HTTPClient::start();
$response = $request->get($url);
return $response->getBody();
}
/**
* Utility to post a request and get a response URL
*
* @param string $url URL to fetch
* @param array $data post parameters
*
* @return string response body
*
* @todo rename to code-standard httpPost()
*/
protected function http_post($url, $data)
{
$request = HTTPClient::start();
$response = $request->post($url, null, $data);
return $response->getBody();
}
// Hook handlers
/**
* Called when all plugins have been initialized
*
* @return boolean hook value
*/
function onInitializePlugin()
{
if (!isset($this->shortenerName)) {
throw new Exception("must specify a shortenerName");
}
return true;
}
/**
* Called when a showing the URL shortener drop-down box
*
* Properties of the shortening service currently only
* include whether it's a free service.
*
* @param array &$shorteners array mapping shortener name to properties
*
* @return boolean hook value
*/
function onGetUrlShorteners(&$shorteners)
{
$shorteners[$this->shortenerName] =
array('freeService' => $this->freeService);
return true;
}
/**
* Called to shorten an URL
*
* @param string $url URL to shorten
* @param string $shortenerName Shortening service. Don't handle if it's
* not you!
* @param string &$shortenedUrl URL after shortening; out param.
*
* @return boolean hook value
*/
function onStartShortenUrl($url, $shortenerName, &$shortenedUrl)
{
if ($shortenerName == $this->shortenerName) {
$result = $this->shorten($url);
if (isset($result) && $result != null && $result !== false) {
$shortenedUrl = $result;
common_log(LOG_INFO,
__CLASS__ . ": $this->shortenerName ".
"shortened $url to $shortenedUrl");
return false;
}
}
return true;
}
}