/**
* options_display.php
*
- * Copyright (c) 1999-2005 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
* Displays all optinos about display preferences
*
+ * @copyright 1999-2009 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
*/
define('SMOPT_GRP_GENERAL', 0);
define('SMOPT_GRP_MAILBOX', 1);
define('SMOPT_GRP_MESSAGE', 2);
-
-// load icon themes if in use
-global $use_icons;
-if ($use_icons) {
- global $icon_themes;
- $dirName = SM_PATH . 'images/themes';
- if (is_readable($dirName) && is_dir($dirName)) {
- $d = dir($dirName);
- while($dir = $d->read()) {
- if ($dir != "." && $dir != "..") {
- if (is_dir($dirName."/".$dir) && file_exists("$dirName/$dir/theme.php"))
- include("$dirName/$dir/theme.php");
- }
- }
- }
-}
+define('SMOPT_GRP_ABOOK', 3);
global $use_iframe;
if (! isset($use_iframe)) $use_iframe=false;
* @return array all option information
*/
function load_optpage_data_display() {
- global $theme, $language, $languages,
+ global $theme, $fontsets, $language, $languages,$aTemplateSet,
$default_use_mdn, $squirrelmail_language, $allow_thread_sort,
- $show_alternative_names, $available_languages, $use_icons, $use_iframe;
+ $show_alternative_names, $use_iframe, $use_icons,
+ $sTemplateID, $oTemplate,
+ $user_themes, $chosen_theme;
/* Build a simple array into which we will build options. */
$optgrps = array();
$optgrps[SMOPT_GRP_GENERAL] = _("General Display Options");
$optvals[SMOPT_GRP_GENERAL] = array();
+ /* load the template set option */
+ $templateset_values = array();
+
+ foreach ($aTemplateSet as $sKey => $aTemplateSetAttributes) {
+ $templateset_values[$aTemplateSetAttributes['NAME']] = $aTemplateSetAttributes['ID'];
+ }
+ ksort($templateset_values);
+ $templateset_values = array_flip($templateset_values);
+ // display template options only when there is more than one template
+ if (count($templateset_values)>1) {
+ $optvals[SMOPT_GRP_GENERAL][] = array(
+ 'name' => 'sTemplateID',
+ 'caption' => _("Skin"),
+ 'type' => SMOPT_TYPE_STRLIST,
+ 'refresh' => SMOPT_REFRESH_ALL,
+ 'posvals' => $templateset_values,
+ 'save' => 'save_option_template'
+ );
+ }
+
/* Load the theme option. */
$theme_values = array();
- foreach ($theme as $theme_key => $theme_attributes) {
- $theme_values[$theme_attributes['NAME']] = $theme_attributes['PATH'];
+
+ // Always provide the template default first.
+ $theme_values['none'] = 'Template Default Theme';
+
+ // List alternate themes provided by templates first
+ $template_themes = $oTemplate->get_alternative_stylesheets(true);
+ asort($template_themes);
+ foreach ($template_themes as $sheet=>$name) {
+ $theme_values[$sheet] = 'Template Theme - '.htmlspecialchars($name);
+ }
+ // Next, list user-provided styles
+ asort($user_themes);
+ foreach ($user_themes as $style) {
+ if ($style['PATH'] == 'none')
+ continue;
+ $theme_values[$style['PATH']] = 'User Theme - '.htmlspecialchars($style['NAME']);
}
- ksort($theme_values);
- $theme_values = array_flip($theme_values);
- $optvals[SMOPT_GRP_GENERAL][] = array(
- 'name' => 'chosen_theme',
- 'caption' => _("Theme"),
- 'type' => SMOPT_TYPE_STRLIST,
- 'refresh' => SMOPT_REFRESH_ALL,
- 'posvals' => $theme_values,
- 'save' => 'save_option_theme'
- );
- $css_values = array( 'none' => _("Default" ) );
- $css_dir = SM_PATH . 'themes/css';
- if (is_readable($css_dir) && is_dir($css_dir)) {
- $handle=opendir($css_dir);
- while ($file = readdir($handle) ) {
- if ( substr( $file, -4 ) == '.css' ) {
- $css_values[$file] = substr( $file, 0, strlen( $file ) - 4 );
- }
+ if (count($user_themes) + count($template_themes) > 1) {
+ $optvals[SMOPT_GRP_GENERAL][] = array(
+ 'name' => 'chosen_theme',
+ 'caption' => _("Theme"),
+ 'type' => SMOPT_TYPE_STRLIST,
+ 'refresh' => SMOPT_REFRESH_ALL,
+ 'posvals' => $theme_values,
+ 'save' => 'css_theme_save'
+ );
+ }
+
+ /* Icon theme selection */
+ if ($use_icons) {
+ global $icon_themes, $icon_theme;
+
+ $temp = array();
+ $value = 0;
+ for ($count = 0; $count < sizeof($icon_themes); $count++) {
+ $temp[$icon_themes[$count]['PATH']] = $icon_themes[$count]['NAME'];
+ }
+ if (sizeof($icon_themes) > 0) {
+ $optvals[SMOPT_GRP_GENERAL][] = array(
+ 'name' => 'icon_theme',
+ 'caption' => _("Icon Theme"),
+ 'type' => SMOPT_TYPE_STRLIST,
+ 'refresh' => SMOPT_REFRESH_NONE,
+ 'posvals' => $temp,
+ 'save' => 'icon_theme_save'
+ );
}
- closedir($handle);
}
- if ( count( $css_values ) > 1 ) {
+ $fontset_values = array();
+ $fontset_list = array();
+
+ if (!empty($fontsets) && is_array($fontsets)) {
+
+ foreach (array_keys($fontsets) as $fontset_key) {
+ $fontset_list[$fontset_key]=$fontset_key;
+ }
+ ksort($fontset_list);
+ }
+ if (count($fontset_list) > 1) {
+ $fontset_list = array_merge(array('' => _("Default font style")), $fontset_list);
$optvals[SMOPT_GRP_GENERAL][] = array(
- 'name' => 'custom_css',
- 'caption' => _("Custom Stylesheet"),
+ 'name' => 'chosen_fontset',
+ 'caption' => _("Font style"),
'type' => SMOPT_TYPE_STRLIST,
'refresh' => SMOPT_REFRESH_ALL,
- 'posvals' => $css_values
+ 'posvals' => $fontset_list
);
-
}
- // config.php can be unupdated.
- if (! isset($available_languages) || $available_languages=="" ) {
- $available_languages="ALL"; }
+ $optvals[SMOPT_GRP_GENERAL][] = array(
+ 'name' => 'chosen_fontsize',
+ 'caption' => _("Font size"),
+ 'type' => SMOPT_TYPE_STRLIST,
+ 'refresh' => SMOPT_REFRESH_ALL,
+ 'posvals' => array('' => _("Default font size"),
+ '8' => '8 px',
+ '10' => '10 px',
+ '12' => '12 px',
+ '14' => '14 px')
+ );
$language_values = array();
- if ( strtoupper($available_languages)=='ALL') {
- foreach ($languages as $lang_key => $lang_attributes) {
- if (isset($lang_attributes['NAME'])) {
- $language_values[$lang_key] = $lang_attributes['NAME'];
- if ( isset($show_alternative_names) &&
- $show_alternative_names &&
- isset($lang_attributes['ALTNAME']) ) {
- $language_values[$lang_key] .= " / " . $lang_attributes['ALTNAME'];
- }
- }
- }
- } else if (strtoupper($available_languages)!='NONE') {
- // admin can set list of available languages in config
- $available_languages_array=explode (" ",$available_languages);
- foreach ($available_languages_array as $lang_key ) {
- if (isset($languages[$lang_key]['NAME'])) {
- $language_values[$lang_key] = $languages[$lang_key]['NAME'];
- if ( isset($show_alternative_names) &&
- $show_alternative_names &&
- isset($languages[$lang_key]['ALTNAME']) ) {
- $language_values[$lang_key] .= " / " . $languages[$lang_key]['ALTNAME'];
- }
+ foreach ($languages as $lang_key => $lang_attributes) {
+ if (isset($lang_attributes['NAME'])) {
+ $language_values[$lang_key] = $lang_attributes['NAME'];
+ if ( isset($show_alternative_names) &&
+ $show_alternative_names &&
+ isset($lang_attributes['ALTNAME']) ) {
+ $language_values[$lang_key] .= " / " . $lang_attributes['ALTNAME'];
}
}
}
+
asort($language_values);
$language_values =
array_merge(array('' => _("Default")), $language_values);
$language = $squirrelmail_language;
- if (strtoupper($available_languages)!='NONE') {
- // if set to 'none', interface will use only default language
+
+ // add language selection only when more than 2 languages are available
+ // (default, English and some other)
+ if (count($language_values)>2) {
$optvals[SMOPT_GRP_GENERAL][] = array(
'name' => 'language',
'caption' => _("Language"),
'refresh' => SMOPT_REFRESH_ALL,
'posvals' => $language_values,
'htmlencoded' => true
- );
+ );
}
/* Set values for the "use javascript" option. */
SMPREF_JS_ON => _("Always"),
SMPREF_JS_OFF => _("Never")),
'save' => 'save_option_javascript_autodetect',
- 'script' => 'onclick="document.forms[0].new_js_autodetect_results.value = \'' . SMPREF_JS_ON . '\';"'
+ 'extra_attributes' => array('onclick' => 'document.option_form.new_js_autodetect_results.value = \'' . SMPREF_JS_ON . '\';'),
);
$optvals[SMOPT_GRP_GENERAL][] = array(
'refresh' => SMOPT_REFRESH_NONE
);
- if ($use_icons) {
- global $icon_themes, $icon_theme;
- $temp = array();
- for ($count = 0; $count < sizeof($icon_themes); $count++) {
- $temp[$count] = $icon_themes[$count]['NAME'];
- if ($icon_theme == $icon_themes[$count]['PATH'])
- $value = $count;
- }
- if (sizeof($icon_themes) > 0) {
- $optvals[SMOPT_GRP_MAILBOX][] = array(
- 'name' => 'icon_theme',
- 'caption' => _("Message Flags Icon Theme"),
- 'type' => SMOPT_TYPE_STRLIST,
- 'refresh' => SMOPT_REFRESH_NONE,
- 'posvals' => $temp,
- 'initial_value' => $value,
- 'save' => 'icon_theme_save'
- );
- }
- }
-
$optvals[SMOPT_GRP_MAILBOX][] = array(
'name' => 'show_flag_buttons',
'caption' => _("Show Flag / Unflag Buttons"),
'refresh' => SMOPT_REFRESH_NONE
);
+ $optvals[SMOPT_GRP_MAILBOX][] = array(
+ 'name' => 'show_copy_buttons',
+ 'caption' => _("Enable Message Copy Buttons"),
+ 'type' => SMOPT_TYPE_BOOLEAN,
+ 'refresh' => SMOPT_REFRESH_NONE
+ );
+
$optvals[SMOPT_GRP_MAILBOX][] = array(
'name' => 'page_selector',
'caption' => _("Enable Page Selector"),
'size' => SMOPT_SIZE_TINY
);
+ $optvals[SMOPT_GRP_MAILBOX][] = array(
+ 'name' => 'show_personal_names',
+ 'caption' => _("Show Names Instead of Email Addresses"),
+ 'type' => SMOPT_TYPE_BOOLEAN,
+ 'refresh' => SMOPT_REFRESH_NONE,
+ );
+
$optvals[SMOPT_GRP_MAILBOX][] = array(
'name' => 'show_full_date',
'caption' => _("Always Show Full Date"),
'refresh' => SMOPT_REFRESH_NONE
);
+ $optvals[SMOPT_GRP_MAILBOX][] = array(
+ 'name' => 'custom_date_format',
+ 'caption' => _("Custom Date Format"),
+//FIXME: need better wording here. users should be made aware that this is for advanced use. It might be nice to provide a list of the more common date format characters. It may be helpful to know that it overrides settings such as the one above show_full_date, and only if kept empty will the other date formats apply. For non-English users, it also may be helpful to know that the format is still passed through our own date_intl() function which translates things like the day of the week, month names and abbreviations, etc.
+ 'trailing_text' => ' ' . _("(Uses format of PHP date() function)"),
+ 'type' => SMOPT_TYPE_STRING,
+ 'refresh' => SMOPT_REFRESH_NONE,
+ 'size' => SMOPT_SIZE_TINY,
+ );
+
$optvals[SMOPT_GRP_MAILBOX][] = array(
'name' => 'truncate_sender',
'caption' => _("Length of From/To Field (0 for full)"),
'size' => SMOPT_SIZE_TINY
);
/*
+FIXME!
disabled because the template doesn't support it (yet?)
$optvals[SMOPT_GRP_MAILBOX][] = array(
'name' => 'show_recipient_instead',
$optvals[SMOPT_GRP_MESSAGE][] = array(
'name' => 'delete_prev_next_display',
- 'caption' => _("Show 'Delete & Prev/Next' Links"),
+ 'caption' => _("Show 'Delete & Prev/Next' Links"),
'type' => SMOPT_TYPE_BOOLEAN,
'refresh' => SMOPT_REFRESH_ALL
);
+
+
+ /*** Load the Address Book Options into the array ***/
+ $optgrps[SMOPT_GRP_ABOOK] = _("Address Book Display Options");
+ $optvals[SMOPT_GRP_ABOOK] = array();
+
+ $optvals[SMOPT_GRP_ABOOK][] = array(
+ 'name' => 'abook_show_num',
+ 'caption' => _("Number of Addresses per Page"),
+ 'type' => SMOPT_TYPE_INTEGER,
+ 'refresh' => SMOPT_REFRESH_NONE,
+ 'size' => SMOPT_SIZE_TINY
+ );
+
+ $optvals[SMOPT_GRP_ABOOK][] = array(
+ 'name' => 'abook_page_selector',
+ 'caption' => _("Enable Page Selector"),
+ 'type' => SMOPT_TYPE_BOOLEAN,
+ 'refresh' => SMOPT_REFRESH_NONE
+ );
+
+ $optvals[SMOPT_GRP_ABOOK][] = array(
+ 'name' => 'abook_compact_paginator',
+ 'caption' => _("Use Compact Page Selector"),
+ 'type' => SMOPT_TYPE_BOOLEAN,
+ 'refresh' => SMOPT_REFRESH_NONE
+ );
+
+ $optvals[SMOPT_GRP_ABOOK][] = array(
+ 'name' => 'abook_page_selector_max',
+ 'caption' => _("Maximum Number of Pages to Show"),
+ 'type' => SMOPT_TYPE_INTEGER,
+ 'refresh' => SMOPT_REFRESH_NONE,
+ 'size' => SMOPT_SIZE_TINY
+ );
+
+
+
/* Assemble all this together and return it as our result. */
$result = array(
'grps' => $optgrps,
/******************************************************************/
/**
- * This function saves a new theme setting.
- * It updates the theme array.
+ * This function saves a new template setting.
+ * It updates the template array.
*/
-function save_option_theme($option) {
- global $theme;
-
- /* Do checking to make sure $new_theme is in the array. */
- $theme_in_array = false;
- for ($i = 0; $i < count($theme); ++$i) {
- if ($theme[$i]['PATH'] == $option->new_value) {
- $theme_in_array = true;
+function save_option_template($option) {
+ global $aTemplateSet;
+
+ /* Do checking to make sure new template is in the available templates array. */
+ $templateset_in_array = false;
+ for ($i = 0; $i < count($aTemplateSet); ++$i) {
+ if ($aTemplateSet[$i]['ID'] == $option->new_value) {
+ $templateset_in_array = true;
break;
}
}
- if (!$theme_in_array) {
+ if (!$templateset_in_array) {
$option->new_value = '';
+ } else {
+
+ // clear template cache when changing template sets
+ // (in order to do so, we have to change the global
+ // template set ID now... should not be a problem --
+ // in fact, if we don't do it now, very anomalous
+ // problems occur)
+ //
+ global $sTemplateID;
+ $sTemplateID = $option->new_value;
+ Template::cache_template_file_hierarchy($sTemplateID, TRUE);
+
}
+ /**
+ * TODO: If the template changes and we are using a template provided theme
+ * ($user_theme), do we want to reset $user_theme?
+ */
/* Save the option like normal. */
save_option($option);
}
* This function saves the user's icon theme setting
*/
function icon_theme_save($option) {
-
- global $icon_themes, $data_dir, $username;
+ global $icon_themes;
// Don't assume the new value is there, double check
// and only save if found
- //
- if (isset($icon_themes[$option->new_value]['PATH']))
- setPref($data_dir, $username, 'icon_theme', $icon_themes[$option->new_value]['PATH']);
- else
- setPref($data_dir, $username, 'icon_theme', 'none');
+ $found = false;
+ while (!$found && (list($index, $data) = each($icon_themes))) {
+ if ($data['PATH'] == $option->new_value)
+ $found = true;
+ }
+
+ if (!$found)
+ $option->new_value = 'none';
+
+ save_option($option);
+}
+
+function css_theme_save ($option) {
+ global $user_themes, $oTemplate;
+ // Don't assume the new value is there, double check
+ // and only save if found
+ $found = false;
+ reset($user_themes);
+ while (!$found && (list($index, $data) = each($user_themes))) {
+ if ($data['PATH'] == $option->new_value)
+ $found = true;
+ }
+
+ if (!$found) {
+ $template_themes = $oTemplate->get_alternative_stylesheets(true);
+ while (!$found && (list($path, $name) = each($template_themes))) {
+ if ($path == $option->new_value)
+ $found = true;
+ }
+ }
+
+ if (!$found)
+ $option->new_value = 'none';
+
+ save_option($option);
}
-?>
+