d7922aca64e7721467224b518f2663743a5ed3f6
[yaffs-website] / vendor / zendframework / zend-feed / src / PubSubHubbub / PubSubHubbub.php
1 <?php
2 /**
3  * Zend Framework (http://framework.zend.com/)
4  *
5  * @link      http://github.com/zendframework/zf2 for the canonical source repository
6  * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7  * @license   http://framework.zend.com/license/new-bsd New BSD License
8  */
9
10 namespace Zend\Feed\PubSubHubbub;
11
12 use Zend\Escaper\Escaper;
13 use Zend\Feed\Reader;
14 use Zend\Http;
15
16 class PubSubHubbub
17 {
18     /**
19      * Verification Modes
20      */
21     const VERIFICATION_MODE_SYNC  = 'sync';
22     const VERIFICATION_MODE_ASYNC = 'async';
23
24     /**
25      * Subscription States
26      */
27     const SUBSCRIPTION_VERIFIED    = 'verified';
28     const SUBSCRIPTION_NOTVERIFIED = 'not_verified';
29     const SUBSCRIPTION_TODELETE    = 'to_delete';
30
31     /**
32      * @var Escaper
33      */
34     protected static $escaper;
35
36     /**
37      * Singleton instance if required of the HTTP client
38      *
39      * @var Http\Client
40      */
41     protected static $httpClient = null;
42
43     /**
44      * Simple utility function which imports any feed URL and
45      * determines the existence of Hub Server endpoints. This works
46      * best if directly given an instance of Zend\Feed\Reader\Atom|Rss
47      * to leverage off.
48      *
49      * @param  \Zend\Feed\Reader\Feed\AbstractFeed|string $source
50      * @return array
51      * @throws Exception\InvalidArgumentException
52      */
53     public static function detectHubs($source)
54     {
55         if (is_string($source)) {
56             $feed = Reader\Reader::import($source);
57         } elseif ($source instanceof Reader\Feed\AbstractFeed) {
58             $feed = $source;
59         } else {
60             throw new Exception\InvalidArgumentException('The source parameter was'
61             . ' invalid, i.e. not a URL string or an instance of type'
62             . ' Zend\Feed\Reader\Feed\AbstractFeed');
63         }
64         return $feed->getHubs();
65     }
66
67     /**
68      * Allows the external environment to make ZendOAuth use a specific
69      * Client instance.
70      *
71      * @param  Http\Client $httpClient
72      * @return void
73      */
74     public static function setHttpClient(Http\Client $httpClient)
75     {
76         static::$httpClient = $httpClient;
77     }
78
79     /**
80      * Return the singleton instance of the HTTP Client. Note that
81      * the instance is reset and cleared of previous parameters GET/POST.
82      * Headers are NOT reset but handled by this component if applicable.
83      *
84      * @return Http\Client
85      */
86     public static function getHttpClient()
87     {
88         if (! isset(static::$httpClient)) {
89             static::$httpClient = new Http\Client;
90         } else {
91             static::$httpClient->resetParameters();
92         }
93         return static::$httpClient;
94     }
95
96     /**
97      * Simple mechanism to delete the entire singleton HTTP Client instance
98      * which forces a new instantiation for subsequent requests.
99      *
100      * @return void
101      */
102     public static function clearHttpClient()
103     {
104         static::$httpClient = null;
105     }
106
107     /**
108      * Set the Escaper instance
109      *
110      * If null, resets the instance
111      *
112      * @param  null|Escaper $escaper
113      */
114     public static function setEscaper(Escaper $escaper = null)
115     {
116         static::$escaper = $escaper;
117     }
118
119     /**
120      * Get the Escaper instance
121      *
122      * If none registered, lazy-loads an instance.
123      *
124      * @return Escaper
125      */
126     public static function getEscaper()
127     {
128         if (null === static::$escaper) {
129             static::setEscaper(new Escaper());
130         }
131         return static::$escaper;
132     }
133
134     /**
135      * RFC 3986 safe url encoding method
136      *
137      * @param  string $string
138      * @return string
139      */
140     public static function urlencode($string)
141     {
142         $escaper    = static::getEscaper();
143         $rawencoded = $escaper->escapeUrl($string);
144         $rfcencoded = str_replace('%7E', '~', $rawencoded);
145         return $rfcencoded;
146     }
147 }