[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 Technorati 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_Service_Technorati_Result 26 */ 27 require_once 'Zend/Service/Technorati/Result.php'; 28 29 30 /** 31 * This is the most essential result set. 32 * The scope of this class is to be extended by a query-specific child result set class, 33 * and it should never be used to initialize a standalone object. 34 * 35 * Each of the specific result sets represents a collection of query-specific 36 * Zend_Service_Technorati_Result objects. 37 * 38 * @category Zend 39 * @package Zend_Service 40 * @subpackage Technorati 41 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 42 * @license http://framework.zend.com/license/new-bsd New BSD License 43 * @abstract 44 */ 45 abstract class Zend_Service_Technorati_ResultSet implements SeekableIterator 46 { 47 /** 48 * The total number of results available 49 * 50 * @var int 51 * @access protected 52 */ 53 protected $_totalResultsAvailable; 54 55 /** 56 * The number of results in this result set 57 * 58 * @var int 59 * @access protected 60 */ 61 protected $_totalResultsReturned; 62 63 /** 64 * The offset in the total result set of this search set 65 * 66 * @var int 67 */ 68 //TODO public $firstResultPosition; 69 70 71 /** 72 * A DomNodeList of results 73 * 74 * @var DomNodeList 75 * @access protected 76 */ 77 protected $_results; 78 79 /** 80 * Technorati API response document 81 * 82 * @var DomDocument 83 * @access protected 84 */ 85 protected $_dom; 86 87 /** 88 * Object for $this->_dom 89 * 90 * @var DOMXpath 91 * @access protected 92 */ 93 protected $_xpath; 94 95 /** 96 * XML string representation for $this->_dom 97 * 98 * @var string 99 * @access protected 100 */ 101 protected $_xml; 102 103 /** 104 * Current Item 105 * 106 * @var int 107 * @access protected 108 */ 109 protected $_currentIndex = 0; 110 111 112 /** 113 * Parses the search response and retrieves the results for iteration. 114 * 115 * @param DomDocument $dom the ReST fragment for this object 116 * @param array $options query options as associative array 117 */ 118 public function __construct(DomDocument $dom, $options = array()) 119 { 120 $this->_init($dom, $options); 121 122 // Technorati loves to make developer's life really hard 123 // I must read query options in order to normalize a single way 124 // to display start and limit. 125 // The value is printed out in XML using many different tag names, 126 // too hard to get it from XML 127 128 // Additionally, the following tags should be always available 129 // according to API documentation but... this is not the truth! 130 // - querytime 131 // - limit 132 // - start (sometimes rankingstart) 133 134 // query tag is only available for some requests, the same for url. 135 // For now ignore them. 136 137 //$start = isset($options['start']) ? $options['start'] : 1; 138 //$limit = isset($options['limit']) ? $options['limit'] : 20; 139 //$this->_firstResultPosition = $start; 140 } 141 142 /** 143 * Initializes this object from a DomDocument response. 144 * 145 * Because __construct and __wakeup shares some common executions, 146 * it's useful to group them in a single initialization method. 147 * This method is called once each time a new instance is created 148 * or a serialized object is unserialized. 149 * 150 * @param DomDocument $dom the ReST fragment for this object 151 * @param array $options query options as associative array 152 * * @return void 153 */ 154 protected function _init(DomDocument $dom, $options = array()) 155 { 156 $this->_dom = $dom; 157 $this->_xpath = new DOMXPath($dom); 158 159 $this->_results = $this->_xpath->query("//item"); 160 } 161 162 /** 163 * Number of results returned. 164 * 165 * @return int total number of results returned 166 */ 167 public function totalResults() 168 { 169 return (int) $this->_totalResultsReturned; 170 } 171 172 173 /** 174 * Number of available results. 175 * 176 * @return int total number of available results 177 */ 178 public function totalResultsAvailable() 179 { 180 return (int) $this->_totalResultsAvailable; 181 } 182 183 /** 184 * Implements SeekableIterator::current(). 185 * 186 * @return void 187 * @throws Zend_Service_Exception 188 * @abstract 189 */ 190 // abstract public function current(); 191 192 /** 193 * Implements SeekableIterator::key(). 194 * 195 * @return int 196 */ 197 public function key() 198 { 199 return $this->_currentIndex; 200 } 201 202 /** 203 * Implements SeekableIterator::next(). 204 * 205 * @return void 206 */ 207 public function next() 208 { 209 $this->_currentIndex += 1; 210 } 211 212 /** 213 * Implements SeekableIterator::rewind(). 214 * 215 * @return bool 216 */ 217 public function rewind() 218 { 219 $this->_currentIndex = 0; 220 return true; 221 } 222 223 /** 224 * Implement SeekableIterator::seek(). 225 * 226 * @param int $index 227 * @return void 228 * @throws OutOfBoundsException 229 */ 230 public function seek($index) 231 { 232 $indexInt = (int) $index; 233 if ($indexInt >= 0 && $indexInt < $this->_results->length) { 234 $this->_currentIndex = $indexInt; 235 } else { 236 throw new OutOfBoundsException("Illegal index '$index'"); 237 } 238 } 239 240 /** 241 * Implement SeekableIterator::valid(). 242 * 243 * @return boolean 244 */ 245 public function valid() 246 { 247 return null !== $this->_results && $this->_currentIndex < $this->_results->length; 248 } 249 250 /** 251 * Returns the response document as XML string. 252 * 253 * @return string the response document converted into XML format 254 */ 255 public function getXml() 256 { 257 return $this->_dom->saveXML(); 258 } 259 260 /** 261 * Overwrites standard __sleep method to make this object serializable. 262 * 263 * DomDocument and DOMXpath objects cannot be serialized. 264 * This method converts them back to an XML string. 265 * 266 * @return void 267 */ 268 public function __sleep() { 269 $this->_xml = $this->getXml(); 270 $vars = array_keys(get_object_vars($this)); 271 return array_diff($vars, array('_dom', '_xpath')); 272 } 273 274 /** 275 * Overwrites standard __wakeup method to make this object unserializable. 276 * 277 * Restores object status before serialization. 278 * Converts XML string into a DomDocument object and creates a valid 279 * DOMXpath instance for given DocDocument. 280 * 281 * @return void 282 */ 283 public function __wakeup() { 284 $dom = new DOMDocument(); 285 $dom->loadXml($this->_xml); 286 $this->_init($dom); 287 $this->_xml = null; // reset XML content 288 } 289 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |