]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Bookmark/lib/bookmarklistitem.php
plugins onAutoload now only overloads if necessary (extlibs etc.)
[quix0rs-gnu-social.git] / plugins / Bookmark / lib / bookmarklistitem.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2011, StatusNet, Inc.
5  *
6  * Adapter to show bookmarks in a nicer way
7  *
8  * PHP version 5
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Affero General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Affero General Public License for more details.
19  *
20  * You should have received a copy of the GNU Affero General Public License
21  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  *
23  * @category  Bookmark
24  * @package   StatusNet
25  * @author    Evan Prodromou <evan@status.net>
26  * @copyright 2011 StatusNet, Inc.
27  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
28  * @link      http://status.net/
29  */
30
31 if (!defined('STATUSNET')) {
32     // This check helps protect against security problems;
33     // your code file can't be executed directly from the web.
34     exit(1);
35 }
36
37 /**
38  * An adapter to show bookmarks in a nicer way
39  *
40  * @category  Bookmark
41  * @package   StatusNet
42  * @author    Evan Prodromou <evan@status.net>
43  * @copyright 2011 StatusNet, Inc.
44  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
45  * @link      http://status.net/
46  */
47
48 class BookmarkListItem extends NoticeListItemAdapter
49 {
50     function showNotice()
51     {
52         $this->nli->out->elementStart('div', 'entry-title');
53         $this->nli->showAuthor();
54         $this->showContent();
55         $this->nli->out->elementEnd('div');
56     }
57
58     function showContent()
59     {
60         $notice = $this->nli->notice;
61         $out    = $this->nli->out;
62
63         $nb = Bookmark::getByNotice($notice);
64
65         if (empty($nb)) {
66             common_log(LOG_ERR, "No bookmark for notice {$notice->id}");
67             parent::showContent();
68             return;
69         } else if (empty($nb->url)) {
70             common_log(LOG_ERR, "No url for bookmark {$nb->id} for notice {$notice->id}");
71             parent::showContent();
72             return;
73         }
74
75         $profile = $notice->getProfile();
76
77         $out->elementStart('p', array('class' => 'entry-content'));
78
79         // Whether to nofollow
80
81         $attrs = array('href' => $nb->url,
82                        'class' => 'bookmark-title');
83
84         $nf = common_config('nofollow', 'external');
85
86         if ($nf == 'never' || ($nf == 'sometimes' and $out instanceof ShowstreamAction)) {
87             $attrs['rel'] = 'external';
88         } else {
89             $attrs['rel'] = 'nofollow external';
90         }
91
92         $out->elementStart('h3');
93         $out->element('a',
94                       $attrs,
95                       $nb->title);
96         $out->elementEnd('h3');
97
98         // Replies look like "for:" tags
99
100         $replies = $notice->getReplies();
101         $tags = $notice->getTags();
102
103         if (!empty($replies) || !empty($tags)) {
104
105             $out->elementStart('ul', array('class' => 'bookmark-tags'));
106
107             foreach ($replies as $reply) {
108                 $other = Profile::getKV('id', $reply);
109                 if (!empty($other)) {
110                     $out->elementStart('li');
111                     $out->element('a', array('rel' => 'tag',
112                                              'href' => $other->profileurl,
113                                              'title' => $other->getBestName()),
114                                   sprintf('for:%s', $other->nickname));
115                     $out->elementEnd('li');
116                     $out->text(' ');
117                 }
118             }
119
120             foreach ($tags as $tag) {
121                 $tag = trim($tag);
122                 if (!empty($tag)) {
123                     $out->elementStart('li');
124                     $out->element('a',
125                                   array('rel' => 'tag',
126                                         'href' => Notice_tag::url($tag)),
127                                   $tag);
128                     $out->elementEnd('li');
129                     $out->text(' ');
130                 }
131             }
132
133             $out->elementEnd('ul');
134         }
135
136         if (!empty($nb->description)) {
137             $out->element('p',
138                           array('class' => 'bookmark-description'),
139                           $nb->description);
140         }
141
142         $out->elementEnd('p');
143     }
144 }