Chris@0: getData($name); Chris@0: Chris@0: if ($period === null) { Chris@0: $this->data[$name] = 'daily'; Chris@0: return 'daily'; //Default specified by spec Chris@0: } Chris@0: Chris@0: switch ($period) { Chris@0: case 'hourly': Chris@0: case 'daily': Chris@0: case 'weekly': Chris@0: case 'yearly': Chris@0: return $period; Chris@0: default: Chris@0: throw new Reader\Exception\InvalidArgumentException("Feed specified invalid update period: '$period'." Chris@12: . " Must be one of hourly, daily, weekly or yearly"); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get update frequency Chris@0: * Chris@0: * @return int Chris@0: */ Chris@0: public function getUpdateFrequency() Chris@0: { Chris@0: $name = 'updateFrequency'; Chris@0: $freq = $this->getData($name, 'number'); Chris@0: Chris@12: if (! $freq || $freq < 1) { Chris@0: $this->data[$name] = 1; Chris@0: return 1; Chris@0: } Chris@0: Chris@0: return $freq; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get update frequency as ticks Chris@0: * Chris@0: * @return int Chris@0: */ Chris@0: public function getUpdateFrequencyAsTicks() Chris@0: { Chris@0: $name = 'updateFrequency'; Chris@0: $freq = $this->getData($name, 'number'); Chris@0: Chris@12: if (! $freq || $freq < 1) { Chris@0: $this->data[$name] = 1; Chris@0: $freq = 1; Chris@0: } Chris@0: Chris@0: $period = $this->getUpdatePeriod(); Chris@0: $ticks = 1; Chris@0: Chris@0: switch ($period) { Chris@0: case 'yearly': Chris@0: $ticks *= 52; //TODO: fix generalisation, how? Chris@0: // no break Chris@0: case 'weekly': Chris@0: $ticks *= 7; Chris@0: // no break Chris@0: case 'daily': Chris@0: $ticks *= 24; Chris@0: // no break Chris@0: case 'hourly': Chris@0: $ticks *= 3600; Chris@0: break; Chris@0: default: //Never arrive here, exception thrown in getPeriod() Chris@0: break; Chris@0: } Chris@0: Chris@0: return $ticks / $freq; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get update base Chris@0: * Chris@0: * @return DateTime|null Chris@0: */ Chris@0: public function getUpdateBase() Chris@0: { Chris@0: $updateBase = $this->getData('updateBase'); Chris@0: $date = null; Chris@0: if ($updateBase) { Chris@0: $date = DateTime::createFromFormat(DateTime::W3C, $updateBase); Chris@0: } Chris@0: return $date; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the entry data specified by name Chris@0: * Chris@0: * @param string $name Chris@0: * @param string $type Chris@0: * @return mixed|null Chris@0: */ Chris@0: private function getData($name, $type = 'string') Chris@0: { Chris@0: if (array_key_exists($name, $this->data)) { Chris@0: return $this->data[$name]; Chris@0: } Chris@0: Chris@0: $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/syn10:' . $name . ')'); Chris@0: Chris@12: if (! $data) { Chris@0: $data = null; Chris@0: } Chris@0: Chris@0: $this->data[$name] = $data; Chris@0: Chris@0: return $data; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Register Syndication namespaces Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: protected function registerNamespaces() Chris@0: { Chris@0: $this->xpath->registerNamespace('syn10', 'http://purl.org/rss/1.0/modules/syndication/'); Chris@0: } Chris@0: }