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 Atom.
 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_Atom 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:         $atom           = $this->DOM->createElement('feed');
 65:         $atom->setAttribute('xmlns','http://www.w3.org/2005/Atom');
 66:         $atom->setAttribute('xml:lang',$feed->getLang());
 67:         $this->DOM->appendChild($atom);
 68:         
 69:         $this->buildFeedInfo($atom);
 70:         $this->buildItems($atom);
 71:     }
 72:     
 73:     /**
 74:      * Construit le début du flux avec les informations qui lui sont propres
 75:      * @param DOMElement $atom
 76:      * @access private
 77:      * @return void
 78:      */
 79:     private function buildFeedInfo($atom)
 80:     {
 81:         $id     = $this->DOM->createElement('id',$this->feed->getId());
 82:         $title  = $this->DOM->createElement('title',$this->feed->getTitle());
 83:         $date   = $this->DOM->createElement('updated',$this->convertDate($this->feed->getDate()));
 84:         
 85:         $atom->appendChild($id);
 86:         $atom->appendChild($title);
 87:         $atom->appendChild($date);
 88:         
 89:         $dLink  = $this->feed->getLink();
 90:         if(!empty($dLink))
 91:         {
 92:             $link   = $this->DOM->createElement('link');
 93:             $link->setAttribute('rel','alternate');
 94:             $link->setAttribute('href',$dLink);
 95:             $atom->appendChild($link);
 96:         }
 97:         
 98:         $eAuthor = $this->feed->getAuthor();
 99:         if(!empty($eAuthor))
100:         {
101:             $author = $this->DOM->createElement('author');
102:             $atom->appendChild($author);
103:             if(key_exists('name',$eAuthor))
104:             {
105:                 $name = $this->DOM->createElement('name',$eAuthor['name']);
106:                 $author->appendChild($name);
107:             }
108:             
109:             if(key_exists('email',$eAuthor))
110:             {
111:                 $email = $this->DOM->createElement('email',$eAuthor['email']);
112:                 $author->appendChild($email);
113:             }
114:             
115:             if(key_exists('uri',$eAuthor))
116:             {
117:                 $uri = $this->DOM->createElement('uri',$eAuthor['uri']);
118:                 $author->appendChild($uri);
119:             }
120:         }
121:     }
122:     
123:     /**
124:      * Construit les éléments du flux
125:      * @param DOMElement $channel
126:      * @access private
127:      * @return void
128:      */
129:     private function buildItems($atom)
130:     {
131:         if(!empty($this->entries))
132:         {
133:             foreach($this->entries as $entry)
134:             {
135:                 $item   = $this->DOM->createElement('entry');
136:                 $atom->appendChild($item);
137:                 
138:                 $id     = $this->DOM->createElement('id',$entry->getId());
139:                 $title  = $this->DOM->createElement('title',$entry->getTitle());
140:                 $date   = $this->DOM->createElement('updated',$this->convertDate($entry->getDate()));
141:                 
142:                 $item->appendChild($id);
143:                 $item->appendChild($title);
144:                 $item->appendChild($date);
145:                 
146:                 $eAuthor = $entry->getAuthor();
147:                 if(!empty($eAuthor))
148:                 {
149:                     $author = $this->DOM->createElement('author',$eAuthor);
150:                     $item->appendChild($author);
151:                     if(key_exists('name',$eAuthor))
152:                     {
153:                         $name = $this->DOM->createElement('name',$eAuthor['name']);
154:                         $author->appendChild($name);
155:                     }
156:                     
157:                     if(key_exists('email',$eAuthor))
158:                     {
159:                         $email = $this->DOM->createElement('email',$eAuthor['email']);
160:                         $author->appendChild($email);
161:                     }
162:                     
163:                     if(key_exists('uri',$eAuthor))
164:                     {
165:                         $uri = $this->DOM->createElement('uri',$eAuthor['uri']);
166:                         $author->appendChild($uri);
167:                     }
168:                 }
169:                 
170:                 $dContent = $entry->getContent();
171:                 if(!empty($dContent))
172:                 {
173:                     //$content = $this->DOM->createElement('content',);
174:                     $content    = $this->DOM->createElement('content');
175:                     $cdata      = $this->DOM->createCDATASection($dContent);
176:                     $content->appendChild($cdata);
177:                     $item->appendChild($content);
178:                 }
179:                 
180:                 $dLink = $entry->getLink();
181:                 if(!empty($dLink))
182:                 {
183:                     $link = $this->DOM->createElement('link');
184:                     $link->setAttribute('href',$dLink);
185:                     $item->appendChild($link);
186:                 }
187:             }
188:         }
189:     }
190:     
191:     /**
192:      * Conversion d'un timestamp ou d'une date mysql au format RFC 3339
193:      * @param mixed $date Date au format timestamp mysql ou RFC 3339
194:      * @return string
195:      */
196:     private function convertDate($date)
197:     {
198:         if(is_int($date)) //Timestamp
199:         {
200:             return date('c',$date);
201:         }
202:         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
203:         {
204:             $datetime = explode(' ',$date);
205:             list($annee,$mois,$jour) = explode('/',$datetime[0]);
206:             list($heure,$min,$sec)   = explode(':',$datetime[1]);
207:             return date('c',mktime($heure,$min,$sec,$mois,$jour,$annee));
208:         }
209:         else
210:         {
211:             return $date;
212:         }
213:     }
214:     
215:     /**
216:      * (non-PHPdoc)
217:      * @see Feed/Writers/Feed_Writers_Interface#finalize()
218:      */
219:     public function finalize()
220:     {
221:         if(!empty($this->file))
222:         {
223:             if(file_exists($this->file) && is_writable($this->file))
224:                 return $this->DOM->save($this->file);
225:             else
226:                 throw new Exception('Impossible d\'ecrire dans le fichier');
227:         }
228:         else
229:         {
230:             return $this->DOM->saveXML();
231:         }
232:     }
233: }
234: ?>
Pry Framework API documentation generated by ApiGen 2.6.1