annotate forum/Sources/ManageCalendar.php @ 85:6d7b61434be7 website

Add a copy of this here, just in case!
author Chris Cannam
date Mon, 20 Jan 2014 11:02:36 +0000
parents e3e11437ecea
children
rev   line source
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 ?>