Chris@0: entry = $entry; Chris@0: $this->entryKey = $entryKey; Chris@0: $this->domDocument = $entry->ownerDocument; Chris@0: if ($type !== null) { Chris@0: $this->data['type'] = $type; Chris@0: } else { Chris@0: $this->data['type'] = Reader::detectType($entry); Chris@0: } Chris@0: $this->_loadExtensions(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the DOM Chris@0: * Chris@0: * @return DOMDocument Chris@0: */ Chris@0: public function getDomDocument() Chris@0: { Chris@0: return $this->domDocument; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the entry element Chris@0: * Chris@0: * @return DOMElement Chris@0: */ Chris@0: public function getElement() Chris@0: { Chris@0: return $this->entry; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the Entry's encoding Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function getEncoding() Chris@0: { Chris@0: $assumed = $this->getDomDocument()->encoding; Chris@0: if (empty($assumed)) { Chris@0: $assumed = 'UTF-8'; Chris@0: } Chris@0: return $assumed; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get entry as xml Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function saveXml() Chris@0: { Chris@0: $dom = new DOMDocument('1.0', $this->getEncoding()); Chris@0: $entry = $dom->importNode($this->getElement(), true); Chris@0: $dom->appendChild($entry); Chris@12: return $dom->saveXML(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the entry type Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function getType() Chris@0: { Chris@0: return $this->data['type']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the XPath query object Chris@0: * Chris@0: * @return DOMXPath Chris@0: */ Chris@0: public function getXpath() Chris@0: { Chris@12: if (! $this->xpath) { Chris@0: $this->setXpath(new DOMXPath($this->getDomDocument())); Chris@0: } Chris@0: return $this->xpath; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Set the XPath query Chris@0: * Chris@0: * @param DOMXPath $xpath Chris@0: * @return \Zend\Feed\Reader\AbstractEntry Chris@0: */ Chris@0: public function setXpath(DOMXPath $xpath) Chris@0: { Chris@0: $this->xpath = $xpath; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get registered extensions Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: public function getExtensions() Chris@0: { Chris@0: return $this->extensions; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Return an Extension object with the matching name (postfixed with _Entry) Chris@0: * Chris@0: * @param string $name Chris@0: * @return \Zend\Feed\Reader\Extension\AbstractEntry Chris@0: */ Chris@0: public function getExtension($name) Chris@0: { Chris@0: if (array_key_exists($name . '\Entry', $this->extensions)) { Chris@0: return $this->extensions[$name . '\Entry']; Chris@0: } Chris@0: return; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Method overloading: call given method on first extension implementing it Chris@0: * Chris@0: * @param string $method Chris@0: * @param array $args Chris@0: * @return mixed Chris@0: * @throws Exception\BadMethodCallException if no extensions implements the method Chris@0: */ Chris@0: public function __call($method, $args) Chris@0: { Chris@0: foreach ($this->extensions as $extension) { Chris@0: if (method_exists($extension, $method)) { Chris@0: return call_user_func_array([$extension, $method], $args); Chris@0: } Chris@0: } Chris@0: throw new Exception\BadMethodCallException('Method: ' . $method Chris@0: . 'does not exist and could not be located on a registered Extension'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Load extensions from Zend\Feed\Reader\Reader Chris@0: * Chris@0: * @return void Chris@0: */ Chris@12: // @codingStandardsIgnoreStart Chris@0: protected function _loadExtensions() Chris@0: { Chris@12: // @codingStandardsIgnoreEnd Chris@0: $all = Reader::getExtensions(); Chris@0: $feed = $all['entry']; Chris@0: foreach ($feed as $extension) { Chris@0: if (in_array($extension, $all['core'])) { Chris@0: continue; Chris@0: } Chris@0: $className = Reader::getPluginLoader()->getClassName($extension); Chris@0: $this->extensions[$extension] = new $className( Chris@0: $this->getElement(), $this->entryKey, $this->data['type'] Chris@0: ); Chris@0: } Chris@0: } Chris@0: }