function shd_profile_main($memID) { global $context, $txt, $scripturl, $sourcedir, $user_info, $settings, $user_profile, $modSettings; // Load the profile details loadTemplate('sd_template/SimpleDesk-Profile', array('helpdesk', 'helpdesk_admin')); shd_load_language('sd_language/SimpleDeskProfile'); $context['shd_preferences'] = shd_load_user_prefs(); shd_load_plugin_files('hdprofile'); shd_load_plugin_langfiles('hdprofile'); $context['page_title'] = $txt['shd_profile_area'] . ' - ' . $txt['shd_profile_main']; $context['sub_template'] = 'shd_profile_main'; $subActions = array('helpdesk' => 'shd_profile_frontpage', 'hd_prefs' => 'shd_profile_preferences', 'hd_showtickets' => 'shd_profile_show_tickets', 'hd_permissions' => 'shd_profile_permissions', 'hd_actionlog' => 'shd_profile_actionlog'); $context['shd_profile_menu'] = array(array('image' => 'user.png', 'link' => $scripturl . '?action=profile;u=' . $context['member']['id'] . ';area=helpdesk', 'text' => $txt['shd_profile_home'], 'show' => true), array('image' => 'preferences.png', 'link' => $scripturl . '?action=profile;u=' . $context['member']['id'] . ';area=hd_prefs', 'text' => $txt['shd_profile_preferences'], 'show' => true), array('image' => 'ticket.png', 'link' => $scripturl . '?action=profile;u=' . $context['member']['id'] . ';area=hd_showtickets', 'text' => $txt['shd_profile_show_tickets'], 'show' => true), array('image' => 'permissions.png', 'link' => $scripturl . '?action=profile;u=' . $context['member']['id'] . ';area=hd_permissions', 'text' => $txt['shd_profile_permissions'], 'show' => !empty($context['helpdesk_menu']['areas']['hd_permissions']['enabled'])), array('image' => 'log.png', 'link' => $scripturl . '?action=profile;u=' . $context['member']['id'] . ';area=hd_actionlog', 'text' => $txt['shd_profile_actionlog'], 'show' => !empty($context['helpdesk_menu']['areas']['hd_actionlog']['enabled'])), array('image' => 'go_to_helpdesk.png', 'link' => $scripturl . '?action=helpdesk;sa=main', 'text' => $txt['shd_profile_go_to_helpdesk'], 'show' => true)); // Int hooks - after we basically set everything up (so it's manipulatable by the hook, but before we do the last bits of finalisation) call_integration_hook('shd_hook_hdprofile', array(&$subActions, &$memID)); // Make sure the menu is configured appropriately $context['shd_profile_menu'][count($context['shd_profile_menu']) - 1]['is_last'] = true; $_REQUEST['area'] = isset($_REQUEST['area']) && isset($subActions[$_REQUEST['area']]) ? $_REQUEST['area'] : 'helpdesk'; $context['sub_action'] = $_REQUEST['area']; $subActions[$_REQUEST['area']]($memID); // Maintenance mode? If it were, the helpdesk is considered inactive for the purposes of everything to all but those without admin-helpdesk rights - but we must have them if we're here! if (!empty($modSettings['shd_maintenance_mode'])) { loadTemplate('sd_template/SimpleDesk'); $temp_layers = $context['template_layers']; $context['template_layers'] = array(); $added = false; foreach ($temp_layers as $layer) { $context['template_layers'][] = $layer; if ($layer == 'body') { $context['template_layers'][] = 'shd_maintenance'; $added = true; } } // Well, we tried to add it as near the top as possible, but not all themes use the standard body layer. if (!$added) { $context['template_layers'][] = 'shd_maintenance'; } } $context['template_layers'][] = 'shd_profile_navigation'; }
/** * Adds the SimpleDesk action to the action list, and also handles most of the shutting down of forum items in helpdesk-only mode. * * @param string &$actionArray The master list of actions from index.php * * @since 2.0 */ function shd_init_actions(&$actionArray) { global $modSettings, $context; if (empty($modSettings['helpdesk_active'])) { return; } // Deal with SimpleDesk. If we're enabling HD only mode, rebuild everything, otherwise just add it to the array. $actionArray['helpdesk'] = array('sd_source/SimpleDesk.php', 'shd_main'); // Rewrite the array for unread purposes. $context['shd_unread_actions'] = array('unread' => $actionArray['unread'], 'unreadreplies' => $actionArray['unreadreplies']); $actionArray['unread'] = array('sd_source/SimpleDesk-Unread.php', 'shd_unread_posts'); $actionArray['unreadreplies'] = array('sd_source/SimpleDesk-Unread.php', 'shd_unread_posts'); // If we're going to a help page (for admin), make sure to load the relevant text. if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'helpadmin') { shd_load_language('sd_language/SimpleDeskAdmin'); } if (!empty($modSettings['shd_helpdesk_only'])) { // Firstly, remove all the standard actions we neither want nor need. // Note we did this to prevent breakage of other mods that may be installed, e.g. gallery or portal or something. $unwanted_actions = array('announce', 'attachapprove', 'buddy', 'calendar', 'clock', 'collapse', 'deletemsg', 'display', 'editpoll', 'editpoll2', 'emailuser', 'lock', 'lockvoting', 'markasread', 'mergetopics', 'moderate', 'modifycat', 'modifykarma', 'movetopic', 'movetopic2', 'notify', 'notifyboard', 'post', 'post2', 'printpage', 'quotefast', 'quickmod', 'quickmod2', 'recent', 'removepoll', 'removetopic2', 'reporttm', 'restoretopic', 'search', 'search2', 'sendtopic', 'smstats', 'splittopics', 'stats', 'sticky', 'about:mozilla', 'about:unknown', 'unread', 'unreadreplies', 'vote', 'viewquery', 'who', '.xml', 'xmlhttp'); // that's the generic stuff, now for specific options if (!empty($modSettings['shd_disable_pm'])) { $unwanted_actions[] = 'pm'; } if (!empty($modSettings['shd_disable_mlist'])) { $unwanted_actions[] = 'mlist'; } foreach ($unwanted_actions as $unwanted) { if (isset($actionArray[$unwanted])) { unset($actionArray[$unwanted]); } } // Secondly, rewrite the defaults to point to helpdesk, for unknown actions. I'm doing this rather than munging the main code - easier to unbreak stuff if (empty($actionArray[$_GET['action']])) { $_GET['action'] = 'helpdesk'; } } // Now engage any SD specific hooks. call_integration_hook('shd_hook_actions', array(&$actionArray)); // Lastly, any other-action-specific hooks? if (!empty($_GET['action']) && !empty($actionArray[$_GET['action']])) { shd_load_plugin_files('action_' . $_GET['action']); shd_load_plugin_langfiles('action_' . $_GET['action']); call_integration_hook('shd_hook_action' . $_GET['action'], array(&$actionArray)); } $context['master_action_list'] = array_keys($actionArray); }
/** * Perform all the operations required for SimpleDesk to safely start operations inside the admin panel. * * @param array &$admin_areas The full admin area array from SMF's Admin.php. * @since 2.0 */ function shd_admin_bootstrap(&$admin_areas) { global $sourcedir, $modSettings, $txt, $context, $scripturl; // Load the main admin language files and any needed for SD plugins in the admin panel. require_once $sourcedir . '/sd_source/SimpleDesk-Admin.php'; shd_load_language('sd_language/SimpleDeskAdmin'); shd_load_plugin_files('hdadmin'); shd_load_plugin_langfiles('hdadmin'); // Now add the main SimpleDesk menu if (!empty($modSettings['helpdesk_active'])) { // The helpdesk action log if (empty($modSettings['shd_disable_action_log'])) { $admin_areas['maintenance']['areas']['logs']['subsections']['helpdesklog'] = array($txt['shd_admin_helpdesklog'], 'admin_forum', 'url' => $scripturl . '?action=admin;area=helpdesk_info;sa=actionlog'); } // The main menu $admin_areas['helpdesk_info'] = array('title' => $txt['shd_helpdesk'], 'enabled' => allowedTo('admin_forum') || shd_allowed_to('admin_helpdesk', 0), 'areas' => array('helpdesk_info' => array('label' => $txt['shd_admin_info'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/simpledesk.png', 'function' => 'shd_admin_main', 'subsections' => array('main' => array($txt['shd_admin_info']), 'actionlog' => array($txt['shd_admin_actionlog'], 'enabled' => empty($modSettings['shd_disable_action_log'])), 'support' => array($txt['shd_admin_support']))), 'helpdesk_options' => array('label' => $txt['shd_admin_options'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/options.png', 'function' => 'shd_admin_main', 'subsections' => array('display' => array($txt['shd_admin_options_display']), 'posting' => array($txt['shd_admin_options_posting']), 'admin' => array($txt['shd_admin_options_admin']), 'standalone' => array($txt['shd_admin_options_standalone']), 'actionlog' => array($txt['shd_admin_options_actionlog']), 'notifications' => array($txt['shd_admin_options_notifications']))), 'helpdesk_cannedreplies' => array('label' => $txt['shd_admin_cannedreplies'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/cannedreplies.png', 'function' => 'shd_admin_main', 'subsections' => array()), 'helpdesk_customfield' => array('label' => $txt['shd_admin_custom_fields'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/custom_fields.png', 'function' => 'shd_admin_main', 'subsections' => array()), 'helpdesk_depts' => array('label' => $txt['shd_admin_departments'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/departments.png', 'function' => 'shd_admin_main', 'subsections' => array()), 'helpdesk_permissions' => array('label' => $txt['shd_admin_permissions'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/permissions.png', 'function' => 'shd_admin_main', 'subsections' => array()), 'helpdesk_plugins' => array('label' => $txt['shd_admin_plugins'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/plugins.png', 'function' => 'shd_admin_main', 'subsections' => array()), 'helpdesk_maint' => array('label' => $txt['shd_admin_maint'], 'file' => 'sd_source/SimpleDesk-Admin.php', 'icon' => 'shd/maintenance.png', 'function' => 'shd_admin_main', 'subsections' => array('main' => array($txt['shd_admin_maint']), 'search' => array($txt['shd_maint_search_settings']))))); // Now engage any hooks. call_integration_hook('shd_hook_adminmenu', array(&$admin_areas)); } }
/** * Begins SimpleDesk general processing. * * Several things are done here, the results of which are unilaterally assumed by all other SimpleDesk functions. * - work out which departments are applicable, and which department we are currently in (as far as possible) * - set up general navigation * - see if the URL or POST data contains a ticket, if so sanitise and store that value * - see if a msg was specified in the URL, if so identify the relevant ticket * - add in the helpdesk CSS file * - identify the sub action to direct them to, then send them on their way. * * @since 1.0 */ function shd_main() { global $context, $txt, $settings, $sourcedir, $modSettings, $scripturl, $user_profile, $user_info, $smcFunc; // Basic sanity stuff if (!$modSettings['helpdesk_active']) { fatal_lang_error('shd_inactive', false); } // Let's be sneaky. Can they only access one department? If they can only access one department, put them there and make a note of it for later. $depts = shd_allowed_to('access_helpdesk', false); $context['shd_multi_dept'] = true; if (count($depts) == 1) { $_REQUEST['dept'] = $depts[0]; $context['shd_multi_dept'] = false; } elseif (empty($_REQUEST['dept']) && !empty($context['queried_dept']) && in_array($context['queried_dept'], $depts)) { $_REQUEST['dept'] = $context['queried_dept']; } $context['shd_department'] = isset($_REQUEST['dept']) && in_array($_REQUEST['dept'], $depts) ? (int) $_REQUEST['dept'] : 0; $context['shd_dept_link'] = !empty($context['shd_department']) && $context['shd_multi_dept'] ? ';dept=' . $context['shd_department'] : ''; shd_is_allowed_to('access_helpdesk', $context['shd_department']); // If we know the department up front, we probably should get it now. Tickets themselves will deal with this but most other places won't. // Note that we may already have loaded this if we went and got the department id earlier, but not always. if (!empty($context['shd_department']) && $context['shd_multi_dept'] && empty($context['shd_dept_name'])) { $query = $smcFunc['db_query']('', ' SELECT dept_name FROM {db_prefix}helpdesk_depts WHERE id_dept = {int:dept}', array('dept' => $context['shd_department'])); list($context['shd_dept_name']) = $smcFunc['db_fetch_row']($query); $smcFunc['db_free_result']($query); } // Load stuff: preferences the core template - and any hook-required files $context['shd_preferences'] = shd_load_user_prefs(); $context['shd_home'] = 'action=helpdesk;sa=main'; loadTemplate('sd_template/SimpleDesk'); shd_load_plugin_files('helpdesk'); shd_load_plugin_langfiles('helpdesk'); // List of sub actions. $subactions = array('main' => array(null, 'shd_main_helpdesk'), 'dept' => array(null, 'shd_main_dept'), 'viewblock' => array(null, 'shd_view_block'), 'ticket' => array('SimpleDesk-Display.php', 'shd_view_ticket'), 'newticket' => array('SimpleDesk-Post.php', 'shd_post_ticket'), 'editticket' => array('SimpleDesk-Post.php', 'shd_post_ticket'), 'saveticket' => array('SimpleDesk-Post.php', 'shd_save_post'), 'reply' => array('SimpleDesk-Post.php', 'shd_post_reply'), 'savereply' => array('SimpleDesk-Post.php', 'shd_save_post'), 'editreply' => array('SimpleDesk-Post.php', 'shd_post_reply'), 'markunread' => array('SimpleDesk-MiscActions.php', 'shd_ticket_unread'), 'assign' => array('SimpleDesk-Assign.php', 'shd_assign'), 'assign2' => array('SimpleDesk-Assign.php', 'shd_assign2'), 'movedept' => array('SimpleDesk-MoveDept.php', 'shd_movedept'), 'movedept2' => array('SimpleDesk-MoveDept.php', 'shd_movedept2'), 'resolveticket' => array('SimpleDesk-MiscActions.php', 'shd_ticket_resolve'), 'relation' => array('SimpleDesk-MiscActions.php', 'shd_ticket_relation'), 'ajax' => array('SimpleDesk-AjaxHandler.php', 'shd_ajax'), 'privacychange' => array('SimpleDesk-MiscActions.php', 'shd_privacy_change_noajax'), 'urgencychange' => array('SimpleDesk-MiscActions.php', 'shd_urgency_change_noajax'), 'closedtickets' => array(null, 'shd_closed_tickets'), 'recyclebin' => array(null, 'shd_recycle_bin'), 'tickettotopic' => array('SimpleDesk-TicketTopicMove.php', 'shd_tickettotopic'), 'tickettotopic2' => array('SimpleDesk-TicketTopicMove.php', 'shd_tickettotopic2'), 'topictoticket' => array('SimpleDesk-TicketTopicMove.php', 'shd_topictoticket'), 'topictoticket2' => array('SimpleDesk-TicketTopicMove.php', 'shd_topictoticket2'), 'permadelete' => array('SimpleDesk-Delete.php', 'shd_perma_delete'), 'deleteticket' => array('SimpleDesk-Delete.php', 'shd_ticket_delete'), 'deletereply' => array('SimpleDesk-Delete.php', 'shd_reply_delete'), 'deleteattach' => array('SimpleDesk-Delete.php', 'shd_attach_delete'), 'restoreticket' => array('SimpleDesk-Delete.php', 'shd_ticket_restore'), 'restorereply' => array('SimpleDesk-Delete.php', 'shd_reply_restore'), 'emaillog' => array('SimpleDesk-Notifications.php', 'shd_notify_popup'), 'notify' => array('SimpleDesk-Notifications.php', 'shd_notify_ticket_options'), 'search' => array('SimpleDesk-Search.php', 'shd_search'), 'search2' => array('SimpleDesk-Search.php', 'shd_search2')); // Navigation menu $context['navigation'] = array('main' => array('text' => 'shd_home', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=main'), 'dept' => array('text' => 'shd_departments', 'test' => 'shd_multi_dept', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=dept'), 'newticket' => array('text' => 'shd_new_ticket', 'test' => 'can_new_ticket', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=newticket' . $context['shd_dept_link']), 'newticketproxy' => array('text' => 'shd_new_ticket_proxy', 'test' => 'can_proxy_ticket', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=newticket;proxy' . $context['shd_dept_link']), 'closedtickets' => array('text' => 'shd_tickets_closed', 'test' => 'can_view_closed', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=closedtickets' . $context['shd_dept_link']), 'recyclebin' => array('text' => 'shd_recycle_bin', 'test' => 'can_view_recycle', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=recyclebin' . $context['shd_dept_link']), 'search' => array('text' => 'shd_search_menu', 'test' => 'can_shd_search', 'lang' => true, 'url' => $scripturl . '?action=helpdesk;sa=search'), 'back' => array('text' => 'shd_back_to_hd', 'test' => 'display_back_to_hd', 'lang' => true, 'url' => $scripturl . '?' . $context['shd_home'] . $context['shd_dept_link']), 'options' => array('text' => 'shd_options', 'test' => 'can_view_options', 'lang' => true, 'url' => $scripturl . '?action=profile;area=hd_prefs')); // Build the link tree. $context['linktree'][] = array('url' => $scripturl . '?action=helpdesk;sa=main', 'name' => $txt['shd_helpdesk']); if (!$context['shd_multi_dept']) { $context['linktree'][] = array('url' => $scripturl . '?' . $context['shd_home'], 'name' => $txt['shd_linktree_tickets']); } // See if a ticket has been specified, like $topic can be. if (!empty($_REQUEST['ticket'])) { if (strpos($_REQUEST['ticket'], '.') === false) { $context['ticket_id'] = (int) $_REQUEST['ticket']; $context['ticket_start'] = 0; } else { list($context['ticket_id'], $context['ticket_start']) = explode('.', $_REQUEST['ticket']); $context['ticket_id'] = (int) $context['ticket_id']; if (!is_numeric($context['ticket_start'])) { // Let's see if it's 'new' first. If it is, great, we'll figure out the new point then throw it at the next one. if (substr($context['ticket_start'], 0, 3) == 'new') { $query = shd_db_query('', ' SELECT IFNULL(hdlr.id_msg, -1) + 1 AS new_from FROM {db_prefix}helpdesk_tickets AS hdt LEFT JOIN {db_prefix}helpdesk_log_read AS hdlr ON (hdlr.id_ticket = {int:ticket} AND hdlr.id_member = {int:member}) WHERE {query_see_ticket} AND hdt.id_ticket = {int:ticket} LIMIT 1', array('member' => $user_info['id'], 'ticket' => $context['ticket_id'])); list($new_from) = $smcFunc['db_fetch_row']($query); $smcFunc['db_free_result']($query); $context['ticket_start'] = 'msg' . $new_from; $context['ticket_start_newfrom'] = $new_from; } if (substr($context['ticket_start'], 0, 3) == 'msg') { $virtual_msg = (int) substr($context['ticket_start'], 3); $query = shd_db_query('', ' SELECT COUNT(hdtr.id_msg) FROM {db_prefix}helpdesk_ticket_replies AS hdtr INNER JOIN {db_prefix}helpdesk_tickets AS hdt ON (hdtr.id_ticket = hdt.id_ticket) WHERE {query_see_ticket} AND hdtr.id_ticket = {int:ticket} AND hdtr.id_msg > hdt.id_first_msg AND hdtr.id_msg < {int:virtual_msg}' . (!isset($_GET['recycle']) ? ' AND hdtr.message_status = {int:message_notdel}' : ''), array('ticket' => $context['ticket_id'], 'virtual_msg' => $virtual_msg, 'message_notdel' => MSG_STATUS_NORMAL)); list($context['ticket_start']) = $smcFunc['db_fetch_row']($query); $smcFunc['db_free_result']($query); } } else { $context['ticket_start'] = (int) $context['ticket_start']; // it IS numeric but let's make sure it's the right kind of number $context['ticket_start_natural'] = true; } } } if (empty($context['ticket_start_newfrom'])) { $context['ticket_start_newfrom'] = empty($context['ticket_start']) ? 0 : $context['ticket_start']; } // Do we have just a message id? We can get the ticket from that - but only if we don't already have a ticket id! $_REQUEST['msg'] = !empty($_REQUEST['msg']) ? (int) $_REQUEST['msg'] : 0; if (!empty($_REQUEST['msg']) && empty($context['ticket_id'])) { $query = shd_db_query('', ' SELECT hdt.id_ticket, hdtr.id_msg FROM {db_prefix}helpdesk_ticket_replies AS hdtr INNER JOIN {db_prefix}helpdesk_tickets AS hdt ON (hdtr.id_ticket = hdt.id_ticket) WHERE {query_see_ticket} AND hdtr.id_msg = {int:msg}', array('msg' => $_REQUEST['msg'])); if ($row = $smcFunc['db_fetch_row']($query)) { $context['ticket_id'] = (int) $row[0]; } $smcFunc['db_free_result']($query); } $context['items_per_page'] = 10; $context['start'] = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; // Load the custom CSS. if (empty($context['html_headers'])) { $context['html_headers'] = ''; } $context['html_headers'] .= ' <link rel="stylesheet" type="text/css" href="' . (file_exists($settings['theme_dir'] . '/css/helpdesk.css') ? $settings['theme_url'] . '/css/helpdesk.css' : $settings['default_theme_url'] . '/css/helpdesk.css') . '?' . $context['shd_css_version'] . '" /> <script type="text/javascript" src="' . $settings['default_theme_url'] . '/scripts/helpdesk.js?' . $context['shd_scripts_version'] . '"></script>'; // A custom css? if (file_exists($settings['default_theme_url'] . '/css/helpdesk_custom.css')) { $context['html_headers'] .= ' <link rel="stylesheet" type="text/css" href="' . $settings['default_theme_url'] . '/css/helpdesk_custom.css?' . $context['shd_css_version'] . '" />'; } if (file_exists($settings['theme_dir'] . '/css/helpdesk_custom.css')) { $context['html_headers'] .= ' <link rel="stylesheet" type="text/css" href="' . $settings['theme_url'] . '/css/helpdesk_custom.css?' . $context['shd_css_version'] . '" />'; } // Int hooks - after we basically set everything up (so it's manipulatable by the hook, but before we do the last bits of finalisation) call_integration_hook('shd_hook_helpdesk', array(&$subactions)); // What are we doing? $_REQUEST['sa'] = !empty($_REQUEST['sa']) && isset($subactions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : 'main'; $context['sub_action'] = $subactions[$_REQUEST['sa']]; $context['can_new_ticket'] = shd_allowed_to('shd_new_ticket', $context['shd_department']); $context['can_proxy_ticket'] = $context['can_new_ticket'] && shd_allowed_to('shd_post_proxy', $context['shd_department']); $context['can_view_closed'] = shd_allowed_to(array('shd_view_closed_own', 'shd_view_closed_any'), $context['shd_department']); $context['can_view_recycle'] = shd_allowed_to('shd_access_recyclebin', $context['shd_department']); $context['display_back_to_hd'] = !in_array($_REQUEST['sa'], array('main', 'viewblock', 'recyclebin', 'closedtickets', 'dept')); $context['can_shd_search'] = shd_allowed_to('shd_search', 0); $context['can_view_options'] = shd_allowed_to(array('shd_view_preferences_own', 'shd_view_preferences_any'), 0); // Highlight the correct button. if (isset($context['navigation'][$_REQUEST['sa']])) { $context['navigation'][$_REQUEST['sa']]['active'] = true; } // Send them away. if ($context['sub_action'][0] !== null) { require $sourcedir . '/sd_source/' . $context['sub_action'][0]; } $context['sub_action'][1](); // Maintenance mode? If it were, the helpdesk is considered inactive for the purposes of everything to all but those without admin-helpdesk rights - but we must have them if we're here! if (!empty($modSettings['shd_maintenance_mode']) && $_REQUEST['sa'] != 'ajax') { $context['template_layers'][] = 'shd_maintenance'; } call_integration_hook('shd_hook_after_main'); }
/** * The start point for all interaction with the SimpleDesk administration area. * * Enforces that users attempting to access the area have either forum or helpdesk administrative privileges, loads the SimpleDesk * administrative CSS and Javascript and promptly directs users to the specific function for the task they are performing. * * @since 1.0 */ function shd_admin_main() { global $context, $scripturl, $sourcedir, $settings, $txt, $modSettings, $scripturl; shd_init(); shd_load_language('sd_language/SimpleDeskAdmin'); // Kick them in the kneecaps! if (!shd_allowed_to('admin_helpdesk', 0)) { isAllowedTo('admin_forum'); } // Templates and stuff (like hook files) loadTemplate('sd_template/SimpleDesk-Admin'); $context['template_layers'][] = 'shd_nojs'; $context['shd_preferences'] = shd_load_user_prefs(); shd_load_plugin_files('hdadmin'); shd_load_plugin_langfiles('hdadmin'); // Load some extra CSS $context['html_headers'] .= ' <link rel="stylesheet" type="text/css" href="' . $settings['default_theme_url'] . '/css/helpdesk_admin.css?' . $context['shd_css_version'] . '" /> <link rel="stylesheet" type="text/css" href="' . $settings['default_theme_url'] . '/css/helpdesk.css?' . $context['shd_css_version'] . '" /> <script type="text/javascript" src="' . $settings['default_theme_url'] . '/scripts/helpdesk_admin.js?' . $context['shd_scripts_version'] . '"></script>'; $context['page_title'] = $txt['shd_admin_title']; // We need this for later require_once $sourcedir . '/ManageServer.php'; // Create some subactions $subActions = array('helpdesk_info' => array(null, 'shd_admin_info'), 'helpdesk_options' => array(null, 'shd_admin_options'), 'helpdesk_cannedreplies' => array('SimpleDesk-AdminCannedReplies.php', 'shd_admin_canned'), 'helpdesk_customfield' => array('SimpleDesk-AdminCustomField.php', 'shd_admin_custom'), 'helpdesk_depts' => array('SimpleDesk-AdminDepartments.php', 'shd_admin_departments'), 'helpdesk_permissions' => array('SimpleDesk-AdminPermissions.php', 'shd_admin_permissions'), 'helpdesk_plugins' => array('SimpleDesk-AdminPlugins.php', 'shd_admin_plugins'), 'helpdesk_maint' => array('SimpleDesk-AdminMaint.php', 'shd_admin_maint')); // Int hooks - after we basically set everything up (so it's manipulatable by the hook, but before we do the last bits of finalisation) call_integration_hook('shd_hook_hdadmin', array(&$subActions)); // Make sure we can find a subaction. If not set, default to info $_REQUEST['area'] = isset($_REQUEST['area']) && isset($subActions[$_REQUEST['area']]) ? $_REQUEST['area'] : 'helpdesk_info'; $context['sub_action'] = $_REQUEST['area']; if (!empty($subActions[$_REQUEST['area']][0])) { require_once $sourcedir . '/sd_source/' . $subActions[$_REQUEST['area']][0]; } // Call our subaction if ($_REQUEST['area'] == 'helpdesk_options') { $subActions[$_REQUEST['area']][1](false); } else { $subActions[$_REQUEST['area']][1](); } // Important ACS666 check up. if (isset($_REQUEST['cookies'])) { shd_do_important(); } // Maintenance mode? If it were, the helpdesk is considered inactive for the purposes of everything to all but those without admin-helpdesk rights - but we must have them if we're here! if (!empty($modSettings['shd_maintenance_mode'])) { loadTemplate('sd_template/SimpleDesk'); $temp_layers = $context['template_layers']; $context['template_layers'] = array(); $added = false; foreach ($temp_layers as $layer) { $context['template_layers'][] = $layer; if ($layer == 'body') { $context['template_layers'][] = 'shd_maintenance'; $added = true; } } // Well, we tried to add it as near the top as possible, but not all themes use the standard body layer. if (!$added) { $context['template_layers'][] = 'shd_maintenance'; } } // Also, fix up the link tree while we're here. $linktree = $context['linktree']; $context['linktree'] = array(); foreach ($linktree as $linktreeitem) { $context['linktree'][] = $linktreeitem; if ($linktreeitem['url'] == $scripturl . '?action=admin') { $context['linktree'][] = array('url' => $scripturl . '?action=admin;area=helpdesk_info', 'name' => $txt['shd_helpdesk']); } } }