123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- <?php
- /**
- * This file allows you to manage the calendar.
- *
- * Simple Machines Forum (SMF)
- *
- * @package SMF
- * @author Simple Machines http://www.simplemachines.org
- * @copyright 2013 Simple Machines and individual contributors
- * @license http://www.simplemachines.org/about/smf/license.php BSD
- *
- * @version 2.1 Alpha 1
- */
- if (!defined('SMF'))
- die('No direct access...');
- /**
- * The main controlling function doesn't have much to do... yet.
- * Just check permissions and delegate to the rest.
- *
- * @uses ManageCalendar language file.
- */
- function ManageCalendar()
- {
- global $context, $txt, $modSettings;
- isAllowedTo('admin_forum');
- // Everything's gonna need this.
- loadLanguage('ManageCalendar');
- // Default text.
- $context['explain_text'] = $txt['calendar_desc'];
- // Little short on the ground of functions here... but things can and maybe will change...
- if (!empty($modSettings['cal_enabled']))
- {
- $subActions = array(
- 'editholiday' => 'EditHoliday',
- 'holidays' => 'ModifyHolidays',
- 'settings' => 'ModifyCalendarSettings'
- );
- $default = 'holidays';
- }
- else
- {
- $subActions = array(
- 'settings' => 'ModifyCalendarSettings'
- );
- $default = 'settings';
- }
- call_integration_hook('integrate_manage_calendar', array(&$subActions));
- $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : $default;
- // Set up the two tabs here...
- $context[$context['admin_menu_name']]['tab_data'] = array(
- 'title' => $txt['manage_calendar'],
- 'help' => 'calendar',
- 'description' => $txt['calendar_settings_desc'],
- );
- if (!empty($modSettings['cal_enabled']))
- $context[$context['admin_menu_name']]['tab_data']['tabs'] = array(
- 'holidays' => array(
- 'description' => $txt['manage_holidays_desc'],
- ),
- 'settings' => array(
- 'description' => $txt['calendar_settings_desc'],
- ),
- );
- $subActions[$_REQUEST['sa']]();
- }
- /**
- * The function that handles adding, and deleting holiday data
- */
- function ModifyHolidays()
- {
- global $sourcedir, $scripturl, $txt, $context;
- // Submitting something...
- if (isset($_REQUEST['delete']) && !empty($_REQUEST['holiday']))
- {
- checkSession();
- validateToken('admin-mc');
- foreach ($_REQUEST['holiday'] as $id => $value)
- $_REQUEST['holiday'][$id] = (int) $id;
- // Now the IDs are "safe" do the delete...
- require_once($sourcedir . '/Subs-Calendar.php');
- removeHolidays($_REQUEST['holiday']);
- }
- createToken('admin-mc');
- $listOptions = array(
- 'id' => 'holiday_list',
- 'title' => $txt['current_holidays'],
- 'items_per_page' => 20,
- 'base_href' => $scripturl . '?action=admin;area=managecalendar;sa=holidays',
- 'default_sort_col' => 'name',
- 'get_items' => array(
- 'file' => $sourcedir . '/Subs-Calendar.php',
- 'function' => 'list_getHolidays',
- ),
- 'get_count' => array(
- 'file' => $sourcedir . '/Subs-Calendar.php',
- 'function' => 'list_getNumHolidays',
- ),
- 'no_items_label' => $txt['holidays_no_entries'],
- 'columns' => array(
- 'name' => array(
- 'header' => array(
- 'value' => $txt['holidays_title'],
- ),
- 'data' => array(
- 'sprintf' => array(
- 'format' => '<a href="' . $scripturl . '?action=admin;area=managecalendar;sa=editholiday;holiday=%1$d">%2$s</a>',
- 'params' => array(
- 'id_holiday' => false,
- 'title' => false,
- ),
- ),
- ),
- 'sort' => array(
- 'default' => 'title',
- 'reverse' => 'title DESC',
- )
- ),
- 'date' => array(
- 'header' => array(
- 'value' => $txt['date'],
- ),
- 'data' => array(
- 'function' => create_function('$rowData', '
- global $txt;
- // Recurring every year or just a single year?
- $year = $rowData[\'year\'] == \'0004\' ? sprintf(\'(%1$s)\', $txt[\'every_year\']) : $rowData[\'year\'];
- // Construct the date.
- return sprintf(\'%1$d %2$s %3$s\', $rowData[\'day\'], $txt[\'months\'][(int) $rowData[\'month\']], $year);
- '),
- ),
- 'sort' => array(
- 'default' => 'event_date',
- 'reverse' => 'event_date DESC',
- ),
- ),
- 'check' => array(
- 'header' => array(
- 'value' => '<input type="checkbox" onclick="invertAll(this, this.form);" class="input_check" />',
- 'class' => 'centercol',
- ),
- 'data' => array(
- 'sprintf' => array(
- 'format' => '<input type="checkbox" name="holiday[%1$d]" class="input_check" />',
- 'params' => array(
- 'id_holiday' => false,
- ),
- ),
- 'class' => 'centercol',
- ),
- ),
- ),
- 'form' => array(
- 'href' => $scripturl . '?action=admin;area=managecalendar;sa=holidays',
- 'token' => 'admin-mc',
- ),
- 'additional_rows' => array(
- array(
- 'position' => 'below_table_data',
- 'value' => '<input type="submit" name="delete" value="' . $txt['quickmod_delete_selected'] . '" class="button_submit" />
- <a class="button_link" href="' . $scripturl . '?action=admin;area=managecalendar;sa=editholiday" style="margin: 0 1em">' . $txt['holidays_add'] . '</a>',
- ),
- ),
- );
- require_once($sourcedir . '/Subs-List.php');
- createList($listOptions);
- //loadTemplate('ManageCalendar');
- $context['page_title'] = $txt['manage_holidays'];
- // Since the list is the only thing to show, use the default list template.
- $context['default_list'] = 'holiday_list';
- $context['sub_template'] = 'show_list';
- }
- /**
- * This function is used for adding/editing a specific holiday
- */
- function EditHoliday()
- {
- global $txt, $context, $smcFunc;
- loadTemplate('ManageCalendar');
- $context['is_new'] = !isset($_REQUEST['holiday']);
- $context['page_title'] = $context['is_new'] ? $txt['holidays_add'] : $txt['holidays_edit'];
- $context['sub_template'] = 'edit_holiday';
- // Cast this for safety...
- if (isset($_REQUEST['holiday']))
- $_REQUEST['holiday'] = (int) $_REQUEST['holiday'];
- // Submitting?
- if (isset($_POST[$context['session_var']]) && (isset($_REQUEST['delete']) || $_REQUEST['title'] != ''))
- {
- checkSession();
- // Not too long good sir?
- $_REQUEST['title'] = $smcFunc['substr']($_REQUEST['title'], 0, 60);
- $_REQUEST['holiday'] = isset($_REQUEST['holiday']) ? (int) $_REQUEST['holiday'] : 0;
- if (isset($_REQUEST['delete']))
- $smcFunc['db_query']('', '
- DELETE FROM {db_prefix}calendar_holidays
- WHERE id_holiday = {int:selected_holiday}',
- array(
- 'selected_holiday' => $_REQUEST['holiday'],
- )
- );
- else
- {
- $date = strftime($_REQUEST['year'] <= 4 ? '0004-%m-%d' : '%Y-%m-%d', mktime(0, 0, 0, $_REQUEST['month'], $_REQUEST['day'], $_REQUEST['year']));
- if (isset($_REQUEST['edit']))
- $smcFunc['db_query']('', '
- UPDATE {db_prefix}calendar_holidays
- SET event_date = {date:holiday_date}, title = {string:holiday_title}
- WHERE id_holiday = {int:selected_holiday}',
- array(
- 'holiday_date' => $date,
- 'selected_holiday' => $_REQUEST['holiday'],
- 'holiday_title' => $_REQUEST['title'],
- )
- );
- else
- $smcFunc['db_insert']('',
- '{db_prefix}calendar_holidays',
- array(
- 'event_date' => 'date', 'title' => 'string-60',
- ),
- array(
- $date, $_REQUEST['title'],
- ),
- array('id_holiday')
- );
- }
- updateSettings(array(
- 'calendar_updated' => time(),
- ));
- redirectexit('action=admin;area=managecalendar;sa=holidays');
- }
- // Default states...
- if ($context['is_new'])
- $context['holiday'] = array(
- 'id' => 0,
- 'day' => date('d'),
- 'month' => date('m'),
- 'year' => '0000',
- 'title' => ''
- );
- // If it's not new load the data.
- else
- {
- $request = $smcFunc['db_query']('', '
- SELECT id_holiday, YEAR(event_date) AS year, MONTH(event_date) AS month, DAYOFMONTH(event_date) AS day, title
- FROM {db_prefix}calendar_holidays
- WHERE id_holiday = {int:selected_holiday}
- LIMIT 1',
- array(
- 'selected_holiday' => $_REQUEST['holiday'],
- )
- );
- while ($row = $smcFunc['db_fetch_assoc']($request))
- $context['holiday'] = array(
- 'id' => $row['id_holiday'],
- 'day' => $row['day'],
- 'month' => $row['month'],
- 'year' => $row['year'] <= 4 ? 0 : $row['year'],
- 'title' => $row['title']
- );
- $smcFunc['db_free_result']($request);
- }
- // Last day for the drop down?
- $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']));
- }
- /**
- * Show and allow to modify calendar settings. Obviously.
- *
- * @param bool $return_config = false
- */
- function ModifyCalendarSettings($return_config = false)
- {
- global $context, $txt, $sourcedir, $scripturl, $smcFunc, $modSettings;
- // Load the boards list.
- $boards = array('');
- $request = $smcFunc['db_query']('order_by_board_order', '
- SELECT b.id_board, b.name AS board_name, c.name AS cat_name
- FROM {db_prefix}boards AS b
- LEFT JOIN {db_prefix}categories AS c ON (c.id_cat = b.id_cat)',
- array(
- )
- );
- while ($row = $smcFunc['db_fetch_assoc']($request))
- $boards[$row['id_board']] = $row['cat_name'] . ' - ' . $row['board_name'];
- $smcFunc['db_free_result']($request);
- // Look, all the calendar settings - of which there are many!
- if (!empty($modSettings['cal_enabled']))
- $config_vars = array(
- array('check', 'cal_enabled'),
- '',
- // All the permissions:
- array('permissions', 'calendar_view', 'help' => 'cal_enabled'),
- array('permissions', 'calendar_post'),
- array('permissions', 'calendar_edit_own'),
- array('permissions', 'calendar_edit_any'),
- '',
- // How many days to show on board index, and where to display events etc?
- array('int', 'cal_days_for_index', 6, 'postinput' => $txt['days_word']),
- 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'])),
- 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'])),
- 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'])),
- array('check', 'cal_export'),
- '',
- // Linking events etc...
- array('select', 'cal_defaultboard', $boards),
- array('check', 'cal_daysaslink'),
- array('check', 'cal_allow_unlinked'),
- array('check', 'cal_showInTopic'),
- '',
- // Dates of calendar...
- array('int', 'cal_minyear'),
- array('int', 'cal_maxyear'),
- '',
- // Calendar spanning...
- array('check', 'cal_allowspan'),
- array('int', 'cal_maxspan', 6, 'postinput' => $txt['days_word']),
- '',
- // A comment is like a dog marking its territory. ;)
- array('select', 'cal_highlight_events', array(0 => $txt['setting_cal_highlight_none'], 1 => $txt['setting_cal_highlight_mini'], 2 => $txt['setting_cal_highlight_main'], 3 => $txt['setting_cal_highlight_both'])),
- array('select', 'cal_highlight_holidays', array(0 => $txt['setting_cal_highlight_none'], 1 => $txt['setting_cal_highlight_mini'], 2 => $txt['setting_cal_highlight_main'], 3 => $txt['setting_cal_highlight_both'])),
- array('select', 'cal_highlight_birthdays', array(0 => $txt['setting_cal_highlight_none'], 1 => $txt['setting_cal_highlight_mini'], 2 => $txt['setting_cal_highlight_main'], 3 => $txt['setting_cal_highlight_both'])),
- '',
- // Miscellaneous layout settings...
- array('check', 'cal_disable_prev_next'),
- array('select', 'cal_display_type', array(0 => $txt['setting_cal_display_comfortable'], 1 => $txt['setting_cal_display_compact'])),
- array('select', 'cal_week_links', array(0 => $txt['setting_cal_week_links_none'], 1 => $txt['setting_cal_week_links_mini'], 2 => $txt['setting_cal_week_links_main'], 3 => $txt['setting_cal_week_links_both'])),
- array('check', 'cal_prev_next_links'),
- array('check', 'cal_short_days'),
- array('check', 'cal_short_months'),
- array('check', 'cal_week_numbers'),
- );
- else
- $config_vars = array(
- array('check', 'cal_enabled'),
- );
- call_integration_hook('integrate_modify_calendar_settings', array(&$config_vars));
- if ($return_config)
- return $config_vars;
- // Get the settings template fired up.
- require_once($sourcedir . '/ManageServer.php');
- // Some important context stuff
- $context['page_title'] = $txt['calendar_settings'];
- $context['sub_template'] = 'show_settings';
- // Get the final touches in place.
- $context['post_url'] = $scripturl . '?action=admin;area=managecalendar;save;sa=settings';
- $context['settings_title'] = $txt['calendar_settings'];
- // Saving the settings?
- if (isset($_GET['save']))
- {
- checkSession();
- call_integration_hook('integrate_save_calendar_settings');
- saveDBSettings($config_vars);
- // Update the stats in case.
- updateSettings(array(
- 'calendar_updated' => time(),
- ));
- redirectexit('action=admin;area=managecalendar;sa=settings');
- }
- // We need this for the inline permissions
- createToken('admin-mp');
- // Prepare the settings...
- prepareDBSettingContext($config_vars);
- }
- ?>
|