web/lib/Zend/Gdata/YouTube/VideoEntry.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
equal deleted inserted replaced
63:5b37998e522e 64:162c1de6545a
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * Zend Framework
       
     5  *
       
     6  * LICENSE
       
     7  *
       
     8  * This source file is subject to the new BSD license that is bundled
       
     9  * with this package in the file LICENSE.txt.
       
    10  * It is also available through the world-wide-web at this URL:
       
    11  * http://framework.zend.com/license/new-bsd
       
    12  * If you did not receive a copy of the license and are unable to
       
    13  * obtain it through the world-wide-web, please send an email
       
    14  * to license@zend.com so we can send you a copy immediately.
       
    15  *
       
    16  * @category   Zend
       
    17  * @package    Zend_Gdata
       
    18  * @subpackage YouTube
       
    19  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    20  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    21  * @version    $Id: VideoEntry.php 20096 2010-01-06 02:05:09Z bkarwin $
       
    22  */
       
    23 
       
    24 /**
       
    25  * @see Zend_Gdata_Extension_Comments
       
    26  */
       
    27 require_once 'Zend/Gdata/Extension/Comments.php';
       
    28 
       
    29 /**
       
    30  * @see Zend_Gdata_Extension_FeedLink
       
    31  */
       
    32 require_once 'Zend/Gdata/Extension/FeedLink.php';
       
    33 
       
    34 /**
       
    35  * @see Zend_Gdata_YouTube_MediaEntry
       
    36  */
       
    37 require_once 'Zend/Gdata/YouTube/MediaEntry.php';
       
    38 
       
    39 /**
       
    40  * @see Zend_Gdata_YouTube_Extension_MediaGroup
       
    41  */
       
    42 require_once 'Zend/Gdata/YouTube/Extension/MediaGroup.php';
       
    43 
       
    44 /**
       
    45  * @see Zend_Gdata_YouTube_Extension_NoEmbed
       
    46  */
       
    47 require_once 'Zend/Gdata/YouTube/Extension/NoEmbed.php';
       
    48 
       
    49 /**
       
    50  * @see Zend_Gdata_YouTube_Extension_Statistics
       
    51  */
       
    52 require_once 'Zend/Gdata/YouTube/Extension/Statistics.php';
       
    53 
       
    54 /**
       
    55  * @see Zend_Gdata_YouTube_Extension_Link
       
    56  */
       
    57 require_once 'Zend/Gdata/YouTube/Extension/Link.php';
       
    58 
       
    59 /**
       
    60  * @see Zend_Gdata_YouTube_Extension_Racy
       
    61  */
       
    62 require_once 'Zend/Gdata/YouTube/Extension/Racy.php';
       
    63 
       
    64 /**
       
    65  * @see Zend_Gdata_Extension_Rating
       
    66  */
       
    67 require_once 'Zend/Gdata/Extension/Rating.php';
       
    68 
       
    69 /**
       
    70  * @see Zend_Gdata_Geo_Extension_GeoRssWhere
       
    71  */
       
    72 require_once 'Zend/Gdata/Geo/Extension/GeoRssWhere.php';
       
    73 
       
    74 /**
       
    75  * @see Zend_Gdata_YouTube_Extension_Control
       
    76  */
       
    77 require_once 'Zend/Gdata/YouTube/Extension/Control.php';
       
    78 
       
    79 /**
       
    80  * @see Zend_Gdata_YouTube_Extension_Recorded
       
    81  */
       
    82 require_once 'Zend/Gdata/YouTube/Extension/Recorded.php';
       
    83 
       
    84 /**
       
    85  * @see Zend_Gdata_YouTube_Extension_Location
       
    86  */
       
    87 require_once 'Zend/Gdata/YouTube/Extension/Location.php';
       
    88 
       
    89 /**
       
    90  * Represents the YouTube video flavor of an Atom entry
       
    91  *
       
    92  * @category   Zend
       
    93  * @package    Zend_Gdata
       
    94  * @subpackage YouTube
       
    95  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    96  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    97  */
       
    98 class Zend_Gdata_YouTube_VideoEntry extends Zend_Gdata_YouTube_MediaEntry
       
    99 {
       
   100 
       
   101     const YOUTUBE_DEVELOPER_TAGS_SCHEMA = 'http://gdata.youtube.com/schemas/2007/developertags.cat';
       
   102     const YOUTUBE_CATEGORY_SCHEMA = 'http://gdata.youtube.com/schemas/2007/categories.cat';
       
   103     protected $_entryClassName = 'Zend_Gdata_YouTube_VideoEntry';
       
   104 
       
   105     /**
       
   106      * If null, the video can be embedded
       
   107      *
       
   108      * @var Zend_Gdata_YouTube_Extension_NoEmbed|null
       
   109      */
       
   110     protected $_noEmbed = null;
       
   111 
       
   112     /**
       
   113      * Specifies the statistics relating to the video.
       
   114      *
       
   115      * @var Zend_Gdata_YouTube_Extension_Statistics
       
   116      */
       
   117     protected $_statistics = null;
       
   118 
       
   119     /**
       
   120      * If not null, specifies that the video has racy content.
       
   121      *
       
   122      * @var Zend_Gdata_YouTube_Extension_Racy|null
       
   123      */
       
   124     protected $_racy = null;
       
   125 
       
   126     /**
       
   127      * If not null, specifies that the video is private.
       
   128      *
       
   129      * @var Zend_Gdata_YouTube_Extension_Private|null
       
   130      */
       
   131     protected $_private = null;
       
   132 
       
   133     /**
       
   134      * Specifies the video's rating.
       
   135      *
       
   136      * @var Zend_Gdata_Extension_Rating
       
   137      */
       
   138     protected $_rating = null;
       
   139 
       
   140     /**
       
   141      * Specifies the comments associated with a video.
       
   142      *
       
   143      * @var Zend_Gdata_Extensions_Comments
       
   144      */
       
   145     protected $_comments = null;
       
   146 
       
   147     /**
       
   148      * Nested feed links
       
   149      *
       
   150      * @var array
       
   151      */
       
   152     protected $_feedLink = array();
       
   153 
       
   154     /**
       
   155      * Geo location for the video
       
   156      *
       
   157      * @var Zend_Gdata_Geo_Extension_GeoRssWhere
       
   158      */
       
   159     protected $_where = null;
       
   160 
       
   161     /**
       
   162      * Recording date for the video
       
   163      *
       
   164      * @var Zend_Gdata_YouTube_Extension_Recorded|null
       
   165      */
       
   166     protected $_recorded = null;
       
   167 
       
   168     /**
       
   169      * Location informtion for the video
       
   170      *
       
   171      * @var Zend_Gdata_YouTube_Extension_Location|null
       
   172      */
       
   173     protected $_location = null;
       
   174 
       
   175     /**
       
   176      * Creates a Video entry, representing an individual video
       
   177      *
       
   178      * @param DOMElement $element (optional) DOMElement from which this
       
   179      *          object should be constructed.
       
   180      */
       
   181     public function __construct($element = null)
       
   182     {
       
   183         $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
       
   184         parent::__construct($element);
       
   185     }
       
   186 
       
   187     /**
       
   188      * Retrieves a DOMElement which corresponds to this element and all
       
   189      * child properties.  This is used to build an entry back into a DOM
       
   190      * and eventually XML text for sending to the server upon updates, or
       
   191      * for application storage/persistence.
       
   192      *
       
   193      * @param DOMDocument $doc The DOMDocument used to construct DOMElements
       
   194      * @return DOMElement The DOMElement representing this element and all
       
   195      * child properties.
       
   196      */
       
   197     public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
       
   198     {
       
   199         $element = parent::getDOM($doc, $majorVersion, $minorVersion);
       
   200         if ($this->_noEmbed != null) {
       
   201             $element->appendChild($this->_noEmbed->getDOM(
       
   202                 $element->ownerDocument));
       
   203         }
       
   204         if ($this->_statistics != null) {
       
   205             $element->appendChild($this->_statistics->getDOM(
       
   206                 $element->ownerDocument));
       
   207         }
       
   208         if ($this->_racy != null) {
       
   209             $element->appendChild($this->_racy->getDOM(
       
   210                 $element->ownerDocument));
       
   211         }
       
   212         if ($this->_recorded != null) {
       
   213             $element->appendChild($this->_recorded->getDOM(
       
   214                 $element->ownerDocument));
       
   215         }
       
   216         if ($this->_location != null) {
       
   217             $element->appendChild($this->_location->getDOM(
       
   218                 $element->ownerDocument));
       
   219         }
       
   220         if ($this->_rating != null) {
       
   221             $element->appendChild($this->_rating->getDOM(
       
   222                 $element->ownerDocument));
       
   223         }
       
   224         if ($this->_comments != null) {
       
   225             $element->appendChild($this->_comments->getDOM(
       
   226                 $element->ownerDocument));
       
   227         }
       
   228         if ($this->_feedLink != null) {
       
   229             foreach ($this->_feedLink as $feedLink) {
       
   230                 $element->appendChild($feedLink->getDOM(
       
   231                     $element->ownerDocument));
       
   232             }
       
   233         }
       
   234         if ($this->_where != null) {
       
   235            $element->appendChild($this->_where->getDOM(
       
   236                 $element->ownerDocument));
       
   237         }
       
   238         return $element;
       
   239     }
       
   240 
       
   241     /**
       
   242      * Creates individual Entry objects of the appropriate type and
       
   243      * stores them in the $_entry array based upon DOM data.
       
   244      *
       
   245      * @param DOMNode $child The DOMNode to process
       
   246      */
       
   247     protected function takeChildFromDOM($child)
       
   248     {
       
   249         $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
       
   250 
       
   251         switch ($absoluteNodeName) {
       
   252         case $this->lookupNamespace('yt') . ':' . 'statistics':
       
   253             $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
       
   254             $statistics->transferFromDOM($child);
       
   255             $this->_statistics = $statistics;
       
   256             break;
       
   257         case $this->lookupNamespace('yt') . ':' . 'racy':
       
   258             $racy = new Zend_Gdata_YouTube_Extension_Racy();
       
   259             $racy->transferFromDOM($child);
       
   260             $this->_racy = $racy;
       
   261             break;
       
   262         case $this->lookupNamespace('yt') . ':' . 'recorded':
       
   263             $recorded = new Zend_Gdata_YouTube_Extension_Recorded();
       
   264             $recorded->transferFromDOM($child);
       
   265             $this->_recorded = $recorded;
       
   266             break;
       
   267         case $this->lookupNamespace('yt') . ':' . 'location':
       
   268             $location = new Zend_Gdata_YouTube_Extension_Location();
       
   269             $location->transferFromDOM($child);
       
   270             $this->_location = $location;
       
   271             break;
       
   272         case $this->lookupNamespace('gd') . ':' . 'rating':
       
   273             $rating = new Zend_Gdata_Extension_Rating();
       
   274             $rating->transferFromDOM($child);
       
   275             $this->_rating = $rating;
       
   276             break;
       
   277         case $this->lookupNamespace('gd') . ':' . 'comments':
       
   278             $comments = new Zend_Gdata_Extension_Comments();
       
   279             $comments->transferFromDOM($child);
       
   280             $this->_comments = $comments;
       
   281             break;
       
   282         case $this->lookupNamespace('yt') . ':' . 'noembed':
       
   283             $noEmbed = new Zend_Gdata_YouTube_Extension_NoEmbed();
       
   284             $noEmbed->transferFromDOM($child);
       
   285             $this->_noEmbed = $noEmbed;
       
   286             break;
       
   287         case $this->lookupNamespace('gd') . ':' . 'feedLink':
       
   288             $feedLink = new Zend_Gdata_Extension_FeedLink();
       
   289             $feedLink->transferFromDOM($child);
       
   290             $this->_feedLink[] = $feedLink;
       
   291             break;
       
   292         case $this->lookupNamespace('georss') . ':' . 'where':
       
   293             $where = new Zend_Gdata_Geo_Extension_GeoRssWhere();
       
   294             $where->transferFromDOM($child);
       
   295             $this->_where = $where;
       
   296             break;
       
   297         case $this->lookupNamespace('atom') . ':' . 'link';
       
   298             $link = new Zend_Gdata_YouTube_Extension_Link();
       
   299             $link->transferFromDOM($child);
       
   300             $this->_link[] = $link;
       
   301             break;
       
   302         case $this->lookupNamespace('app') . ':' . 'control':
       
   303             $control = new Zend_Gdata_YouTube_Extension_Control();
       
   304             $control->transferFromDOM($child);
       
   305             $this->_control = $control;
       
   306             break;
       
   307         default:
       
   308             parent::takeChildFromDOM($child);
       
   309             break;
       
   310         }
       
   311     }
       
   312 
       
   313     /**
       
   314      * Sets when the video was recorded.
       
   315      *
       
   316      * @param Zend_Gdata_YouTube_Extension_Recorded $recorded When the video was recorded
       
   317      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   318      */
       
   319     public function setRecorded($recorded = null)
       
   320     {
       
   321         $this->_recorded = $recorded;
       
   322         return $this;
       
   323     }
       
   324 
       
   325     /**
       
   326      * Gets the date that the video was recorded.
       
   327      *
       
   328      * @return Zend_Gdata_YouTube_Extension_Recorded|null
       
   329      */
       
   330     public function getRecorded()
       
   331     {
       
   332         return $this->_recorded;
       
   333     }
       
   334 
       
   335     /**
       
   336      * Sets the location information.
       
   337      *
       
   338      * @param Zend_Gdata_YouTube_Extension_Location $location Where the video
       
   339      *        was recorded
       
   340      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   341      */
       
   342     public function setLocation($location = null)
       
   343     {
       
   344         $this->_location = $location;
       
   345         return $this;
       
   346     }
       
   347 
       
   348     /**
       
   349      * Gets the location where the video was recorded.
       
   350      *
       
   351      * @return Zend_Gdata_YouTube_Extension_Location|null
       
   352      */
       
   353     public function getLocation()
       
   354     {
       
   355         return $this->_location;
       
   356     }
       
   357 
       
   358     /**
       
   359      * If an instance of Zend_Gdata_YouTube_Extension_NoEmbed is passed in,
       
   360      * the video cannot be embedded.  Otherwise, if null is passsed in, the
       
   361      * video is able to be embedded.
       
   362      *
       
   363      * @param Zend_Gdata_YouTube_Extension_NoEmbed $noEmbed Whether or not the
       
   364      *          video can be embedded.
       
   365      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   366      */
       
   367     public function setNoEmbed($noEmbed = null)
       
   368     {
       
   369         $this->_noEmbed = $noEmbed;
       
   370         return $this;
       
   371     }
       
   372 
       
   373     /**
       
   374      * If the return value is an instance of
       
   375      * Zend_Gdata_YouTube_Extension_NoEmbed, this video cannot be embedded.
       
   376      *
       
   377      * @return Zend_Gdata_YouTube_Extension_NoEmbed|null Whether or not the video can be embedded
       
   378      */
       
   379     public function getNoEmbed()
       
   380     {
       
   381         return $this->_noEmbed;
       
   382     }
       
   383 
       
   384     /**
       
   385      * Checks whether the video is embeddable.
       
   386      *
       
   387      * @return bool Returns true if the video is embeddable.
       
   388      */
       
   389     public function isVideoEmbeddable()
       
   390     {
       
   391         if ($this->getNoEmbed() == null) {
       
   392             return true;
       
   393         } else {
       
   394             return false;
       
   395         }
       
   396     }
       
   397 
       
   398     /**
       
   399      * Sets the statistics relating to the video.
       
   400      *
       
   401      * @param Zend_Gdata_YouTube_Extension_Statistics $statistics The statistics relating to the video
       
   402      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   403      */
       
   404     public function setStatistics($statistics = null)
       
   405     {
       
   406         $this->_statistics = $statistics;
       
   407         return $this;
       
   408     }
       
   409 
       
   410     /**
       
   411      * Returns the statistics relating to the video.
       
   412      *
       
   413      * @return Zend_Gdata_YouTube_Extension_Statistics  The statistics relating to the video
       
   414      */
       
   415     public function getStatistics()
       
   416     {
       
   417         return $this->_statistics;
       
   418     }
       
   419 
       
   420     /**
       
   421      * Specifies that the video has racy content.
       
   422      *
       
   423      * @param Zend_Gdata_YouTube_Extension_Racy $racy The racy flag object
       
   424      * @throws Zend_Gdata_App_VersionException
       
   425      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   426      */
       
   427     public function setRacy($racy = null)
       
   428     {
       
   429         if ($this->getMajorProtocolVersion() == 2) {
       
   430             require_once 'Zend/Gdata/App/VersionException.php';
       
   431             throw new Zend_Gdata_App_VersionException(
       
   432                 'Calling getRacy() on a YouTube VideoEntry is deprecated ' .
       
   433                 'as of version 2 of the API.');
       
   434         }
       
   435 
       
   436         $this->_racy = $racy;
       
   437         return $this;
       
   438     }
       
   439 
       
   440     /**
       
   441      * Returns the racy flag object.
       
   442      *
       
   443      * @throws Zend_Gdata_App_VersionException
       
   444      * @return Zend_Gdata_YouTube_Extension_Racy|null  The racy flag object
       
   445      */
       
   446     public function getRacy()
       
   447     {
       
   448         if ($this->getMajorProtocolVersion() == 2) {
       
   449             require_once 'Zend/Gdata/App/VersionException.php';
       
   450             throw new Zend_Gdata_App_VersionException(
       
   451                 'Calling getRacy() on a YouTube VideoEntry is deprecated ' .
       
   452                 'as of version 2 of the API.');
       
   453         }
       
   454         return $this->_racy;
       
   455     }
       
   456 
       
   457     /**
       
   458      * Sets the rating relating to the video.
       
   459      *
       
   460      * @param Zend_Gdata_Extension_Rating $rating The rating relating to the video
       
   461      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   462      */
       
   463     public function setRating($rating = null)
       
   464     {
       
   465         $this->_rating = $rating;
       
   466         return $this;
       
   467     }
       
   468 
       
   469     /**
       
   470      * Returns the rating relating to the video.
       
   471      *
       
   472      * @return Zend_Gdata_Extension_Rating  The rating relating to the video
       
   473      */
       
   474     public function getRating()
       
   475     {
       
   476         return $this->_rating;
       
   477     }
       
   478 
       
   479     /**
       
   480      * Sets the comments relating to the video.
       
   481      *
       
   482      * @param Zend_Gdata_Extension_Comments $comments The comments relating to the video
       
   483      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   484      */
       
   485     public function setComments($comments = null)
       
   486     {
       
   487         $this->_comments = $comments;
       
   488         return $this;
       
   489     }
       
   490 
       
   491     /**
       
   492      * Returns the comments relating to the video.
       
   493      *
       
   494      * @return Zend_Gdata_Extension_Comments  The comments relating to the video
       
   495      */
       
   496     public function getComments()
       
   497     {
       
   498         return $this->_comments;
       
   499     }
       
   500 
       
   501     /**
       
   502      * Sets the array of embedded feeds related to the video
       
   503      *
       
   504      * @param array $feedLink The array of embedded feeds relating to the video
       
   505      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   506      */
       
   507     public function setFeedLink($feedLink = null)
       
   508     {
       
   509         $this->_feedLink = $feedLink;
       
   510         return $this;
       
   511     }
       
   512 
       
   513     /**
       
   514      * Get the feed link property for this entry.
       
   515      *
       
   516      * @see setFeedLink
       
   517      * @param string $rel (optional) The rel value of the link to be found.
       
   518      *          If null, the array of links is returned.
       
   519      * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
       
   520      *          object corresponding to the requested rel value is returned
       
   521      *          if found, or null if the requested value is not found. If
       
   522      *          $rel is null or not specified, an array of all available
       
   523      *          feed links for this entry is returned, or null if no feed
       
   524      *          links are set.
       
   525      */
       
   526     public function getFeedLink($rel = null)
       
   527     {
       
   528         if ($rel == null) {
       
   529             return $this->_feedLink;
       
   530         } else {
       
   531             foreach ($this->_feedLink as $feedLink) {
       
   532                 if ($feedLink->rel == $rel) {
       
   533                     return $feedLink;
       
   534                 }
       
   535             }
       
   536             return null;
       
   537         }
       
   538     }
       
   539 
       
   540     /**
       
   541      * Returns the link element relating to video responses.
       
   542      *
       
   543      * @return Zend_Gdata_App_Extension_Link
       
   544      */
       
   545     public function getVideoResponsesLink()
       
   546     {
       
   547         return $this->getLink(Zend_Gdata_YouTube::VIDEO_RESPONSES_REL);
       
   548     }
       
   549 
       
   550     /**
       
   551      * Returns the link element relating to video ratings.
       
   552      *
       
   553      * @return Zend_Gdata_App_Extension_Link
       
   554      */
       
   555     public function getVideoRatingsLink()
       
   556     {
       
   557         return $this->getLink(Zend_Gdata_YouTube::VIDEO_RATINGS_REL);
       
   558     }
       
   559 
       
   560     /**
       
   561      * Returns the link element relating to video complaints.
       
   562      *
       
   563      * @return Zend_Gdata_App_Extension_Link
       
   564      */
       
   565     public function getVideoComplaintsLink()
       
   566     {
       
   567         return $this->getLink(Zend_Gdata_YouTube::VIDEO_COMPLAINTS_REL);
       
   568     }
       
   569 
       
   570     /**
       
   571      * Gets the YouTube video ID based upon the atom:id value
       
   572      *
       
   573      * @return string The video ID
       
   574      */
       
   575     public function getVideoId()
       
   576     {
       
   577         if ($this->getMajorProtocolVersion() == 2) {
       
   578             $videoId = $this->getMediaGroup()->getVideoId()->text;
       
   579         } else {
       
   580             $fullId = $this->getId()->getText();
       
   581             $position = strrpos($fullId, '/');
       
   582             if ($position === false) {
       
   583                 require_once 'Zend/Gdata/App/Exception.php';
       
   584                 throw new Zend_Gdata_App_Exception(
       
   585                     'Slash not found in atom:id of ' . $fullId);
       
   586             } else {
       
   587                 $videoId = substr($fullId, $position + 1);
       
   588             }
       
   589         }
       
   590         return $videoId;
       
   591     }
       
   592 
       
   593     /**
       
   594      * Gets the date that the video was recorded.
       
   595      *
       
   596      * @return string|null The date that the video was recorded
       
   597      */
       
   598     public function getVideoRecorded()
       
   599     {
       
   600         $recorded = $this->getRecorded();
       
   601         if ($recorded != null) {
       
   602           return $recorded->getText();
       
   603         } else {
       
   604           return null;
       
   605         }
       
   606     }
       
   607 
       
   608     /**
       
   609      * Sets the date that the video was recorded.
       
   610      *
       
   611      * @param string $recorded The date that the video was recorded, in the
       
   612      *          format of '2001-06-19'
       
   613      */
       
   614     public function setVideoRecorded($recorded)
       
   615     {
       
   616         $this->setRecorded(
       
   617             new Zend_Gdata_YouTube_Extension_Recorded($recorded));
       
   618         return $this;
       
   619     }
       
   620 
       
   621     /**
       
   622      * Gets the georss:where element
       
   623      *
       
   624      * @return Zend_Gdata_Geo_Extension_GeoRssWhere
       
   625      */
       
   626     public function getWhere()
       
   627     {
       
   628         return $this->_where;
       
   629     }
       
   630 
       
   631     /**
       
   632      * Sets the georss:where element
       
   633      *
       
   634      * @param Zend_Gdata_Geo_Extension_GeoRssWhere $value The georss:where class value
       
   635      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   636      */
       
   637     public function setWhere($value)
       
   638     {
       
   639         $this->_where = $value;
       
   640         return $this;
       
   641     }
       
   642 
       
   643     /**
       
   644      * Gets the title of the video as a string.  null is returned
       
   645      * if the video title is not available.
       
   646      *
       
   647      * @return string|null The title of the video
       
   648      */
       
   649     public function getVideoTitle()
       
   650     {
       
   651         $this->ensureMediaGroupIsNotNull();
       
   652         if ($this->getMediaGroup()->getTitle() != null) {
       
   653             return $this->getMediaGroup()->getTitle()->getText();
       
   654         } else {
       
   655             return null;
       
   656         }
       
   657     }
       
   658 
       
   659     /**
       
   660      * Sets the title of the video as a string.
       
   661      *
       
   662      * @param string $title Title for the video
       
   663      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   664      */
       
   665     public function setVideoTitle($title)
       
   666     {
       
   667         $this->ensureMediaGroupIsNotNull();
       
   668         $this->getMediaGroup()->setTitle(
       
   669             new Zend_Gdata_Media_Extension_MediaTitle($title));
       
   670         return $this;
       
   671     }
       
   672 
       
   673     /**
       
   674      * Sets the description of the video as a string.
       
   675      *
       
   676      * @param string $description Description for the video
       
   677      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   678      */
       
   679     public function setVideoDescription($description)
       
   680     {
       
   681         $this->ensureMediaGroupIsNotNull();
       
   682         $this->getMediaGroup()->setDescription(
       
   683             new Zend_Gdata_Media_Extension_MediaDescription($description));
       
   684         return $this;
       
   685     }
       
   686 
       
   687 
       
   688     /**
       
   689      * Gets the description  of the video as a string.  null is returned
       
   690      * if the video description is not available.
       
   691      *
       
   692      * @return string|null The description of the video
       
   693      */
       
   694     public function getVideoDescription()
       
   695     {
       
   696         $this->ensureMediaGroupIsNotNull();
       
   697         if ($this->getMediaGroup()->getDescription() != null) {
       
   698             return $this->getMediaGroup()->getDescription()->getText();
       
   699         } else {
       
   700             return null;
       
   701         }
       
   702     }
       
   703 
       
   704     /**
       
   705      * Gets the URL of the YouTube video watch page.  null is returned
       
   706      * if the video watch page URL is not available.
       
   707      *
       
   708      * @return string|null The URL of the YouTube video watch page
       
   709      */
       
   710     public function getVideoWatchPageUrl()
       
   711     {
       
   712         $this->ensureMediaGroupIsNotNull();
       
   713         if ($this->getMediaGroup()->getPlayer() != null &&
       
   714              array_key_exists(0, $this->getMediaGroup()->getPlayer())) {
       
   715             $players = $this->getMediaGroup()->getPlayer();
       
   716             return $players[0]->getUrl();
       
   717         } else {
       
   718             return null;
       
   719         }
       
   720     }
       
   721 
       
   722     /**
       
   723      * Gets an array of the thumbnails representing the video.
       
   724      * Each thumbnail is an element of the array, and is an
       
   725      * array of the thumbnail properties - time, height, width,
       
   726      * and url.  For convient usage inside a foreach loop, an
       
   727      * empty array is returned if there are no thumbnails.
       
   728      *
       
   729      * @return array An array of video thumbnails.
       
   730      */
       
   731     public function getVideoThumbnails()
       
   732     {
       
   733         $this->ensureMediaGroupIsNotNull();
       
   734         if ($this->getMediaGroup()->getThumbnail() != null) {
       
   735 
       
   736             $thumbnailArray = array();
       
   737 
       
   738             foreach ($this->getMediaGroup()->getThumbnail() as $thumbnailObj) {
       
   739                 $thumbnail = array();
       
   740                 $thumbnail['time'] = $thumbnailObj->time;
       
   741                 $thumbnail['height'] = $thumbnailObj->height;
       
   742                 $thumbnail['width'] = $thumbnailObj->width;
       
   743                 $thumbnail['url'] = $thumbnailObj->url;
       
   744                 $thumbnailArray[] = $thumbnail;
       
   745             }
       
   746             return $thumbnailArray;
       
   747         } else {
       
   748             return array();
       
   749         }
       
   750     }
       
   751 
       
   752     /**
       
   753      * Gets the URL of the flash player SWF.  null is returned if the
       
   754      * duration value is not available.
       
   755      *
       
   756      * @return string|null The URL of the flash player SWF
       
   757      */
       
   758     public function getFlashPlayerUrl()
       
   759     {
       
   760         $this->ensureMediaGroupIsNotNull();
       
   761         foreach ($this->getMediaGroup()->getContent() as $content) {
       
   762                 if ($content->getType() === 'application/x-shockwave-flash') {
       
   763                     return $content->getUrl();
       
   764                 }
       
   765             }
       
   766         return null;
       
   767     }
       
   768 
       
   769     /**
       
   770      * Gets the duration of the video, in seconds.  null is returned
       
   771      * if the duration value is not available.
       
   772      *
       
   773      * @return string|null The duration of the video, in seconds.
       
   774      */
       
   775     public function getVideoDuration()
       
   776     {
       
   777         $this->ensureMediaGroupIsNotNull();
       
   778         if ($this->getMediaGroup()->getDuration() != null) {
       
   779             return $this->getMediaGroup()->getDuration()->getSeconds();
       
   780         } else {
       
   781             return null;
       
   782         }
       
   783     }
       
   784 
       
   785     /**
       
   786      * Checks whether the video is private.
       
   787      *
       
   788      * @return bool Return true if video is private
       
   789      */
       
   790     public function isVideoPrivate()
       
   791     {
       
   792         $this->ensureMediaGroupIsNotNull();
       
   793         if ($this->getMediaGroup()->getPrivate() != null) {
       
   794             return true;
       
   795         } else {
       
   796             return false;
       
   797         }
       
   798     }
       
   799 
       
   800     /**
       
   801      * Sets video to private.
       
   802      *
       
   803      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   804      */
       
   805     public function setVideoPrivate()
       
   806     {
       
   807         $this->ensureMediaGroupIsNotNull();
       
   808         $this->getMediaGroup()->setPrivate(new Zend_Gdata_YouTube_Extension_Private());
       
   809         return $this;
       
   810     }
       
   811 
       
   812     /**
       
   813      * Sets a private video to be public.
       
   814      *
       
   815      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   816      */
       
   817     public function setVideoPublic()
       
   818     {
       
   819         $this->ensureMediaGroupIsNotNull();
       
   820         $this->getMediaGroup()->private = null;
       
   821         return $this;
       
   822     }
       
   823 
       
   824     /**
       
   825      * Gets an array of the tags assigned to this video.  For convient
       
   826      * usage inside a foreach loop, an empty array is returned when there
       
   827      * are no tags assigned.
       
   828      *
       
   829      * @return array An array of the tags assigned to this video
       
   830      */
       
   831     public function getVideoTags()
       
   832     {
       
   833         $this->ensureMediaGroupIsNotNull();
       
   834         if ($this->getMediaGroup()->getKeywords() != null) {
       
   835 
       
   836             $keywords = $this->getMediaGroup()->getKeywords();
       
   837             $keywordsString = $keywords->getText();
       
   838             if (strlen(trim($keywordsString)) > 0) {
       
   839                 return preg_split('/(, *)|,/', $keywordsString);
       
   840             }
       
   841         }
       
   842         return array();
       
   843     }
       
   844 
       
   845     /**
       
   846      * Sets the keyword tags for a video.
       
   847      *
       
   848      * @param mixed $tags Either a comma-separated string or an array
       
   849      * of tags for the video
       
   850      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   851      */
       
   852     public function setVideoTags($tags)
       
   853     {
       
   854         $this->ensureMediaGroupIsNotNull();
       
   855         $keywords = new Zend_Gdata_Media_Extension_MediaKeywords();
       
   856         if (is_array($tags)) {
       
   857             $tags = implode(', ', $tags);
       
   858         }
       
   859         $keywords->setText($tags);
       
   860         $this->getMediaGroup()->setKeywords($keywords);
       
   861         return $this;
       
   862     }
       
   863 
       
   864     /**
       
   865      * Gets the number of views for this video.  null is returned if the
       
   866      * number of views is not available.
       
   867      *
       
   868      * @return string|null The number of views for this video
       
   869      */
       
   870     public function getVideoViewCount()
       
   871     {
       
   872         if ($this->getStatistics() != null) {
       
   873             return $this->getStatistics()->getViewCount();
       
   874         } else {
       
   875             return null;
       
   876         }
       
   877     }
       
   878 
       
   879     /**
       
   880      * Gets the location specified for this video, if available.  The location
       
   881      * is returned as an array containing the keys 'longitude' and 'latitude'.
       
   882      * null is returned if the location is not available.
       
   883      *
       
   884      * @return array|null The location specified for this video
       
   885      */
       
   886     public function getVideoGeoLocation()
       
   887     {
       
   888         if ($this->getWhere() != null &&
       
   889             $this->getWhere()->getPoint() != null &&
       
   890             ($position = $this->getWhere()->getPoint()->getPos()) != null) {
       
   891 
       
   892             $positionString = $position->__toString();
       
   893 
       
   894             if (strlen(trim($positionString)) > 0) {
       
   895                 $positionArray = explode(' ', trim($positionString));
       
   896                 if (count($positionArray) == 2) {
       
   897                     $returnArray = array();
       
   898                     $returnArray['latitude'] = $positionArray[0];
       
   899                     $returnArray['longitude'] = $positionArray[1];
       
   900                     return $returnArray;
       
   901                 }
       
   902             }
       
   903         }
       
   904         return null;
       
   905     }
       
   906 
       
   907     /**
       
   908      * Gets the rating information for this video, if available.  The rating
       
   909      * is returned as an array containing the keys 'average' and 'numRaters'.
       
   910      * null is returned if the rating information is not available.
       
   911      *
       
   912      * @return array|null The rating information for this video
       
   913      */
       
   914     public function getVideoRatingInfo()
       
   915     {
       
   916         if ($this->getRating() != null) {
       
   917             $returnArray = array();
       
   918             $returnArray['average'] = $this->getRating()->getAverage();
       
   919             $returnArray['numRaters'] = $this->getRating()->getNumRaters();
       
   920             return $returnArray;
       
   921         } else {
       
   922             return null;
       
   923         }
       
   924     }
       
   925 
       
   926     /**
       
   927      * Gets the category of this video, if available.  The category is returned
       
   928      * as a string. Valid categories are found at:
       
   929      * http://gdata.youtube.com/schemas/2007/categories.cat
       
   930      * If the category is not set, null is returned.
       
   931      *
       
   932      * @return string|null The category of this video
       
   933      */
       
   934     public function getVideoCategory()
       
   935     {
       
   936         $this->ensureMediaGroupIsNotNull();
       
   937         $categories = $this->getMediaGroup()->getCategory();
       
   938         if ($categories != null) {
       
   939             foreach($categories as $category) {
       
   940                 if ($category->getScheme() == self::YOUTUBE_CATEGORY_SCHEMA) {
       
   941                     return $category->getText();
       
   942                 }
       
   943             }
       
   944         }
       
   945         return null;
       
   946     }
       
   947 
       
   948     /**
       
   949      * Sets the category of the video as a string.
       
   950      *
       
   951      * @param string $category Categories for the video
       
   952      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   953      */
       
   954     public function setVideoCategory($category)
       
   955     {
       
   956         $this->ensureMediaGroupIsNotNull();
       
   957         $this->getMediaGroup()->setCategory(array(new Zend_Gdata_Media_Extension_MediaCategory($category, self::YOUTUBE_CATEGORY_SCHEMA)));
       
   958         return $this;
       
   959     }
       
   960 
       
   961     /**
       
   962      * Gets the developer tags for the video, if available and if client is
       
   963      * authenticated with a valid developerKey. The tags are returned
       
   964      * as an array.
       
   965      * If no tags are set, null is returned.
       
   966      *
       
   967      * @return array|null The developer tags for this video or null if none were set.
       
   968      */
       
   969     public function getVideoDeveloperTags()
       
   970     {
       
   971         $developerTags = null;
       
   972         $this->ensureMediaGroupIsNotNull();
       
   973 
       
   974         $categoryArray = $this->getMediaGroup()->getCategory();
       
   975         if ($categoryArray != null) {
       
   976             foreach ($categoryArray as $category) {
       
   977                 if ($category instanceof Zend_Gdata_Media_Extension_MediaCategory) {
       
   978                     if ($category->getScheme() == self::YOUTUBE_DEVELOPER_TAGS_SCHEMA) {
       
   979                         $developerTags[] = $category->getText();
       
   980                     }
       
   981                 }
       
   982             }
       
   983             return $developerTags;
       
   984         }
       
   985         return null;
       
   986     }
       
   987 
       
   988     /**
       
   989      * Adds a developer tag to array of tags for the video.
       
   990      *
       
   991      * @param string $developerTag DeveloperTag for the video
       
   992      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
   993      */
       
   994     public function addVideoDeveloperTag($developerTag)
       
   995     {
       
   996         $this->ensureMediaGroupIsNotNull();
       
   997         $newCategory = new Zend_Gdata_Media_Extension_MediaCategory($developerTag, self::YOUTUBE_DEVELOPER_TAGS_SCHEMA);
       
   998 
       
   999         if ($this->getMediaGroup()->getCategory() == null) {
       
  1000             $this->getMediaGroup()->setCategory($newCategory);
       
  1001         } else {
       
  1002             $categories = $this->getMediaGroup()->getCategory();
       
  1003             $categories[] = $newCategory;
       
  1004             $this->getMediaGroup()->setCategory($categories);
       
  1005         }
       
  1006         return $this;
       
  1007     }
       
  1008 
       
  1009     /**
       
  1010      * Set multiple developer tags for the video as strings.
       
  1011      *
       
  1012      * @param array $developerTags Array of developerTag for the video
       
  1013      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
       
  1014      */
       
  1015     public function setVideoDeveloperTags($developerTags)
       
  1016     {
       
  1017         foreach($developerTags as $developerTag) {
       
  1018             $this->addVideoDeveloperTag($developerTag);
       
  1019         }
       
  1020         return $this;
       
  1021     }
       
  1022 
       
  1023 
       
  1024     /**
       
  1025      * Get the current publishing state of the video.
       
  1026      *
       
  1027      * @return Zend_Gdata_YouTube_Extension_State|null The publishing state of this video
       
  1028      */
       
  1029     public function getVideoState()
       
  1030     {
       
  1031         $control = $this->getControl();
       
  1032         if ($control != null &&
       
  1033             $control->getDraft() != null &&
       
  1034             $control->getDraft()->getText() == 'yes') {
       
  1035 
       
  1036             return $control->getState();
       
  1037         }
       
  1038         return null;
       
  1039     }
       
  1040 
       
  1041     /**
       
  1042      * Get the VideoEntry's Zend_Gdata_YouTube_Extension_MediaGroup object.
       
  1043      * If the mediaGroup does not exist, then set it.
       
  1044      *
       
  1045      * @return void
       
  1046      */
       
  1047     public function ensureMediaGroupIsNotNull()
       
  1048     {
       
  1049         if ($this->getMediagroup() == null) {
       
  1050             $this->setMediagroup(new Zend_Gdata_YouTube_Extension_MediaGroup());
       
  1051         }
       
  1052     }
       
  1053 
       
  1054     /**
       
  1055      * Helper function to conveniently set a video's rating.
       
  1056      *
       
  1057      * @param integer $ratingValue A number representing the rating. Must
       
  1058      *          be between 1 and 5 inclusive.
       
  1059      * @throws Zend_Gdata_Exception
       
  1060      * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface.
       
  1061      */
       
  1062     public function setVideoRating($ratingValue)
       
  1063     {
       
  1064         if ($ratingValue < 1 || $ratingValue > 5) {
       
  1065             require_once 'Zend/Gdata/App/InvalidArgumentException.php';
       
  1066             throw new Zend_Gdata_App_InvalidArgumentException(
       
  1067                 'Rating for video entry must be between 1 and 5 inclusive.');
       
  1068         }
       
  1069 
       
  1070          require_once 'Zend/Gdata/Extension/Rating.php';
       
  1071          $rating = new Zend_Gdata_Extension_Rating(null, 1, 5, null,
       
  1072             $ratingValue);
       
  1073         $this->setRating($rating);
       
  1074         return $this;
       
  1075     }
       
  1076 
       
  1077     /**
       
  1078      * Retrieve the URL for a video's comment feed.
       
  1079      *
       
  1080      * @return string|null The URL if found, or null if not found.
       
  1081      */
       
  1082     public function getVideoCommentFeedUrl()
       
  1083     {
       
  1084         $commentsExtension = $this->getComments();
       
  1085         $commentsFeedUrl = null;
       
  1086         if ($commentsExtension) {
       
  1087             $commentsFeedLink = $commentsExtension->getFeedLink();
       
  1088             if ($commentsFeedLink) {
       
  1089                 $commentsFeedUrl = $commentsFeedLink->getHref();
       
  1090             }
       
  1091         }
       
  1092         return $commentsFeedUrl;
       
  1093     }
       
  1094 
       
  1095 }