]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/NoticeTitle/NoticeTitlePlugin.php
make notice title phpcs-clean
[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('input', array('type' => 'text',
141                                            'id' => 'notice_title',
142                                            'name' => 'notice_title',
143                                            'size' => 40,
144                                            'maxlength' => Notice_title::MAXCHARS));
145         return true;
146     }
147
148     /**
149      * Validate notice title before saving
150      *
151      * @param Action  $action    NewNoticeAction being executed
152      * @param integer &$authorId Author ID
153      * @param string  &$text     Text of the notice
154      * @param array   &$options  Options array
155      *
156      * @return boolean hook value
157      */
158
159     function onStartNoticeSaveWeb($action, &$authorId, &$text, &$options)
160     {
161         $title = $action->trimmed('notice_title');
162         if (!empty($title)) {
163             if (mb_strlen($title) > Notice_title::MAXCHARS) {
164                 throw new Exception(sprintf(_m("Notice title too long (max %d)",
165                                                Notice_title::MAXCHARS)));
166             }
167         }
168         return true;
169     }
170
171     /**
172      * Save notice title after notice is saved
173      *
174      * @param Action $action NewNoticeAction being executed
175      * @param Notice $notice Notice that was saved
176      *
177      * @return boolean hook value
178      */
179
180     function onEndNoticeSaveWeb($action, $notice)
181     {
182         if (!empty($notice)) {
183
184             $title = $action->trimmed('notice_title');
185
186             if (!empty($title)) {
187
188                 $nt = new Notice_title();
189
190                 $nt->notice_id = $notice->id;
191                 $nt->title     = $title;
192
193                 $nt->insert();
194             }
195         }
196
197         return true;
198     }
199
200     /**
201      * Show the notice title in lists
202      *
203      * @param NoticeListItem $nli NoticeListItem being shown
204      *
205      * @return boolean hook value
206      */
207
208     function onStartShowNoticeItem($nli)
209     {
210         $title = Notice_title::fromNotice($nli->notice);
211
212         if (!empty($title)) {
213             $nli->out->element('h4', array('class' => 'notice_title'), $title);
214         }
215
216         return true;
217     }
218
219     /**
220      * Show the notice title in RSS output
221      *
222      * @param Notice $notice Notice being shown
223      * @param array  &$entry array of values used for RSS output
224      *
225      * @return boolean hook value
226      */
227
228     function onEndRssEntryArray($notice, &$entry)
229     {
230         $title = Notice_title::fromNotice($notice);
231
232         if (!empty($title)) {
233             $entry['title'] = $title;
234         }
235
236         return true;
237     }
238
239     /**
240      * Show the notice title in Atom output
241      *
242      * @param Notice      &$notice Notice being shown
243      * @param XMLStringer &$xs     output context
244      * @param string      &$output string to be output as title
245      *
246      * @return boolean hook value
247      */
248
249     function onStartActivityTitle(&$notice, &$xs, &$output)
250     {
251         $title = Notice_title::fromNotice($notice);
252
253         if (!empty($title)) {
254             $output = $title;
255         }
256
257         return true;
258     }
259 }
260