Chris@0: $value) { Chris@0: // Setters Chris@0: $key = static::convertKey($key); Chris@0: $method = 'set' . $key; Chris@0: if (method_exists($feed, $method)) { Chris@0: switch ($method) { Chris@0: case 'setfeedlink': Chris@12: if (! is_array($value)) { Chris@0: // Need an array Chris@0: break; Chris@0: } Chris@12: if (! array_key_exists('link', $value) || ! array_key_exists('type', $value)) { Chris@0: // Need both keys to set this correctly Chris@0: break; Chris@0: } Chris@0: $feed->setFeedLink($value['link'], $value['type']); Chris@0: break; Chris@0: default: Chris@0: $feed->$method($value); Chris@0: break; Chris@0: } Chris@0: continue; Chris@0: } Chris@0: Chris@0: // Entries Chris@0: if ('entries' == $key) { Chris@0: static::createEntries($value, $feed); Chris@0: continue; Chris@0: } Chris@0: } Chris@0: Chris@0: return $feed; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Normalize a key Chris@0: * Chris@0: * @param string $key Chris@0: * @return string Chris@0: */ Chris@0: protected static function convertKey($key) Chris@0: { Chris@0: $key = str_replace('_', '', strtolower($key)); Chris@0: return $key; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Create and attach entries to a feed Chris@0: * Chris@0: * @param array|Traversable $entries Chris@0: * @param Feed $feed Chris@0: * @throws Exception\InvalidArgumentException Chris@0: * @return void Chris@0: */ Chris@0: protected static function createEntries($entries, Feed $feed) Chris@0: { Chris@12: if (! is_array($entries) && ! $entries instanceof Traversable) { Chris@0: throw new Exception\InvalidArgumentException(sprintf( Chris@0: '%s::factory expects the "entries" value to be an array or Traversable; received "%s"', Chris@0: get_called_class(), Chris@0: (is_object($entries) ? get_class($entries) : gettype($entries)) Chris@0: )); Chris@0: } Chris@0: Chris@0: foreach ($entries as $data) { Chris@12: if (! is_array($data) && ! $data instanceof Traversable && ! $data instanceof Entry) { Chris@0: throw new Exception\InvalidArgumentException(sprintf( Chris@0: '%s expects an array, Traversable, or Zend\Feed\Writer\Entry argument; received "%s"', Chris@0: __METHOD__, Chris@0: (is_object($data) ? get_class($data) : gettype($data)) Chris@0: )); Chris@0: } Chris@0: Chris@0: // Use case 1: Entry item Chris@0: if ($data instanceof Entry) { Chris@0: $feed->addEntry($data); Chris@0: continue; Chris@0: } Chris@0: Chris@0: // Use case 2: iterate item and populate entry Chris@0: $entry = $feed->createEntry(); Chris@0: foreach ($data as $key => $value) { Chris@0: $key = static::convertKey($key); Chris@0: $method = 'set' . $key; Chris@12: if (! method_exists($entry, $method)) { Chris@0: continue; Chris@0: } Chris@0: $entry->$method($value); Chris@0: } Chris@0: $feed->addEntry($entry); Chris@0: } Chris@0: } Chris@0: }