| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2010-02-10 21:21:42 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * StatusNet, the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-02-12 19:00:35 -08:00
										 |  |  |  * Class for building an Atom feed from a collection of notices | 
					
						
							| 
									
										
										
										
											2010-02-10 21:21:42 -08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENCE: This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Feed | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-11 13:54:40 -08:00
										 |  |  | if (!defined('STATUSNET')) | 
					
						
							| 
									
										
										
										
											2010-02-10 21:21:42 -08:00
										 |  |  | { | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Class for creating a feed that represents a collection of notices. Builds the | 
					
						
							|  |  |  |  * feed in memory. Get the feed as a string with AtomNoticeFeed::getString(). | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category Feed | 
					
						
							|  |  |  |  * @package  StatusNet | 
					
						
							|  |  |  |  * @author   Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link     http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  | class AtomNoticeFeed extends Atom10Feed | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-27 13:49:23 -07:00
										 |  |  |     var $cur; | 
					
						
							| 
									
										
										
										
											2014-07-28 10:57:45 +02:00
										 |  |  |     protected $scoped=null; | 
					
						
							| 
									
										
										
										
											2010-05-27 13:49:23 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Constructor - adds a bunch of XML namespaces we need in our | 
					
						
							|  |  |  |      * notice-specific Atom feeds, and allows setting the current | 
					
						
							|  |  |  |      * authenticated user (useful for API methods). | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param User    $cur     the current authenticated user (optional) | 
					
						
							|  |  |  |      * @param boolean $indent  Whether to indent XML output | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function __construct($cur = null, $indent = true) { | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |         parent::__construct($indent); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-28 10:57:45 +02:00
										 |  |  |         $this->cur = $cur ?: common_current_user(); | 
					
						
							|  |  |  |         $this->scoped = !is_null($this->cur) ? $this->cur->getProfile() : null; | 
					
						
							| 
									
										
										
										
											2010-05-27 13:49:23 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-10 18:55:14 -08:00
										 |  |  |         // Feeds containing notice info use these namespaces
 | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->addNamespace( | 
					
						
							| 
									
										
										
										
											2010-02-18 18:20:48 +00:00
										 |  |  |             'thr', | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |             'http://purl.org/syndication/thread/1.0' | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2010-02-10 18:55:14 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->addNamespace( | 
					
						
							| 
									
										
										
										
											2010-02-18 18:20:48 +00:00
										 |  |  |             'georss', | 
					
						
							| 
									
										
										
										
											2010-02-10 18:55:14 -08:00
										 |  |  |             'http://www.georss.org/georss' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->addNamespace( | 
					
						
							| 
									
										
										
										
											2010-02-18 18:20:48 +00:00
										 |  |  |             'activity', | 
					
						
							| 
									
										
										
										
											2010-02-10 18:55:14 -08:00
										 |  |  |             'http://activitystrea.ms/spec/1.0/' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-25 16:06:49 -08:00
										 |  |  |         $this->addNamespace( | 
					
						
							|  |  |  |             'media', | 
					
						
							|  |  |  |             'http://purl.org/syndication/atommedia' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-21 14:43:28 -08:00
										 |  |  |         $this->addNamespace( | 
					
						
							|  |  |  |             'poco', | 
					
						
							|  |  |  |             'http://portablecontacts.net/spec/1.0' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-10 18:55:14 -08:00
										 |  |  |         // XXX: What should the uri be?
 | 
					
						
							|  |  |  |         $this->addNamespace( | 
					
						
							| 
									
										
										
										
											2010-02-18 18:20:48 +00:00
										 |  |  |             'ostatus', | 
					
						
							| 
									
										
										
										
											2010-02-10 18:55:14 -08:00
										 |  |  |             'http://ostatus.org/schema/1.0' | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2010-05-05 22:35:16 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->addNamespace( | 
					
						
							|  |  |  |             'statusnet', | 
					
						
							| 
									
										
										
										
											2010-06-22 16:28:06 -07:00
										 |  |  |             'http://status.net/schema/api/1/' | 
					
						
							| 
									
										
										
										
											2010-05-05 22:35:16 -07:00
										 |  |  |         ); | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-10 21:21:42 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Add more than one Notice to the feed | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param mixed $notices an array of Notice objects or handle | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |     function addEntryFromNotices($notices) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (is_array($notices)) { | 
					
						
							|  |  |  |             foreach ($notices as $notice) { | 
					
						
							|  |  |  |                 $this->addEntryFromNotice($notice); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-07-09 13:56:02 +02:00
										 |  |  |         } elseif ($notices instanceof Notice) { | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |             while ($notices->fetch()) { | 
					
						
							| 
									
										
										
										
											2010-02-11 13:54:40 -08:00
										 |  |  |                 $this->addEntryFromNotice($notices); | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-07-09 13:56:02 +02:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             throw new ServerException('addEntryFromNotices got neither an array nor a Notice object'); | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-10 21:21:42 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Add a single Notice to the feed | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Notice $notice a Notice to add | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-07-09 13:56:02 +02:00
										 |  |  |     function addEntryFromNotice(Notice $notice) | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-07-13 10:53:47 -04:00
										 |  |  |         try { | 
					
						
							|  |  |  |             $source = $this->showSource(); | 
					
						
							|  |  |  |             $author = $this->showAuthor(); | 
					
						
							| 
									
										
										
										
											2010-02-10 14:24:16 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-28 10:57:45 +02:00
										 |  |  |             $this->addEntryRaw($notice->asAtomEntry(false, $source, $author, $this->scoped)); | 
					
						
							| 
									
										
										
										
											2010-07-13 10:53:47 -04:00
										 |  |  |         } catch (Exception $e) { | 
					
						
							|  |  |  |             common_log(LOG_ERR, $e->getMessage()); | 
					
						
							|  |  |  |             // we continue on exceptions
 | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-03-03 17:35:18 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-02-12 19:00:35 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-03 17:35:18 -08:00
										 |  |  |     function showSource() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-02-12 19:00:35 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-03 17:35:18 -08:00
										 |  |  |     function showAuthor() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |