| 
									
										
										
										
											2010-12-18 02:27:14 -05:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2010, StatusNet, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * A plugin to enable social-bookmarking functionality | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  SocialBookmark | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-10 23:47:43 +02:00
										 |  |  | if (!defined('GNUSOCIAL')) { exit(1); } | 
					
						
							| 
									
										
										
										
											2010-12-18 02:27:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Bookmark plugin main class | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Bookmark | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							|  |  |  |  * @author    Brion Vibber <brionv@status.net> | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @copyright 2010 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  | class BookmarkPlugin extends MicroAppPlugin | 
					
						
							| 
									
										
										
										
											2010-12-18 02:27:14 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-12-29 14:16:15 -08:00
										 |  |  |     const VERSION         = '0.1'; | 
					
						
							| 
									
										
										
										
											2010-12-29 13:51:59 -08:00
										 |  |  |     const IMPORTDELICIOUS = 'BookmarkPlugin:IMPORTDELICIOUS'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-29 14:16:15 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Authorization for importing delicious bookmarks | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * By default, everyone can import bookmarks except silenced people. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Profile $profile Person whose rights to check | 
					
						
							|  |  |  |      * @param string  $right   Right to check; const value | 
					
						
							|  |  |  |      * @param boolean &$result Result of the check, writeable | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-12-29 13:51:59 -08:00
										 |  |  |     function onUserRightsCheck($profile, $right, &$result) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($right == self::IMPORTDELICIOUS) { | 
					
						
							|  |  |  |             $result = !$profile->isSilenced(); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Database schema setup | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @see Schema | 
					
						
							|  |  |  |      * @see ColumnDef | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value; true means continue processing, false means stop. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function onCheckSchema() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $schema = Schema::get(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 14:17:54 +01:00
										 |  |  |         $schema->ensureTable('bookmark', Bookmark::schemaDef()); | 
					
						
							| 
									
										
										
										
											2010-12-24 20:34:15 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Show the CSS necessary for this plugin | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Action $action the action being run | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function onEndShowStyles($action) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2014-06-03 02:24:09 +02:00
										 |  |  |         $action->cssLink($this->path('css/bookmark.css')); | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-17 18:37:51 -07:00
										 |  |  |     function onEndShowScripts($action) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $action->script($this->path('js/bookmark.js')); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Map URLs to actions | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2014-11-07 15:24:05 +01:00
										 |  |  |      * @param URLMapper $m path-to-action mapper | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value; true means continue processing, false means stop. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-11-07 15:24:05 +01:00
										 |  |  |     public function onRouterInitialized(URLMapper $m) | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2012-09-14 17:37:42 +02:00
										 |  |  |         if (common_config('singleuser', 'enabled')) { | 
					
						
							|  |  |  |             $nickname = User::singleUserNickname(); | 
					
						
							|  |  |  |             $m->connect('bookmarks', | 
					
						
							|  |  |  |                         array('action' => 'bookmarks', 'nickname' => $nickname)); | 
					
						
							|  |  |  |             $m->connect('bookmarks/rss', | 
					
						
							|  |  |  |                         array('action' => 'bookmarksrss', 'nickname' => $nickname)); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $m->connect(':nickname/bookmarks', | 
					
						
							|  |  |  |                         array('action' => 'bookmarks'), | 
					
						
							|  |  |  |                         array('nickname' => Nickname::DISPLAY_FMT)); | 
					
						
							|  |  |  |             $m->connect(':nickname/bookmarks/rss', | 
					
						
							|  |  |  |                         array('action' => 'bookmarksrss'), | 
					
						
							|  |  |  |                         array('nickname' => Nickname::DISPLAY_FMT)); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $m->connect('api/bookmarks/:id.:format', | 
					
						
							|  |  |  |                     array('action' => 'ApiTimelineBookmarks', | 
					
						
							|  |  |  |                           'id' => Nickname::INPUT_FMT, | 
					
						
							|  |  |  |                           'format' => '(xml|json|rss|atom|as)')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |         $m->connect('main/bookmark/new', | 
					
						
							|  |  |  |                     array('action' => 'newbookmark'), | 
					
						
							|  |  |  |                     array('id' => '[0-9]+')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-28 12:58:10 -08:00
										 |  |  |         $m->connect('main/bookmark/popup', | 
					
						
							|  |  |  |                     array('action' => 'bookmarkpopup')); | 
					
						
							| 
									
										
										
										
											2010-12-21 14:43:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-29 13:51:59 -08:00
										 |  |  |         $m->connect('main/bookmark/import', | 
					
						
							|  |  |  |                     array('action' => 'importdelicious')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-14 23:44:01 -04:00
										 |  |  |         $m->connect('main/bookmark/forurl', | 
					
						
							|  |  |  |                     array('action' => 'bookmarkforurl')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-30 13:21:14 -08:00
										 |  |  |         $m->connect('bookmark/:id', | 
					
						
							| 
									
										
										
										
											2010-12-24 20:34:15 -08:00
										 |  |  |                     array('action' => 'showbookmark'), | 
					
						
							| 
									
										
										
										
											2010-12-30 13:21:14 -08:00
										 |  |  |                     array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); | 
					
						
							| 
									
										
										
										
											2010-12-24 20:34:15 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-28 12:58:10 -08:00
										 |  |  |         $m->connect('notice/by-url/:id', | 
					
						
							|  |  |  |                     array('action' => 'noticebyurl'), | 
					
						
							|  |  |  |                     array('id' => '[0-9]+')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-21 14:46:31 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Add our two queue handlers to the queue manager | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param QueueManager $qm current queue manager | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-12-21 14:46:31 -05:00
										 |  |  |      * @return boolean hook value | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-12-21 11:09:01 -05:00
										 |  |  |     function onEndInitializeQueueManager($qm) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $qm->connect('dlcsback', 'DeliciousBackupImporter'); | 
					
						
							|  |  |  |         $qm->connect('dlcsbkmk', 'DeliciousBookmarkImporter'); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Plugin version data | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param array &$versions array of version data | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |      * @return value | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-06-06 22:04:01 +02:00
										 |  |  |     function onPluginVersion(array &$versions) | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-04-13 15:26:47 -04:00
										 |  |  |         $versions[] = array('name' => 'Bookmark', | 
					
						
							| 
									
										
										
										
											2015-10-12 09:47:30 +02:00
										 |  |  |                             'version' => GNUSOCIAL_VERSION, | 
					
						
							|  |  |  |                             'author' => 'Evan Prodromou, Stephane Berube, Jean Baptiste Favre, Mikael Nordfeldth', | 
					
						
							|  |  |  |                             'homepage' => 'https://gnu.io/social', | 
					
						
							| 
									
										
										
										
											2011-04-13 15:26:47 -04:00
										 |  |  |                             'description' => | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  |                             // TRANS: Plugin description.
 | 
					
						
							| 
									
										
										
										
											2015-10-12 09:47:30 +02:00
										 |  |  |                             _m('Plugin for posting bookmarks. ') . | 
					
						
							| 
									
										
										
										
											2012-09-14 17:37:42 +02:00
										 |  |  |                             'BookmarkList feature has been developped by Stephane Berube. ' . | 
					
						
							|  |  |  |                             'Integration has been done by Jean Baptiste Favre.'); | 
					
						
							| 
									
										
										
										
											2010-12-21 10:13:20 -05:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-21 14:43:03 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Load our document if requested | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string &$title  Title to fetch | 
					
						
							|  |  |  |      * @param string &$output HTML to output | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function onStartLoadDoc(&$title, &$output) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($title == 'bookmarklet') { | 
					
						
							|  |  |  |             $filename = INSTALLDIR.'/plugins/Bookmark/bookmarklet'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $c      = file_get_contents($filename); | 
					
						
							|  |  |  |             $output = common_markup_to_html($c); | 
					
						
							|  |  |  |             return false; // success!
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-23 09:42:42 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-29 14:16:15 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Show a link to our delicious import page on profile settings form | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Action $action Profile settings action being shown | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-12-29 14:02:31 -08:00
										 |  |  |     function onEndProfileSettingsActions($action) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $user = common_current_user(); | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-29 14:02:31 -08:00
										 |  |  |         if (!empty($user) && $user->hasRight(self::IMPORTDELICIOUS)) { | 
					
						
							|  |  |  |             $action->elementStart('li'); | 
					
						
							|  |  |  |             $action->element('a', | 
					
						
							|  |  |  |                              array('href' => common_local_url('importdelicious')), | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  |                              // TRANS: Link text in proile leading to import form.
 | 
					
						
							| 
									
										
										
										
											2011-03-30 22:30:23 +02:00
										 |  |  |                              _m('Import del.icio.us bookmarks')); | 
					
						
							| 
									
										
										
										
											2010-12-29 14:02:31 -08:00
										 |  |  |             $action->elementEnd('li'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-14 17:37:42 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Modify the default menu to link to our custom action | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Using event handlers, it's possible to modify the default UI for pages | 
					
						
							|  |  |  |      * almost without limit. In this method, we add a menu item to the default | 
					
						
							|  |  |  |      * primary menu for the interface to link to our action. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * The Action class provides a rich set of events to hook, as well as output | 
					
						
							|  |  |  |      * methods. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Action $action The current action handler. Use this to | 
					
						
							|  |  |  |      * do any output. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean hook value; true means continue processing, false means stop. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @see Action | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-06-28 13:11:03 +02:00
										 |  |  |     function onEndPersonalGroupNav(Menu $menu, Profile $target, Profile $scoped=null) | 
					
						
							| 
									
										
										
										
											2012-09-14 17:37:42 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2014-06-28 13:11:03 +02:00
										 |  |  |         $menu->menuItem(common_local_url('bookmarks', array('nickname' => $target->getNickname())), | 
					
						
							| 
									
										
										
										
											2012-09-14 17:37:42 +02:00
										 |  |  |                           // TRANS: Menu item in sample plugin.
 | 
					
						
							|  |  |  |                           _m('Bookmarks'), | 
					
						
							|  |  |  |                           // TRANS: Menu item title in sample plugin.
 | 
					
						
							|  |  |  |                           _m('A list of your bookmarks'), false, 'nav_timeline_bookmarks'); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |     function types() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return array(ActivityObject::BOOKMARK); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * When a notice is deleted, delete the related Bookmark | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Notice $notice Notice being deleted | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |      * @return boolean hook value | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2014-07-02 11:37:46 +02:00
										 |  |  |     function deleteRelated(Notice $notice) | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-10-10 21:53:45 +02:00
										 |  |  |         try { | 
					
						
							|  |  |  |             $nb = Bookmark::fromStored($notice); | 
					
						
							|  |  |  |         } catch (NoResultException $e) { | 
					
						
							|  |  |  |             throw new AlreadyFulfilledException('Bookmark already gone when deleting: '.$e->getMessage()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $nb->delete(); | 
					
						
							| 
									
										
										
										
											2011-07-14 15:05:15 -04:00
										 |  |  |     	 | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-29 14:16:15 -08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Save a bookmark from an activity | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Activity $activity Activity to save | 
					
						
							| 
									
										
										
										
											2014-07-02 11:37:46 +02:00
										 |  |  |      * @param Profile  $actor    Profile to use as author | 
					
						
							| 
									
										
										
										
											2010-12-29 14:16:15 -08:00
										 |  |  |      * @param array    $options  Options to pass to bookmark-saving code | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Notice resulting notice | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-10-10 23:47:43 +02:00
										 |  |  |     protected function saveObjectFromActivity(Activity $activity, Notice $stored, array $options=array()) | 
					
						
							| 
									
										
										
										
											2010-12-27 22:09:29 -08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-10-12 17:48:23 +02:00
										 |  |  |         return Bookmark::saveActivityObject($activity->objects[0], $stored); | 
					
						
							| 
									
										
										
										
											2010-12-23 09:42:42 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-27 22:09:29 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-12 17:48:23 +02:00
										 |  |  |     public function onEndNoticeAsActivity(Notice $stored, Activity $act, Profile $scoped=null) | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-10-12 17:48:23 +02:00
										 |  |  |         if (!$this->isMyNotice($stored)) { | 
					
						
							|  |  |  |             return true; | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-12 17:48:23 +02:00
										 |  |  |         common_debug('Extending activity '.$stored->id.' with '.get_called_class()); | 
					
						
							|  |  |  |         $this->extendActivity($stored, $act, $scoped); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-12 17:48:23 +02:00
										 |  |  |     public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         /*$hashtags = array(); | 
					
						
							|  |  |  |         $taglinks = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach ($tags as $tag) { | 
					
						
							|  |  |  |             $hashtags[] = '#'.$tag; | 
					
						
							|  |  |  |             $attrs      = array('href' => Notice_tag::url($tag), | 
					
						
							|  |  |  |                                 'rel'  => $tag, | 
					
						
							|  |  |  |                                 'class' => 'tag'); | 
					
						
							|  |  |  |             $taglinks[] = XMLStringer::estring('a', $attrs, $tag); | 
					
						
							|  |  |  |         }*/ | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-12 17:48:23 +02:00
										 |  |  |     function activityObjectFromNotice(Notice $notice) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return Bookmark::fromStored($notice)->asActivityObject(); | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function entryForm($out) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-04-14 23:44:01 -04:00
										 |  |  |         return new InitialBookmarkForm($out); | 
					
						
							| 
									
										
										
										
											2011-03-06 16:33:36 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-06 17:27:03 -05:00
										 |  |  |     function tag() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return 'bookmark'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function appTitle() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-04-06 16:36:35 +02:00
										 |  |  |         // TRANS: Application title.
 | 
					
						
							|  |  |  |         return _m('TITLE','Bookmark'); | 
					
						
							| 
									
										
										
										
											2011-03-06 17:27:03 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-09-15 17:06:05 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function onEndUpgrade() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Version 0.9.x of the plugin didn't stamp notices
 | 
					
						
							|  |  |  |         // with verb and object-type (for obvious reasons). Update
 | 
					
						
							|  |  |  |         // those notices here.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $notice = new Notice(); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         $notice->whereAdd('exists (select uri from bookmark where bookmark.uri = notice.uri)'); | 
					
						
							|  |  |  |         $notice->whereAdd('((object_type is null) or (object_type = "' .ActivityObject::NOTE.'"))'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $notice->find(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         while ($notice->fetch()) { | 
					
						
							|  |  |  |             $original = clone($notice); | 
					
						
							|  |  |  |             $notice->verb        = ActivityVerb::POST; | 
					
						
							|  |  |  |             $notice->object_type = ActivityObject::BOOKMARK; | 
					
						
							|  |  |  |             $notice->update($original); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-01-21 21:12:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function activityObjectOutputJson(ActivityObject $obj, array &$out) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         assert($obj->type == ActivityObject::BOOKMARK); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-10 22:20:53 +02:00
										 |  |  |         $bm = Bookmark::getByPK(array('uri' => $obj->id)); | 
					
						
							| 
									
										
										
										
											2012-01-21 21:12:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-10 21:53:45 +02:00
										 |  |  |         $out['displayName'] = $bm->getTitle(); | 
					
						
							|  |  |  |         $out['targetUrl']   = $bm->getUrl(); | 
					
						
							| 
									
										
										
										
											2012-01-21 21:12:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-10-26 22:07:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-10 21:53:45 +02:00
										 |  |  |     protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $nb = Bookmark::fromStored($stored); | 
					
						
							| 
									
										
										
										
											2014-10-26 22:07:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // Whether to nofollow
 | 
					
						
							| 
									
										
										
										
											2015-10-10 21:53:45 +02:00
										 |  |  |         $attrs = array('href' => $nb->getUrl(), 'class' => 'bookmark-title'); | 
					
						
							| 
									
										
										
										
											2014-10-26 22:07:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $nf = common_config('nofollow', 'external'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($nf == 'never' || ($nf == 'sometimes' and $out instanceof ShowstreamAction)) { | 
					
						
							|  |  |  |             $attrs['rel'] = 'external'; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $attrs['rel'] = 'nofollow external'; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $out->elementStart('h3'); | 
					
						
							| 
									
										
										
										
											2015-10-12 18:28:32 +02:00
										 |  |  |         $out->element('a', $attrs, $nb->getTitle()); | 
					
						
							| 
									
										
										
										
											2014-10-26 22:07:16 +01:00
										 |  |  |         $out->elementEnd('h3'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Replies look like "for:" tags
 | 
					
						
							|  |  |  |         $replies = $stored->getReplies(); | 
					
						
							|  |  |  |         $tags = $stored->getTags(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-16 23:28:07 +01:00
										 |  |  |         if (!empty($nb->description)) { | 
					
						
							|  |  |  |             $out->element('p', | 
					
						
							|  |  |  |                           array('class' => 'bookmark-description'), | 
					
						
							|  |  |  |                           $nb->description); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-26 22:07:16 +01:00
										 |  |  |         if (!empty($replies) || !empty($tags)) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $out->elementStart('ul', array('class' => 'bookmark-tags')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             foreach ($replies as $reply) { | 
					
						
							| 
									
										
										
										
											2015-10-12 18:28:32 +02:00
										 |  |  |                 $other = Profile::getByPK($reply); | 
					
						
							|  |  |  |                 $out->elementStart('li'); | 
					
						
							|  |  |  |                 $out->element('a', array('rel' => 'tag', | 
					
						
							|  |  |  |                                          'href' => $other->getUrl(), | 
					
						
							|  |  |  |                                          'title' => $other->getBestName()), | 
					
						
							|  |  |  |                               sprintf('for:%s', $other->getNickname())); | 
					
						
							|  |  |  |                 $out->elementEnd('li'); | 
					
						
							|  |  |  |                 $out->text(' '); | 
					
						
							| 
									
										
										
										
											2014-10-26 22:07:16 +01:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             foreach ($tags as $tag) { | 
					
						
							|  |  |  |                 $tag = trim($tag); | 
					
						
							|  |  |  |                 if (!empty($tag)) { | 
					
						
							|  |  |  |                     $out->elementStart('li'); | 
					
						
							|  |  |  |                     $out->element('a', | 
					
						
							|  |  |  |                                   array('rel' => 'tag', | 
					
						
							|  |  |  |                                         'href' => Notice_tag::url($tag)), | 
					
						
							|  |  |  |                                   $tag); | 
					
						
							|  |  |  |                     $out->elementEnd('li'); | 
					
						
							|  |  |  |                     $out->text(' '); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $out->elementEnd('ul'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-18 02:27:14 -05:00
										 |  |  | } |