web/lib/Zend/Service/Delicious/Post.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Service/Delicious/Post.php	Fri Mar 11 15:05:35 2011 +0100
@@ -0,0 +1,292 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Service
+ * @subpackage Delicious
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: Post.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+
+/**
+ * @see Zend_Date
+ */
+require_once 'Zend/Date.php';
+
+/**
+ * @see Zend_Service_Delicious_SimplePost
+ */
+require_once 'Zend/Service/Delicious/SimplePost.php';
+
+
+/**
+ * Zend_Service_Delicious_Post represents a post of a user that can be edited
+ *
+ * @category   Zend
+ * @package    Zend_Service
+ * @subpackage Delicious
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Service_Delicious_Post extends Zend_Service_Delicious_SimplePost
+{
+    /**
+     * Service that has downloaded the post
+     *
+     * @var Zend_Service_Delicious
+     */
+    protected $_service;
+
+    /**
+     * @var int Number of people that have the same post
+     */
+    protected $_others;
+
+    /**
+     * @var Zend_Date Post date
+     */
+    protected $_date;
+
+    /**
+     * @var bool Post share
+     */
+    protected $_shared = true;
+
+    /**
+     * @var string Post hash
+     */
+    protected $_hash;
+
+    /**
+     * Constructs a new del.icio.us post
+     *
+     * @param  Zend_Service_Delicious $service Service that has downloaded the post
+     * @param  DOMElement|array       $values  Post content
+     * @throws Zend_Service_Delicious_Exception
+     * @return void
+     */
+    public function __construct(Zend_Service_Delicious $service, $values)
+    {
+        $this->_service = $service;
+
+        if ($values instanceof DOMElement) {
+            $values = self::_parsePostNode($values);
+        }
+
+        if (!is_array($values) || !isset($values['url']) || !isset($values['title'])) {
+            /**
+             * @see Zend_Service_Delicious_Exception
+             */
+            require_once 'Zend/Service/Delicious/Exception.php';
+            throw new Zend_Service_Delicious_Exception("Second argument must be array with at least 2 keys ('url' and"
+                                                     . " 'title')");
+        }
+
+        if (isset($values['date']) && ! $values['date'] instanceof Zend_Date) {
+            /**
+             * @see Zend_Service_Delicious_Exception
+             */
+            require_once 'Zend/Service/Delicious/Exception.php';
+            throw new Zend_Service_Delicious_Exception("Date has to be an instance of Zend_Date");
+        }
+
+        foreach (array('url', 'title', 'notes', 'others', 'tags', 'date', 'shared', 'hash') as $key) {
+            if (isset($values[$key])) {
+                $this->{"_$key"}  = $values[$key];
+            }
+        }
+    }
+
+    /**
+     * Setter for title
+     *
+     * @param  string $newTitle
+     * @return Zend_Service_Delicious_Post
+     */
+    public function setTitle($newTitle)
+    {
+        $this->_title = (string) $newTitle;
+
+        return $this;
+    }
+
+    /**
+     * Setter for notes
+     *
+     * @param  string $newNotes
+     * @return Zend_Service_Delicious_Post
+     */
+    public function setNotes($newNotes)
+    {
+        $this->_notes = (string) $newNotes;
+
+        return $this;
+    }
+
+    /**
+     * Setter for tags
+     *
+     * @param  array $tags
+     * @return Zend_Service_Delicious_Post
+     */
+    public function setTags(array $tags)
+    {
+        $this->_tags = $tags;
+
+        return $this;
+    }
+
+    /**
+     * Add a tag
+     *
+     * @param  string $tag
+     * @return Zend_Service_Delicious_Post
+     */
+    public function addTag($tag)
+    {
+        $this->_tags[] = (string) $tag;
+
+        return $this;
+    }
+
+    /**
+     * Remove a tag
+     *
+     * @param  string $tag
+     * @return Zend_Service_Delicious_Post
+     */
+    public function removeTag($tag)
+    {
+        $this->_tags = array_diff($this->_tags, array((string) $tag));
+
+        return $this;
+    }
+
+    /**
+     * Getter for date
+     *
+     * @return Zend_Date
+     */
+    public function getDate()
+    {
+        return $this->_date;
+    }
+
+    /**
+     * Getter for others
+     *
+     * This property is only populated when posts are retrieved
+     * with getPosts() method. The getAllPosts() and getRecentPosts()
+     * methods will not populate this property.
+     *
+     * @return int
+     */
+    public function getOthers()
+    {
+        return $this->_others;
+    }
+
+    /**
+     * Getter for hash
+     *
+     * @return string
+     */
+    public function getHash()
+    {
+        return $this->_hash;
+    }
+
+    /**
+     * Getter for shared
+     *
+     * @return bool
+     */
+    public function getShared()
+    {
+        return $this->_shared;
+    }
+
+    /**
+     * Setter for shared
+     *
+     * @param  bool $isShared
+     * @return Zend_Service_Delicious_Post
+     */
+    public function setShared($isShared)
+    {
+        $this->_shared = (bool) $isShared;
+
+        return $this;
+    }
+
+    /**
+     * Deletes post
+     *
+     * @return Zend_Service_Delicious
+     */
+    public function delete()
+    {
+        return $this->_service->deletePost($this->_url);
+    }
+
+    /**
+     * Saves post
+     *
+     * @return DOMDocument
+     */
+    public function save()
+    {
+        $parms = array(
+            'url'        => $this->_url,
+            'description'=> $this->_title,
+            'extended'   => $this->_notes,
+            'shared'     => ($this->_shared ? 'yes' : 'no'),
+            'tags'       => implode(' ', (array) $this->_tags),
+            'replace'    => 'yes'
+        );
+        /*
+        if ($this->_date instanceof Zend_Date) {
+            $parms['dt'] = $this->_date->get('Y-m-d\TH:i:s\Z');
+        }
+        */
+
+        return $this->_service->makeRequest(Zend_Service_Delicious::PATH_POSTS_ADD, $parms);
+    }
+
+    /**
+     * Extracts content from the DOM element of a post
+     *
+     * @param  DOMElement $node
+     * @return array
+     */
+    protected static function _parsePostNode(DOMElement $node)
+    {
+        return array(
+            'url'    => $node->getAttribute('href'),
+            'title'  => $node->getAttribute('description'),
+            'notes'  => $node->getAttribute('extended'),
+            'others' => (int) $node->getAttribute('others'),
+            'tags'   => explode(' ', $node->getAttribute('tag')),
+            /**
+             * @todo replace strtotime() with Zend_Date equivalent
+             */
+            'date'   => new Zend_Date(strtotime($node->getAttribute('time'))),
+            'shared' => ($node->getAttribute('shared') == 'no' ? false : true),
+            'hash'   => $node->getAttribute('hash')
+        );
+    }
+}