Overview

Namespaces

  • Inteve
    • FeedGenerator
      • Feeds
        • GoogleMerchant
        • Heureka
        • PostFeed
        • Zbozi
      • Outputs
      • Responses
      • Utils

Classes

  • Inteve\FeedGenerator\Feed
  • Inteve\FeedGenerator\Feeds\GoogleMerchant\GoogleMerchantFeed
  • Inteve\FeedGenerator\Feeds\GoogleMerchant\GoogleMerchantItem
  • Inteve\FeedGenerator\Feeds\Heureka\HeurekaFeed
  • Inteve\FeedGenerator\Feeds\Heureka\HeurekaItem
  • Inteve\FeedGenerator\Feeds\Heureka\HeurekaItemParameter
  • Inteve\FeedGenerator\Feeds\PostFeed\PostFeed
  • Inteve\FeedGenerator\Feeds\PostFeed\PostFeedItem
  • Inteve\FeedGenerator\Feeds\Zbozi\ZboziFeed
  • Inteve\FeedGenerator\Feeds\Zbozi\ZboziItem
  • Inteve\FeedGenerator\Feeds\Zbozi\ZboziItemParameter
  • Inteve\FeedGenerator\Outputs\DirectOutput
  • Inteve\FeedGenerator\Outputs\FileOutput
  • Inteve\FeedGenerator\Outputs\MemoryOutput
  • Inteve\FeedGenerator\Responses\NetteDownloadResponse
  • Inteve\FeedGenerator\Utils\Helpers

Interfaces

  • Inteve\FeedGenerator\IFeed
  • Inteve\FeedGenerator\IFeedItem
  • Inteve\FeedGenerator\IOutput

Exceptions

  • Inteve\FeedGenerator\AssertException
  • Inteve\FeedGenerator\FeedGeneratorException
  • Inteve\FeedGenerator\FileSystemException
  • Inteve\FeedGenerator\InvalidArgumentException
  • Inteve\FeedGenerator\InvalidItemException
  • Inteve\FeedGenerator\OutputException
  • Inteve\FeedGenerator\StaticClassException
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 
<?php

    namespace Inteve\FeedGenerator\Feeds\GoogleMerchant;

    use Inteve\FeedGenerator\Feed;
    use Inteve\FeedGenerator\InvalidItemException;
    use Inteve\FeedGenerator\IOutput;
    use Inteve\FeedGenerator\Utils\Helpers;


    class GoogleMerchantFeed extends Feed
    {
        /** @var string|NULL */
        private $title;

        /** @var string|NULL */
        private $websiteUrl;

        /** @var \DateTimeInterface|NULL */
        private $updated;

        /** @var string|NULL */
        private $author;


        /**
         * @return string|NULL
         */
        public function getTitle()
        {
            return $this->title;
        }


        /**
         * @param  string
         * @return self
         */
        public function setTitle($title)
        {
            $this->title = $title;
            return $this;
        }


        /**
         * @return string|NULL
         */
        public function getWebsiteUrl()
        {
            return $this->websiteUrl;
        }


        /**
         * @param  string
         * @return self
         */
        public function setWebsiteUrl($websiteUrl)
        {
            $this->websiteUrl = $websiteUrl;
            return $this;
        }


        /**
         * @return \DateTimeInterface|NULL
         */
        public function getUpdated()
        {
            return $this->updated;
        }


        /**
         * @param  \DateTimeInterface
         * @return self
         */
        public function setUpdated(\DateTimeInterface $updated)
        {
            $this->updated = $updated;
            return $this;
        }


        /**
         * @return string|NULL
         */
        public function getAuthor()
        {
            return $this->author;
        }


        /**
         * @param  string
         * @return self
         */
        public function setAuthor($author)
        {
            $this->author = $author;
            return $this;
        }


        /**
         * @return string
         */
        public function getContentType()
        {
            return 'application/atom+xml';
        }


        /**
         * @return void
         * @throws InvalidItemException
         */
        public function generate(IOutput $output)
        {
            // https://support.google.com/merchants/answer/160593
            $this->validate();
            $output->open();
            $output->output('<?xml version="1.0" encoding="utf-8"?>');
            $output->output("\n");
            $output->output('<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">');
            $output->output("\n");

            $feedUpdated = $this->getUpdated();

            Helpers::writeXml($output, array(
                'title' => $this->getTitle(),
                'link' => array(
                    'attrs' => array(
                        'href' => $this->getWebsiteUrl(),
                        'rel' => 'alternate',
                        'type' => 'text/html',
                    ),
                ),
                'updated' => $feedUpdated ? $feedUpdated->format(\DateTime::ATOM) : NULL,
                'author' => array(
                    'content' => array(
                        'name' => $this->getAuthor(),
                    ),
                ),
            ));

            foreach ($this->items as $item) {
                // https://support.google.com/merchants/answer/7052112

                if (!($item instanceof GoogleMerchantItem)) {
                    throw new InvalidItemException('Feed item must be instance of GoogleMerchantItem.');
                }

                $item->validate();

                $output->output("<entry>\n");

                Helpers::writeXml($output, array(
                    'g:id' => $item->getId(),
                    'g:title' => $item->getTitle(),
                    'g:description' => $item->getDescription(),
                    'g:link' => $item->getUrl(),
                    'g:image_link' => $item->getImageUrl(),

                    // price & availability
                    'g:availability' => $item->getAvailability(),
                    'g:price' => $item->getPrice(),

                    // features
                    'g:condition' => $item->getCondition(),
                    'g:adult' => $item->isAdult() ? 'yes' : 'no',
                    'g:color' => $item->getColor(),
                    'g:gender' => $item->getGender(),
                    'g:size' => $item->getSize(),

                    // group ID
                    'g:item_group_id' => $item->getGroupId(),

                    // shipping
                    'g:shipping' => $item->getShipping(),
                    'g:shipping_label' => $item->getShippingLabel(),

                    // identifiers
                    'g:identifier_exists' => !$item->hasIdentifiers() ? 'no' : NULL,
                ));

                $output->output("</entry>\n");
            }

            $output->output('</feed>');
            $output->output("\n");
            $output->close();
        }


        /**
         * @return void
         * @throws AssertException
         */
        protected function validate()
        {
            Helpers::assert(isset($this->title), 'Missing title, call $feed->setTitle().');
            Helpers::assert(isset($this->websiteUrl), 'Missing website URL, call $feed->setWebsiteUrl().');
            Helpers::assert(isset($this->updated), 'Missing update date, call $feed->setUpdated().');
            Helpers::assert(isset($this->author), 'Missing author, call $feed->setAuthor().');
        }
    }
inteve/feed-generator v1.2.0 API documentation API documentation generated by ApiGen