]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Event/eventform.php
c09a7ab171f9e00c24efbe80e518bc9acb74ee1d
[quix0rs-gnu-social.git] / plugins / Event / eventform.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2011, StatusNet, Inc.
5  *
6  * Form for entering an event
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  Event
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  * Form for adding an event
39  *
40  * @category  Event
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 class EventForm extends Form
48 {
49     /**
50      * ID of the form
51      *
52      * @return int ID of the form
53      */
54     function id()
55     {
56         return 'form_new_event';
57     }
58
59     /**
60      * class of the form
61      *
62      * @return string class of the form
63      */
64     function formClass()
65     {
66         return 'form_settings ajax-notice';
67     }
68
69     /**
70      * Action of the form
71      *
72      * @return string URL of the action
73      */
74     function action()
75     {
76         return common_local_url('newevent');
77     }
78
79     /**
80      * Data elements of the form
81      *
82      * @return void
83      */
84     function formData()
85     {
86         $this->out->elementStart('fieldset', array('id' => 'new_event_data'));
87
88         // Passing in the URL of the Ajax action that the .js for this form hits
89         // when selecting event start and end times. JavaScript will try to
90         // use a relative path, unless explicitely told where an action is,
91         // and that's a bit difficult to calculate since the event form is on
92         // so many pages with different paths. It might be worth solving this
93         // globally by putting the base site path in the Identifier-URL meta tag
94         // or something similar, so it would be easy to calculate the exact path
95         // for actions and other things in JavaScripts. -z
96         $this->out->hidden('timelist_action_url', common_local_url('timelist'));
97
98         $this->out->elementStart('ul', 'form_data');
99
100         $this->li();
101         $this->out->input('event-title',
102                           // TRANS: Field label on event form.
103                           _m('LABEL','Title'),
104                           null,
105                           // TRANS: Field title on event form.
106                           _m('Title of the event.'),
107                           'title');
108         $this->unli();
109
110         $this->li();
111
112         $today = new DateTime('now');
113         $today->setTimezone(new DateTimeZone(common_timezone()));
114
115         $this->out->input('event-startdate',
116                           // TRANS: Field label on event form.
117                           _m('LABEL','Start date'),
118                           $today->format('m/d/Y'),
119                           // TRANS: Field title on event form.
120                           _m('Date the event starts.'),
121                           'startdate');
122         $this->unli();
123
124         $this->li();
125
126         $times = EventTimeList::getTimes();
127
128         $this->out->dropdown(
129             'event-starttime',
130             // TRANS: Field label on event form.
131             _m('LABEL','Start time'),
132             $times,
133             // TRANS: Field title on event form. %s is the abbreviated timezone
134             sprintf(_m("Time the event starts (%s)."), $today->format("T")),
135             false,
136             null
137         );
138
139         $this->unli();
140
141         $this->li();
142         $this->out->input('event-enddate',
143                           // TRANS: Field label on event form.
144                           _m('LABEL','End date'),
145                           $today->format('m/d/Y'),
146                           // TRANS: Field title on event form.
147                           _m('Date the event ends.'),
148                           'enddate');
149         $this->unli();
150
151         $this->li();
152
153         // XXX: Initial end time should be at least 30 mins out?  We could do
154         // every 15 minute instead -z
155         $keys   = array_keys($times);
156         $endStr = date('m/d/y', strtotime('now')) . " {$keys[0]}";
157         $end    = new DateTime($endStr);
158         $end->modify('+30');
159
160         $this->out->dropdown(
161             'event-endtime',
162             // TRANS: Field label on event form.
163             _m('LABEL','End time'),
164             EventTimeList::getTimes($end->format('c'), true),
165             // TRANS: Field title on event form.
166             _m('Time the event ends.'),
167             false,
168             null
169         );
170         $this->unli();
171
172         $this->li();
173         $this->out->input('event-location',
174                           // TRANS: Field label on event form.
175                           _m('LABEL','Where?'),
176                           null,
177                           // TRANS: Field title on event form.
178                           _m('Event location.'),
179                           'location');
180         $this->unli();
181
182         $this->li();
183         $this->out->input('event-url',
184                           // TRANS: Field label on event form.
185                           _m('LABEL','URL'),
186                           null,
187                           // TRANS: Field title on event form.
188                           _m('URL for more information.'),
189                           'url');
190         $this->unli();
191
192         $this->li();
193         $this->out->input('event-description',
194                           // TRANS: Field label on event form.
195                           _m('LABEL','Description'),
196                           null,
197                           // TRANS: Field title on event form.
198                           _m('Description of the event.'),
199                           'description');
200         $this->unli();
201
202         $this->out->elementEnd('ul');
203
204         $toWidget = new ToSelector($this->out,
205                                    common_current_user(),
206                                    null);
207         $toWidget->show();
208
209         $this->out->elementEnd('fieldset');
210     }
211
212     /**
213      * Action elements
214      *
215      * @return void
216      */
217     function formActions()
218     {
219         // TRANS: Button text to save an event..
220         $this->out->submit('event-submit', _m('BUTTON', 'Save'), 'submit', 'submit');
221     }
222 }