Source for file options.php
Documentation is available at 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 $
/** 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' ) {
/* Remove Debug Mode Until Needed
echo "name = '$option->name', "
. "value = '$option->value', "
. "new_value = '$option->new_value'\n";
//FIXME: NO HTML IN THE CORE!
if ($option->changed()) {
$max_refresh =
max($max_refresh, $option->refresh_level);
/* Return the max refresh level. */
/* 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 ==
'' ) {
/* Make sure we have an Option Mode set. Default to display. */
* First, set the load information for each option page.
/* Initialize load information variables. */
/* Set the load information for each page. */
$optpage_name =
_("Personal Information");
$optpage_file =
SM_PATH .
'include/options/personal.php';
$optpage_loader =
'load_optpage_data_personal';
$optpage_loadhook =
'optpage_loadhook_personal';
$optpage_name =
_("Display Preferences");
$optpage_file =
SM_PATH .
'include/options/display.php';
$optpage_loader =
'load_optpage_data_display';
$optpage_loadhook =
'optpage_loadhook_display';
$optpage_name =
_("Compose Preferences");
$optpage_file =
SM_PATH .
'include/options/compose.php';
$optpage_loader =
'load_optpage_data_compose';
$optpage_loadhook =
'optpage_loadhook_compose';
$optpage_name =
_("Accessibility Preferences");
$optpage_file =
SM_PATH .
'include/options/accessibility.php';
$optpage_loader =
'load_optpage_data_accessibility';
$optpage_loadhook =
'optpage_loadhook_accessibility';
$optpage_name =
_("Message Highlighting");
$optpage_file =
SM_PATH .
'include/options/highlight.php';
$optpage_loader =
'load_optpage_data_highlight';
$optpage_loadhook =
'optpage_loadhook_highlight';
$optpage_name =
_("Folder Preferences");
$optpage_file =
SM_PATH .
'include/options/folder.php';
$optpage_loader =
'load_optpage_data_folder';
$optpage_loadhook =
'optpage_loadhook_folder';
$optpage_name =
_("Index Order");
$optpage_file =
SM_PATH .
'include/options/order.php';
$optpage_loader =
'load_optpage_data_order';
$optpage_loadhook =
'optpage_loadhook_order';
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 =
$optpage_loader();
/***********************************************************/
/*** 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 ) ) {
$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. */
$save_hook_name =
'options_personal_save';
$save_hook_name =
'options_display_save';
$save_hook_name =
'options_compose_save';
$save_hook_name =
'options_accessibility_save';
$save_hook_name =
'options_folder_save';
$save_hook_name =
'options_save';
/* 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. */
/**********************************************************/
if (!isset
($frame_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";
/* 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";
$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";
$notice .=
'<a href="../src/webmail.php?right_frame=options.php" target="' .
$frame_top .
'">' .
_("Refresh Page") .
'</a><br />';
$oTemplate->assign('note', $notice);
$oTemplate->display('note.tpl');
/******************************************/
/* Build our array of Option Page Blocks. */
/******************************************/
$optpage_blocks =
array();
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."),
'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."),
'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."),
'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."),
'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."),
'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."),
'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."),
'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. */
/*************************************************************************/
/* Set the bottom_hook_name and submit_name. */
$bottom_hook_name =
'options_personal_bottom';
$submit_name =
'submit_personal';
$bottom_hook_name =
'options_display_bottom';
$submit_name =
'submit_display';
$bottom_hook_name =
'options_compose_bottom';
$submit_name =
'submit_compose';
$bottom_hook_name =
'options_accessibility_bottom';
$submit_name =
'submit_accessibility';
$bottom_hook_name =
'options_highlight_bottom';
$submit_name =
'submit_highlight';
$bottom_hook_name =
'options_folder_bottom';
$submit_name =
'submit_folder';
$bottom_hook_name =
'options_order_bottom';
$submit_name =
'submit_order';
$bottom_hook_name =
'options_generic_bottom';
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 !=
'') {
$oTemplate->display('footer.tpl');
Documentation generated on Mon, 13 Jan 2020 04:23:15 +0100 by phpDocumentor 1.4.3