const VERSION = '0.1';
const IMPORTDELICIOUS = 'BookmarkPlugin:IMPORTDELICIOUS';
+ var $oldSaveNew = true;
+
/**
* Authorization for importing delicious bookmarks
*
*
* @return boolean hook value
*/
- function onUserRightsCheck($profile, $right, &$result)
+ function onUserRightsCheck(Profile $profile, $right, &$result)
{
if ($right == self::IMPORTDELICIOUS) {
$result = !$profile->isSilenced();
return true;
}
- function onEndShowScripts($action)
+ function onEndShowScripts(Action $action)
{
$action->script($this->path('js/bookmark.js'));
return true;
/**
* 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();
*
* @return value
*/
- function onPluginVersion(&$versions)
+ function onPluginVersion(array &$versions)
{
$versions[] = array('name' => 'Bookmark',
'version' => self::VERSION,
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
*
*
* @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.
*
* @return boolean hook value
*/
- function deleteRelated($notice)
+ function deleteRelated(Notice $notice)
{
if ($this->isMyNotice($notice)) {
* 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];
}
}
- return Bookmark::saveNew($profile,
+ return Bookmark::saveNew($actor,
$bookmark->title,
$url,
$tags,
$options);
}
- function activityObjectFromNotice($notice)
+ function activityObjectFromNotice(Notice $notice)
{
assert($this->isMyNotice($notice));
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);
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');
+ }
+
+ }
}