| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Laconica, 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 | 
					
						
							|  |  |  |  * @package   Laconica | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@controlyourself.ca> | 
					
						
							|  |  |  |  * @copyright 2008 Control Yourself, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link      http://laconi.ca/ | 
					
						
							| 
									
										
										
										
											2008-12-11 18:12:52 -05:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  | if (!defined('LACONICA')) { | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 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 | 
					
						
							|  |  |  |  * @package  Laconica | 
					
						
							|  |  |  |  * @author   Evan Prodromou <evan@controlyourself.ca> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link     http://laconi.ca/ | 
					
						
							|  |  |  |  * @see      Notice | 
					
						
							|  |  |  |  * @see      StreamAction | 
					
						
							|  |  |  |  * @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-15 20:19:32 +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')); | 
					
						
							|  |  |  |         $this->out->elementStart('ul', array('class' => 'notices')); | 
					
						
							| 
									
										
										
										
											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-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('ul'); | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |  * @package  Laconica | 
					
						
							|  |  |  |  * @author   Evan Prodromou <evan@controlyourself.ca> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link     http://laconi.ca/ | 
					
						
							|  |  |  |  * @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-15 20:19:32 +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-01-15 00:54:16 +00:00
										 |  |  |         $this->showNotice(); | 
					
						
							|  |  |  |         $this->showNoticeInfo(); | 
					
						
							|  |  |  |         $this->showNoticeOptions(); | 
					
						
							|  |  |  |         $this->showEnd(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNotice() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +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(); | 
					
						
							|  |  |  |         $this->showReplyTo(); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('div'); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:54:16 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showNoticeOptions() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('div', 'notice-options'); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:54:16 +00:00
										 |  |  |         $this->showFaveForm(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         $this->showReplyLink(); | 
					
						
							|  |  |  |         $this->showDeleteLink(); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('div'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 00:57:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                          'id' => 'notice-' . $this->notice->id)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 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-15 20:54:03 +00:00
										 |  |  | 		$disfavor = new DisfavorForm($this->out, $this->notice); | 
					
						
							|  |  |  | 		$disfavor->show(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:54:03 +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'); | 
					
						
							|  |  |  |         $this->out->elementStart('a', array('href' => $this->profile->profileurl, | 
					
						
							| 
									
										
										
										
											2009-01-15 00:30:06 +00:00
										 |  |  |                                         'class' => 'url')); | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); | 
					
						
							| 
									
										
										
										
											2009-01-15 00:03:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->element('img', array('src' => ($avatar) ? | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                     common_avatar_display_url($avatar) : | 
					
						
							|  |  |  |                                     common_default_avatar(AVATAR_STREAM_SIZE), | 
					
						
							| 
									
										
										
										
											2009-01-15 00:03:06 +00:00
										 |  |  |                                     'class' => 'avatar photo', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                     'width' => AVATAR_STREAM_SIZE, | 
					
						
							|  |  |  |                                     'height' => AVATAR_STREAM_SIZE, | 
					
						
							|  |  |  |                                     'alt' => | 
					
						
							|  |  |  |                                     ($this->profile->fullname) ? | 
					
						
							|  |  |  |                                     $this->profile->fullname : | 
					
						
							|  |  |  |                                     $this->profile->nickname)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 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'), | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                        $this->profile->nickname); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 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() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $noticeurl = common_local_url('shownotice', | 
					
						
							|  |  |  |                                       array('notice' => $this->notice->id)); | 
					
						
							|  |  |  |         // XXX: we need to figure this out better. Is this right?
 | 
					
						
							|  |  |  |         if (strcmp($this->notice->uri, $noticeurl) != 0 && | 
					
						
							|  |  |  |             preg_match('/^http/', $this->notice->uri)) { | 
					
						
							|  |  |  |             $noticeurl = $this->notice->uri; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('dl', 'timestamp'); | 
					
						
							|  |  |  |         $this->out->element('dt', _('Published'));  | 
					
						
							|  |  |  |         $this->out->elementStart('dd', null); | 
					
						
							| 
									
										
										
										
											2009-01-15 21:19:44 +00:00
										 |  |  |         $this->out->elementStart('a', array('rel' => 'bookmark', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                         'href' => $noticeurl)); | 
					
						
							|  |  |  |         $dt = common_date_iso8601($this->notice->created); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->element('abbr', array('class' => 'published', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                      'title' => $dt), | 
					
						
							|  |  |  |                        common_date_string($this->notice->created)); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementEnd('a'); | 
					
						
							|  |  |  |         $this->out->elementEnd('dd'); | 
					
						
							|  |  |  |         $this->out->elementEnd('dl'); | 
					
						
							| 
									
										
										
										
											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-01-15 20:19:32 +00:00
										 |  |  |             $this->out->elementStart('dl', 'device'); | 
					
						
							|  |  |  |             $this->out->element('dt', null, _('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) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |             case 'web': | 
					
						
							|  |  |  |             case 'xmpp': | 
					
						
							|  |  |  |             case 'mail': | 
					
						
							|  |  |  |             case 'omb': | 
					
						
							|  |  |  |             case 'api': | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |                 $this->out->element('dd', 'noticesource', $source_name); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 break; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05: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-01-15 20:19:32 +00:00
										 |  |  |                     $this->out->elementStart('dd', null); | 
					
						
							|  |  |  |                     $this->out->element('a', array('href' => $ns->url, | 
					
						
							| 
									
										
										
										
											2009-01-15 00:30:06 +00:00
										 |  |  |                                               'rel' => 'external'), | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                                    $ns->name); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |                     $this->out->elementEnd('dd'); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 } else { | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |                     $this->out->element('dd', 'noticesource', $source_name); | 
					
						
							| 
									
										
										
										
											2008-12-11 18:19:25 -05:00
										 |  |  |                 } | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->elementEnd('dl'); | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showReplyTo() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->notice->reply_to) { | 
					
						
							|  |  |  |             $replyurl = common_local_url('shownotice', | 
					
						
							|  |  |  |                                          array('notice' => $this->notice->reply_to)); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->elementStart('dl', 'response'); | 
					
						
							|  |  |  |             $this->out->element('dt', null, _('To')); | 
					
						
							|  |  |  |             $this->out->elementStart('dd'); | 
					
						
							|  |  |  |             $this->out->element('a', array('href' => $replyurl, | 
					
						
							| 
									
										
										
										
											2009-01-15 00:30:06 +00:00
										 |  |  |                                       'rel' => 'in-reply-to'), | 
					
						
							| 
									
										
										
										
											2009-01-15 00:21:59 +00:00
										 |  |  |                            _('in reply to')); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->elementEnd('dd'); | 
					
						
							|  |  |  |             $this->out->elementEnd('dl'); | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $reply_url = common_local_url('newnotice', | 
					
						
							|  |  |  |                                       array('replyto' => $this->profile->nickname)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $reply_js = | 
					
						
							|  |  |  |           'return doreply("'.$this->profile->nickname.'",'.$this->notice->id.');'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->elementStart('a', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                              array('href' => $reply_url, | 
					
						
							|  |  |  |                                    'onclick' => $reply_js, | 
					
						
							|  |  |  |                                    'title' => _('reply'), | 
					
						
							|  |  |  |                                    'class' => 'replybutton')); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |         $this->out->raw(' →'); | 
					
						
							|  |  |  |         $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(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |         if ($user && $this->notice->profile_id == $user->id) { | 
					
						
							|  |  |  |             $deleteurl = common_local_url('deletenotice', | 
					
						
							|  |  |  |                                           array('notice' => $this->notice->id)); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->elementStart('a', array('class' => 'deletenotice', | 
					
						
							| 
									
										
										
										
											2008-12-23 14:08:51 -05:00
										 |  |  |                                             'href' => $deleteurl, | 
					
						
							|  |  |  |                                             'title' => _('delete'))); | 
					
						
							| 
									
										
										
										
											2009-01-15 20:19:32 +00:00
										 |  |  |             $this->out->raw(' ×'); | 
					
						
							|  |  |  |             $this->out->elementEnd('a'); | 
					
						
							| 
									
										
										
										
											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
										 |  |  |     } | 
					
						
							|  |  |  | } |