| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * StatusNet, the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-12-23 14:14:30 -05:00
										 |  |  |  * widget for displaying a list of notices | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENCE: This program is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05: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 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  UI | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package   StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author    Sarven Capadisli <csarven@status.net> | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @copyright 2008 StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link      http://status.net/ | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-26 10:41:36 -04:00
										 |  |  | if (!defined('STATUSNET') && !defined('LACONICA')) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 23:43:58 +00:00
										 |  |  | require_once INSTALLDIR.'/lib/favorform.php'; | 
					
						
							|  |  |  | require_once INSTALLDIR.'/lib/disfavorform.php'; | 
					
						
							| 
									
										
										
										
											2009-05-24 04:43:34 -04:00
										 |  |  | require_once INSTALLDIR.'/lib/attachmentlist.php'; | 
					
						
							| 
									
										
										
										
											2009-01-15 23:43:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | /** | 
					
						
							|  |  |  |  * widget for displaying a list of notices | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * There are a number of actions that display a list of notices, in | 
					
						
							|  |  |  |  * reverse chronological order. This widget abstracts out most of the | 
					
						
							|  |  |  |  * code for UI for notice lists. It's overridden to hide some | 
					
						
							|  |  |  |  * data for e.g. the profile page. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category UI | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package  StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link     http://status.net/ | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * @see      Notice | 
					
						
							|  |  |  |  * @see      NoticeListItem | 
					
						
							|  |  |  |  * @see      ProfileNoticeList | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  | class NoticeList extends Widget | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | { | 
					
						
							|  |  |  |     /** the current stream of notices being displayed. */ | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     var $notice = null; | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * constructor | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Notice $notice stream of notices from DB_DataObject | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |     function __construct($notice, $out=null) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |         parent::__construct($out); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |         $this->notice = $notice; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * show the list of notices | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * "Uses up" the stream by looping through it. So, probably can't | 
					
						
							|  |  |  |      * be called twice on the same list. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return int count of notices listed. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     function show() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 22:31:32 +00:00
										 |  |  |         $this->out->elementStart('div', array('id' =>'notices_primary')); | 
					
						
							| 
									
										
										
										
											2009-01-15 22:19:40 +00:00
										 |  |  |         $this->out->element('h2', null, _('Notices')); | 
					
						
							| 
									
										
										
										
											2009-05-29 02:38:38 +00:00
										 |  |  |         $this->out->elementStart('ol', array('class' => 'notices xoxo')); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $cnt = 0; | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         while ($this->notice->fetch() && $cnt <= NOTICES_PER_PAGE) { | 
					
						
							|  |  |  |             $cnt++; | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             if ($cnt > NOTICES_PER_PAGE) { | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             $item = $this->newListItem($this->notice); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |             $item->show(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-29 02:38:38 +00:00
										 |  |  |         $this->out->elementEnd('ol'); | 
					
						
							| 
									
										
										
										
											2009-01-15 22:31:32 +00:00
										 |  |  |         $this->out->elementEnd('div'); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $cnt; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * returns a new list item for the current notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Recipe (factory?) method; overridden by sub-classes to give | 
					
						
							|  |  |  |      * a different list item class. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Notice $notice the current notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return NoticeListItem a list item for displaying the notice | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function newListItem($notice) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         return new NoticeListItem($notice, $this->out); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | /** | 
					
						
							|  |  |  |  * widget for displaying a single notice | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This widget has the core smarts for showing a single notice: what to display, | 
					
						
							|  |  |  |  * where, and under which circumstances. Its key method is show(); this is a recipe | 
					
						
							|  |  |  |  * that calls all the other show*() methods to build up a single notice. The | 
					
						
							|  |  |  |  * ProfileNoticeListItem subclass, for example, overrides showAuthor() to skip | 
					
						
							|  |  |  |  * author info (since that's implicit by the data in the page). | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category UI | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @package  StatusNet | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:16:46 -04:00
										 |  |  |  * @link     http://status.net/ | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |  * @see      NoticeList | 
					
						
							|  |  |  |  * @see      ProfileNoticeListItem | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  | class NoticeListItem extends Widget | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | { | 
					
						
							|  |  |  |     /** The notice this item will show. */ | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     var $notice = null; | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** The profile of the author of the notice, extracted once for convenience. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var $profile = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * constructor | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Also initializes the profile attribute. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Notice $notice The notice we'll display | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |     function __construct($notice, $out=null) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |         parent::__construct($out); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $this->notice  = $notice; | 
					
						
							|  |  |  |         $this->profile = $notice->getProfile(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * recipe function for displaying a single notice. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * This uses all the other methods to correctly display a notice. Override | 
					
						
							|  |  |  |      * it or one of the others to fine-tune the output. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function show() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->showStart(); | 
					
						
							| 
									
										
										
										
											2009-09-25 12:47:14 +00:00
										 |  |  |         if (Event::handle('StartShowNoticeItem', array($this))) { | 
					
						
							|  |  |  |             $this->showNotice(); | 
					
						
							|  |  |  |             $this->showNoticeInfo(); | 
					
						
							|  |  |  |             $this->showNoticeOptions(); | 
					
						
							|  |  |  |             Event::handle('EndShowNoticeItem', array($this)); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-01-15 00:54:16 +00:00
										 |  |  |         $this->showEnd(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNotice() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-05-22 02:47:34 +00:00
										 |  |  |         $this->out->elementStart('div', 'entry-title'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $this->showAuthor(); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:57:01 +00:00
										 |  |  |         $this->showContent(); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('div'); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:54:16 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNoticeInfo() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('div', 'entry-content'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $this->showNoticeLink(); | 
					
						
							|  |  |  |         $this->showNoticeSource(); | 
					
						
							| 
									
										
										
										
											2009-04-03 16:16:39 -04:00
										 |  |  |         $this->showContext(); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('div'); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:54:16 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNoticeOptions() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-02-01 23:37:54 +00:00
										 |  |  |         $user = common_current_user(); | 
					
						
							|  |  |  |         if ($user) { | 
					
						
							|  |  |  |             $this->out->elementStart('div', 'notice-options'); | 
					
						
							|  |  |  |             $this->showFaveForm(); | 
					
						
							|  |  |  |             $this->showReplyLink(); | 
					
						
							|  |  |  |             $this->showDeleteLink(); | 
					
						
							|  |  |  |             $this->out->elementEnd('div'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * start a single notice. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showStart() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // XXX: RDFa
 | 
					
						
							| 
									
										
										
										
											2009-01-15 00:03:06 +00:00
										 |  |  |         // TODO: add notice_type class e.g., notice_video, notice_image
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('li', array('class' => 'hentry notice', | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                                              'id' => 'notice-' . $this->notice->id)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * show the "favorite" form | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showFaveForm() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |         $user = common_current_user(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         if ($user) { | 
					
						
							|  |  |  |             if ($user->hasFave($this->notice)) { | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                 $disfavor = new DisfavorForm($this->out, $this->notice); | 
					
						
							|  |  |  |                 $disfavor->show(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                 $favor = new FavorForm($this->out, $this->notice); | 
					
						
							|  |  |  |                 $favor->show(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * show the author of a notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * By default, this shows the avatar and (linked) nickname of the author. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showAuthor() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('span', 'vcard author'); | 
					
						
							| 
									
										
										
										
											2009-03-30 10:38:26 -04:00
										 |  |  |         $attrs = array('href' => $this->profile->profileurl, | 
					
						
							|  |  |  |                        'class' => 'url'); | 
					
						
							|  |  |  |         if (!empty($this->profile->fullname)) { | 
					
						
							| 
									
										
										
										
											2009-09-18 19:32:51 +02:00
										 |  |  |             $attrs['title'] = $this->profile->fullname . ' (' . $this->profile->nickname . ')'; | 
					
						
							| 
									
										
										
										
											2009-03-30 10:38:26 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |         $this->out->elementStart('a', $attrs); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $this->showAvatar(); | 
					
						
							|  |  |  |         $this->showNickname(); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('a'); | 
					
						
							|  |  |  |         $this->out->elementEnd('span'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * show the avatar of the notice's author | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * This will use the default avatar if no avatar is assigned for the author. | 
					
						
							|  |  |  |      * It makes a link to the author's profile. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showAvatar() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-23 04:52:39 +00:00
										 |  |  |         if ('shownotice' === $this->out->trimmed('action')) { | 
					
						
							|  |  |  |             $avatar_size = AVATAR_PROFILE_SIZE; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $avatar_size = AVATAR_STREAM_SIZE; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $avatar = $this->profile->getAvatar($avatar_size); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:03:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->element('img', array('src' => ($avatar) ? | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |                                          $avatar->displayUrl() : | 
					
						
							|  |  |  |                                          Avatar::defaultImage($avatar_size), | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                                          'class' => 'avatar photo', | 
					
						
							| 
									
										
										
										
											2009-01-23 04:52:39 +00:00
										 |  |  |                                          'width' => $avatar_size, | 
					
						
							|  |  |  |                                          'height' => $avatar_size, | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                                          'alt' => | 
					
						
							|  |  |  |                                          ($this->profile->fullname) ? | 
					
						
							|  |  |  |                                          $this->profile->fullname : | 
					
						
							|  |  |  |                                          $this->profile->nickname)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * show the nickname of the author | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Links to the author's profile page | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNickname() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->element('span', array('class' => 'nickname fn'), | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                             $this->profile->nickname); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * show the content of the notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Shows the content of the notice. This is pre-rendered for efficiency | 
					
						
							|  |  |  |      * at save time. Some very old notices might not be pre-rendered, so | 
					
						
							|  |  |  |      * they're rendered on the spot. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showContent() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // FIXME: URL, image, video, audio
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('p', array('class' => 'entry-content')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         if ($this->notice->rendered) { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->raw($this->notice->rendered); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             // XXX: may be some uncooked notices in the DB,
 | 
					
						
							|  |  |  |             // we cook them right now. This should probably disappear in future
 | 
					
						
							|  |  |  |             // versions (>> 0.4.x)
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->raw(common_render_content($this->notice->content, $this->notice)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('p'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * show the link to the main page for the notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Displays a link to the page for a notice, with "relative" time. Tries to | 
					
						
							|  |  |  |      * get remote notice URLs correct, but doesn't always succeed. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNoticeLink() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-08-07 18:26:12 -04:00
										 |  |  |         if($this->notice->is_local){ | 
					
						
							|  |  |  |             $noticeurl = common_local_url('shownotice', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                       array('notice' => $this->notice->id)); | 
					
						
							| 
									
										
										
										
											2009-08-07 18:26:12 -04:00
										 |  |  |         }else{ | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             $noticeurl = $this->notice->uri; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-01-15 21:19:44 +00:00
										 |  |  |         $this->out->elementStart('a', array('rel' => 'bookmark', | 
					
						
							| 
									
										
										
										
											2009-07-25 18:04:45 +00:00
										 |  |  |                                             'class' => 'timestamp', | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                                             'href' => $noticeurl)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $dt = common_date_iso8601($this->notice->created); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->element('abbr', array('class' => 'published', | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                                           'title' => $dt), | 
					
						
							|  |  |  |                             common_date_string($this->notice->created)); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('a'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Show the source of the notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Either the name (and link) of the API client that posted the notice, | 
					
						
							|  |  |  |      * or one of other other channels. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNoticeSource() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->notice->source) { | 
					
						
							| 
									
										
										
										
											2009-07-25 18:22:05 +00:00
										 |  |  |             $this->out->elementStart('span', 'source'); | 
					
						
							|  |  |  |             $this->out->text(_('from')); | 
					
						
							| 
									
										
										
										
											2008-12-11 23:15:43 -05:00
										 |  |  |             $source_name = _($this->notice->source); | 
					
						
							| 
									
										
										
										
											2008-12-20 15:43:20 -05:00
										 |  |  |             switch ($this->notice->source) { | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |              case 'web': | 
					
						
							|  |  |  |              case 'xmpp': | 
					
						
							|  |  |  |              case 'mail': | 
					
						
							|  |  |  |              case 'omb': | 
					
						
							| 
									
										
										
										
											2009-03-28 17:36:39 -04:00
										 |  |  |              case 'system': | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |              case 'api': | 
					
						
							| 
									
										
										
										
											2009-07-25 18:22:05 +00:00
										 |  |  |                 $this->out->element('span', 'device', $source_name); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |              default: | 
					
						
							| 
									
										
										
										
											2008-12-12 00:44:48 -05:00
										 |  |  |                 $ns = Notice_source::staticGet($this->notice->source); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 if ($ns) { | 
					
						
							| 
									
										
										
										
											2009-07-25 18:22:05 +00:00
										 |  |  |                     $this->out->elementStart('span', 'device'); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |                     $this->out->element('a', array('href' => $ns->url, | 
					
						
							| 
									
										
										
										
											2009-01-19 16:35:04 +00:00
										 |  |  |                                                    'rel' => 'external'), | 
					
						
							|  |  |  |                                         $ns->name); | 
					
						
							| 
									
										
										
										
											2009-07-25 18:22:05 +00:00
										 |  |  |                     $this->out->elementEnd('span'); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 } else { | 
					
						
							| 
									
										
										
										
											2009-07-25 18:22:05 +00:00
										 |  |  |                     $this->out->element('span', 'device', $source_name); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 } | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-07-25 18:22:05 +00:00
										 |  |  |             $this->out->elementEnd('span'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * show link to notice this notice is a reply to | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * If this notice is a reply, show a link to the notice it is replying to. The | 
					
						
							|  |  |  |      * heavy lifting for figuring out replies happens at save time. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-03 16:16:39 -04:00
										 |  |  |     function showContext() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-09-18 17:37:36 -04:00
										 |  |  |         $hasConversation = false; | 
					
						
							|  |  |  |         if( !empty($this->notice->conversation) | 
					
						
							|  |  |  |             && $this->notice->conversation != $this->notice->id){ | 
					
						
							|  |  |  |             $hasConversation = true; | 
					
						
							|  |  |  |         }else{ | 
					
						
							|  |  |  |             $conversation = Notice::conversationStream($this->notice->id, 1, 1); | 
					
						
							|  |  |  |             if($conversation->N > 0){ | 
					
						
							|  |  |  |                 $hasConversation = true; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if ($hasConversation){ | 
					
						
							| 
									
										
										
										
											2009-04-03 16:16:39 -04:00
										 |  |  |             $convurl = common_local_url('conversation', | 
					
						
							|  |  |  |                                          array('id' => $this->notice->conversation)); | 
					
						
							| 
									
										
										
										
											2009-07-25 18:26:00 +00:00
										 |  |  |             $this->out->element('a', array('href' => $convurl.'#notice-'.$this->notice->id, | 
					
						
							|  |  |  |                                            'class' => 'response'), | 
					
						
							| 
									
										
										
										
											2009-04-03 16:16:39 -04:00
										 |  |  |                                 _('in context')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * show a link to reply to the current notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Should either do the reply in the current notice form (if available), or | 
					
						
							|  |  |  |      * link out to the notice-posting form. A little flakey, doesn't always work. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showReplyLink() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-28 09:17:12 -05:00
										 |  |  |         if (common_logged_in()) { | 
					
						
							|  |  |  |             $reply_url = common_local_url('newnotice', | 
					
						
							| 
									
										
										
										
											2009-09-11 22:37:37 -04:00
										 |  |  |                                           array('replyto' => $this->profile->nickname, 'inreplyto' => $this->notice->id)); | 
					
						
							| 
									
										
										
										
											2009-01-28 09:17:12 -05:00
										 |  |  |             $this->out->elementStart('a', array('href' => $reply_url, | 
					
						
							| 
									
										
										
										
											2009-07-25 17:44:19 +00:00
										 |  |  |                                                 'class' => 'notice_reply', | 
					
						
							| 
									
										
										
										
											2009-01-28 09:17:12 -05:00
										 |  |  |                                                 'title' => _('Reply to this notice'))); | 
					
						
							|  |  |  |             $this->out->text(_('Reply')); | 
					
						
							|  |  |  |             $this->out->element('span', 'notice_id', $this->notice->id); | 
					
						
							|  |  |  |             $this->out->elementEnd('a'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * if the user is the author, let them delete the notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showDeleteLink() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |         $user = common_current_user(); | 
					
						
							| 
									
										
										
										
											2009-09-27 21:05:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!empty($user) && | 
					
						
							|  |  |  |             ($this->notice->profile_id == $user->id || $user->hasRight(Right::deleteOthersNotice))) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             $deleteurl = common_local_url('deletenotice', | 
					
						
							|  |  |  |                                           array('notice' => $this->notice->id)); | 
					
						
							| 
									
										
										
										
											2009-01-17 02:32:13 +00:00
										 |  |  |             $this->out->element('a', array('href' => $deleteurl, | 
					
						
							| 
									
										
										
										
											2009-07-25 17:37:37 +00:00
										 |  |  |                                            'class' => 'notice_delete', | 
					
						
							| 
									
										
										
										
											2009-01-17 20:57:48 +00:00
										 |  |  |                                            'title' => _('Delete this notice')), _('Delete')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * finish the notice | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Close the last elements in the notice list item | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showEnd() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('li'); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | } |