X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FBookmark%2FBookmarkPlugin.php;h=6dacdb085e88a167492d50f64893d07ca1b31950;hb=de55d8f83bb2ecf9461510768fe7147aec592055;hp=f8db77e2b701d9ca0274704e0b9ba5b5726c046d;hpb=ea95f7b7b0e189e7057bba6dab07d7dfcc12d8c6;p=quix0rs-gnu-social.git diff --git a/plugins/Bookmark/BookmarkPlugin.php b/plugins/Bookmark/BookmarkPlugin.php index f8db77e2b7..6dacdb085e 100644 --- a/plugins/Bookmark/BookmarkPlugin.php +++ b/plugins/Bookmark/BookmarkPlugin.php @@ -135,41 +135,6 @@ class BookmarkPlugin extends MicroAppPlugin $action->script($this->path('js/bookmark.js')); return true; } - /** - * Load related modules when needed - * - * @param string $cls Name of the class to be loaded - * - * @return boolean hook value; true means continue processing, false means stop. - */ - function onAutoload($cls) - { - $dir = dirname(__FILE__); - - switch ($cls) - { - case 'ShowbookmarkAction': - case 'NewbookmarkAction': - case 'BookmarkpopupAction': - case 'NoticebyurlAction': - case 'BookmarkforurlAction': - case 'ImportdeliciousAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'Bookmark': - include_once $dir.'/'.$cls.'.php'; - return false; - case 'BookmarkListItem': - case 'BookmarkForm': - case 'InitialBookmarkForm': - case 'DeliciousBackupImporter': - case 'DeliciousBookmarkImporter': - include_once $dir.'/'.strtolower($cls).'.php'; - return false; - default: - return true; - } - } /** * Map URLs to actions @@ -180,6 +145,26 @@ class BookmarkPlugin extends MicroAppPlugin */ function onRouterInitialized($m) { + 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)')); + $m->connect('main/bookmark/new', array('action' => 'newbookmark'), array('id' => '[0-9]+')); @@ -230,11 +215,13 @@ class BookmarkPlugin extends MicroAppPlugin { $versions[] = array('name' => 'Bookmark', 'version' => self::VERSION, - 'author' => 'Evan Prodromou', + 'author' => 'Evan Prodromou, Stephane Berube, Jean Baptiste Favre', 'homepage' => 'http://status.net/wiki/Plugin:Bookmark', 'description' => // TRANS: Plugin description. - _m('Simple extension for supporting bookmarks.')); + _m('Simple extension for supporting bookmarks. ') . + 'BookmarkList feature has been developped by Stephane Berube. ' . + 'Integration has been done by Jean Baptiste Favre.'); return true; } @@ -292,18 +279,61 @@ class BookmarkPlugin extends MicroAppPlugin function onStartOpenNoticeListItemElement($nli) { + if (!$this->isMyNotice($nli->notice)) { + return true; + } + $nb = Bookmark::getByNotice($nli->notice); - if (!empty($nb)) { - $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)); + + 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 + * + * 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 + */ + function onEndPersonalGroupNav($action) + { + $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.')); return false; } + + $action->menuItem(common_local_url('bookmarks', array('nickname' => $this->user->nickname)), + // 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; } @@ -322,7 +352,7 @@ class BookmarkPlugin extends MicroAppPlugin $options = array('uri' => $bookmark->id, 'url' => $bookmark->link, - 'is_local' => Notice::REMOTE_OMB, + 'is_local' => Notice::REMOTE, 'source' => 'ostatus'); return self::_postBookmark($author->localProfile(), $activity, $options); @@ -355,12 +385,15 @@ class BookmarkPlugin extends MicroAppPlugin */ function deleteRelated($notice) { - $nb = Bookmark::getByNotice($notice); - - if (!empty($nb)) { - $nb->delete(); - } - + if ($this->isMyNotice($notice)) { + + $nb = Bookmark::getByNotice($notice); + + if (!empty($nb)) { + $nb->delete(); + } + } + return true; } @@ -427,7 +460,7 @@ class BookmarkPlugin extends MicroAppPlugin if (!empty($other)) { $options['replies'][] = $replyURI; } else { - $group = User_group::staticGet('uri', $replyURI); + $group = User_group::getKV('uri', $replyURI); if (!empty($group)) { $options['groups'][] = $replyURI; } @@ -438,7 +471,7 @@ class BookmarkPlugin extends MicroAppPlugin // @fixme what about conversation ID? if (!empty($activity->context->replyToID)) { - $orig = Notice::staticGet('uri', + $orig = Notice::getKV('uri', $activity->context->replyToID); if (!empty($orig)) { $options['reply_to'] = $orig->id; @@ -540,4 +573,41 @@ class BookmarkPlugin extends MicroAppPlugin // TRANS: Application title. return _m('TITLE','Bookmark'); } + + 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); + } + } + + public function activityObjectOutputJson(ActivityObject $obj, array &$out) + { + assert($obj->type == ActivityObject::BOOKMARK); + + $bm = Bookmark::getKV('uri', $obj->id); + + if (empty($bm)) { + throw new ServerException("Unknown bookmark: " . $obj->id); + } + + $out['displayName'] = $bm->title; + $out['targetUrl'] = $bm->url; + + return true; + } }