diff --git a/include/class.config.php b/include/class.config.php index afaefc1332dfff4575716b9c5ffe162b650a7473..37dc84a8d91b3971f465b375b7412eb950a2b4c9 100644 --- a/include/class.config.php +++ b/include/class.config.php @@ -157,6 +157,8 @@ class OsticketConfig extends Config { 'enable_html_thread' => true, 'allow_attachments' => true, 'name_format' => 'full', # First Last + 'agent_name_format' => 'full', # First Last + 'client_name_format' => 'original', # As entered 'auto_claim_tickets'=> true, 'system_language' => 'en_US', 'default_storage_bk' => 'D', @@ -405,8 +407,12 @@ class OsticketConfig extends Config { return $this->get('autolock_minutes'); } - function getDefaultNameFormat() { - return $this->get('name_format'); + function getAgentNameFormat() { + return $this->get('agent_name_format'); + } + + function getClientNameFormat() { + return $this->get('client_name_format'); } function getDefaultDeptId() { @@ -1001,8 +1007,11 @@ class OsticketConfig extends Config { case 'pages': return $this->updatePagesSettings($vars, $errors); break; - case 'access': - return $this->updateAccessSettings($vars, $errors); + case 'agents': + return $this->updateAgentsSettings($vars, $errors); + break; + case 'users': + return $this->updateUsersSettings($vars, $errors); break; case 'kb': return $this->updateKBSettings($vars, $errors); @@ -1079,14 +1088,12 @@ class OsticketConfig extends Config { )); } - function updateAccessSettings($vars, &$errors) { + function updateAgentsSettings($vars, &$errors) { $f=array(); $f['staff_session_timeout']=array('type'=>'int', 'required'=>1, 'error'=>'Enter idle time in minutes'); - $f['client_session_timeout']=array('type'=>'int', 'required'=>1, 'error'=>'Enter idle time in minutes'); $f['pw_reset_window']=array('type'=>'int', 'required'=>1, 'min'=>1, 'error'=>__('Valid password reset window required')); - if(!Validator::process($f, $vars, $errors) || $errors) return false; @@ -1096,14 +1103,29 @@ class OsticketConfig extends Config { 'staff_login_timeout'=>$vars['staff_login_timeout'], 'staff_session_timeout'=>$vars['staff_session_timeout'], 'staff_ip_binding'=>isset($vars['staff_ip_binding'])?1:0, + 'allow_pw_reset'=>isset($vars['allow_pw_reset'])?1:0, + 'pw_reset_window'=>$vars['pw_reset_window'], + 'agent_name_format'=>$vars['agent_name_format'], + + )); + } + + function updateUsersSettings($vars, &$errors) { + $f=array(); + $f['client_session_timeout']=array('type'=>'int', 'required'=>1, 'error'=>'Enter idle time in minutes'); + + if(!Validator::process($f, $vars, $errors) || $errors) + return false; + + return $this->updateAll(array( 'client_max_logins'=>$vars['client_max_logins'], 'client_login_timeout'=>$vars['client_login_timeout'], 'client_session_timeout'=>$vars['client_session_timeout'], - 'allow_pw_reset'=>isset($vars['allow_pw_reset'])?1:0, - 'pw_reset_window'=>$vars['pw_reset_window'], 'clients_only'=>isset($vars['clients_only'])?1:0, 'client_registration'=>$vars['client_registration'], 'client_verify_email'=>isset($vars['client_verify_email'])?1:0, + 'client_name_format'=>$vars['client_name_format'], + )); } diff --git a/include/i18n/en_US/help/tips/settings.agents.yaml b/include/i18n/en_US/help/tips/settings.agents.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bf1ba0602ad93c0766dadf3f1dd63b6f22c2833e --- /dev/null +++ b/include/i18n/en_US/help/tips/settings.agents.yaml @@ -0,0 +1,70 @@ +# +# This is popup help messages for the Admin Panel -> Settings -> Agents +# +# Fields: +# title - Shown in bold at the top of the popover window +# content - The body of the help popover +# links - List of links shows below the content +# title - Link title +# href - href of link (links starting with / are translated to the +# helpdesk installation path) +# +# The key names such as 'helpdesk_name' should not be translated as they +# must match the HTML #ids put into the page template. +# +--- + +# General Settings +agent_name_format: + title: Agent Name Formatting + content: > + Choose a format for Agents names throughout the system. Email templates + will use it for names if no other format is specified. + +# Authentication settings +password_reset: + title: Password Expiration Policy + content: > + Sets how often (in months) Agents will be required to change + their password. If disabled (set to "No expiration"), passwords will + not expire. + +password_expiration_policy: + title: Password Expiration Policy + content: > + Choose how often Agents will be required to change their password. If + disabled (i.e., <span class="doc-desc-opt">No Expiration</span>), passwords + will not expire. + +allow_password_resets: + title: Allow Password Resets + content: > + Enable this feature if you would like to display the + <span class="doc-desc-title">Forgot My Password</span> link on the + <span class="doc-desc-title">Staff Log-In Page</span> + after a failed log in attempt. + +reset_token_expiration: + title: Password Reset Window + content: > + Choose the duration (in minutes) for which the <span class="doc-desc-title"> + Password Reset Tokens</span> will be valid. When an Agent requests a <span + class="doc-desc-title">Password Reset</span>, they are emailed a token that + will permit the reset to take place. + +staff_session_timeout: + title: Agent Session Timeout + content: > + Choose the maximum idle time (in minutes) before an Agent is required to + log in again. + <br><br> + If you would like to disable <span class="doc-desc-title">Agent + Session Timeouts</span>, enter 0. + +bind_staff_session_to_ip: + title: Bind Agent Session to IP + content: > + Enable this if you want Agent to be remembered by their current IP + upon Log In. + <br><br> + This setting is not recommened for users assigned IP addresses dynamically. diff --git a/include/i18n/en_US/help/tips/settings.system.yaml b/include/i18n/en_US/help/tips/settings.system.yaml index 8b2db150a88c21694365fc5e8e3b104e13415355..db6515157f82405394dda2842ed0a33029949caf 100644 --- a/include/i18n/en_US/help/tips/settings.system.yaml +++ b/include/i18n/en_US/help/tips/settings.system.yaml @@ -66,17 +66,6 @@ purge_logs: Determine how long you would like to keep <span class="doc-desc-title">System Logs</span> before they are deleted. -default_name_formatting: - title: Default Name Formatting - content: > - Choose a format for names throughout the system. Email templates - will use it for names if no other format is specified in the - variable. - - links: - - title: Supported Email Template Variables - href: http://osticket.com/wiki/Email_templates - enable_richtext: title: Enable Rich Text content: > diff --git a/include/i18n/en_US/help/tips/settings.access.yaml b/include/i18n/en_US/help/tips/settings.users.yaml similarity index 62% rename from include/i18n/en_US/help/tips/settings.access.yaml rename to include/i18n/en_US/help/tips/settings.users.yaml index 1d88a13bf894cd0878b7a7b2ad90d23b8aa9dd01..3a6f5b918b8b860fd1fe64384dacff4d824db2db 100644 --- a/include/i18n/en_US/help/tips/settings.access.yaml +++ b/include/i18n/en_US/help/tips/settings.users.yaml @@ -1,5 +1,5 @@ # -# This is popup help messages for the Admin Panel -> Settings -> System page +# This is popup help messages for the Admin Panel -> Settings -> Users # # Fields: # title - Shown in bold at the top of the popover window @@ -13,46 +13,14 @@ # must match the HTML #ids put into the page template. # --- -# Authentication settings -password_reset: - title: Password Expiration Policy - content: > - Sets how often (in months) staff members will be required to change - their password. If disabled (set to "No expiration"), passwords will - not expire. - -password_expiration_policy: - title: Password Expiration Policy - content: > - Choose how often Agents will be required to change their password. If - disabled (i.e., <span class="doc-desc-opt">No Expiration</span>), passwords - will not expire. - -allow_password_resets: - title: Allow Password Resets - content: > - Enable this feature if you would like to display the - <span class="doc-desc-title">Forgot My Password</span> link on the - <span class="doc-desc-title">Staff Log In Panel</span> - after a failed log in attempt. - -reset_token_expiration: - title: Password Reset Window +# General Settings +client_name_format: + title: User Name Formatting content: > - Choose the duration (in minutes) for which the <span class="doc-desc-title"> - Password Reset Tokens</span> will be valid. When an Agent requests a <span - class="doc-desc-title">Password Reset</span>, they are emailed a token that - will permit the reset to take place. - -staff_session_timeout: - title: Staff Session Timeout - content: > - Choose the maximum idle time (in minutes) before an Agent is required to - log in again. - <br><br> - If you would like to disable <span class="doc-desc-title">Staff - Session Timeouts</span>, enter 0. + Choose a format for Users names throughout the system. Email templates + will use it for names if no other format is specified. +# Authentication settings client_session_timeout: title: User Session Timeout content: > @@ -62,14 +30,6 @@ client_session_timeout: If you would like to disable <span class="doc-desc-title">User Session Timeouts,</span> enter 0. -bind_staff_session_to_ip: - title: Bind Staff Session to IP - content: > - Enable this if you want Agent to be remembered by their current IP - upon Log In. - <br><br> - This setting is not recommened for users assigned IP addreses dynamically. - registration_method: title: Registration Options content: > diff --git a/include/staff/settings-agents.inc.php b/include/staff/settings-agents.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..874aa2202de8dcc3350368ddd6d63efd95191d1c --- /dev/null +++ b/include/staff/settings-agents.inc.php @@ -0,0 +1,160 @@ +<?php +if (!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config) die('Access Denied'); + +?> +<h2><?php echo __('Agents Settings'); ?></h2> +<form action="settings.php?t=agents" method="post" id="save"> +<?php csrf_token(); ?> +<input type="hidden" name="t" value="agents" > +<ul class="tabs" id="agents-tabs"> + <li class="active"><a href="#settings"> + <i class="icon-asterisk"></i> <?php echo __('Settings'); ?></a></li> + <li><a href="#templates"> + <i class="icon-file-text"></i> <?php echo __('Templates'); ?></a></li> +</ul> +<div id="agents-tabs_container"> + <div id="settings" class="tab_content"> +<table class="form_table settings_table" width="940" border="0" cellspacing="0" cellpadding="2"> + <tbody> + <tr> + <th colspan="2"> + <em><b><?php echo __('General Settings'); ?></b></em> + </th> + </tr> + <tr> + <td width="180"><?php echo __('Name Formatting'); ?>:</td> + <td> + <select name="agent_name_format"> + <?php foreach (PersonsName::allFormats() as $n=>$f) { + list($desc, $func) = $f; + $selected = ($config['agent_name_format'] == $n) ? 'selected="selected"' : ''; ?> + <option value="<?php echo $n; ?>" <?php echo $selected; + ?>><?php echo __($desc); ?></option> + <?php } ?> + </select> + <i class="help-tip icon-question-sign" href="#agent_name_format"></i> + </td> + </tr> + <tr> + <th colspan="2"> + <em><b><?php echo __('Authentication Settings'); ?></b></em> + </th> + </tr> + <tr><td><?php echo __('Password Expiration Policy'); ?>:</th> + <td> + <select name="passwd_reset_period"> + <option value="0"> — <?php echo __('No expiration'); ?> —</option> + <?php + for ($i = 1; $i <= 12; $i++) { + echo sprintf('<option value="%d" %s>%s</option>', + $i,(($config['passwd_reset_period']==$i)?'selected="selected"':''), + sprintf(_N('Monthly', 'Every %d months', $i), $i)); + } + ?> + </select> + <font class="error"><?php echo $errors['passwd_reset_period']; ?></font> + <i class="help-tip icon-question-sign" href="#password_expiration_policy"></i> + </td> + </tr> + <tr><td><?php echo __('Allow Password Resets'); ?>:</th> + <td> + <input type="checkbox" name="allow_pw_reset" <?php echo $config['allow_pw_reset']?'checked="checked"':''; ?>> + <i class="help-tip icon-question-sign" href="#allow_password_resets"></i> + </td> + </tr> + <tr><td><?php echo __('Reset Token Expiration'); ?>:</th> + <td> + <input type="text" name="pw_reset_window" size="6" value="<?php + echo $config['pw_reset_window']; ?>"> + <em><?php echo __('minutes'); ?></em> + <i class="help-tip icon-question-sign" href="#reset_token_expiration"></i> + <font class="error"><?php echo $errors['pw_reset_window']; ?></font> + </td> + </tr> + <tr><td><?php echo __('Agent Excessive Logins'); ?>:</td> + <td> + <select name="staff_max_logins"> + <?php + for ($i = 1; $i <= 10; $i++) { + echo sprintf('<option value="%d" %s>%d</option>', $i,(($config['staff_max_logins']==$i)?'selected="selected"':''), $i); + } + ?> + </select> <?php echo __( + 'failed login attempt(s) allowed before a lock-out is enforced'); ?> + <br/> + <select name="staff_login_timeout"> + <?php + for ($i = 1; $i <= 10; $i++) { + echo sprintf('<option value="%d" %s>%d</option>', $i,(($config['staff_login_timeout']==$i)?'selected="selected"':''), $i); + } + ?> + </select> <?php echo __('minutes locked out'); ?> + </td> + </tr> + <tr><td><?php echo __('Agent Session Timeout'); ?>:</td> + <td> + <input type="text" name="staff_session_timeout" size=6 value="<?php echo $config['staff_session_timeout']; ?>"> + <?php echo __('minutes'); ?> <em><?php echo __('(0 to disable)'); ?></em>. <i class="help-tip icon-question-sign" href="#staff_session_timeout"></i> + </td> + </tr> + <tr><td><?php echo __('Bind Agent Session to IP'); ?>:</td> + <td> + <input type="checkbox" name="staff_ip_binding" <?php echo $config['staff_ip_binding']?'checked="checked"':''; ?>> + <i class="help-tip icon-question-sign" href="#bind_staff_session_to_ip"></i> + </td> + </tr> + </tbody> + </table> + </div> + <div id="templates" class="tab_content hidden"> + <table class="form_table settings_table" width="940" border="0" cellspacing="0" cellpadding="2"> + <tbody> +<?php +$res = db_query('select distinct(`type`), content_id, notes, name, updated from ' + .PAGE_TABLE + .' where isactive=1 group by `type`'); +$contents = array(); +while (list($type, $id, $notes, $name, $u) = db_fetch_row($res)) + $contents[$type] = array($id, $name, $notes, $u); + +$manage_content = function($title, $content) use ($contents) { + list($id, $name, $notes, $upd) = $contents[$content]; + $notes = explode('. ', $notes); + $notes = $notes[0]; + ?><tr><td colspan="2"> + <div style="padding:2px 5px"> + <a href="#ajax.php/content/<?php echo $id; ?>/manage" + onclick="javascript: + $.dialog($(this).attr('href').substr(1), 201); + return false;" class="pull-left"><i class="icon-file-text icon-2x" + style="color:#bbb;"></i> </a> + <span style="display:inline-block;width:90%;width:calc(100% - 32px);padding-left:10px;line-height:1.2em"> + <a href="#ajax.php/content/<?php echo $id; ?>/manage" + onclick="javascript: + $.dialog($(this).attr('href').substr(1), 201, null, {size:'large'}); + return false;"><?php + echo Format::htmlchars($title); ?></a><br/> + <span class="faded"><?php + echo Format::display($notes); ?> + <br><em><?php echo sprintf(__('Last Updated %s'), Format::datetime($upd)); + ?></em></span> + </div></td></tr><?php +}; ?> + <tr> + <th colspan="2"> + <em><b><?php echo __( + 'Authentication and Registration Templates & Pages'); ?></b></em> + </th> + </tr> + <?php $manage_content(__('Agent Welcome Email'), 'registration-staff'); ?> + <?php $manage_content(__('Sign-in Login Banner'), 'banner-staff'); ?> + <?php $manage_content(__('Password Reset Email'), 'pwreset-staff'); ?> +</tbody> +</table> +</div> +<p style="text-align:center"> + <input class="button" type="submit" name="submit" value="<?php echo __('Save Changes'); ?>"> + <input class="button" type="reset" name="reset" value="<?php echo __('Reset Changes'); ?>"> +</p> +</div> +</form> diff --git a/include/staff/settings-system.inc.php b/include/staff/settings-system.inc.php index e5b2e2d6ad2d66619adcbaca423d4acb6fda809a..e166413c5e288838032c536667b34c22ca378274 100644 --- a/include/staff/settings-system.inc.php +++ b/include/staff/settings-system.inc.php @@ -61,20 +61,6 @@ $gmtime = Misc::gmtime(); <i class="help-tip icon-question-sign" href="#default_department"></i> </td> </tr> - <tr> - <td width="180"><?php echo __('Default Name Formatting'); ?>:</td> - <td> - <select name="name_format"> - <?php foreach (PersonsName::allFormats() as $n=>$f) { - list($desc, $func) = $f; - $selected = ($config['name_format'] == $n) ? 'selected="selected"' : ''; ?> - <option value="<?php echo $n; ?>" <?php echo $selected; - ?>><?php echo __($desc); ?></option> - <?php } ?> - </select> - <i class="help-tip icon-question-sign" href="#default_name_formatting"></i> - </td> - </tr> <tr> <td><?php echo __('Collision Avoidance Duration'); ?>:</td> <td> diff --git a/include/staff/settings-users.inc.php b/include/staff/settings-users.inc.php new file mode 100644 index 0000000000000000000000000000000000000000..382348df225a2680429b409790da0ba7a249d215 --- /dev/null +++ b/include/staff/settings-users.inc.php @@ -0,0 +1,159 @@ +<?php +if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config) die('Access Denied'); + +?> +<h2><?php echo __('Users Settings'); ?></h2> +<form action="settings.php?t=users" method="post" id="save"> +<?php csrf_token(); ?> +<input type="hidden" name="t" value="users" > +<ul class="tabs" id="users-tabs"> + <li class="active"><a href="#settings"> + <i class="icon-asterisk"></i> <?php echo __('Settings'); ?></a></li> + <li><a href="#templates"> + <i class="icon-file-text"></i> <?php echo __('Templates'); ?></a></li> +</ul> +<div id="users-tabs_container"> + <div id="settings" class="tab_content"> +<table class="form_table settings_table" width="940" border="0" cellspacing="0" cellpadding="2"> + <tbody> + + <tr> + <th colspan="2"> + <em><b><?php echo __('General Settings'); ?></b></em> + </th> + </tr> + <tr> + <td width="180"><?php echo __('Name Formatting'); ?>:</td> + <td> + <select name="client_name_format"> + <?php foreach (PersonsName::allFormats() as $n=>$f) { + list($desc, $func) = $f; + $selected = ($config['client_name_format'] == $n) ? 'selected="selected"' : ''; ?> + <option value="<?php echo $n; ?>" <?php echo $selected; + ?>><?php echo __($desc); ?></option> + <?php } ?> + </select> + <i class="help-tip icon-question-sign" href="#client_name_format"></i> + </td> + </tr> + <tr> + <th colspan="2"> + <em><b><?php echo __('Authentication Settings'); ?></b></em> + </th> + </tr> + <tr><td><?php echo __('Registration Required'); ?>:</td> + <td><input type="checkbox" name="clients_only" <?php + if ($config['clients_only']) + echo 'checked="checked"'; ?>/> <?php echo __( + 'Require registration and login to create tickets'); ?> + <i class="help-tip icon-question-sign" href="#registration_method"></i> + </td> + <tr><td><?php echo __('Registration Method'); ?>:</td> + <td><select name="client_registration"> +<?php foreach (array( + 'disabled' => __('Disabled — All users are guests'), + 'public' => __('Public — Anyone can register'), + 'closed' => __('Private — Only agents can register users'),) + as $key=>$val) { ?> + <option value="<?php echo $key; ?>" <?php + if ($config['client_registration'] == $key) + echo 'selected="selected"'; ?>><?php echo $val; + ?></option><?php + } ?> + </select> + <i class="help-tip icon-question-sign" href="#registration_method"></i> + </td> + </tr> + <tr><td><?php echo __('User Excessive Logins'); ?>:</td> + <td> + <select name="client_max_logins"> + <?php + for ($i = 1; $i <= 10; $i++) { + echo sprintf('<option value="%d" %s>%d</option>', $i,(($config['client_max_logins']==$i)?'selected="selected"':''), $i); + } + + ?> + </select> <?php echo __( + 'failed login attempt(s) allowed before a lock-out is enforced'); ?> + <br/> + <select name="client_login_timeout"> + <?php + for ($i = 1; $i <= 10; $i++) { + echo sprintf('<option value="%d" %s>%d</option>', $i,(($config['client_login_timeout']==$i)?'selected="selected"':''), $i); + } + ?> + </select> <?php echo __('minutes locked out'); ?> + </td> + </tr> + <tr><td><?php echo __('User Session Timeout'); ?>:</td> + <td> + <input type="text" name="client_session_timeout" size=6 value="<?php echo $config['client_session_timeout']; ?>"> + <i class="help-tip icon-question-sign" href="#client_session_timeout"></i> + </td> + </tr> + <tr><td><?php echo __('Client Quick Access'); ?>:</td> + <td><input type="checkbox" name="client_verify_email" <?php + if ($config['client_verify_email']) + echo 'checked="checked"'; ?>/> <?php echo __( + 'Require email verification on "Check Ticket Status" page'); ?> + <i class="help-tip icon-question-sign" href="#client_verify_email"></i> + </td> + </tr> + </tbody> + </table> + </div> + <div id="templates" class="tab_content hidden"> + <table class="form_table settings_table" width="940" border="0" cellspacing="0" cellpadding="2"> + <tbody> +<?php +$res = db_query('select distinct(`type`), content_id, notes, name, updated from ' + .PAGE_TABLE + .' where isactive=1 group by `type`'); +$contents = array(); +while (list($type, $id, $notes, $name, $u) = db_fetch_row($res)) + $contents[$type] = array($id, $name, $notes, $u); + +$manage_content = function($title, $content) use ($contents) { + list($id, $name, $notes, $upd) = $contents[$content]; + $notes = explode('. ', $notes); + $notes = $notes[0]; + ?><tr><td colspan="2"> + <div style="padding:2px 5px"> + <a href="#ajax.php/content/<?php echo $id; ?>/manage" + onclick="javascript: + $.dialog($(this).attr('href').substr(1), 201); + return false;" class="pull-left"><i class="icon-file-text icon-2x" + style="color:#bbb;"></i> </a> + <span style="display:inline-block;width:90%;width:calc(100% - 32px);padding-left:10px;line-height:1.2em"> + <a href="#ajax.php/content/<?php echo $id; ?>/manage" + onclick="javascript: + $.dialog($(this).attr('href').substr(1), 201, null, {size:'large'}); + return false;"><?php + echo Format::htmlchars($title); ?></a><br/> + <span class="faded"><?php + echo Format::display($notes); ?> + <br><em><?php echo sprintf(__('Last Updated %s'), Format::datetime($upd)); + ?></em></span> + </div></td></tr><?php +}; ?> + <tr> + <th colspan="2"> + <em><b><?php echo __( + 'Authentication and Registration Templates & Pages'); ?></b></em> + </th> + </tr> + <?php $manage_content(__('Guest Ticket Access'), 'access-link'); ?> + <?php $manage_content(__('Sign-In Page'), 'banner-client'); ?> + <?php $manage_content(__('Password Reset Email'), 'pwreset-client'); ?> + <?php $manage_content(__('Please Confirm Email Address Page'), 'registration-confirm'); ?> + <?php $manage_content(__('Account Confirmation Email'), 'registration-client'); ?> + <?php $manage_content(__('Account Confirmed Page'), 'registration-thanks'); ?> +</tbody> +</table> +</div> +<p style="text-align:center"> + <input class="button" type="submit" name="submit" value="<?php echo __('Save Changes'); ?>"> + <input class="button" type="reset" name="reset" value="<?php echo __('Reset Changes'); ?>"> +</p> +</div> +</form> diff --git a/scp/settings.php b/scp/settings.php index a0d0a8c2a8ddba53f215a076a1d1acdb29dfd8e8..4a52a6f0192f1ca969b753d13d09b3301d382b26 100644 --- a/scp/settings.php +++ b/scp/settings.php @@ -23,16 +23,14 @@ $settingOptions=array( array(__('Ticket Settings and Options'), 'settings.ticket'), 'tasks' => array(__('Task Settings and Options'), 'settings.tasks'), + 'agents' => + array(__('Agent Settings and Options'), 'settings.agents'), + 'users' => + array(__('User Settings and Options'), 'settings.users'), 'pages' => array(__('Site Pages'), 'settings.pages'), - 'access' => - array(__('Access Control'), 'settings.access'), 'kb' => array(__('Knowledgebase Settings'), 'settings.kb'), - 'autoresp' => - array(__('Autoresponder Settings'), 'settings.autoresponder'), - 'alerts' => - array(__('Alerts and Notices Settings'), 'settings.alerts'), ); //Handle a POST. $target=($_REQUEST['t'] && $settingOptions[$_REQUEST['t']])?$_REQUEST['t']:'system';