]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Event/eventform.php
Re-do the logic for the event micro-app's dropdowns (way trickier than it seems at...
[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($today->format('m/d/Y 12:00') . ' am ' . $today->format('T'));
127
128         common_debug(var_export($times, true));
129
130         $start = EventTimeList::nearestHalfHour('@' . $today->getTimestamp());
131         $start->setTimezone(new DateTimeZone(common_timezone()));
132
133         $this->out->dropdown(
134             'event-starttime',
135             // TRANS: Field label on event form.
136             _m('LABEL','Start time'),
137             $times,
138             // TRANS: Field title on event form. %s is the abbreviated timezone
139             sprintf(_m("Time the event starts (%s)."), $today->format('T')),
140             false,
141             $start->format('g:ia')
142         );
143
144         // Need to keep JavaScript TZ in sync with PHP TZ
145         $this->out->hidden('tz', $today->format('T'));
146         $this->out->hidden('now', $today->format('F d, Y H:i:s T'));
147
148         $this->unli();
149
150         $this->li();
151         $this->out->input('event-enddate',
152                           // TRANS: Field label on event form.
153                           _m('LABEL','End date'),
154                           $today->format('m/d/Y'),
155                           // TRANS: Field title on event form.
156                           _m('Date the event ends.'),
157                           'enddate');
158         $this->unli();
159
160         $this->li();
161
162         $this->out->dropdown(
163             'event-endtime',
164             // TRANS: Field label on event form.
165             _m('LABEL','End time'),
166             EventTimeList::getTimes('@' . $start->getTimestamp(), true),
167             // TRANS: Field title on event form.
168             _m('Time the event ends.'),
169             false,
170             null
171         );
172         $this->unli();
173
174         $this->li();
175         $this->out->input('event-location',
176                           // TRANS: Field label on event form.
177                           _m('LABEL','Where?'),
178                           null,
179                           // TRANS: Field title on event form.
180                           _m('Event location.'),
181                           'location');
182         $this->unli();
183
184         $this->li();
185         $this->out->input('event-url',
186                           // TRANS: Field label on event form.
187                           _m('LABEL','URL'),
188                           null,
189                           // TRANS: Field title on event form.
190                           _m('URL for more information.'),
191                           'url');
192         $this->unli();
193
194         $this->li();
195         $this->out->input('event-description',
196                           // TRANS: Field label on event form.
197                           _m('LABEL','Description'),
198                           null,
199                           // TRANS: Field title on event form.
200                           _m('Description of the event.'),
201                           'description');
202         $this->unli();
203
204         $this->out->elementEnd('ul');
205
206         $toWidget = new ToSelector($this->out,
207                                    common_current_user(),
208                                    null);
209         $toWidget->show();
210
211         $this->out->elementEnd('fieldset');
212     }
213
214     /**
215      * Action elements
216      *
217      * @return void
218      */
219     function formActions()
220     {
221         // TRANS: Button text to save an event..
222         $this->out->submit('event-submit', _m('BUTTON', 'Save'), 'submit', 'submit');
223     }
224 }