Overview

Packages

  • Auth
  • Config
  • Controller
  • Date
  • Db
  • Feed
    • Abstract
    • Writers
  • File
    • Decorator
  • Form
    • Element
  • Image
  • Log
    • Writer
  • Net
    • Exception
  • None
  • PHP
  • PHPMailer
  • Session
  • Util
  • Validate
    • Validator
  • Zend
    • Registry

Classes

  • Feed_Writers_Atom
  • Feed_Writers_Rss

Interfaces

  • Feed_Writers_Interface
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Pry Framework
  4:  *
  5:  * LICENSE
  6:  *
  7:  * This source file is subject to the new BSD license that is bundled
  8:  * with this package in the file LICENSE.txt.
  9:  * 
 10:  * @version $Revision: 276 $
 11:  */
 12: 
 13: /**
 14:  * Writer de flux au format RSS.
 15:  * @category Pry
 16:  * @package Feed
 17:  * @subpackage Feed_Writers
 18:  * @version 1.1.1
 19:  * @author Olivier ROGER <oroger.fr>
 20:  *       
 21:  */
 22: class Feed_Writers_Rss implements Feed_Writers_Interface
 23: {
 24:     /**
 25:      * Objet feed
 26:      * @access private
 27:      * @var Feed_Feed
 28:      */
 29:     private $feed;
 30:     
 31:     /**
 32:      * Différentes entrées
 33:      * @access private
 34:      * @var array
 35:      */
 36:     private $entries;
 37:     
 38:     /**
 39:      * Objet Document DOM
 40:      * @access private
 41:      * @var DOMDocument
 42:      */
 43:     private $DOM;
 44:     
 45:     /**
 46:      * Fichier de destination. Si null flux affiché directement
 47:      * @access private
 48:      * @var string
 49:      */
 50:     private $file;
 51:     
 52:     /**
 53:      * Constructeur. Initialise la construction du flux
 54:      * @param Feed_Feed $feed Objet Feed
 55:      * @param string $fichier Fichier (optionnel)
 56:      */
 57:     public function __construct(Feed_Feed $feed,$fichier=null)
 58:     {
 59:         $this->feed     = $feed;
 60:         $this->entries  = $feed->getEntries();
 61:         $this->DOM      = new DOMDocument('1.0','UTF-8');
 62:         $this->file     = $fichier;
 63:         
 64:         $rss            = $this->DOM->createElement('rss');
 65:         $rss->setAttribute('version','2.0');
 66:         $this->DOM->appendChild($rss);
 67:         
 68:         $channel = $this->DOM->createElement('channel');
 69:         $rss->appendChild($channel);
 70:         
 71:         $this->buildFeedInfo($channel);
 72:         $this->buildItems($channel);
 73:     }
 74:     
 75:     /**
 76:      * Construit le début du flux avec les informations qui lui sont propres
 77:      * @param DOMElement $channel
 78:      * @access private
 79:      * @return void
 80:      */
 81:     private function buildFeedInfo($channel)
 82:     {
 83:         $title  = $this->DOM->createElement('title',$this->feed->getTitle());
 84:         $link   = $this->DOM->createElement('link',$this->feed->getLink());
 85:         $desc   = $this->DOM->createElement('description');
 86:         $cdata  = $this->DOM->createCDATASection($this->feed->getDescription());
 87:         $lang   = $this->DOM->createElement('language',$this->feed->getLang());
 88:         $date   = $this->DOM->createElement('lastBuildDate',$this->feed->getDate());
 89:         $copy   = $this->DOM->createElement('copyright',$this->feed->getCopyright());
 90:         
 91:         $channel->appendChild($title);
 92:         $channel->appendChild($link);
 93:         $desc->appendChild($cdata);
 94:         $channel->appendChild($desc);
 95:         $channel->appendChild($lang);
 96:         $channel->appendChild($date);
 97:         $channel->appendChild($copy);
 98:         
 99:     }
100:     
101:     /**
102:      * Construit les éléments du flux
103:      * @param DOMElement $channel
104:      * @access private
105:      * @return void
106:      */
107:     private function buildItems($channel)
108:     {
109:         if(!empty($this->entries))
110:         {
111:             foreach($this->entries as $entry)
112:             {
113:                 $item   = $this->DOM->createElement('item');
114:                 $channel->appendChild($item);
115:                 $title  = $this->DOM->createElement('title',$entry->getTitle());
116:                 $link   = $this->DOM->createElement('link',$entry->getLink());
117:                 $desc   = $this->DOM->createElement('description');
118:                 $cdata  = $this->DOM->createCDATASection($entry->getContent());
119:                 $desc->appendChild($cdata);
120:                 $item->appendChild($title);
121:                 $item->appendChild($link);
122:                 $item->appendChild($desc);
123:                 
124:                 //Options
125:                 $eAuthor = $entry->getAuthor('name');
126:                 if(!empty($eAuthor))
127:                 {
128:                     $author = $this->DOM->createElement('author',$eAuthor);
129:                     $item->appendChild($author);
130:                 }
131:                 
132:                 $eDate =$entry->getDate();
133:                 if(!empty($eDate))
134:                 {
135:                     $date = $this->DOM->createElement('pubDate',$eDate);
136:                     $item->appendChild($date);
137:                 }
138:                 
139:                 $eCom = $entry->getComments();
140:                 if(!empty($eCom))
141:                 {
142:                     $com = $this->DOM->createElement('comments',$eCom);
143:                     $item->appendChild($com);
144:                 }
145:                 
146:                 $eId = $entry->getId();
147:                 if(!empty($eId))
148:                 {
149:                     $guid = $this->DOM->createElement('guid',$eId);
150:                     $item->appendChild($guid);
151:                 }
152:             }
153:         }
154:     }
155:     
156:     /**
157:      * Conversion d'un timestamp ou d'une date mysql au format RFC 2822
158:      * @param mixed $date Date au format timestamp mysql ou RFC 2822
159:      * @return string
160:      */
161:     private function convertDate($date)
162:     {
163:         if(is_int($date)) //Timestamp
164:         {
165:             return date('r',$date);
166:         }
167:         elseif(preg_match('`^(\d{4}|\d{2})-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}$`',$date)) //Date mysql
168:         {
169:             $datetime = explode(' ',$date);
170:             list($annee,$mois,$jour) = explode('/',$datetime[0]);
171:             list($heure,$min,$sec)   = explode(':',$datetime[1]);
172:             return date('r',mktime($heure,$min,$sec,$mois,$jour,$annee));
173:         }
174:         else
175:         {
176:             return $date;
177:         }
178:     }
179:     
180:     /**
181:      * (non-PHPdoc)
182:      * @see Feed/Writers/Feed_Writers_Interface#finalize()
183:      */
184:     public function finalize()
185:     {
186:         if(!empty($this->file))
187:         {
188:             if(file_exists($this->file) && is_writable($this->file))
189:                 return $this->DOM->save($this->file);
190:             else
191:                 throw new Exception('Impossible d\'ecrire dans le fichier');
192:         }
193:         else
194:         {
195:             return $this->DOM->saveXML();
196:         }
197:     }
198:     
199: }
200:  ?>
Pry Framework API documentation generated by ApiGen 2.6.1