[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/zend/Zend/Service/ -> Akismet.php (source)

   1  <?php
   2  /**
   3   * Zend Framework
   4   *
   5   * LICENSE
   6   *
   7   * This source file is subject to the new BSD license that is bundled
   8   * with this package in the file LICENSE.txt.
   9   * It is also available through the world-wide-web at this URL:
  10   * http://framework.zend.com/license/new-bsd
  11   * If you did not receive a copy of the license and are unable to
  12   * obtain it through the world-wide-web, please send an email
  13   * to [email protected] so we can send you a copy immediately.
  14   *
  15   * @category   Zend
  16   * @package    Zend_Service
  17   * @subpackage Akismet
  18   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  19   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  20   * @version    $Id$
  21   */
  22  
  23  
  24  /**
  25   * @see Zend_Version
  26   */
  27  require_once 'Zend/Version.php';
  28  
  29  /**
  30   * @see Zend_Service_Abstract
  31   */
  32  require_once 'Zend/Service/Abstract.php';
  33  
  34  
  35  /**
  36   * Akismet REST service implementation
  37   *
  38   * @uses       Zend_Service_Abstract
  39   * @category   Zend
  40   * @package    Zend_Service
  41   * @subpackage Akismet
  42   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  43   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  44   */
  45  class Zend_Service_Akismet extends Zend_Service_Abstract
  46  {
  47      /**
  48       * Akismet API key
  49       * @var string
  50       */
  51      protected $_apiKey;
  52  
  53      /**
  54       * Blog URL
  55       * @var string
  56       */
  57      protected $_blogUrl;
  58  
  59      /**
  60       * Charset used for encoding
  61       * @var string
  62       */
  63      protected $_charset = 'UTF-8';
  64  
  65      /**
  66       * TCP/IP port to use in requests
  67       * @var int
  68       */
  69      protected $_port = 80;
  70  
  71      /**
  72       * User Agent string to send in requests
  73       * @var string
  74       */
  75      protected $_userAgent;
  76  
  77      /**
  78       * Constructor
  79       *
  80       * @param string $apiKey Akismet API key
  81       * @param string $blog Blog URL
  82       * @return void
  83       */
  84      public function __construct($apiKey, $blog)
  85      {
  86          $this->setBlogUrl($blog)
  87               ->setApiKey($apiKey)
  88               ->setUserAgent('Zend Framework/' . Zend_Version::VERSION . ' | Akismet/1.11');
  89      }
  90  
  91      /**
  92       * Retrieve blog URL
  93       *
  94       * @return string
  95       */
  96      public function getBlogUrl()
  97      {
  98          return $this->_blogUrl;
  99      }
 100  
 101      /**
 102       * Set blog URL
 103       *
 104       * @param string $blogUrl
 105       * @return Zend_Service_Akismet
 106       * @throws Zend_Service_Exception if invalid URL provided
 107       */
 108      public function setBlogUrl($blogUrl)
 109      {
 110          require_once 'Zend/Uri.php';
 111          if (!Zend_Uri::check($blogUrl)) {
 112              require_once 'Zend/Service/Exception.php';
 113              throw new Zend_Service_Exception('Invalid url provided for blog');
 114          }
 115  
 116          $this->_blogUrl = $blogUrl;
 117          return $this;
 118      }
 119  
 120      /**
 121       * Retrieve API key
 122       *
 123       * @return string
 124       */
 125      public function getApiKey()
 126      {
 127          return $this->_apiKey;
 128      }
 129  
 130      /**
 131       * Set API key
 132       *
 133       * @param string $apiKey
 134       * @return Zend_Service_Akismet
 135       */
 136      public function setApiKey($apiKey)
 137      {
 138          $this->_apiKey = $apiKey;
 139          return $this;
 140      }
 141  
 142      /**
 143       * Retrieve charset
 144       *
 145       * @return string
 146       */
 147      public function getCharset()
 148      {
 149          return $this->_charset;
 150      }
 151  
 152      /**
 153       * Set charset
 154       *
 155       * @param string $charset
 156       * @return Zend_Service_Akismet
 157       */
 158      public function setCharset($charset)
 159      {
 160          $this->_charset = $charset;
 161          return $this;
 162      }
 163  
 164      /**
 165       * Retrieve TCP/IP port
 166       *
 167       * @return int
 168       */
 169      public function getPort()
 170      {
 171          return $this->_port;
 172      }
 173  
 174      /**
 175       * Set TCP/IP port
 176       *
 177       * @param int $port
 178       * @return Zend_Service_Akismet
 179       * @throws Zend_Service_Exception if non-integer value provided
 180       */
 181      public function setPort($port)
 182      {
 183          if (!is_int($port)) {
 184              require_once 'Zend/Service/Exception.php';
 185              throw new Zend_Service_Exception('Invalid port');
 186          }
 187  
 188          $this->_port = $port;
 189          return $this;
 190      }
 191  
 192      /**
 193       * Retrieve User Agent string
 194       *
 195       * @return string
 196       */
 197      public function getUserAgent()
 198      {
 199          return $this->_userAgent;
 200      }
 201  
 202      /**
 203       * Set User Agent
 204       *
 205       * Should be of form "Some user agent/version | Akismet/version"
 206       *
 207       * @param string $userAgent
 208       * @return Zend_Service_Akismet
 209       * @throws Zend_Service_Exception with invalid user agent string
 210       */
 211      public function setUserAgent($userAgent)
 212      {
 213          if (!is_string($userAgent)
 214              || !preg_match(":^[^\n/]*/[^ ]* \| Akismet/[0-9\.]*$:i", $userAgent))
 215          {
 216              require_once 'Zend/Service/Exception.php';
 217              throw new Zend_Service_Exception('Invalid User Agent string; must be of format "Application name/version | Akismet/version"');
 218          }
 219  
 220          $this->_userAgent = $userAgent;
 221          return $this;
 222      }
 223  
 224      /**
 225       * Post a request
 226       *
 227       * @param string $host
 228       * @param string $path
 229       * @param array  $params
 230       * @return mixed
 231       */
 232      protected function _post($host, $path, array $params)
 233      {
 234          $uri    = 'http://' . $host . ':' . $this->getPort() . $path;
 235          $client = self::getHttpClient();
 236          $client->setUri($uri);
 237          $client->setConfig(array(
 238              'useragent'    => $this->getUserAgent(),
 239          ));
 240  
 241          $client->setHeaders(array(
 242              'Host'         => $host,
 243              'Content-Type' => 'application/x-www-form-urlencoded; charset=' . $this->getCharset()
 244          ));
 245          $client->setParameterPost($params);
 246  
 247          $client->setMethod(Zend_Http_Client::POST);
 248          return $client->request();
 249      }
 250  
 251      /**
 252       * Verify an API key
 253       *
 254       * @param string $key Optional; API key to verify
 255       * @param string $blog Optional; blog URL against which to verify key
 256       * @return boolean
 257       */
 258      public function verifyKey($key = null, $blog = null)
 259      {
 260          if (null === $key) {
 261              $key = $this->getApiKey();
 262          }
 263  
 264          if (null === $blog) {
 265              $blog = $this->getBlogUrl();
 266          }
 267  
 268          $response = $this->_post('rest.akismet.com', '/1.1/verify-key', array(
 269              'key'  => $key,
 270              'blog' => $blog
 271          ));
 272  
 273          return ('valid' == $response->getBody());
 274      }
 275  
 276      /**
 277       * Perform an API call
 278       *
 279       * @param string $path
 280       * @param array $params
 281       * @return Zend_Http_Response
 282       * @throws Zend_Service_Exception if missing user_ip or user_agent fields
 283       */
 284      protected function _makeApiCall($path, $params)
 285      {
 286          if (empty($params['user_ip']) || empty($params['user_agent'])) {
 287              require_once 'Zend/Service/Exception.php';
 288              throw new Zend_Service_Exception('Missing required Akismet fields (user_ip and user_agent are required)');
 289          }
 290  
 291          if (!isset($params['blog'])) {
 292              $params['blog'] = $this->getBlogUrl();
 293          }
 294  
 295          return $this->_post($this->getApiKey() . '.rest.akismet.com', $path, $params);
 296      }
 297  
 298      /**
 299       * Check a comment for spam
 300       *
 301       * Checks a comment to see if it is spam. $params should be an associative
 302       * array with one or more of the following keys (unless noted, all keys are
 303       * optional):
 304       * - blog: URL of the blog. If not provided, uses value returned by {@link getBlogUrl()}
 305       * - user_ip (required): IP address of comment submitter
 306       * - user_agent (required): User Agent used by comment submitter
 307       * - referrer: contents of HTTP_REFERER header
 308       * - permalink: location of the entry to which the comment was submitted
 309       * - comment_type: typically, one of 'blank', 'comment', 'trackback', or 'pingback', but may be any value
 310       * - comment_author: name submitted with the content
 311       * - comment_author_email: email submitted with the content
 312       * - comment_author_url: URL submitted with the content
 313       * - comment_content: actual content
 314       *
 315       * Additionally, Akismet suggests returning the key/value pairs in the
 316       * $_SERVER array, and these may be included in the $params.
 317       *
 318       * This method implements the Akismet comment-check REST method.
 319       *
 320       * @param array $params
 321       * @return boolean
 322       * @throws Zend_Service_Exception with invalid API key
 323       */
 324      public function isSpam($params)
 325      {
 326          $response = $this->_makeApiCall('/1.1/comment-check', $params);
 327  
 328          $return = trim($response->getBody());
 329  
 330          if ('invalid' == $return) {
 331              require_once 'Zend/Service/Exception.php';
 332              throw new Zend_Service_Exception('Invalid API key');
 333          }
 334  
 335          if ('true' == $return) {
 336              return true;
 337          }
 338  
 339          return false;
 340      }
 341  
 342      /**
 343       * Submit spam
 344       *
 345       * Takes the same arguments as {@link isSpam()}.
 346       *
 347       * Submits known spam content to Akismet to help train it.
 348       *
 349       * This method implements Akismet's submit-spam REST method.
 350       *
 351       * @param array $params
 352       * @return void
 353       * @throws Zend_Service_Exception with invalid API key
 354       */
 355      public function submitSpam($params)
 356      {
 357          $response = $this->_makeApiCall('/1.1/submit-spam', $params);
 358          $value    = trim($response->getBody());
 359          if ('invalid' == $value) {
 360              require_once 'Zend/Service/Exception.php';
 361              throw new Zend_Service_Exception('Invalid API key');
 362          }
 363      }
 364  
 365      /**
 366       * Submit ham
 367       *
 368       * Takes the same arguments as {@link isSpam()}.
 369       *
 370       * Submits a comment that has been falsely categorized as spam by Akismet
 371       * as a false positive, telling Akismet's filters not to filter such
 372       * comments as spam in the future.
 373       *
 374       * Unlike {@link submitSpam()} and {@link isSpam()}, a valid API key is
 375       * never necessary; as a result, this method never throws an exception
 376       * (unless an exception happens with the HTTP client layer).
 377       *
 378       * this method implements Akismet's submit-ham REST method.
 379       *
 380       * @param array $params
 381       * @return void
 382       */
 383      public function submitHam($params)
 384      {
 385          $response = $this->_makeApiCall('/1.1/submit-ham', $params);
 386      }
 387  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1