]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Bookmark/BookmarkPlugin.php
Also for onEndShowScripts() 'Action' is the proper type-hint.
[quix0rs-gnu-social.git] / plugins / Bookmark / BookmarkPlugin.php
index 499445abef65c4245708e2e1b9cd9ef2e644be7c..7f2568b0401e5134d8859984c6451249dc0fad05 100644 (file)
@@ -48,6 +48,8 @@ class BookmarkPlugin extends MicroAppPlugin
     const VERSION         = '0.1';
     const IMPORTDELICIOUS = 'BookmarkPlugin:IMPORTDELICIOUS';
 
+    var $oldSaveNew = true;
+
     /**
      * Authorization for importing delicious bookmarks
      *
@@ -59,7 +61,7 @@ class BookmarkPlugin extends MicroAppPlugin
      *
      * @return boolean hook value
      */
-    function onUserRightsCheck($profile, $right, &$result)
+    function onUserRightsCheck(Profile $profile, $right, &$result)
     {
         if ($right == self::IMPORTDELICIOUS) {
             $result = !$profile->isSilenced();
@@ -98,7 +100,7 @@ class BookmarkPlugin extends MicroAppPlugin
         return true;
     }
 
-    function onEndShowScripts($action)
+    function onEndShowScripts(Action $action)
     {
         $action->script($this->path('js/bookmark.js'));
         return true;
@@ -107,11 +109,11 @@ class BookmarkPlugin extends MicroAppPlugin
     /**
      * Map URLs to actions
      *
-     * @param Net_URL_Mapper $m path-to-action mapper
+     * @param URLMapper $m path-to-action mapper
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-    function onRouterInitialized($m)
+    public function onRouterInitialized(URLMapper $m)
     {
         if (common_config('singleuser', 'enabled')) {
             $nickname = User::singleUserNickname();
@@ -179,7 +181,7 @@ class BookmarkPlugin extends MicroAppPlugin
      *
      * @return value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Bookmark',
                             'version' => self::VERSION,
@@ -237,39 +239,6 @@ class BookmarkPlugin extends MicroAppPlugin
         return true;
     }
 
-    /**
-     * Output our CSS class for bookmark notice list elements
-     *
-     * @param NoticeListItem $nli The item being shown
-     *
-     * @return boolean hook value
-     */
-
-    function onStartOpenNoticeListItemElement($nli)
-    {
-       if (!$this->isMyNotice($nli->notice)) {
-               return true;
-       }
-       
-        $nb = Bookmark::getByNotice($nli->notice);
-        
-        if (empty($nb)) {
-               $this->log(LOG_INFO, "Notice {$nli->notice->id} has bookmark class but no matching Bookmark record.");
-               return true;
-        }
-               
-           $id = (empty($nli->repeat)) ? $nli->notice->id : $nli->repeat->id;
-           $class = 'hentry notice bookmark';
-           if ($nli->notice->scope != 0 && $nli->notice->scope != 1) {
-               $class .= ' limited-scope';
-           }
-           $nli->out->elementStart('li', array('class' => $class,
-                                               'id' => 'notice-' . $id));
-                                               
-           Event::handle('EndOpenNoticeListItemElement', array($nli));
-           return false;
-    }
-
     /**
      * Modify the default menu to link to our custom action
      *
@@ -287,16 +256,9 @@ class BookmarkPlugin extends MicroAppPlugin
      *
      * @see Action
      */
-    function onEndPersonalGroupNav($action)
+    function onEndPersonalGroupNav(Menu $menu, Profile $target, Profile $scoped=null)
     {
-        $this->user = common_current_user();
-
-        if (!$this->user) {
-            // TRANS: Client error displayed when trying to display bookmarks for a non-existing user.
-            $this->clientError(_('No such user.'));
-        }
-
-        $action->menuItem(common_local_url('bookmarks', array('nickname' => $this->user->nickname)),
+        $menu->menuItem(common_local_url('bookmarks', array('nickname' => $target->getNickname())),
                           // TRANS: Menu item in sample plugin.
                           _m('Bookmarks'),
                           // TRANS: Menu item title in sample plugin.
@@ -316,7 +278,7 @@ class BookmarkPlugin extends MicroAppPlugin
      *
      * @return boolean hook value
      */
-    function deleteRelated($notice)
+    function deleteRelated(Notice $notice)
     {
        if ($this->isMyNotice($notice)) {
                
@@ -334,12 +296,12 @@ class BookmarkPlugin extends MicroAppPlugin
      * Save a bookmark from an activity
      *
      * @param Activity $activity Activity to save
-     * @param Profile  $profile  Profile to use as author
+     * @param Profile  $actor    Profile to use as author
      * @param array    $options  Options to pass to bookmark-saving code
      *
      * @return Notice resulting notice
      */
-    function saveNoticeFromActivity($activity, $profile, $options=array())
+    function saveNoticeFromActivity(Activity $activity, Profile $actor, array $options=array())
     {
         $bookmark = $activity->objects[0];
 
@@ -410,7 +372,7 @@ class BookmarkPlugin extends MicroAppPlugin
             }
         }
 
-        return Bookmark::saveNew($profile,
+        return Bookmark::saveNew($actor,
                                  $bookmark->title,
                                  $url,
                                  $tags,
@@ -418,7 +380,7 @@ class BookmarkPlugin extends MicroAppPlugin
                                  $options);
     }
 
-    function activityObjectFromNotice($notice)
+    function activityObjectFromNotice(Notice $notice)
     {
         assert($this->isMyNotice($notice));
 
@@ -478,19 +440,6 @@ class BookmarkPlugin extends MicroAppPlugin
         return $object;
     }
 
-    /**
-     * Given a notice list item, returns an adapter specific
-     * to this plugin.
-     *
-     * @param NoticeListItem $nli item to adapt
-     *
-     * @return NoticeListItemAdapter adapter or null
-     */
-    function adaptNoticeListItem($nli)
-    {
-        return new BookmarkListItem($nli);
-    }
-
     function entryForm($out)
     {
         return new InitialBookmarkForm($out);
@@ -543,4 +492,88 @@ class BookmarkPlugin extends MicroAppPlugin
 
         return true;
     }
+
+    protected function showNoticeItemNotice(NoticeListItem $nli)
+    {
+        $nli->out->elementStart('div', 'entry-title');
+        $nli->showAuthor();
+        $nli->showContent();
+        $nli->out->elementEnd('div');
+    }
+
+    protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
+    {
+        $nb = Bookmark::getByNotice($stored);
+
+        if (empty($nb)) {
+            common_log(LOG_ERR, "No bookmark for notice {$stored->id}");
+            parent::showContent();
+            return;
+        } else if (empty($nb->url)) {
+            common_log(LOG_ERR, "No url for bookmark {$nb->id} for notice {$stored->id}");
+            parent::showContent();
+            return;
+        }
+
+        $profile = $stored->getProfile();
+
+        // Whether to nofollow
+        $attrs = array('href' => $nb->url, 'class' => 'bookmark-title');
+
+        $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');
+        $out->element('a', $attrs, $nb->title);
+        $out->elementEnd('h3');
+
+        // Replies look like "for:" tags
+        $replies = $stored->getReplies();
+        $tags = $stored->getTags();
+
+        if (!empty($nb->description)) {
+            $out->element('p',
+                          array('class' => 'bookmark-description'),
+                          $nb->description);
+        }
+
+        if (!empty($replies) || !empty($tags)) {
+
+            $out->elementStart('ul', array('class' => 'bookmark-tags'));
+
+            foreach ($replies as $reply) {
+                $other = Profile::getKV('id', $reply);
+                if (!empty($other)) {
+                    $out->elementStart('li');
+                    $out->element('a', array('rel' => 'tag',
+                                             'href' => $other->profileurl,
+                                             'title' => $other->getBestName()),
+                                  sprintf('for:%s', $other->nickname));
+                    $out->elementEnd('li');
+                    $out->text(' ');
+                }
+            }
+
+            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');
+        }
+
+    }
 }