1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13: 14: 15: 16: 17: 18: 19: 20: 21:
22: class Feed_Writers_Rss implements Feed_Writers_Interface
23: {
24: 25: 26: 27: 28:
29: private $feed;
30:
31: 32: 33: 34: 35:
36: private $entries;
37:
38: 39: 40: 41: 42:
43: private $DOM;
44:
45: 46: 47: 48: 49:
50: private $file;
51:
52: 53: 54: 55: 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: 77: 78: 79: 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: 103: 104: 105: 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:
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: 158: 159: 160:
161: private function convertDate($date)
162: {
163: if(is_int($date))
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))
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: 182: 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: ?>