File indexing completed on 2024-12-22 05:37:06

0001 <?php
0002 
0003 /**
0004  * Zend Framework
0005  *
0006  * LICENSE
0007  *
0008  * This source file is subject to the new BSD license that is bundled
0009  * with this package in the file LICENSE.txt.
0010  * It is also available through the world-wide-web at this URL:
0011  * http://framework.zend.com/license/new-bsd
0012  * If you did not receive a copy of the license and are unable to
0013  * obtain it through the world-wide-web, please send an email
0014  * to license@zend.com so we can send you a copy immediately.
0015  *
0016  * @category   Zend
0017  * @package    Zend_Service
0018  * @subpackage Yahoo
0019  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0020  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0021  * @version    $Id$
0022  */
0023 
0024 
0025 /**
0026  * @category   Zend
0027  * @package    Zend_Service
0028  * @subpackage Yahoo
0029  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0030  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0031  */
0032 class Zend_Service_Yahoo_ResultSet implements SeekableIterator
0033 {
0034     /**
0035      * Total number of results available
0036      *
0037      * @var int
0038      */
0039     public $totalResultsAvailable;
0040 
0041     /**
0042      * The number of results in this result set
0043      *
0044      * @var int
0045      */
0046     public $totalResultsReturned;
0047 
0048     /**
0049      * The offset in the total result set of this search set
0050      *
0051      * @var int
0052      */
0053     public $firstResultPosition;
0054 
0055     /**
0056      * A DOMNodeList of results
0057      *
0058      * @var DOMNodeList
0059      */
0060     protected $_results;
0061 
0062     /**
0063      * Yahoo Web Service Return Document
0064      *
0065      * @var DOMDocument
0066      */
0067     protected $_dom;
0068 
0069     /**
0070      * Xpath Object for $this->_dom
0071      *
0072      * @var DOMXPath
0073      */
0074     protected $_xpath;
0075 
0076     /**
0077      * Current Index for SeekableIterator
0078      *
0079      * @var int
0080      */
0081     protected $_currentIndex = 0;
0082 
0083 
0084     /**
0085      * Parse the search response and retrieve the results for iteration
0086      *
0087      * @param  DOMDocument $dom the REST fragment for this object
0088      * @return void
0089      */
0090     public function __construct(DOMDocument $dom)
0091     {
0092         $this->totalResultsAvailable = (int) $dom->documentElement->getAttribute('totalResultsAvailable');
0093         $this->totalResultsReturned = (int) $dom->documentElement->getAttribute('totalResultsReturned');
0094         $this->firstResultPosition = (int) $dom->documentElement->getAttribute('firstResultPosition');
0095 
0096         $this->_dom = $dom;
0097         $this->_xpath = new DOMXPath($dom);
0098 
0099         $this->_xpath->registerNamespace('yh', $this->_namespace);
0100 
0101         $this->_results = $this->_xpath->query('//yh:Result');
0102     }
0103 
0104 
0105     /**
0106      * Total Number of results returned
0107      *
0108      * @return int Total number of results returned
0109      */
0110     public function totalResults()
0111     {
0112         return $this->totalResultsReturned;
0113     }
0114 
0115 
0116     /**
0117      * Implement SeekableIterator::current()
0118      *
0119      * Must be implemented by child classes
0120      *
0121      * @throws Zend_Service_Exception
0122      * @return Zend_Service_Yahoo_Result
0123      */
0124     public function current()
0125     {
0126         /**
0127          * @see Zend_Service_Exception
0128          */
0129         // require_once 'Zend/Service/Exception.php';
0130         throw new Zend_Service_Exception('Zend_Service_Yahoo_ResultSet::current() must be implemented by child '
0131                                        . 'classes');
0132     }
0133 
0134 
0135     /**
0136      * Implement SeekableIterator::key()
0137      *
0138      * @return int
0139      */
0140     public function key()
0141     {
0142         return $this->_currentIndex;
0143     }
0144 
0145 
0146     /**
0147      * Implement SeekableIterator::next()
0148      *
0149      * @return void
0150      */
0151     public function next()
0152     {
0153         $this->_currentIndex += 1;
0154     }
0155 
0156 
0157     /**
0158      * Implement SeekableIterator::rewind()
0159      *
0160      * @return void
0161      */
0162     public function rewind()
0163     {
0164         $this->_currentIndex = 0;
0165     }
0166 
0167 
0168     /**
0169      * Implement SeekableIterator::seek()
0170      *
0171      * @param  int $index
0172      * @return void
0173      * @throws OutOfBoundsException
0174      */
0175     public function seek($index)
0176     {
0177         $indexInt = (int) $index;
0178         if ($indexInt >= 0 && $indexInt < $this->_results->length) {
0179             $this->_currentIndex = $indexInt;
0180         } else {
0181             throw new OutOfBoundsException("Illegal index '$index'");
0182         }
0183     }
0184 
0185 
0186     /**
0187      * Implement SeekableIterator::valid()
0188      *
0189      * @return boolean
0190      */
0191     public function valid()
0192     {
0193         return $this->_currentIndex < $this->_results->length;
0194     }
0195 }