]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Bookmark/bookmarklistitem.php
Merge branch '1.0.x' of gitorious.org:statusnet/mainline into 1.0.x
[quix0rs-gnu-social.git] / plugins / Bookmark / 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         $out->elementStart('p', array('class' => 'entry-content'));
64
65         $nb = Bookmark::getByNotice($notice);
66
67         $profile = $notice->getProfile();
68
69         $atts = $notice->attachments();
70
71         if (empty($atts)) {
72
73             // Something went wrong!
74
75             common_log(
76                 LOG_ERR,
77                 sprintf(
78                     _m('Bookmark %1$s (notice %2$d) has no attachments.'),
79                     $nb->id,
80                     $notice->id
81                 )
82             );
83
84             // try to show the notice as plain text
85
86             parent::showContent();
87             return;
88
89         }
90
91         $att = $atts[0];
92
93         $out->elementStart('h3');
94         $out->element('a',
95                   array('href' => $att->url,
96                         'class' => 'bookmark-title'),
97                   $nb->title);
98         $out->elementEnd('h3');
99
100         // Replies look like "for:" tags
101
102         $replies = $notice->getReplies();
103         $tags = $notice->getTags();
104
105         if (!empty($replies) || !empty($tags)) {
106
107             $out->elementStart('ul', array('class' => 'bookmark-tags'));
108
109             foreach ($replies as $reply) {
110                 $other = Profile::staticGet('id', $reply);
111                 if (!empty($other)) {
112                     $out->elementStart('li');
113                     $out->element('a', array('rel' => 'tag',
114                                              'href' => $other->profileurl,
115                                              'title' => $other->getBestName()),
116                                   sprintf('for:%s', $other->nickname));
117                     $out->elementEnd('li');
118                     $out->text(' ');
119                 }
120             }
121
122             foreach ($tags as $tag) {
123                 $tag = trim($tag);
124                 if (!empty($tag)) {
125                     $out->elementStart('li');
126                     $out->element('a',
127                                   array('rel' => 'tag',
128                                         'href' => Notice_tag::url($tag)),
129                                   $tag);
130                     $out->elementEnd('li');
131                     $out->text(' ');
132                 }
133             }
134
135             $out->elementEnd('ul');
136         }
137
138         if (!empty($nb->description)) {
139             $out->element('p',
140                           array('class' => 'bookmark-description'),
141                           $nb->description);
142         }
143
144         $out->elementEnd('p');
145     }
146 }