]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/NoticeTitle/NoticeTitlePlugin.php
hide the Whats Up Nickname if notice title enabled
[quix0rs-gnu-social.git] / plugins / NoticeTitle / NoticeTitlePlugin.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2010, StatusNet, Inc.
5  *
6  * A plugin to add titles to notices
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  NoticeTitle
24  * @package   StatusNet
25  * @author    Evan Prodromou <evan@status.net>
26  * @copyright 2010 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 define('NOTICE_TITLE_PLUGIN_VERSION', '0.1');
38
39 /**
40  * NoticeTitle plugin to add an optional title to notices.
41  *
42  * Stores notice titles in a secondary table, notice_title.
43  *
44  * @category  NoticeTitle
45  * @package   StatusNet
46  * @author    Evan Prodromou <evan@status.net>
47  * @copyright 2010 StatusNet, Inc.
48  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
49  * @link      http://status.net/
50  */
51
52 class NoticeTitlePlugin extends Plugin
53 {
54     /**
55      * Database schema setup
56      *
57      * Add the notice_title helper table
58      *
59      * @see Schema
60      * @see ColumnDef
61      *
62      * @return boolean hook value; true means continue processing, false means stop.
63      */
64
65     function onCheckSchema()
66     {
67         $schema = Schema::get();
68
69         // For storing titles for notices
70
71         $schema->ensureTable('notice_title',
72                              array(new ColumnDef('notice_id',
73                                                  'integer',
74                                                  null,
75                                                  true,
76                                                  'PRI'),
77                                    new ColumnDef('title',
78                                                  'varchar',
79                                                  Notice_title::MAXCHARS,
80                                                  false)));
81
82         return true;
83     }
84
85     /**
86      * Load related modules when needed
87      *
88      * @param string $cls Name of the class to be loaded
89      *
90      * @return boolean hook value; true means continue processing, false means stop.
91      */
92
93     function onAutoload($cls)
94     {
95         $dir = dirname(__FILE__);
96
97         switch ($cls)
98         {
99         case 'Notice_title':
100             include_once $dir . '/'.$cls.'.php';
101             return false;
102         default:
103             return true;
104         }
105     }
106
107     /**
108      * Provide plugin version information.
109      *
110      * This data is used when showing the version page.
111      *
112      * @param array &$versions array of version data arrays; see EVENTS.txt
113      *
114      * @return boolean hook value
115      */
116
117     function onPluginVersion(&$versions)
118     {
119         $url = 'http://status.net/wiki/Plugin:NoticeTitle';
120
121         $versions[] = array('name' => 'NoticeTitle',
122                             'version' => NOTICE_TITLE_PLUGIN_VERSION,
123                             'author' => 'Evan Prodromou',
124                             'homepage' => $url,
125                             'rawdescription' =>
126                             _m('Adds optional titles to notices'));
127         return true;
128     }
129
130     /**
131      * Show title entry when showing notice form
132      *
133      * @param Form $form Form being shown
134      *
135      * @return boolean hook value
136      */
137
138     function onStartShowNoticeFormData($form)
139     {
140         $form->out->element('style', null, 'label#notice_data-text-label { display: none }');
141         $form->out->element('input', array('type' => 'text',
142                                            'id' => 'notice_title',
143                                            'name' => 'notice_title',
144                                            'size' => 40,
145                                            'maxlength' => Notice_title::MAXCHARS));
146         return true;
147     }
148
149     /**
150      * Validate notice title before saving
151      *
152      * @param Action  $action    NewNoticeAction being executed
153      * @param integer &$authorId Author ID
154      * @param string  &$text     Text of the notice
155      * @param array   &$options  Options array
156      *
157      * @return boolean hook value
158      */
159
160     function onStartNoticeSaveWeb($action, &$authorId, &$text, &$options)
161     {
162         $title = $action->trimmed('notice_title');
163         if (!empty($title)) {
164             if (mb_strlen($title) > Notice_title::MAXCHARS) {
165                 throw new Exception(sprintf(_m("Notice title too long (max %d)",
166                                                Notice_title::MAXCHARS)));
167             }
168         }
169         return true;
170     }
171
172     /**
173      * Save notice title after notice is saved
174      *
175      * @param Action $action NewNoticeAction being executed
176      * @param Notice $notice Notice that was saved
177      *
178      * @return boolean hook value
179      */
180
181     function onEndNoticeSaveWeb($action, $notice)
182     {
183         if (!empty($notice)) {
184
185             $title = $action->trimmed('notice_title');
186
187             if (!empty($title)) {
188
189                 $nt = new Notice_title();
190
191                 $nt->notice_id = $notice->id;
192                 $nt->title     = $title;
193
194                 $nt->insert();
195             }
196         }
197
198         return true;
199     }
200
201     /**
202      * Show the notice title in lists
203      *
204      * @param NoticeListItem $nli NoticeListItem being shown
205      *
206      * @return boolean hook value
207      */
208
209     function onStartShowNoticeItem($nli)
210     {
211         $title = Notice_title::fromNotice($nli->notice);
212
213         if (!empty($title)) {
214             $nli->out->element('h4', array('class' => 'notice_title'), $title);
215         }
216
217         return true;
218     }
219
220     /**
221      * Show the notice title in RSS output
222      *
223      * @param Notice $notice Notice being shown
224      * @param array  &$entry array of values used for RSS output
225      *
226      * @return boolean hook value
227      */
228
229     function onEndRssEntryArray($notice, &$entry)
230     {
231         $title = Notice_title::fromNotice($notice);
232
233         if (!empty($title)) {
234             $entry['title'] = $title;
235         }
236
237         return true;
238     }
239
240     /**
241      * Show the notice title in Atom output
242      *
243      * @param Notice      &$notice Notice being shown
244      * @param XMLStringer &$xs     output context
245      * @param string      &$output string to be output as title
246      *
247      * @return boolean hook value
248      */
249
250     function onStartActivityTitle(&$notice, &$xs, &$output)
251     {
252         $title = Notice_title::fromNotice($notice);
253
254         if (!empty($title)) {
255             $output = $title;
256         }
257
258         return true;
259     }
260 }
261