<?php
/**
* options.php
*
* Displays the options page. Pulls from proper user preference files
* and config.php. Displays preferences as selected and other options.
*
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: options.php 14845 2020年01月07日 08:09:34Z pdontthink $
* @package squirrelmail
* @subpackage prefs
*/
/** This is the options page */
define ('PAGE_NAME', 'options');
/**
* Include the SquirrelMail initialization file.
*/
require('../include/init.php');
/* SquirrelMail required files. */
//include(SM_PATH . 'functions/imap_general.php');
require_once(SM_PATH . 'functions/options.php');
require_once(SM_PATH . 'functions/forms.php');
/*********************************/
/*** Build the resultant page. ***/
/*********************************/
define ('SMOPT_MODE_DISPLAY', 'display');
define ('SMOPT_MODE_SUBMIT', 'submit');
define ('SMOPT_MODE_LINK', 'link');
define ('SMOPT_PAGE_MAIN', 'main');
define ('SMOPT_PAGE_PERSONAL', 'personal');
define ('SMOPT_PAGE_DISPLAY', 'display');
define ('SMOPT_PAGE_COMPOSE', 'compose');
define ('SMOPT_PAGE_ACCESSIBILITY', 'accessibility');
define ('SMOPT_PAGE_HIGHLIGHT', 'highlight');
define ('SMOPT_PAGE_FOLDER', 'folder');
define ('SMOPT_PAGE_ORDER', 'order');
/**
* Save submitted options and calculate the most
* we need to refresh the page
*
* @param string $optpage The name of the page being submitted
* @param array $optpage_data An array of all the submitted options
*
* @return int The highest level of screen refresh needed per
* the options that were changed. This value will
* correspond to the SMOPT_REFRESH_* constants found
* in functions/options.php.
*
*/
/* Initialize the maximum option refresh level. */
/* Save each option in each option group. */
foreach ($optpage_data['options'] as $option_grp) {
foreach ($option_grp['options'] as $option) {
/* Special case: need to make sure emailaddress
* is saved if we use it as a test for ask_user_info */
$option->name == 'email_address' ) {
$option->setValue('');
}
/* Remove Debug Mode Until Needed
echo "name = '$option->name', "
. "value = '$option->value', "
. "new_value = '$option->new_value'\n";
//FIXME: NO HTML IN THE CORE!
echo "<br />";
*/
if ($option->changed()) {
$option->save();
$max_refresh =
max ($max_refresh, $option->refresh_level);
}
}
}
/* Return the max refresh level. */
return ($max_refresh);
}
/* There will be something here, later. */
}
/* ---------------------------- main ---------------------------- */
/* get the globals that we may need */
/* end of getting globals */
/* Make sure we have an Option Page set. Default to main. */
if ( !isset($optpage) || $optpage == '' ) {
} else {
}
/* Make sure we have an Option Mode set. Default to display. */
if (!isset($optmode)) {
}
/*
* First, set the load information for each option page.
*/
/* Initialize load information variables. */
$optpage_name = '';
$optpage_file = '';
$optpage_loader = '';
/* Set the load information for each page. */
switch ($optpage) {
break;
$optpage_name =
_ ("Personal Information");
$optpage_file =
SM_PATH .
'include/options/personal.php';
$optpage_loader = 'load_optpage_data_personal';
$optpage_loadhook = 'optpage_loadhook_personal';
break;
$optpage_name =
_ ("Display Preferences");
$optpage_file =
SM_PATH .
'include/options/display.php';
$optpage_loader = 'load_optpage_data_display';
$optpage_loadhook = 'optpage_loadhook_display';
break;
$optpage_name =
_ ("Compose Preferences");
$optpage_file =
SM_PATH .
'include/options/compose.php';
$optpage_loader = 'load_optpage_data_compose';
$optpage_loadhook = 'optpage_loadhook_compose';
break;
$optpage_name =
_ ("Accessibility Preferences");
$optpage_file =
SM_PATH .
'include/options/accessibility.php';
$optpage_loader = 'load_optpage_data_accessibility';
$optpage_loadhook = 'optpage_loadhook_accessibility';
break;
$optpage_name =
_ ("Message Highlighting");
$optpage_file =
SM_PATH .
'include/options/highlight.php';
$optpage_loader = 'load_optpage_data_highlight';
$optpage_loadhook = 'optpage_loadhook_highlight';
break;
$optpage_name =
_ ("Folder Preferences");
$optpage_file =
SM_PATH .
'include/options/folder.php';
$optpage_loader = 'load_optpage_data_folder';
$optpage_loadhook = 'optpage_loadhook_folder';
break;
$optpage_name =
_ ("Index Order");
$optpage_file =
SM_PATH .
'include/options/order.php';
$optpage_loader = 'load_optpage_data_order';
$optpage_loadhook = 'optpage_loadhook_order';
break;
default:
do_hook ('optpage_set_loadinfo', $null);
}
/**********************************************************/
/*** Second, load the option information for this page. ***/
/**********************************************************/
if ( !@is_file ( $optpage_file ) ) {
/* Include the file for this optionpage. */
require_once($optpage_file);
/* Assemble the data for this option page. */
$optpage_data = array();
$optpage_data = $optpage_loader();
do_hook ($optpage_loadhook, $null);
}
/***********************************************************/
/*** Next, process anything that needs to be processed. ***/
/***********************************************************/
// security check before saving anything...
//FIXME: what about SMOPT_MODE_LINK??
}
$optpage_save_error=array();
if ( isset( $optpage_data ) ) {
switch ($optmode) {
break;
break;
}
}
$optpage_title =
_ ("Options");
if (isset($optpage_name) && ($optpage_name != '')) {
$optpage_title .= " - $optpage_name";
}
/*******************************************************************/
/* DO OLD SAVING OF SUBMITTED OPTIONS. THIS WILL BE REMOVED LATER. */
/*******************************************************************/
//FIXME: let's remove these finally in 1.5.2..... but first, are there any plugins using them?
/* If in submit mode, select a save hook name and run it. */
/* Select a save hook name. */
switch ($optpage) {
$save_hook_name = 'options_personal_save';
break;
$save_hook_name = 'options_display_save';
break;
$save_hook_name = 'options_compose_save';
break;
$save_hook_name = 'options_accessibility_save';
break;
$save_hook_name = 'options_folder_save';
break;
default:
$save_hook_name = 'options_save';
break;
}
/* Run the options save hook. */
}
/***************************************************************/
/* Apply logic to decide what optpage we want to display next. */
/***************************************************************/
/* If this is the result of an option page being submitted, then */
/* show the main page. Otherwise, show whatever page was called. */
$optpage_title =
_ ("Options");
}
/***************************************************************/
/* Finally, display whatever page we are supposed to show now. */
/***************************************************************/
displayPageHeader ($color, null, (isset
($optpage_data['xtra']) ?
$optpage_data['xtra'] :
''));
/*
* The main option page has a different layout then the rest of the option
* pages. Therefore, we create it here first, then the others below.
*/
/**********************************************************/
/* First, display the results of a submission, if needed. */
/**********************************************************/
$notice = '';
if (!isset($frame_top)) {
$frame_top = '_top';
}
if (isset($optpage_save_error) && $optpage_save_error!=array()) {
//FIXME: REMOVE HTML FROM CORE
$notice =
_ ("Error(s) occurred while saving your options") .
"<br />\n<ul>\n";
foreach ($optpage_save_error as $error_message) {
$notice.= '<li><small>' . $error_message . "</small></li>\n";
}
$notice.=
"</ul>\n" .
_ ("Some of your preference changes were not applied.") .
"\n";
} else {
/* Display a message indicating a successful save. */
// i18n: The %s represents the name of the option page saving the options
$notice =
sprintf (_ ("Successfully Saved Options: %s"), $optpage_name) .
"<br />\n";
}
/* If $max_refresh != SMOPT_REFRESH_NONE, provide a refresh link. */
if ( !isset( $max_refresh ) ) {
//FIXME: REMOVE HTML FROM CORE - when migrating, keep in mind that the javascript below assumes the folder list is in a separate sibling frame under the same parent, and it is called "left"
$notice .=
sprintf (_ ("Folder list should automatically %srefresh%s."), '<a href="../src/left_main.php" target="left">', '</a>') .
'<br /><script type="text/javascript">' .
"\n<!--\nparent.left.location = '../src/left_main.php';\n// -->\n</script>\n";
} else {
$notice .=
'<a href="../src/left_main.php" target="left">' .
_ ("Refresh Folder List") .
'</a><br />';
}
} else if ($max_refresh) {
//FIXME: REMOVE HTML FROM CORE - when migrating, keep in mind that the javascript below assumes the parent is the top-most SM frame and is what should be refreshed with webmail.php
$notice .=
sprintf (_ ("This page should automatically %srefresh%s."), '<a href="../src/webmail.php?right_frame=options.php" target="' .
$frame_top .
'">', '</a>') .
'<br /><script type="text/javascript">' .
"\n<!--\nparent.location = '../src/webmail.php?right_frame=options.php';\n// -->\n</script>\n";
} else {
$notice .=
'<a href="../src/webmail.php?right_frame=options.php" target="' .
$frame_top .
'">' .
_ ("Refresh Page") .
'</a><br />';
}
}
}
if (!empty($notice)) {
$oTemplate->assign('note', $notice);
$oTemplate->display('note.tpl');
}
/******************************************/
/* Build our array of Option Page Blocks. */
/******************************************/
$optpage_blocks = array();
// access keys...
global $accesskey_options_personal, $accesskey_options_display,
$accesskey_options_highlighting, $accesskey_options_folders,
$accesskey_options_index_order, $accesskey_options_compose,
$accesskey_options_accessibility;
/* Build a section for Personal Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Personal Information"),
'desc' =>
_ ("This contains personal information about yourself such as your name, your email address, etc."),
'js' => false,
'accesskey' => $accesskey_options_personal,
);
/* Build a section for Display Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Display Preferences"),
'desc' =>
_ ("You can change the way that SquirrelMail looks and displays information to you, such as the colors, the language, and other settings."),
'js' => false,
'accesskey' => $accesskey_options_display,
);
/* Build a section for Message Highlighting Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Message Highlighting"),
'url' => 'options_highlight.php',
'desc' =>
_ ("Based upon given criteria, incoming messages can have different background colors in the message list. This helps to easily distinguish who the messages are from, especially for mailing lists."),
'js' => false,
'accesskey' => $accesskey_options_highlighting,
);
/* Build a section for Folder Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Folder Preferences"),
'desc' =>
_ ("These settings change the way your folders are displayed and manipulated."),
'js' => false,
'accesskey' => $accesskey_options_folders,
);
/* Build a section for Index Order Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Index Order"),
'url' => 'options_order.php',
'desc' =>
_ ("The order of the message index can be rearranged and changed to contain the headers in any order you want."),
'js' => false,
'accesskey' => $accesskey_options_index_order,
);
/* Build a section for Compose Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Compose Preferences"),
'desc' =>
_ ("Control the behaviour and layout of writing new mail messages, replying to and forwarding messages."),
'js' => false,
'accesskey' => $accesskey_options_compose,
);
/* Build a section for Accessibility Options. */
$optpage_blocks[] = array(
'name' =>
_ ("Accessibility Preferences"),
'desc' =>
_ ("You can configure features that improve interface usability."),
'js' => false,
'accesskey' => $accesskey_options_accessibility,
);
/* Build a section for plugins wanting to register an optionpage. */
do_hook ('optpage_register_block', $null);
/*****************************************************/
/* Let's sort Javascript Option Pages to the bottom. */
/*****************************************************/
$js_optpage_blocks = array();
$reg_optpage_blocks = array();
foreach ($optpage_blocks as $cur_optpage) {
if (!isset($cur_optpage['accesskey'])) {
$cur_optpage['accesskey'] = 'NONE';
}
if (!isset($cur_optpage['js']) || !$cur_optpage['js']) {
$reg_optpage_blocks[] = $cur_optpage;
$js_optpage_blocks[] = $cur_optpage;
}
}
$optpage_blocks =
array_merge ($reg_optpage_blocks, $js_optpage_blocks);
/********************************************/
/* Now, print out each option page section. */
/********************************************/
$oTemplate->assign('page_title', $optpage_title);
$oTemplate->assign('options', $optpage_blocks);
$oTemplate->display('option_groups.tpl');
do_hook ('options_link_and_description', $null);
/*************************************************************************/
/* If we are not looking at the main option page, display the page here. */
/*************************************************************************/
} else {
/* Set the bottom_hook_name and submit_name. */
switch ($optpage) {
$bottom_hook_name = 'options_personal_bottom';
$submit_name = 'submit_personal';
break;
$bottom_hook_name = 'options_display_bottom';
$submit_name = 'submit_display';
break;
$bottom_hook_name = 'options_compose_bottom';
$submit_name = 'submit_compose';
break;
$bottom_hook_name = 'options_accessibility_bottom';
$submit_name = 'submit_accessibility';
break;
$bottom_hook_name = 'options_highlight_bottom';
$submit_name = 'submit_highlight';
break;
$bottom_hook_name = 'options_folder_bottom';
$submit_name = 'submit_folder';
break;
$bottom_hook_name = 'options_order_bottom';
$submit_name = 'submit_order';
break;
default:
$bottom_hook_name = 'options_generic_bottom';
$submit_name = 'submit';
}
// Begin output form
echo
addForm ('options.php', 'post', 'option_form', '', '', array(), TRUE)
// This is the only variable that is needed by *just* the template.
$oTemplate->assign('option_groups', $optpage_data['options']);
global $ask_user_info, $org_name;
&&
getPref ($data_dir, $username,'email_address') ==
"" ) {
$oTemplate->assign('topmessage',
sprintf (_ ("Welcome to %s. Please supply your full name and email address."), $org_name) );
}
// These variables are not specifically needed by the template,
// but they are relevant to the page being built, so we'll add
// them in case some plugin is modifying the page, etc....
//
$oTemplate->assign('max_refresh', isset($max_refresh) ? $max_refresh : NULL);
$oTemplate->assign('page_title', $optpage_title);
$oTemplate->assign('optpage', $optpage);
$oTemplate->assign('optpage_name', $optpage_name);
$oTemplate->assign('optmode', $optmode);
$oTemplate->assign('optpage_data', $optpage_data);
$oTemplate->assign('submit_name', $submit_name);
$oTemplate->display('options.tpl');
$oTemplate->display('form_close.tpl');
/* If it is not empty, trigger the bottom hook. */
if ($bottom_hook_name != '') {
do_hook ($bottom_hook_name, $null);
}
}
$oTemplate->display('footer.tpl');