forked from GNUsocial/gnu-social
106 lines
3.3 KiB
PHP
106 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* Phergie
|
|
*
|
|
* PHP version 5
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This source file is subject to the new BSD license that is bundled
|
|
* with this package in the file LICENSE.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://phergie.org/license
|
|
*
|
|
* @category Phergie
|
|
* @package Phergie_Plugin_Php
|
|
* @author Phergie Development Team <team@phergie.org>
|
|
* @copyright 2008-2010 Phergie Development Team (http://phergie.org)
|
|
* @license http://phergie.org/license New BSD License
|
|
* @link http://pear.phergie.org/package/Phergie_Plugin_Php
|
|
*/
|
|
|
|
/**
|
|
* URL shortener abstract class
|
|
*
|
|
* @category Phergie
|
|
* @package Phergie_Plugin_Url
|
|
* @author Phergie Development Team <team@phergie.org>
|
|
* @license http://phergie.org/license New BSD License
|
|
* @link http://pear.phergie.org/package/Phergie_Plugin_Url
|
|
* @uses Phergie_Plugin_Http pear.phergie.org
|
|
*/
|
|
abstract class Phergie_Plugin_Url_Shorten_Abstract
|
|
{
|
|
protected $http;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param Phergie_Plugin_Http $http instance of the http plugin
|
|
*/
|
|
public function __construct(Phergie_Plugin_Http $http)
|
|
{
|
|
$this->http = $http;
|
|
}
|
|
|
|
/**
|
|
* Returns an array of request parameters given a url to shorten. The
|
|
* following keys are valid request parameters:
|
|
*
|
|
* * 'uri': the URI for the request (required)
|
|
* * 'query': an array of key-value pairs sent in a GET request
|
|
* * 'post': an array of key-value pairs sent in a POST request
|
|
* * 'callback': to be called after the request is finished. Should accept
|
|
* a Phergie_Plugin_Http_Response object and return either the shortened
|
|
* url or false if an error has occured.
|
|
*
|
|
* If the 'post' key is present a POST request shall be made; otherwise
|
|
* a GET request will be made. The 'post' key can be an empty array and
|
|
* a post request will still be made.
|
|
*
|
|
* If no callback is provided the contents of the response will be returned.
|
|
*
|
|
* @param string $url the url to shorten
|
|
*
|
|
* @return array the request parameters
|
|
*/
|
|
protected abstract function getRequestParams($url);
|
|
|
|
/**
|
|
* Shortens a given url.
|
|
*
|
|
* @param string $url the url to shorten
|
|
*
|
|
* @return string the shortened url or false on a failure
|
|
*/
|
|
public function shorten($url)
|
|
{
|
|
$defaults = array('get' => array(), 'post' => array(), 'callback' => null);
|
|
$options = array('timeout' => 2);
|
|
$params = $this->getRequestParams($url) + $defaults;
|
|
|
|
// Should some kind of notice be thrown? Maybe just if getRequestParams does not return an array?
|
|
if (!is_array($params) || empty($params['uri'])) {
|
|
return $url;
|
|
}
|
|
|
|
if (!empty($params['post'])) {
|
|
$response = $this->http->post($params['uri'], $params['get'], $params['post'], $options);
|
|
} else {
|
|
$response = $this->http->get($params['uri'], $params['get'], $options);
|
|
}
|
|
|
|
if (is_callable($params['callback'])) {
|
|
return call_user_func($params['callback'], $response);
|
|
}
|
|
|
|
$code = $response->getCode();
|
|
$content = trim($response->getContent);
|
|
if ($code < 200 || $code >= 300 || empty($content)) {
|
|
return false;
|
|
}
|
|
|
|
return $response->getContent();
|
|
}
|
|
}
|