protected/modules/yupe/extensions/feed/EFeedItemAtom.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php
/**
 * EFeedItemAtom Class file
 * @author Antonio Ramirez
 * @link http://www.ramirezcobos.com
 *
 *
 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * EFeedItemAtom is an element of an ATOM Feed
 *
 * @author        Antonio Ramirez <ramirez.cobos@gmail.com>
 * @package    rss
 * @uses        CUrlValidator
 * @throws        CException
 */
class EFeedItemAtom extends EFeedItemAbstract
{
    /**
     * (non-PHPdoc)
     * @see EFeedItemAbstract::setDescription()
     */
    public function setDescription($description)
    {
        $this->addTag('summary', $description);
    }

    /**
     * (non-PHPdoc)
     * @see EFeedItemAbstract::setDate()
     */
    public function setDate($date)
    {
        if (!is_numeric($date)) {
            $date = strtotime($date);
        }
        $date = date(DATE_ATOM, $date);

        $this->addTag('updated', $date);
    }

    /**
     *
     * Property getter date
     */
    public function getDate()
    {
        return $this->tags->itemAt('updated');
    }

    /**
     * (non-PHPdoc)
     * @see EFeedItemAbstract::setLink()
     */
    public function setLink($link)
    {
        $validator = new CUrlValidator();
        if (!$validator->validateValue($link)) {
            throw new CException(Yii::t('EFeed', $link . ' does not seem to be a valid URL'));
        }

        $this->addTag('link', '', ['href' => $link]);
        $this->addTag('id', EFeed::uuid($link, 'urn:uuid:'));
    }

    /**
     * (non-PHPdoc)
     * @see EFeedItemAbstract::getNode()
     */
    public function getNode()
    {
        $node = CHtml::openTag('entry') . PHP_EOL;

        foreach ($this->tags as $tag) {
            $node .= $this->getElement($tag);
        }

        $node .= CHtml::closeTag('entry') . PHP_EOL;

        return $node;
    }

    /**
     *
     * @return a well formatted XML element
     * @param EFeedTag $tag
     */
    private function getElement(EFeedTag $tag)
    {
        $element = '';

        if (in_array($tag->name, $this->CDATAEncoded)) {
            $tag->attributes['type'] = "html";
            $element .= CHtml::openTag($tag->name, $tag->attributes);
            $element .= '<![CDATA["' . PHP_EOL;

        } else {
            $element .= CHtml::openTag($tag->name, $tag->attributes);
        }

        if (is_array($tag->content)) {
            foreach ($tag->content as $tag => $content) {
                $tmpTag = new EFeedTag($tag, $content);

                $element .= $this->getElement($tmpTag);
            }
        } else {
            $element .= (in_array($tag->name, $this->CDATAEncoded)) ? $tag->content : CHtml::encode($tag->content);
        }

        $element .= (in_array($tag->name, $this->CDATAEncoded)) ? "]]>" : "";

        $element .= CHtml::closeTag($tag->name) . PHP_EOL;

        return $element;
    }
}