| 
									
										
										
										
											2008-07-14 23:18:12 -04:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * StatusNet, the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2008-07-14 23:18:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  |  * Base API action | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENCE: This program is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2008-07-14 23:18:12 -04:00
										 |  |  |  * 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/>. | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * @category  API | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							| 
									
										
										
										
											2009-10-12 16:36:00 -07:00
										 |  |  |  * @author    Craig Andrews <candrews@integralblue.com> | 
					
						
							|  |  |  |  * @author    Dan Moore <dan@moore.cx> | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author    Jeffery To <jeffery.to@gmail.com> | 
					
						
							|  |  |  |  * @author    Toby Inkster <mail@tobyinkster.co.uk> | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  |  * @author    Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @copyright 2009 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/ | 
					
						
							| 
									
										
										
										
											2008-07-14 23:18:12 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  | if (!defined('STATUSNET')) { | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-07-14 23:18:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Contains most of the Twitter-compatible API output functions. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category API | 
					
						
							|  |  |  |  * @package  StatusNet | 
					
						
							| 
									
										
										
										
											2009-10-12 16:36:00 -07:00
										 |  |  |  * @author   Craig Andrews <candrews@integralblue.com> | 
					
						
							|  |  |  |  * @author   Dan Moore <dan@moore.cx> | 
					
						
							|  |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author   Jeffery To <jeffery.to@gmail.com> | 
					
						
							|  |  |  |  * @author   Toby Inkster <mail@tobyinkster.co.uk> | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  |  * @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/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ApiAction extends Action | 
					
						
							| 
									
										
										
										
											2008-12-23 14:49:23 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-01-14 02:16:03 +00:00
										 |  |  |     const READ_ONLY  = 1; | 
					
						
							|  |  |  |     const READ_WRITE = 2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-14 18:16:45 +00:00
										 |  |  |     var $format    = null; | 
					
						
							|  |  |  |     var $user      = null; | 
					
						
							|  |  |  |     var $auth_user = null; | 
					
						
							|  |  |  |     var $page      = null; | 
					
						
							|  |  |  |     var $count     = null; | 
					
						
							|  |  |  |     var $max_id    = null; | 
					
						
							|  |  |  |     var $since_id  = null; | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-14 02:16:03 +00:00
										 |  |  |     var $access    = self::READ_ONLY;  // read (default) or read-write
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-06 13:33:47 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Initialization. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param array $args Web and URL arguments | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |      * @return boolean false if user doesn't exist | 
					
						
							| 
									
										
										
										
											2009-03-06 13:33:47 -08:00
										 |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function prepare($args) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-02-08 11:06:03 -08:00
										 |  |  |         StatusNet::setApi(true); // reduce exception reports to aid in debugging
 | 
					
						
							| 
									
										
										
										
											2009-03-06 13:33:47 -08:00
										 |  |  |         parent::prepare($args); | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 14:42:01 -07:00
										 |  |  |         $this->format   = $this->arg('format'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:32:53 -07:00
										 |  |  |         $this->page     = (int)$this->arg('page', 1); | 
					
						
							|  |  |  |         $this->count    = (int)$this->arg('count', 20); | 
					
						
							|  |  |  |         $this->max_id   = (int)$this->arg('max_id', 0); | 
					
						
							|  |  |  |         $this->since_id = (int)$this->arg('since_id', 0); | 
					
						
							| 
									
										
										
										
											2010-03-02 11:54:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if ($this->arg('since')) { | 
					
						
							| 
									
										
										
										
											2010-03-04 08:55:36 -08:00
										 |  |  |             header('X-StatusNet-Warning: since parameter is disabled; use since_id'); | 
					
						
							| 
									
										
										
										
											2010-03-02 11:54:02 -08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-06 13:33:47 -08:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Handle a request | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param array $args Arguments from $_REQUEST | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function handle($args) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-04-15 12:52:59 -04:00
										 |  |  |         header('Access-Control-Allow-Origin: *'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         parent::handle($args); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-03-06 13:33:47 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-18 15:33:36 -04:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Overrides XMLOutputter::element to write booleans as strings (true|false). | 
					
						
							|  |  |  |      * See that method's documentation for more info. | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2009-04-18 15:33:36 -04:00
										 |  |  |      * @param string $tag     Element type or tagname | 
					
						
							|  |  |  |      * @param array  $attrs   Array of element attributes, as | 
					
						
							|  |  |  |      *                        key-value pairs | 
					
						
							|  |  |  |      * @param string $content string content of the element | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function element($tag, $attrs=null, $content=null) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (is_bool($content)) { | 
					
						
							|  |  |  |             $content = ($content ? 'true' : 'false'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return parent::element($tag, $attrs, $content); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function twitterUserArray($profile, $get_notice=false) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $twitter_user = array(); | 
					
						
							| 
									
										
										
										
											2008-07-16 02:09:22 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  |         $twitter_user['id'] = intval($profile->id); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $twitter_user['name'] = $profile->getBestName(); | 
					
						
							|  |  |  |         $twitter_user['screen_name'] = $profile->nickname; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:21:29 -05:00
										 |  |  |         $twitter_user['location'] = ($profile->location) ? $profile->location : null; | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  |         $twitter_user['description'] = ($profile->bio) ? $profile->bio : null; | 
					
						
							| 
									
										
										
										
											2008-09-24 19:48:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  |         $twitter_user['profile_image_url'] = ($avatar) ? $avatar->displayUrl() : | 
					
						
							|  |  |  |             Avatar::defaultImage(AVATAR_STREAM_SIZE); | 
					
						
							| 
									
										
										
										
											2008-09-24 19:48:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:21:29 -05:00
										 |  |  |         $twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null; | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |         $twitter_user['protected'] = false; # not supported by StatusNet yet
 | 
					
						
							| 
									
										
										
										
											2009-07-09 17:28:38 -07:00
										 |  |  |         $twitter_user['followers_count'] = $profile->subscriberCount(); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-04 22:40:07 +00:00
										 |  |  |         $design        = null; | 
					
						
							| 
									
										
										
										
											2009-12-08 21:28:11 +10:00
										 |  |  |         $user          = $profile->getUser(); | 
					
						
							| 
									
										
										
										
											2009-11-03 09:55:35 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |         // Note: some profiles don't have an associated user
 | 
					
						
							| 
									
										
										
										
											2009-11-03 09:55:35 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-10 14:10:31 -08:00
										 |  |  |         $defaultDesign = Design::siteDesign(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-03 09:55:35 -08:00
										 |  |  |         if (!empty($user)) { | 
					
						
							|  |  |  |             $design = $user->getDesign(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-08 21:28:11 +10:00
										 |  |  |         if (empty($design)) { | 
					
						
							| 
									
										
										
										
											2010-01-10 14:10:31 -08:00
										 |  |  |             $design = $defaultDesign; | 
					
						
							| 
									
										
										
										
											2009-12-08 21:28:11 +10:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-15 05:16:37 -04:00
										 |  |  |         $color = Design::toWebColor(empty($design->backgroundcolor) ? $defaultDesign->backgroundcolor : $design->backgroundcolor); | 
					
						
							|  |  |  |         $twitter_user['profile_background_color'] = ($color == null) ? '' : '#'.$color->hexValue(); | 
					
						
							|  |  |  |         $color = Design::toWebColor(empty($design->textcolor) ? $defaultDesign->textcolor : $design->textcolor); | 
					
						
							|  |  |  |         $twitter_user['profile_text_color'] = ($color == null) ? '' : '#'.$color->hexValue(); | 
					
						
							|  |  |  |         $color = Design::toWebColor(empty($design->linkcolor) ? $defaultDesign->linkcolor : $design->linkcolor); | 
					
						
							|  |  |  |         $twitter_user['profile_link_color'] = ($color == null) ? '' : '#'.$color->hexValue(); | 
					
						
							|  |  |  |         $color = Design::toWebColor(empty($design->sidebarcolor) ? $defaultDesign->sidebarcolor : $design->sidebarcolor); | 
					
						
							|  |  |  |         $twitter_user['profile_sidebar_fill_color'] = ($color == null) ? '' : '#'.$color->hexValue(); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  |         $twitter_user['profile_sidebar_border_color'] = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-09 17:28:38 -07:00
										 |  |  |         $twitter_user['friends_count'] = $profile->subscriptionCount(); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $twitter_user['created_at'] = $this->dateTwitter($profile->created); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-09 17:28:38 -07:00
										 |  |  |         $twitter_user['favourites_count'] = $profile->faveCount(); // British spelling!
 | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $timezone = 'UTC'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-12 12:26:08 -08:00
										 |  |  |         if (!empty($user) && $user->timezone) { | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  |             $timezone = $user->timezone; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $t = new DateTime; | 
					
						
							|  |  |  |         $t->setTimezone(new DateTimeZone($timezone)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $twitter_user['utc_offset'] = $t->format('Z'); | 
					
						
							|  |  |  |         $twitter_user['time_zone'] = $timezone; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-10 00:30:56 -08:00
										 |  |  |         $twitter_user['profile_background_image_url'] | 
					
						
							|  |  |  |             = empty($design->backgroundimage) | 
					
						
							|  |  |  |             ? '' : ($design->disposition & BACKGROUND_ON) | 
					
						
							|  |  |  |             ? Design::url($design->backgroundimage) : ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $twitter_user['profile_background_tile'] | 
					
						
							|  |  |  |             = empty($design->disposition) | 
					
						
							|  |  |  |             ? '' : ($design->disposition & BACKGROUND_TILE) ? 'true' : 'false'; | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-09 17:28:38 -07:00
										 |  |  |         $twitter_user['statuses_count'] = $profile->noticeCount(); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // Is the requesting user following this user?
 | 
					
						
							|  |  |  |         $twitter_user['following'] = false; | 
					
						
							|  |  |  |         $twitter_user['notifications'] = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-14 18:16:45 +00:00
										 |  |  |         if (isset($this->auth_user)) { | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-14 18:16:45 +00:00
										 |  |  |             $twitter_user['following'] = $this->auth_user->isSubscribed($profile); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |             // Notifications on?
 | 
					
						
							|  |  |  |             $sub = Subscription::pkeyGet(array('subscriber' => | 
					
						
							| 
									
										
										
										
											2009-12-14 18:16:45 +00:00
										 |  |  |                                                $this->auth_user->id, | 
					
						
							|  |  |  |                                                'subscribed' => $profile->id)); | 
					
						
							| 
									
										
										
										
											2009-05-29 19:23:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if ($sub) { | 
					
						
							|  |  |  |                 $twitter_user['notifications'] = ($sub->jabber || $sub->sms); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-07-18 00:13:23 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         if ($get_notice) { | 
					
						
							|  |  |  |             $notice = $profile->getCurrentNotice(); | 
					
						
							|  |  |  |             if ($notice) { | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |                 # don't get user!
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_user['status'] = $this->twitterStatusArray($notice, false); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-09-24 19:48:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         return $twitter_user; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-07-15 19:41:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function twitterStatusArray($notice, $include_user=true) | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         $base = $this->twitterSimpleStatusArray($notice, $include_user); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-14 17:11:34 -05:00
										 |  |  |         if (!empty($notice->repeat_of)) { | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |             $original = Notice::staticGet('id', $notice->repeat_of); | 
					
						
							| 
									
										
										
										
											2009-12-14 17:11:34 -05:00
										 |  |  |             if (!empty($original)) { | 
					
						
							| 
									
										
										
										
											2009-12-14 16:40:56 -05:00
										 |  |  |                 $original_array = $this->twitterSimpleStatusArray($original, $include_user); | 
					
						
							| 
									
										
										
										
											2009-12-14 17:11:34 -05:00
										 |  |  |                 $base['retweeted_status'] = $original_array; | 
					
						
							| 
									
										
										
										
											2009-12-14 16:40:56 -05:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-12-14 17:11:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $base; | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function twitterSimpleStatusArray($notice, $include_user=true) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $profile = $notice->getProfile(); | 
					
						
							| 
									
										
										
										
											2008-07-16 02:09:22 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $twitter_status = array(); | 
					
						
							|  |  |  |         $twitter_status['text'] = $notice->content; | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |         $twitter_status['truncated'] = false; # Not possible on StatusNet
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $twitter_status['created_at'] = $this->dateTwitter($notice->created); | 
					
						
							| 
									
										
										
										
											2009-03-04 16:17:40 -08:00
										 |  |  |         $twitter_status['in_reply_to_status_id'] = ($notice->reply_to) ? | 
					
						
							|  |  |  |             intval($notice->reply_to) : null; | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $twitter_status['source'] = $this->sourceLink($notice->source); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $twitter_status['id'] = intval($notice->id); | 
					
						
							| 
									
										
										
										
											2009-03-04 16:17:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $replier_profile = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($notice->reply_to) { | 
					
						
							|  |  |  |             $reply = Notice::staticGet(intval($notice->reply_to)); | 
					
						
							|  |  |  |             if ($reply) { | 
					
						
							|  |  |  |                 $replier_profile = $reply->getProfile(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $twitter_status['in_reply_to_user_id'] = | 
					
						
							|  |  |  |             ($replier_profile) ? intval($replier_profile->id) : null; | 
					
						
							|  |  |  |         $twitter_status['in_reply_to_screen_name'] = | 
					
						
							|  |  |  |             ($replier_profile) ? $replier_profile->nickname : null; | 
					
						
							| 
									
										
										
										
											2008-11-06 17:57:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |         if (isset($notice->lat) && isset($notice->lon)) { | 
					
						
							|  |  |  |             // This is the format that GeoJSON expects stuff to be in
 | 
					
						
							|  |  |  |             $twitter_status['geo'] = array('type' => 'Point', | 
					
						
							|  |  |  |                                            'coordinates' => array((float) $notice->lat, | 
					
						
							|  |  |  |                                                                   (float) $notice->lon)); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $twitter_status['geo'] = null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         if (isset($this->auth_user)) { | 
					
						
							| 
									
										
										
										
											2009-04-18 15:33:36 -04:00
										 |  |  |             $twitter_status['favorited'] = $this->auth_user->hasFave($notice); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2009-04-18 15:33:36 -04:00
										 |  |  |             $twitter_status['favorited'] = false; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-07-18 00:13:23 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |         // Enclosures
 | 
					
						
							| 
									
										
										
										
											2009-07-15 10:37:50 -04:00
										 |  |  |         $attachments = $notice->attachments(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 12:39:54 -07:00
										 |  |  |         if (!empty($attachments)) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $twitter_status['attachments'] = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             foreach ($attachments as $attachment) { | 
					
						
							| 
									
										
										
										
											2010-01-22 10:12:26 -05:00
										 |  |  |                 $enclosure_o=$attachment->getEnclosure(); | 
					
						
							| 
									
										
										
										
											2010-01-22 10:40:21 -05:00
										 |  |  |                 if ($enclosure_o) { | 
					
						
							| 
									
										
										
										
											2009-07-17 12:39:54 -07:00
										 |  |  |                     $enclosure = array(); | 
					
						
							| 
									
										
										
										
											2010-01-22 10:12:26 -05:00
										 |  |  |                     $enclosure['url'] = $enclosure_o->url; | 
					
						
							|  |  |  |                     $enclosure['mimetype'] = $enclosure_o->mimetype; | 
					
						
							|  |  |  |                     $enclosure['size'] = $enclosure_o->size; | 
					
						
							| 
									
										
										
										
											2009-07-17 12:39:54 -07:00
										 |  |  |                     $twitter_status['attachments'][] = $enclosure; | 
					
						
							| 
									
										
										
										
											2009-07-15 10:37:50 -04:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-28 23:08:36 -08:00
										 |  |  |         if ($include_user && $profile) { | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |             # Don't get notice (recursive!)
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $twitter_user = $this->twitterUserArray($profile, false); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             $twitter_status['user'] = $twitter_user; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-09-24 19:48:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         return $twitter_status; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-09-24 19:48:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function twitterGroupArray($group) | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         $twitter_group=array(); | 
					
						
							|  |  |  |         $twitter_group['id']=$group->id; | 
					
						
							| 
									
										
										
										
											2009-07-30 22:43:07 -04:00
										 |  |  |         $twitter_group['url']=$group->permalink(); | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |         $twitter_group['nickname']=$group->nickname; | 
					
						
							|  |  |  |         $twitter_group['fullname']=$group->fullname; | 
					
						
							|  |  |  |         $twitter_group['original_logo']=$group->original_logo; | 
					
						
							|  |  |  |         $twitter_group['homepage_logo']=$group->homepage_logo; | 
					
						
							|  |  |  |         $twitter_group['stream_logo']=$group->stream_logo; | 
					
						
							|  |  |  |         $twitter_group['mini_logo']=$group->mini_logo; | 
					
						
							|  |  |  |         $twitter_group['homepage']=$group->homepage; | 
					
						
							|  |  |  |         $twitter_group['description']=$group->description; | 
					
						
							|  |  |  |         $twitter_group['location']=$group->location; | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $twitter_group['created']=$this->dateTwitter($group->created); | 
					
						
							|  |  |  |         $twitter_group['modified']=$this->dateTwitter($group->modified); | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |         return $twitter_group; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function twitterRssGroupArray($group) | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         $entry = array(); | 
					
						
							|  |  |  |         $entry['content']=$group->description; | 
					
						
							|  |  |  |         $entry['title']=$group->nickname; | 
					
						
							|  |  |  |         $entry['link']=$group->permalink(); | 
					
						
							|  |  |  |         $entry['published']=common_date_iso8601($group->created); | 
					
						
							|  |  |  |         $entry['updated']==common_date_iso8601($group->modified); | 
					
						
							|  |  |  |         $taguribase = common_config('integration', 'groupuri'); | 
					
						
							|  |  |  |         $entry['id'] = "group:$groupuribase:$entry[link]"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $entry['description'] = $entry['content']; | 
					
						
							|  |  |  |         $entry['pubDate'] = common_date_rfc2822($group->created); | 
					
						
							|  |  |  |         $entry['guid'] = $entry['link']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $entry; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function twitterRssEntryArray($notice) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $profile = $notice->getProfile(); | 
					
						
							|  |  |  |         $entry = array(); | 
					
						
							| 
									
										
										
										
											2008-11-06 17:57:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |         // We trim() to avoid extraneous whitespace in the output
 | 
					
						
							| 
									
										
										
										
											2008-12-14 11:19:42 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $entry['content'] = common_xml_safe_str(trim($notice->rendered)); | 
					
						
							|  |  |  |         $entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content)); | 
					
						
							|  |  |  |         $entry['link'] = common_local_url('shownotice', array('notice' => $notice->id)); | 
					
						
							|  |  |  |         $entry['published'] = common_date_iso8601($notice->created); | 
					
						
							| 
									
										
										
										
											2009-03-10 16:15:57 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-20 13:31:20 -05:00
										 |  |  |         $taguribase = TagURI::base(); | 
					
						
							| 
									
										
										
										
											2009-03-10 16:15:57 -07:00
										 |  |  |         $entry['id'] = "tag:$taguribase:$entry[link]"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $entry['updated'] = $entry['published']; | 
					
						
							| 
									
										
										
										
											2009-03-10 16:15:57 -07:00
										 |  |  |         $entry['author'] = $profile->getBestName(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |         // Enclosures
 | 
					
						
							|  |  |  |         $attachments = $notice->attachments(); | 
					
						
							|  |  |  |         $enclosures = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach ($attachments as $attachment) { | 
					
						
							| 
									
										
										
										
											2009-08-26 15:40:51 -04:00
										 |  |  |             $enclosure_o=$attachment->getEnclosure(); | 
					
						
							|  |  |  |             if ($enclosure_o) { | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |                  $enclosure = array(); | 
					
						
							| 
									
										
										
										
											2009-08-26 15:40:51 -04:00
										 |  |  |                  $enclosure['url'] = $enclosure_o->url; | 
					
						
							|  |  |  |                  $enclosure['mimetype'] = $enclosure_o->mimetype; | 
					
						
							|  |  |  |                  $enclosure['size'] = $enclosure_o->size; | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |                  $enclosures[] = $enclosure; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!empty($enclosures)) { | 
					
						
							|  |  |  |             $entry['enclosures'] = $enclosures; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-21 18:01:22 -04:00
										 |  |  |         // Tags/Categories
 | 
					
						
							|  |  |  |         $tag = new Notice_tag(); | 
					
						
							|  |  |  |         $tag->notice_id = $notice->id; | 
					
						
							|  |  |  |         if ($tag->find()) { | 
					
						
							|  |  |  |             $entry['tags']=array(); | 
					
						
							|  |  |  |             while ($tag->fetch()) { | 
					
						
							|  |  |  |                 $entry['tags'][]=$tag->tag; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $tag->free(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 14:22:11 -07:00
										 |  |  |         // RSS Item specific
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $entry['description'] = $entry['content']; | 
					
						
							|  |  |  |         $entry['pubDate'] = common_date_rfc2822($notice->created); | 
					
						
							|  |  |  |         $entry['guid'] = $entry['link']; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |         if (isset($notice->lat) && isset($notice->lon)) { | 
					
						
							|  |  |  |             // This is the format that GeoJSON expects stuff to be in.
 | 
					
						
							|  |  |  |             // showGeoRSS() below uses it for XML output, so we reuse it
 | 
					
						
							|  |  |  |             $entry['geo'] = array('type' => 'Point', | 
					
						
							|  |  |  |                                   'coordinates' => array((float) $notice->lat, | 
					
						
							|  |  |  |                                                          (float) $notice->lon)); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $entry['geo'] = null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         return $entry; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function twitterRelationshipArray($source, $target) | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         $relationship = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $relationship['source'] = | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->relationshipDetailsArray($source, $target); | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  |         $relationship['target'] = | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->relationshipDetailsArray($target, $source); | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return array('relationship' => $relationship); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function relationshipDetailsArray($source, $target) | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         $details = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $details['screen_name'] = $source->nickname; | 
					
						
							|  |  |  |         $details['followed_by'] = $target->isSubscribed($source); | 
					
						
							|  |  |  |         $details['following'] = $source->isSubscribed($target); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $notifications = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($source->isSubscribed($target)) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $sub = Subscription::pkeyGet(array('subscriber' => | 
					
						
							|  |  |  |                 $source->id, 'subscribed' => $target->id)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (!empty($sub)) { | 
					
						
							|  |  |  |                 $notifications = ($sub->jabber || $sub->sms); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $details['notifications_enabled'] = $notifications; | 
					
						
							|  |  |  |         $details['blocking'] = $source->hasBlocked($target); | 
					
						
							|  |  |  |         $details['id'] = $source->id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $details; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showTwitterXmlRelationship($relationship) | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         $this->elementStart('relationship'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach($relationship as $element => $value) { | 
					
						
							|  |  |  |             if ($element == 'source' || $element == 'target') { | 
					
						
							|  |  |  |                 $this->elementStart($element); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $this->showXmlRelationshipDetails($value); | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  |                 $this->elementEnd($element); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementEnd('relationship'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showXmlRelationshipDetails($details) | 
					
						
							| 
									
										
										
										
											2009-07-03 15:42:12 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         foreach($details as $element => $value) { | 
					
						
							|  |  |  |             $this->element($element, null, $value); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |     function showTwitterXmlStatus($twitter_status, $tag='status') | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |         $this->elementStart($tag); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         foreach($twitter_status as $element => $value) { | 
					
						
							|  |  |  |             switch ($element) { | 
					
						
							|  |  |  |             case 'user': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $this->showTwitterXmlUser($twitter_status['user']); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case 'text': | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |                 $this->element($element, null, common_xml_safe_str($value)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2009-07-17 12:33:51 -07:00
										 |  |  |             case 'attachments': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $this->showXmlAttachments($twitter_status['attachments']); | 
					
						
							| 
									
										
										
										
											2009-07-17 12:33:51 -07:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |             case 'geo': | 
					
						
							| 
									
										
										
										
											2010-03-12 05:39:36 +00:00
										 |  |  |                 $this->showGeoXML($value); | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |             case 'retweeted_status': | 
					
						
							|  |  |  |                 $this->showTwitterXmlStatus($value, 'retweeted_status'); | 
					
						
							|  |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             default: | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |                 $this->element($element, null, $value); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-12-11 12:39:29 -05:00
										 |  |  |         $this->elementEnd($tag); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showTwitterXmlGroup($twitter_group) | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         $this->elementStart('group'); | 
					
						
							|  |  |  |         foreach($twitter_group as $element => $value) { | 
					
						
							|  |  |  |             $this->element($element, null, $value); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->elementEnd('group'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showTwitterXmlUser($twitter_user, $role='user') | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementStart($role); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         foreach($twitter_user as $element => $value) { | 
					
						
							|  |  |  |             if ($element == 'status') { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $this->showTwitterXmlStatus($twitter_user['status']); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |                 $this->element($element, null, $value); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementEnd($role); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showXmlAttachments($attachments) { | 
					
						
							| 
									
										
										
										
											2009-07-17 12:33:51 -07:00
										 |  |  |         if (!empty($attachments)) { | 
					
						
							|  |  |  |             $this->elementStart('attachments', array('type' => 'array')); | 
					
						
							|  |  |  |             foreach ($attachments as $attachment) { | 
					
						
							|  |  |  |                 $attrs = array(); | 
					
						
							|  |  |  |                 $attrs['url'] = $attachment['url']; | 
					
						
							|  |  |  |                 $attrs['mimetype'] = $attachment['mimetype']; | 
					
						
							|  |  |  |                 $attrs['size'] = $attachment['size']; | 
					
						
							|  |  |  |                 $this->element('enclosure', $attrs, ''); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $this->elementEnd('attachments'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-12 05:39:36 +00:00
										 |  |  |     function showGeoXML($geo) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (empty($geo)) { | 
					
						
							|  |  |  |             // empty geo element
 | 
					
						
							|  |  |  |             $this->element('geo'); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $this->elementStart('geo', array('xmlns:georss' => 'http://www.georss.org/georss')); | 
					
						
							|  |  |  |             $this->element('georss:point', null, $geo['coordinates'][0] . ' ' . $geo['coordinates'][1]); | 
					
						
							|  |  |  |             $this->elementEnd('geo'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |     function showGeoRSS($geo) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-03-11 23:05:56 +00:00
										 |  |  |         if (!empty($geo)) { | 
					
						
							|  |  |  |             $this->element( | 
					
						
							|  |  |  |                 'georss:point', | 
					
						
							|  |  |  |                 null, | 
					
						
							|  |  |  |                 $geo['coordinates'][0] . ' ' . $geo['coordinates'][1] | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showTwitterRssItem($entry) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementStart('item'); | 
					
						
							|  |  |  |         $this->element('title', null, $entry['title']); | 
					
						
							|  |  |  |         $this->element('description', null, $entry['description']); | 
					
						
							|  |  |  |         $this->element('pubDate', null, $entry['pubDate']); | 
					
						
							|  |  |  |         $this->element('guid', null, $entry['guid']); | 
					
						
							|  |  |  |         $this->element('link', null, $entry['link']); | 
					
						
							| 
									
										
										
										
											2009-07-09 13:18:57 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # RSS only supports 1 enclosure per item
 | 
					
						
							| 
									
										
										
										
											2009-08-02 19:38:03 +08:00
										 |  |  |         if(array_key_exists('enclosures', $entry) and !empty($entry['enclosures'])){ | 
					
						
							| 
									
										
										
										
											2009-07-09 13:18:57 -04:00
										 |  |  |             $enclosure = $entry['enclosures'][0]; | 
					
						
							|  |  |  |             $this->element('enclosure', array('url'=>$enclosure['url'],'type'=>$enclosure['mimetype'],'length'=>$enclosure['size']), null); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-02 19:38:03 +08:00
										 |  |  |         if(array_key_exists('tags', $entry)){ | 
					
						
							| 
									
										
										
										
											2009-07-21 18:01:22 -04:00
										 |  |  |             foreach($entry['tags'] as $tag){ | 
					
						
							|  |  |  |                 $this->element('category', null,$tag); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-07-09 17:28:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-10 16:15:05 -05:00
										 |  |  |         $this->showGeoRSS($entry['geo']); | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementEnd('item'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showJsonObjects($objects) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         print(json_encode($objects)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showSingleXmlStatus($notice) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('xml'); | 
					
						
							|  |  |  |         $twitter_status = $this->twitterStatusArray($notice); | 
					
						
							|  |  |  |         $this->showTwitterXmlStatus($twitter_status); | 
					
						
							|  |  |  |         $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function show_single_json_status($notice) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('json'); | 
					
						
							|  |  |  |         $status = $this->twitterStatusArray($notice); | 
					
						
							|  |  |  |         $this->showJsonObjects($status); | 
					
						
							|  |  |  |         $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showXmlTimeline($notice) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementStart('statuses', array('type' => 'array')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($notice)) { | 
					
						
							|  |  |  |             foreach ($notice as $n) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_status = $this->twitterStatusArray($n); | 
					
						
							|  |  |  |                 $this->showTwitterXmlStatus($twitter_status); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($notice->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_status = $this->twitterStatusArray($notice); | 
					
						
							|  |  |  |                 $this->showTwitterXmlStatus($twitter_status); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementEnd('statuses'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-11 23:28:41 +00:00
										 |  |  |     function showRssTimeline($notice, $title, $link, $subtitle, $suplink = null, $logo = null, $self = null) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('rss'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->element('title', null, $title); | 
					
						
							|  |  |  |         $this->element('link', null, $link); | 
					
						
							| 
									
										
										
										
											2010-03-11 23:28:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!is_null($self)) { | 
					
						
							|  |  |  |             $this->element( | 
					
						
							|  |  |  |                 'atom:link', | 
					
						
							|  |  |  |                 array( | 
					
						
							|  |  |  |                     'type' => 'application/rss+xml', | 
					
						
							|  |  |  |                     'href' => $self, | 
					
						
							|  |  |  |                     'rel'  => 'self' | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |            ); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         if (!is_null($suplink)) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             // For FriendFeed's SUP protocol
 | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |             $this->element('link', array('xmlns' => 'http://www.w3.org/2005/Atom', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                                          'rel' => 'http://api.friendfeed.com/2008/03#sup', | 
					
						
							|  |  |  |                                          'href' => $suplink, | 
					
						
							|  |  |  |                                          'type' => 'application/json')); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-12-08 21:28:11 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!is_null($logo)) { | 
					
						
							|  |  |  |             $this->elementStart('image'); | 
					
						
							|  |  |  |             $this->element('link', null, $link); | 
					
						
							|  |  |  |             $this->element('title', null, $title); | 
					
						
							|  |  |  |             $this->element('url', null, $logo); | 
					
						
							|  |  |  |             $this->elementEnd('image'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->element('description', null, $subtitle); | 
					
						
							|  |  |  |         $this->element('language', null, 'en-us'); | 
					
						
							|  |  |  |         $this->element('ttl', null, '40'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($notice)) { | 
					
						
							|  |  |  |             foreach ($notice as $n) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $entry = $this->twitterRssEntryArray($n); | 
					
						
							|  |  |  |                 $this->showTwitterRssItem($entry); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($notice->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $entry = $this->twitterRssEntryArray($notice); | 
					
						
							|  |  |  |                 $this->showTwitterRssItem($entry); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endTwitterRss(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-08 21:28:11 +10:00
										 |  |  |     function showAtomTimeline($notice, $title, $id, $link, $subtitle=null, $suplink=null, $selfuri=null, $logo=null) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('atom'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->element('title', null, $title); | 
					
						
							|  |  |  |         $this->element('id', null, $id); | 
					
						
							|  |  |  |         $this->element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), null); | 
					
						
							| 
									
										
										
										
											2009-03-10 16:15:57 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-08 21:28:11 +10:00
										 |  |  |         if (!is_null($logo)) { | 
					
						
							|  |  |  |             $this->element('logo',null,$logo); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         if (!is_null($suplink)) { | 
					
						
							|  |  |  |             # For FriendFeed's SUP protocol
 | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |             $this->element('link', array('rel' => 'http://api.friendfeed.com/2008/03#sup', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                                          'href' => $suplink, | 
					
						
							|  |  |  |                                          'type' => 'application/json')); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-03-10 16:15:57 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!is_null($selfuri)) { | 
					
						
							| 
									
										
										
										
											2009-03-22 16:58:38 -04:00
										 |  |  |             $this->element('link', array('href' => $selfuri, | 
					
						
							| 
									
										
										
										
											2009-03-10 16:15:57 -07:00
										 |  |  |                 'rel' => 'self', 'type' => 'application/atom+xml'), null); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->element('updated', null, common_date_iso8601('now')); | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->element('subtitle', null, $subtitle); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($notice)) { | 
					
						
							|  |  |  |             foreach ($notice as $n) { | 
					
						
							| 
									
										
										
										
											2009-03-22 16:58:38 -04:00
										 |  |  |                 $this->raw($n->asAtomEntry()); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($notice->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-03-22 16:58:38 -04:00
										 |  |  |                 $this->raw($notice->asAtomEntry()); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('atom'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showRssGroups($group, $title, $link, $subtitle) | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('rss'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->element('title', null, $title); | 
					
						
							|  |  |  |         $this->element('link', null, $link); | 
					
						
							|  |  |  |         $this->element('description', null, $subtitle); | 
					
						
							|  |  |  |         $this->element('language', null, 'en-us'); | 
					
						
							|  |  |  |         $this->element('ttl', null, '40'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($group)) { | 
					
						
							|  |  |  |             foreach ($group as $g) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_group = $this->twitterRssGroupArray($g); | 
					
						
							|  |  |  |                 $this->showTwitterRssItem($twitter_group); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($group->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_group = $this->twitterRssGroupArray($group); | 
					
						
							|  |  |  |                 $this->showTwitterRssItem($twitter_group); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endTwitterRss(); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |     function showTwitterAtomEntry($entry) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->elementStart('entry'); | 
					
						
							| 
									
										
										
										
											2010-03-12 01:12:30 +00:00
										 |  |  |         $this->element('title', null, common_xml_safe_str($entry['title'])); | 
					
						
							|  |  |  |         $this->element( | 
					
						
							|  |  |  |             'content', | 
					
						
							|  |  |  |             array('type' => 'html'), | 
					
						
							|  |  |  |             common_xml_safe_str($entry['content']) | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |         $this->element('id', null, $entry['id']); | 
					
						
							|  |  |  |         $this->element('published', null, $entry['published']); | 
					
						
							|  |  |  |         $this->element('updated', null, $entry['updated']); | 
					
						
							|  |  |  |         $this->element('link', array('type' => 'text/html', | 
					
						
							|  |  |  |                                      'href' => $entry['link'], | 
					
						
							|  |  |  |                                      'rel' => 'alternate')); | 
					
						
							|  |  |  |         $this->element('link', array('type' => $entry['avatar-type'], | 
					
						
							|  |  |  |                                      'href' => $entry['avatar'], | 
					
						
							|  |  |  |                                      'rel' => 'image')); | 
					
						
							|  |  |  |         $this->elementStart('author'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->element('name', null, $entry['author-name']); | 
					
						
							|  |  |  |         $this->element('uri', null, $entry['author-uri']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementEnd('author'); | 
					
						
							|  |  |  |         $this->elementEnd('entry'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showXmlDirectMessage($dm) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->elementStart('direct_message'); | 
					
						
							|  |  |  |         foreach($dm as $element => $value) { | 
					
						
							|  |  |  |             switch ($element) { | 
					
						
							|  |  |  |             case 'sender': | 
					
						
							|  |  |  |             case 'recipient': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $this->showTwitterXmlUser($value, $element); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case 'text': | 
					
						
							|  |  |  |                 $this->element($element, null, common_xml_safe_str($value)); | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 $this->element($element, null, $value); | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->elementEnd('direct_message'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function directMessageArray($message) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $dmsg = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $from_profile = $message->getFrom(); | 
					
						
							|  |  |  |         $to_profile = $message->getTo(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $dmsg['id'] = $message->id; | 
					
						
							|  |  |  |         $dmsg['sender_id'] = $message->from_profile; | 
					
						
							|  |  |  |         $dmsg['text'] = trim($message->content); | 
					
						
							|  |  |  |         $dmsg['recipient_id'] = $message->to_profile; | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $dmsg['created_at'] = $this->dateTwitter($message->created); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |         $dmsg['sender_screen_name'] = $from_profile->nickname; | 
					
						
							|  |  |  |         $dmsg['recipient_screen_name'] = $to_profile->nickname; | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $dmsg['sender'] = $this->twitterUserArray($from_profile, false); | 
					
						
							|  |  |  |         $dmsg['recipient'] = $this->twitterUserArray($to_profile, false); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $dmsg; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function rssDirectMessageArray($message) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $entry = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $from = $message->getFrom(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-10 01:45:58 +01:00
										 |  |  |         $entry['title'] = sprintf('Message from %1$s to %2$s', | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |             $from->nickname, $message->getTo()->nickname); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $entry['content'] = common_xml_safe_str($message->rendered); | 
					
						
							|  |  |  |         $entry['link'] = common_local_url('showmessage', array('message' => $message->id)); | 
					
						
							|  |  |  |         $entry['published'] = common_date_iso8601($message->created); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-20 13:31:20 -05:00
										 |  |  |         $taguribase = TagURI::base(); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $entry['id'] = "tag:$taguribase:$entry[link]"; | 
					
						
							|  |  |  |         $entry['updated'] = $entry['published']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $entry['author-name'] = $from->getBestName(); | 
					
						
							|  |  |  |         $entry['author-uri'] = $from->homepage; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $avatar = $from->getAvatar(AVATAR_STREAM_SIZE); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $entry['avatar']      = (!empty($avatar)) ? $avatar->url : Avatar::defaultImage(AVATAR_STREAM_SIZE); | 
					
						
							|  |  |  |         $entry['avatar-type'] = (!empty($avatar)) ? $avatar->mediatype : 'image/png'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // RSS item specific
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $entry['description'] = $entry['content']; | 
					
						
							|  |  |  |         $entry['pubDate'] = common_date_rfc2822($message->created); | 
					
						
							|  |  |  |         $entry['guid'] = $entry['link']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $entry; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showSingleXmlDirectMessage($message) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |         $dmsg = $this->directMessageArray($message); | 
					
						
							|  |  |  |         $this->showXmlDirectMessage($dmsg); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showSingleJsonDirectMessage($message) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |         $dmsg = $this->directMessageArray($message); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->showJsonObjects($dmsg); | 
					
						
							|  |  |  |         $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-10-02 17:23:48 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showAtomGroups($group, $title, $id, $link, $subtitle=null, $selfuri=null) | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('atom'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-12 01:12:30 +00:00
										 |  |  |         $this->element('title', null, common_xml_safe_str($title)); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |         $this->element('id', null, $id); | 
					
						
							|  |  |  |         $this->element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), null); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!is_null($selfuri)) { | 
					
						
							|  |  |  |             $this->element('link', array('href' => $selfuri, | 
					
						
							|  |  |  |                 'rel' => 'self', 'type' => 'application/atom+xml'), null); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->element('updated', null, common_date_iso8601('now')); | 
					
						
							| 
									
										
										
										
											2010-03-12 01:12:30 +00:00
										 |  |  |         $this->element('subtitle', null, common_xml_safe_str($subtitle)); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($group)) { | 
					
						
							|  |  |  |             foreach ($group as $g) { | 
					
						
							|  |  |  |                 $this->raw($g->asAtomEntry()); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($group->fetch()) { | 
					
						
							|  |  |  |                 $this->raw($group->asAtomEntry()); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('atom'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showJsonTimeline($notice) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('json'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $statuses = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($notice)) { | 
					
						
							|  |  |  |             foreach ($notice as $n) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_status = $this->twitterStatusArray($n); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                 array_push($statuses, $twitter_status); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($notice->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_status = $this->twitterStatusArray($notice); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                 array_push($statuses, $twitter_status); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->showJsonObjects($statuses); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showJsonGroups($group) | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $groups = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($group)) { | 
					
						
							|  |  |  |             foreach ($group as $g) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_group = $this->twitterGroupArray($g); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |                 array_push($groups, $twitter_group); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($group->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_group = $this->twitterGroupArray($group); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |                 array_push($groups, $twitter_group); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->showJsonObjects($groups); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showXmlGroups($group) | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |         $this->elementStart('groups', array('type' => 'array')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($group)) { | 
					
						
							|  |  |  |             foreach ($group as $g) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_group = $this->twitterGroupArray($g); | 
					
						
							|  |  |  |                 $this->showTwitterXmlGroup($twitter_group); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($group->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_group = $this->twitterGroupArray($group); | 
					
						
							|  |  |  |                 $this->showTwitterXmlGroup($twitter_group); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementEnd('groups'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:00:04 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showTwitterXmlUsers($user) | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |         $this->elementStart('users', array('type' => 'array')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($user)) { | 
					
						
							| 
									
										
										
										
											2009-10-07 17:20:08 -07:00
										 |  |  |             foreach ($user as $u) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_user = $this->twitterUserArray($u); | 
					
						
							|  |  |  |                 $this->showTwitterXmlUser($twitter_user); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($user->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_user = $this->twitterUserArray($user); | 
					
						
							|  |  |  |                 $this->showTwitterXmlUser($twitter_user); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->elementEnd('users'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showJsonUsers($user) | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $users = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($user)) { | 
					
						
							|  |  |  |             foreach ($user as $u) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_user = $this->twitterUserArray($u); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |                 array_push($users, $twitter_user); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             while ($user->fetch()) { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |                 $twitter_user = $this->twitterUserArray($user); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |                 array_push($users, $twitter_user); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->showJsonObjects($users); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-08-27 22:55:32 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showSingleJsonGroup($group) | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('json'); | 
					
						
							|  |  |  |         $twitter_group = $this->twitterGroupArray($group); | 
					
						
							|  |  |  |         $this->showJsonObjects($twitter_group); | 
					
						
							|  |  |  |         $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-12 12:31:14 -07:00
										 |  |  |     function showSingleXmlGroup($group) | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $this->initDocument('xml'); | 
					
						
							|  |  |  |         $twitter_group = $this->twitterGroupArray($group); | 
					
						
							|  |  |  |         $this->showTwitterXmlGroup($twitter_group); | 
					
						
							|  |  |  |         $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-07-30 22:15:24 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function dateTwitter($dt) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-05 17:11:32 -07:00
										 |  |  |         $dateStr = date('d F Y H:i:s', strtotime($dt)); | 
					
						
							|  |  |  |         $d = new DateTime($dateStr, new DateTimeZone('UTC')); | 
					
						
							|  |  |  |         $d->setTimezone(new DateTimeZone(common_timezone())); | 
					
						
							|  |  |  |         return $d->format('D M d H:i:s O Y'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-03-06 13:33:47 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function initDocument($type='xml') | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         switch ($type) { | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'xml': | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             header('Content-Type: application/xml; charset=utf-8'); | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |             $this->startXML(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'json': | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             header('Content-Type: application/json; charset=utf-8'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // Check for JSONP callback
 | 
					
						
							|  |  |  |             $callback = $this->arg('callback'); | 
					
						
							|  |  |  |             if ($callback) { | 
					
						
							|  |  |  |                 print $callback . '('; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'rss': | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             header("Content-Type: application/rss+xml; charset=utf-8"); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->initTwitterRss(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'atom': | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             header('Content-Type: application/atom+xml; charset=utf-8'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->initTwitterAtom(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         default: | 
					
						
							| 
									
										
										
										
											2010-04-10 22:50:15 +02:00
										 |  |  |             // TRANS: Client error on an API request with an unsupported data format.
 | 
					
						
							| 
									
										
										
										
											2009-06-17 14:32:36 -07:00
										 |  |  |             $this->clientError(_('Not a supported data format.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function endDocument($type='xml') | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         switch ($type) { | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'xml': | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |             $this->endXML(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'json': | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             // Check for JSONP callback
 | 
					
						
							|  |  |  |             $callback = $this->arg('callback'); | 
					
						
							|  |  |  |             if ($callback) { | 
					
						
							|  |  |  |                 print ')'; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'rss': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->endTwitterRss(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'atom': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->endTwitterRss(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         default: | 
					
						
							| 
									
										
										
										
											2010-04-10 22:50:15 +02:00
										 |  |  |             // TRANS: Client error on an API request with an unsupported data format.
 | 
					
						
							| 
									
										
										
										
											2009-06-17 14:32:36 -07:00
										 |  |  |             $this->clientError(_('Not a supported data format.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |     function clientError($msg, $code = 400, $format = 'xml') | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $action = $this->trimmed('action'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         common_debug("User error '$code' on '$action': $msg", __FILE__); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |         if (!array_key_exists($code, ClientErrorAction::$status)) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             $code = 400; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |         $status_string = ClientErrorAction::$status[$code]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         header('HTTP/1.1 '.$code.' '.$status_string); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |         if ($format == 'xml') { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->initDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |             $this->elementStart('hash'); | 
					
						
							|  |  |  |             $this->element('error', null, $msg); | 
					
						
							|  |  |  |             $this->element('request', null, $_SERVER['REQUEST_URI']); | 
					
						
							|  |  |  |             $this->elementEnd('hash'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |         } elseif ($format == 'json'){ | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->initDocument('json'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             $error_array = array('error' => $msg, 'request' => $_SERVER['REQUEST_URI']); | 
					
						
							|  |  |  |             print(json_encode($error_array)); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |             // If user didn't request a useful format, throw a regular client error
 | 
					
						
							|  |  |  |             throw new ClientException($msg, $code); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-12 12:22:12 -08:00
										 |  |  |     function serverError($msg, $code = 500, $content_type = 'xml') | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         $action = $this->trimmed('action'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         common_debug("Server error '$code' on '$action': $msg", __FILE__); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!array_key_exists($code, ServerErrorAction::$status)) { | 
					
						
							|  |  |  |             $code = 400; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $status_string = ServerErrorAction::$status[$code]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         header('HTTP/1.1 '.$code.' '.$status_string); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($content_type == 'xml') { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->initDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |             $this->elementStart('hash'); | 
					
						
							|  |  |  |             $this->element('error', null, $msg); | 
					
						
							|  |  |  |             $this->element('request', null, $_SERVER['REQUEST_URI']); | 
					
						
							|  |  |  |             $this->elementEnd('hash'); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->endDocument('xml'); | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->initDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |             $error_array = array('error' => $msg, 'request' => $_SERVER['REQUEST_URI']); | 
					
						
							|  |  |  |             print(json_encode($error_array)); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->endDocument('json'); | 
					
						
							| 
									
										
										
										
											2009-09-29 17:57:31 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function initTwitterRss() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->startXML(); | 
					
						
							| 
									
										
										
										
											2010-03-11 23:05:56 +00:00
										 |  |  |         $this->elementStart( | 
					
						
							|  |  |  |             'rss', | 
					
						
							|  |  |  |             array( | 
					
						
							|  |  |  |                 'version'      => '2.0', | 
					
						
							|  |  |  |                 'xmlns:atom'   => 'http://www.w3.org/2005/Atom', | 
					
						
							|  |  |  |                 'xmlns:georss' => 'http://www.georss.org/georss' | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2009-08-28 14:42:51 -04:00
										 |  |  |         $this->elementStart('channel'); | 
					
						
							|  |  |  |         Event::handle('StartApiRss', array($this)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function endTwitterRss() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-08-28 14:42:51 -04:00
										 |  |  |         $this->elementEnd('channel'); | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementEnd('rss'); | 
					
						
							|  |  |  |         $this->endXML(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function initTwitterAtom() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->startXML(); | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |         // FIXME: don't hardcode the language here!
 | 
					
						
							| 
									
										
										
										
											2009-03-22 16:58:38 -04:00
										 |  |  |         $this->elementStart('feed', array('xmlns' => 'http://www.w3.org/2005/Atom', | 
					
						
							|  |  |  |                                           'xml:lang' => 'en-US', | 
					
						
							|  |  |  |                                           'xmlns:thr' => 'http://purl.org/syndication/thread/1.0')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function endTwitterAtom() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-23 01:19:19 -08:00
										 |  |  |         $this->elementEnd('feed'); | 
					
						
							| 
									
										
										
										
											2009-03-22 16:58:38 -04:00
										 |  |  |         $this->endXML(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function showProfile($profile, $content_type='xml', $notice=null, $includeStatuses=true) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |         $profile_array = $this->twitterUserArray($profile, $includeStatuses); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         switch ($content_type) { | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'xml': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->showTwitterXmlUser($profile_array); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'json': | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |             $this->showJsonObjects($profile_array); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         default: | 
					
						
							| 
									
										
										
										
											2010-04-10 22:50:15 +02:00
										 |  |  |             // TRANS: Client error on an API request with an unsupported data format.
 | 
					
						
							| 
									
										
										
										
											2009-06-17 14:32:36 -07:00
										 |  |  |             $this->clientError(_('Not a supported data format.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |     function getTargetUser($id) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-12-01 09:57:47 -08:00
										 |  |  |         if (empty($id)) { | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |             // Twitter supports these other ways of passing the user ID
 | 
					
						
							| 
									
										
										
										
											2009-12-01 09:57:47 -08:00
										 |  |  |             if (is_numeric($this->arg('id'))) { | 
					
						
							|  |  |  |                 return User::staticGet($this->arg('id')); | 
					
						
							|  |  |  |             } else if ($this->arg('id')) { | 
					
						
							|  |  |  |                 $nickname = common_canonical_nickname($this->arg('id')); | 
					
						
							|  |  |  |                 return User::staticGet('nickname', $nickname); | 
					
						
							|  |  |  |             } else if ($this->arg('user_id')) { | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |                 // This is to ensure that a non-numeric user_id still
 | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |                 // overrides screen_name even if it doesn't get used
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:45:51 -07:00
										 |  |  |                 if (is_numeric($this->arg('user_id'))) { | 
					
						
							|  |  |  |                     return User::staticGet('id', $this->arg('user_id')); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else if ($this->arg('screen_name')) { | 
					
						
							|  |  |  |                 $nickname = common_canonical_nickname($this->arg('screen_name')); | 
					
						
							|  |  |  |                 return User::staticGet('nickname', $nickname); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 // Fall back to trying the currently authenticated user
 | 
					
						
							|  |  |  |                 return $this->auth_user; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } else if (is_numeric($id)) { | 
					
						
							|  |  |  |             return User::staticGet($id); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $nickname = common_canonical_nickname($id); | 
					
						
							|  |  |  |             return User::staticGet('nickname', $nickname); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-06 17:26:45 -07:00
										 |  |  |     function getTargetGroup($id) | 
					
						
							| 
									
										
										
										
											2009-07-10 17:00:27 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (empty($id)) { | 
					
						
							|  |  |  |             if (is_numeric($this->arg('id'))) { | 
					
						
							| 
									
										
										
										
											2009-07-10 18:22:19 -07:00
										 |  |  |                 return User_group::staticGet($this->arg('id')); | 
					
						
							| 
									
										
										
										
											2009-07-10 17:00:27 -04:00
										 |  |  |             } else if ($this->arg('id')) { | 
					
						
							|  |  |  |                 $nickname = common_canonical_nickname($this->arg('id')); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |                 $local = Local_group::staticGet('nickname', $nickname); | 
					
						
							|  |  |  |                 if (empty($local)) { | 
					
						
							|  |  |  |                     return null; | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     return User_group::staticGet('id', $local->id); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2009-07-10 18:22:19 -07:00
										 |  |  |             } else if ($this->arg('group_id')) { | 
					
						
							| 
									
										
										
										
											2009-07-10 17:00:27 -04:00
										 |  |  |                 // This is to ensure that a non-numeric user_id still
 | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |                 // overrides screen_name even if it doesn't get used
 | 
					
						
							| 
									
										
										
										
											2009-07-10 18:22:19 -07:00
										 |  |  |                 if (is_numeric($this->arg('group_id'))) { | 
					
						
							|  |  |  |                     return User_group::staticGet('id', $this->arg('group_id')); | 
					
						
							| 
									
										
										
										
											2009-07-10 17:00:27 -04:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2009-07-10 18:22:19 -07:00
										 |  |  |             } else if ($this->arg('group_name')) { | 
					
						
							|  |  |  |                 $nickname = common_canonical_nickname($this->arg('group_name')); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |                 $local = Local_group::staticGet('nickname', $nickname); | 
					
						
							|  |  |  |                 if (empty($local)) { | 
					
						
							|  |  |  |                     return null; | 
					
						
							|  |  |  |                 } else { | 
					
						
							| 
									
										
										
										
											2010-03-24 13:36:57 -07:00
										 |  |  |                     return User_group::staticGet('id', $local->group_id); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2009-07-10 17:00:27 -04:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } else if (is_numeric($id)) { | 
					
						
							|  |  |  |             return User_group::staticGet($id); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $nickname = common_canonical_nickname($id); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |             $local = Local_group::staticGet('nickname', $nickname); | 
					
						
							|  |  |  |             if (empty($local)) { | 
					
						
							|  |  |  |                 return null; | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2010-02-25 21:27:46 -08:00
										 |  |  |                 return User_group::staticGet('id', $local->group_id); | 
					
						
							| 
									
										
										
										
											2010-02-25 08:44:15 -05:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-07-10 17:00:27 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:53:35 -07:00
										 |  |  |     function sourceLink($source) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $source_name = _($source); | 
					
						
							|  |  |  |         switch ($source) { | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         case 'web': | 
					
						
							|  |  |  |         case 'xmpp': | 
					
						
							|  |  |  |         case 'mail': | 
					
						
							|  |  |  |         case 'omb': | 
					
						
							|  |  |  |         case 'api': | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |         default: | 
					
						
							| 
									
										
										
										
											2010-02-02 08:47:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             $name = null; | 
					
						
							|  |  |  |             $url  = null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             $ns = Notice_source::staticGet($source); | 
					
						
							| 
									
										
										
										
											2010-02-02 08:47:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             if ($ns) { | 
					
						
							| 
									
										
										
										
											2010-02-02 08:47:14 +00:00
										 |  |  |                 $name = $ns->name; | 
					
						
							|  |  |  |                 $url  = $ns->url; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $app = Oauth_application::staticGet('name', $source); | 
					
						
							|  |  |  |                 if ($app) { | 
					
						
							|  |  |  |                     $name = $app->name; | 
					
						
							|  |  |  |                     $url  = $app->source_url; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (!empty($name) && !empty($url)) { | 
					
						
							|  |  |  |                 $source_name = '<a href="' . $url . '">' . $name . '</a>'; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2010-02-02 08:47:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $source_name; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-12 01:31:22 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Returns query argument or default value if not found. Certain | 
					
						
							|  |  |  |      * parameters used throughout the API are lightly scrubbed and | 
					
						
							|  |  |  |      * bounds checked.  This overrides Action::arg(). | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $key requested argument | 
					
						
							|  |  |  |      * @param string $def default value to return if $key is not provided | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return var $var | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function arg($key, $def=null) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // XXX: Do even more input validation/scrubbing?
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (array_key_exists($key, $this->args)) { | 
					
						
							|  |  |  |             switch($key) { | 
					
						
							|  |  |  |             case 'page': | 
					
						
							|  |  |  |                 $page = (int)$this->args['page']; | 
					
						
							|  |  |  |                 return ($page < 1) ? 1 : $page; | 
					
						
							|  |  |  |             case 'count': | 
					
						
							|  |  |  |                 $count = (int)$this->args['count']; | 
					
						
							|  |  |  |                 if ($count < 1) { | 
					
						
							|  |  |  |                     return 20; | 
					
						
							|  |  |  |                 } elseif ($count > 200) { | 
					
						
							|  |  |  |                     return 200; | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     return $count; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             case 'since_id': | 
					
						
							|  |  |  |                 $since_id = (int)$this->args['since_id']; | 
					
						
							|  |  |  |                 return ($since_id < 1) ? 0 : $since_id; | 
					
						
							|  |  |  |             case 'max_id': | 
					
						
							|  |  |  |                 $max_id = (int)$this->args['max_id']; | 
					
						
							|  |  |  |                 return ($max_id < 1) ? 0 : $max_id; | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 return parent::arg($key, $def); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return $def; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-12 01:40:52 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Calculate the complete URI that called up this action.  Used for | 
					
						
							|  |  |  |      * Atom rel="self" links.  Warning: this is funky. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string URL    a URL suitable for rel="self" Atom links | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function getSelfUri() | 
					
						
							| 
									
										
										
										
											2010-02-11 13:54:40 -08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-03-12 01:40:52 +00:00
										 |  |  |         $action = mb_substr(get_class($this), 0, -6); // remove 'Action'
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $id = $this->arg('id'); | 
					
						
							|  |  |  |         $aargs = array('format' => $this->format); | 
					
						
							|  |  |  |         if (!empty($id)) { | 
					
						
							|  |  |  |             $aargs['id'] = $id; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-12 04:08:31 +00:00
										 |  |  |         $tag = $this->arg('tag'); | 
					
						
							|  |  |  |         if (!empty($tag)) { | 
					
						
							|  |  |  |             $aargs['tag'] = $tag; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-11 13:54:40 -08:00
										 |  |  |         parse_str($_SERVER['QUERY_STRING'], $params); | 
					
						
							|  |  |  |         $pstring = ''; | 
					
						
							|  |  |  |         if (!empty($params)) { | 
					
						
							|  |  |  |             unset($params['p']); | 
					
						
							|  |  |  |             $pstring = http_build_query($params); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $uri = common_local_url($action, $aargs); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!empty($pstring)) { | 
					
						
							|  |  |  |             $uri .= '?' . $pstring; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $uri; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-23 08:58:31 +01:00
										 |  |  | } |