Chris@76
|
1 <?php
|
Chris@76
|
2
|
Chris@76
|
3 /**
|
Chris@76
|
4 * Simple Machines Forum (SMF)
|
Chris@76
|
5 *
|
Chris@76
|
6 * @package SMF
|
Chris@76
|
7 * @author Simple Machines http://www.simplemachines.org
|
Chris@76
|
8 * @copyright 2011 Simple Machines
|
Chris@76
|
9 * @license http://www.simplemachines.org/about/smf/license.php BSD
|
Chris@76
|
10 *
|
Chris@76
|
11 * @version 2.0
|
Chris@76
|
12 */
|
Chris@76
|
13
|
Chris@76
|
14 if (!defined('SMF'))
|
Chris@76
|
15 die('Hacking attempt...');
|
Chris@76
|
16
|
Chris@76
|
17 // The main controlling function doesn't have much to do... yet.
|
Chris@76
|
18 function ManageCalendar()
|
Chris@76
|
19 {
|
Chris@76
|
20 global $context, $txt, $scripturl, $modSettings;
|
Chris@76
|
21
|
Chris@76
|
22 isAllowedTo('admin_forum');
|
Chris@76
|
23
|
Chris@76
|
24 // Everything's gonna need this.
|
Chris@76
|
25 loadLanguage('ManageCalendar');
|
Chris@76
|
26
|
Chris@76
|
27 // Default text.
|
Chris@76
|
28 $context['explain_text'] = $txt['calendar_desc'];
|
Chris@76
|
29
|
Chris@76
|
30 // Little short on the ground of functions here... but things can and maybe will change...
|
Chris@76
|
31 $subActions = array(
|
Chris@76
|
32 'editholiday' => 'EditHoliday',
|
Chris@76
|
33 'holidays' => 'ModifyHolidays',
|
Chris@76
|
34 'settings' => 'ModifyCalendarSettings'
|
Chris@76
|
35 );
|
Chris@76
|
36
|
Chris@76
|
37 $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : 'holidays';
|
Chris@76
|
38
|
Chris@76
|
39 // Set up the two tabs here...
|
Chris@76
|
40 $context[$context['admin_menu_name']]['tab_data'] = array(
|
Chris@76
|
41 'title' => $txt['manage_calendar'],
|
Chris@76
|
42 'help' => 'calendar',
|
Chris@76
|
43 'description' => $txt['calendar_settings_desc'],
|
Chris@76
|
44 'tabs' => array(
|
Chris@76
|
45 'holidays' => array(
|
Chris@76
|
46 'description' => $txt['manage_holidays_desc'],
|
Chris@76
|
47 ),
|
Chris@76
|
48 'settings' => array(
|
Chris@76
|
49 'description' => $txt['calendar_settings_desc'],
|
Chris@76
|
50 ),
|
Chris@76
|
51 ),
|
Chris@76
|
52 );
|
Chris@76
|
53
|
Chris@76
|
54 $subActions[$_REQUEST['sa']]();
|
Chris@76
|
55 }
|
Chris@76
|
56
|
Chris@76
|
57 // The function that handles adding, and deleting holiday data
|
Chris@76
|
58 function ModifyHolidays()
|
Chris@76
|
59 {
|
Chris@76
|
60 global $sourcedir, $scripturl, $txt, $context;
|
Chris@76
|
61
|
Chris@76
|
62 // Submitting something...
|
Chris@76
|
63 if (isset($_REQUEST['delete']) && !empty($_REQUEST['holiday']))
|
Chris@76
|
64 {
|
Chris@76
|
65 checkSession();
|
Chris@76
|
66
|
Chris@76
|
67 foreach ($_REQUEST['holiday'] as $id => $value)
|
Chris@76
|
68 $_REQUEST['holiday'][$id] = (int) $id;
|
Chris@76
|
69
|
Chris@76
|
70 // Now the IDs are "safe" do the delete...
|
Chris@76
|
71 require_once($sourcedir . '/Subs-Calendar.php');
|
Chris@76
|
72 removeHolidays($_REQUEST['holiday']);
|
Chris@76
|
73 }
|
Chris@76
|
74
|
Chris@76
|
75 $listOptions = array(
|
Chris@76
|
76 'id' => 'holiday_list',
|
Chris@76
|
77 'title' => $txt['current_holidays'],
|
Chris@76
|
78 'items_per_page' => 20,
|
Chris@76
|
79 'base_href' => $scripturl . '?action=admin;area=managecalendar;sa=holidays',
|
Chris@76
|
80 'default_sort_col' => 'name',
|
Chris@76
|
81 'get_items' => array(
|
Chris@76
|
82 'file' => $sourcedir . '/Subs-Calendar.php',
|
Chris@76
|
83 'function' => 'list_getHolidays',
|
Chris@76
|
84 ),
|
Chris@76
|
85 'get_count' => array(
|
Chris@76
|
86 'file' => $sourcedir . '/Subs-Calendar.php',
|
Chris@76
|
87 'function' => 'list_getNumHolidays',
|
Chris@76
|
88 ),
|
Chris@76
|
89 'no_items_label' => $txt['holidays_no_entries'],
|
Chris@76
|
90 'columns' => array(
|
Chris@76
|
91 'name' => array(
|
Chris@76
|
92 'header' => array(
|
Chris@76
|
93 'value' => $txt['holidays_title'],
|
Chris@76
|
94 ),
|
Chris@76
|
95 'data' => array(
|
Chris@76
|
96 'sprintf' => array(
|
Chris@76
|
97 'format' => '<a href="' . $scripturl . '?action=admin;area=managecalendar;sa=editholiday;holiday=%1$d">%2$s</a>',
|
Chris@76
|
98 'params' => array(
|
Chris@76
|
99 'id_holiday' => false,
|
Chris@76
|
100 'title' => false,
|
Chris@76
|
101 ),
|
Chris@76
|
102 ),
|
Chris@76
|
103 ),
|
Chris@76
|
104 'sort' => array(
|
Chris@76
|
105 'default' => 'title',
|
Chris@76
|
106 'reverse' => 'title DESC',
|
Chris@76
|
107 )
|
Chris@76
|
108 ),
|
Chris@76
|
109 'date' => array(
|
Chris@76
|
110 'header' => array(
|
Chris@76
|
111 'value' => $txt['date'],
|
Chris@76
|
112 ),
|
Chris@76
|
113 'data' => array(
|
Chris@76
|
114 'function' => create_function('$rowData', '
|
Chris@76
|
115 global $txt;
|
Chris@76
|
116
|
Chris@76
|
117 // Recurring every year or just a single year?
|
Chris@76
|
118 $year = $rowData[\'year\'] == \'0004\' ? sprintf(\'(%1$s)\', $txt[\'every_year\']) : $rowData[\'year\'];
|
Chris@76
|
119
|
Chris@76
|
120 // Construct the date.
|
Chris@76
|
121 return sprintf(\'%1$d %2$s %3$s\', $rowData[\'day\'], $txt[\'months\'][(int) $rowData[\'month\']], $year);
|
Chris@76
|
122 '),
|
Chris@76
|
123 'class' => 'windowbg',
|
Chris@76
|
124 ),
|
Chris@76
|
125 'sort' => array(
|
Chris@76
|
126 'default' => 'event_date',
|
Chris@76
|
127 'reverse' => 'event_date DESC',
|
Chris@76
|
128 ),
|
Chris@76
|
129 ),
|
Chris@76
|
130 'check' => array(
|
Chris@76
|
131 'header' => array(
|
Chris@76
|
132 'value' => '<input type="checkbox" onclick="invertAll(this, this.form);" class="input_check" />',
|
Chris@76
|
133 ),
|
Chris@76
|
134 'data' => array(
|
Chris@76
|
135 'sprintf' => array(
|
Chris@76
|
136 'format' => '<input type="checkbox" name="holiday[%1$d]" class="input_check" />',
|
Chris@76
|
137 'params' => array(
|
Chris@76
|
138 'id_holiday' => false,
|
Chris@76
|
139 ),
|
Chris@76
|
140 ),
|
Chris@76
|
141 'style' => 'text-align: center',
|
Chris@76
|
142 ),
|
Chris@76
|
143 ),
|
Chris@76
|
144 ),
|
Chris@76
|
145 'form' => array(
|
Chris@76
|
146 'href' => $scripturl . '?action=admin;area=managecalendar;sa=holidays',
|
Chris@76
|
147 ),
|
Chris@76
|
148 'additional_rows' => array(
|
Chris@76
|
149 array(
|
Chris@76
|
150 'position' => 'below_table_data',
|
Chris@76
|
151 'value' => '
|
Chris@76
|
152 <a href="' . $scripturl . '?action=admin;area=managecalendar;sa=editholiday" style="margin: 0 1em">[' . $txt['holidays_add'] . ']</a>
|
Chris@76
|
153 <input type="submit" name="delete" value="' . $txt['quickmod_delete_selected'] . '" class="button_submit" />',
|
Chris@76
|
154 'style' => 'text-align: right;',
|
Chris@76
|
155 ),
|
Chris@76
|
156 ),
|
Chris@76
|
157 );
|
Chris@76
|
158
|
Chris@76
|
159 require_once($sourcedir . '/Subs-List.php');
|
Chris@76
|
160 createList($listOptions);
|
Chris@76
|
161
|
Chris@76
|
162 //loadTemplate('ManageCalendar');
|
Chris@76
|
163 $context['page_title'] = $txt['manage_holidays'];
|
Chris@76
|
164
|
Chris@76
|
165 // Since the list is the only thing to show, use the default list template.
|
Chris@76
|
166 $context['default_list'] = 'holiday_list';
|
Chris@76
|
167 $context['sub_template'] = 'show_list';
|
Chris@76
|
168 }
|
Chris@76
|
169
|
Chris@76
|
170 // This function is used for adding/editing a specific holiday
|
Chris@76
|
171 function EditHoliday()
|
Chris@76
|
172 {
|
Chris@76
|
173 global $txt, $context, $scripturl, $smcFunc;
|
Chris@76
|
174
|
Chris@76
|
175 loadTemplate('ManageCalendar');
|
Chris@76
|
176
|
Chris@76
|
177 $context['is_new'] = !isset($_REQUEST['holiday']);
|
Chris@76
|
178 $context['page_title'] = $context['is_new'] ? $txt['holidays_add'] : $txt['holidays_edit'];
|
Chris@76
|
179 $context['sub_template'] = 'edit_holiday';
|
Chris@76
|
180
|
Chris@76
|
181 // Cast this for safety...
|
Chris@76
|
182 if (isset($_REQUEST['holiday']))
|
Chris@76
|
183 $_REQUEST['holiday'] = (int) $_REQUEST['holiday'];
|
Chris@76
|
184
|
Chris@76
|
185 // Submitting?
|
Chris@76
|
186 if (isset($_POST[$context['session_var']]) && (isset($_REQUEST['delete']) || $_REQUEST['title'] != ''))
|
Chris@76
|
187 {
|
Chris@76
|
188 checkSession();
|
Chris@76
|
189
|
Chris@76
|
190 // Not too long good sir?
|
Chris@76
|
191 $_REQUEST['title'] = $smcFunc['substr']($_REQUEST['title'], 0, 60);
|
Chris@76
|
192 $_REQUEST['holiday'] = isset($_REQUEST['holiday']) ? (int) $_REQUEST['holiday'] : 0;
|
Chris@76
|
193
|
Chris@76
|
194 if (isset($_REQUEST['delete']))
|
Chris@76
|
195 $smcFunc['db_query']('', '
|
Chris@76
|
196 DELETE FROM {db_prefix}calendar_holidays
|
Chris@76
|
197 WHERE id_holiday = {int:selected_holiday}',
|
Chris@76
|
198 array(
|
Chris@76
|
199 'selected_holiday' => $_REQUEST['holiday'],
|
Chris@76
|
200 )
|
Chris@76
|
201 );
|
Chris@76
|
202 else
|
Chris@76
|
203 {
|
Chris@76
|
204 $date = strftime($_REQUEST['year'] <= 4 ? '0004-%m-%d' : '%Y-%m-%d', mktime(0, 0, 0, $_REQUEST['month'], $_REQUEST['day'], $_REQUEST['year']));
|
Chris@76
|
205 if (isset($_REQUEST['edit']))
|
Chris@76
|
206 $smcFunc['db_query']('', '
|
Chris@76
|
207 UPDATE {db_prefix}calendar_holidays
|
Chris@76
|
208 SET event_date = {date:holiday_date}, title = {string:holiday_title}
|
Chris@76
|
209 WHERE id_holiday = {int:selected_holiday}',
|
Chris@76
|
210 array(
|
Chris@76
|
211 'holiday_date' => $date,
|
Chris@76
|
212 'selected_holiday' => $_REQUEST['holiday'],
|
Chris@76
|
213 'holiday_title' => $_REQUEST['title'],
|
Chris@76
|
214 )
|
Chris@76
|
215 );
|
Chris@76
|
216 else
|
Chris@76
|
217 $smcFunc['db_insert']('',
|
Chris@76
|
218 '{db_prefix}calendar_holidays',
|
Chris@76
|
219 array(
|
Chris@76
|
220 'event_date' => 'date', 'title' => 'string-60',
|
Chris@76
|
221 ),
|
Chris@76
|
222 array(
|
Chris@76
|
223 $date, $_REQUEST['title'],
|
Chris@76
|
224 ),
|
Chris@76
|
225 array('id_holiday')
|
Chris@76
|
226 );
|
Chris@76
|
227 }
|
Chris@76
|
228
|
Chris@76
|
229 updateSettings(array(
|
Chris@76
|
230 'calendar_updated' => time(),
|
Chris@76
|
231 ));
|
Chris@76
|
232
|
Chris@76
|
233 redirectexit('action=admin;area=managecalendar;sa=holidays');
|
Chris@76
|
234 }
|
Chris@76
|
235
|
Chris@76
|
236 // Default states...
|
Chris@76
|
237 if ($context['is_new'])
|
Chris@76
|
238 $context['holiday'] = array(
|
Chris@76
|
239 'id' => 0,
|
Chris@76
|
240 'day' => date('d'),
|
Chris@76
|
241 'month' => date('m'),
|
Chris@76
|
242 'year' => '0000',
|
Chris@76
|
243 'title' => ''
|
Chris@76
|
244 );
|
Chris@76
|
245 // If it's not new load the data.
|
Chris@76
|
246 else
|
Chris@76
|
247 {
|
Chris@76
|
248 $request = $smcFunc['db_query']('', '
|
Chris@76
|
249 SELECT id_holiday, YEAR(event_date) AS year, MONTH(event_date) AS month, DAYOFMONTH(event_date) AS day, title
|
Chris@76
|
250 FROM {db_prefix}calendar_holidays
|
Chris@76
|
251 WHERE id_holiday = {int:selected_holiday}
|
Chris@76
|
252 LIMIT 1',
|
Chris@76
|
253 array(
|
Chris@76
|
254 'selected_holiday' => $_REQUEST['holiday'],
|
Chris@76
|
255 )
|
Chris@76
|
256 );
|
Chris@76
|
257 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
258 $context['holiday'] = array(
|
Chris@76
|
259 'id' => $row['id_holiday'],
|
Chris@76
|
260 'day' => $row['day'],
|
Chris@76
|
261 'month' => $row['month'],
|
Chris@76
|
262 'year' => $row['year'] <= 4 ? 0 : $row['year'],
|
Chris@76
|
263 'title' => $row['title']
|
Chris@76
|
264 );
|
Chris@76
|
265 $smcFunc['db_free_result']($request);
|
Chris@76
|
266 }
|
Chris@76
|
267
|
Chris@76
|
268 // Last day for the drop down?
|
Chris@76
|
269 $context['holiday']['last_day'] = (int) strftime('%d', mktime(0, 0, 0, $context['holiday']['month'] == 12 ? 1 : $context['holiday']['month'] + 1, 0, $context['holiday']['month'] == 12 ? $context['holiday']['year'] + 1 : $context['holiday']['year']));
|
Chris@76
|
270 }
|
Chris@76
|
271
|
Chris@76
|
272 function ModifyCalendarSettings($return_config = false)
|
Chris@76
|
273 {
|
Chris@76
|
274 global $modSettings, $context, $settings, $txt, $boarddir, $sourcedir, $scripturl, $smcFunc;
|
Chris@76
|
275
|
Chris@76
|
276 // Load the boards list.
|
Chris@76
|
277 $boards = array('');
|
Chris@76
|
278 $request = $smcFunc['db_query']('order_by_board_order', '
|
Chris@76
|
279 SELECT b.id_board, b.name AS board_name, c.name AS cat_name
|
Chris@76
|
280 FROM {db_prefix}boards AS b
|
Chris@76
|
281 LEFT JOIN {db_prefix}categories AS c ON (c.id_cat = b.id_cat)',
|
Chris@76
|
282 array(
|
Chris@76
|
283 )
|
Chris@76
|
284 );
|
Chris@76
|
285 while ($row = $smcFunc['db_fetch_assoc']($request))
|
Chris@76
|
286 $boards[$row['id_board']] = $row['cat_name'] . ' - ' . $row['board_name'];
|
Chris@76
|
287 $smcFunc['db_free_result']($request);
|
Chris@76
|
288
|
Chris@76
|
289 // Look, all the calendar settings - of which there are many!
|
Chris@76
|
290 $config_vars = array(
|
Chris@76
|
291 // All the permissions:
|
Chris@76
|
292 array('permissions', 'calendar_view', 'help' => 'cal_enabled'),
|
Chris@76
|
293 array('permissions', 'calendar_post'),
|
Chris@76
|
294 array('permissions', 'calendar_edit_own'),
|
Chris@76
|
295 array('permissions', 'calendar_edit_any'),
|
Chris@76
|
296 '',
|
Chris@76
|
297 // How many days to show on board index, and where to display events etc?
|
Chris@76
|
298 array('int', 'cal_days_for_index'),
|
Chris@76
|
299 array('select', 'cal_showholidays', array(0 => $txt['setting_cal_show_never'], 1 => $txt['setting_cal_show_cal'], 3 => $txt['setting_cal_show_index'], 2 => $txt['setting_cal_show_all'])),
|
Chris@76
|
300 array('select', 'cal_showbdays', array(0 => $txt['setting_cal_show_never'], 1 => $txt['setting_cal_show_cal'], 3 => $txt['setting_cal_show_index'], 2 => $txt['setting_cal_show_all'])),
|
Chris@76
|
301 array('select', 'cal_showevents', array(0 => $txt['setting_cal_show_never'], 1 => $txt['setting_cal_show_cal'], 3 => $txt['setting_cal_show_index'], 2 => $txt['setting_cal_show_all'])),
|
Chris@76
|
302 '',
|
Chris@76
|
303 // Linking events etc...
|
Chris@76
|
304 array('select', 'cal_defaultboard', $boards),
|
Chris@76
|
305 array('check', 'cal_daysaslink'),
|
Chris@76
|
306 array('check', 'cal_allow_unlinked'),
|
Chris@76
|
307 array('check', 'cal_showInTopic'),
|
Chris@76
|
308 '',
|
Chris@76
|
309 // Dates of calendar...
|
Chris@76
|
310 array('int', 'cal_minyear'),
|
Chris@76
|
311 array('int', 'cal_maxyear'),
|
Chris@76
|
312 '',
|
Chris@76
|
313 // Calendar spanning...
|
Chris@76
|
314 array('check', 'cal_allowspan'),
|
Chris@76
|
315 array('int', 'cal_maxspan'),
|
Chris@76
|
316 );
|
Chris@76
|
317
|
Chris@76
|
318 if ($return_config)
|
Chris@76
|
319 return $config_vars;
|
Chris@76
|
320
|
Chris@76
|
321 // Get the settings template fired up.
|
Chris@76
|
322 require_once($sourcedir . '/ManageServer.php');
|
Chris@76
|
323
|
Chris@76
|
324 // Some important context stuff
|
Chris@76
|
325 $context['page_title'] = $txt['calendar_settings'];
|
Chris@76
|
326 $context['sub_template'] = 'show_settings';
|
Chris@76
|
327
|
Chris@76
|
328 // Get the final touches in place.
|
Chris@76
|
329 $context['post_url'] = $scripturl . '?action=admin;area=managecalendar;save;sa=settings';
|
Chris@76
|
330 $context['settings_title'] = $txt['calendar_settings'];
|
Chris@76
|
331
|
Chris@76
|
332 // Saving the settings?
|
Chris@76
|
333 if (isset($_GET['save']))
|
Chris@76
|
334 {
|
Chris@76
|
335 checkSession();
|
Chris@76
|
336 saveDBSettings($config_vars);
|
Chris@76
|
337
|
Chris@76
|
338 // Update the stats in case.
|
Chris@76
|
339 updateSettings(array(
|
Chris@76
|
340 'calendar_updated' => time(),
|
Chris@76
|
341 ));
|
Chris@76
|
342
|
Chris@76
|
343 redirectexit('action=admin;area=managecalendar;sa=settings');
|
Chris@76
|
344 }
|
Chris@76
|
345
|
Chris@76
|
346 // Prepare the settings...
|
Chris@76
|
347 prepareDBSettingContext($config_vars);
|
Chris@76
|
348 }
|
Chris@76
|
349
|
Chris@76
|
350 ?> |