Source for file display.php

Documentation is available at display.php

  1. <?php
  2.  
  3. /**
  4.  * options_display.php
  5.  *
  6.  * Displays all optinos about display preferences
  7.  *
  8.  * @copyright 1999-2020 The SquirrelMail Project Team
  9.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  10.  * @version $Id: display.php 14840 2020-01-07 07:42:38Z pdontthink $
  11.  * @package squirrelmail
  12.  */
  13.  
  14. /** Define the group constants for the display options page. */
  15. define('SMOPT_GRP_GENERAL'0);
  16. define('SMOPT_GRP_MAILBOX'1);
  17. define('SMOPT_GRP_MESSAGE'2);
  18.  
  19. /**
  20.  * This function builds an array with all the information about
  21.  * the options available to the user, and returns it. The options
  22.  * are grouped by the groups in which they are displayed.
  23.  * For each option, the following information is stored:
  24.  * - name: the internal (variable) name
  25.  * - caption: the description of the option in the UI
  26.  * - type: one of SMOPT_TYPE_*
  27.  * - refresh: one of SMOPT_REFRESH_*
  28.  * - size: one of SMOPT_SIZE_*
  29.  * - save: the name of a function to call when saving this option
  30.  * @return array all option information
  31.  */
  32.     global $theme$language$languages$js_autodetect_results,
  33.     $compose_new_win$default_use_mdn$squirrelmail_language$allow_thread_sort,
  34.     $optmode;
  35.  
  36.     /* Build a simple array into which we will build options. */
  37.     $optgrps array();
  38.     $optvals array();
  39.  
  40.     /******************************************************/
  41.     /* LOAD EACH GROUP OF OPTIONS INTO THE OPTIONS ARRAY. */
  42.     /******************************************************/
  43.  
  44.     /*** Load the General Options into the array ***/
  45.     $optgrps[SMOPT_GRP_GENERAL_("General Display Options");
  46.     $optvals[SMOPT_GRP_GENERALarray();
  47.  
  48.     /* Load the theme option. */
  49.     $theme_values array();
  50.     foreach ($theme as $theme_key => $theme_attributes{
  51.         $theme_values[$theme_attributes['NAME']] $theme_attributes['PATH'];
  52.     }
  53.     ksort($theme_values);
  54.     $theme_values array_flip($theme_values);
  55.     $optvals[SMOPT_GRP_GENERAL][array(
  56.         'name'    => 'chosen_theme',
  57.         'caption' => _("Theme"),
  58.         'type'    => SMOPT_TYPE_STRLIST,
  59.         'refresh' => SMOPT_REFRESH_ALL,
  60.         'posvals' => $theme_values,
  61.         'save'    => 'save_option_theme'
  62.     );
  63.  
  64.     $css_values array'none' => _("Default" ) );
  65.     $css_dir SM_PATH 'themes/css';
  66.     if (is_readable($css_dir&& is_dir($css_dir)) {
  67.         $handle=opendir($css_dir);
  68.         while ($file readdir($handle) ) {
  69.             if substr$file-== '.css' {
  70.                 $css_values[$filesubstr$file0strlen$file );
  71.             }
  72.         }
  73.         closedir($handle);
  74.     }
  75.  
  76.     asort($css_values);
  77.     if count$css_values {
  78.  
  79.         $optvals[SMOPT_GRP_GENERAL][array(
  80.             'name'    => 'custom_css',
  81.             'caption' => _("Custom Stylesheet"),
  82.             'type'    => SMOPT_TYPE_STRLIST,
  83.             'refresh' => SMOPT_REFRESH_ALL,
  84.             'posvals' => $css_values
  85.         );
  86.  
  87.     }
  88.  
  89.     $language_values array();
  90.     foreach ($languages as $lang_key => $lang_attributes{
  91.         if (isset($lang_attributes['NAME'])) {
  92.             $language_values[$lang_key$lang_attributes['NAME'];
  93.         }
  94.     }
  95.  
  96.     asort($language_values);
  97.     $language_values =
  98.         array_merge(array('' => _("Default"))$language_values);
  99.     $language $squirrelmail_language;
  100.     $optvals[SMOPT_GRP_GENERAL][array(
  101.         'name'    => 'language',
  102.         'caption' => _("Language"),
  103.         'type'    => SMOPT_TYPE_STRLIST,
  104.         'refresh' => SMOPT_REFRESH_ALL,
  105.         'posvals' => $language_values,
  106.         'htmlencoded' => true
  107.     );
  108.  
  109.     /* Set values for the "use javascript" option. */
  110.     $optvals[SMOPT_GRP_GENERAL][array(
  111.         'name'    => 'javascript_setting',
  112.         'caption' => _("Use Javascript"),
  113.         'type'    => SMOPT_TYPE_STRLIST,
  114.         'refresh' => SMOPT_REFRESH_ALL,
  115.         'posvals' => array(SMPREF_JS_AUTODETECT => _("Autodetect"),
  116.                            SMPREF_JS_ON         => _("Always"),
  117.                            SMPREF_JS_OFF        => _("Never"))
  118.     );
  119.  
  120.     if ($optmode != 'submit')
  121.        // FIXME: our form is named "f" - why? let's use something better
  122.        $onLoadScript 'document.f.new_js_autodetect_results.value = \'' SMPREF_JS_ON '\'';
  123.     else
  124.        $onLoadScript '';
  125.  
  126.     $optvals[SMOPT_GRP_GENERAL][array(
  127.         'name'    => 'js_autodetect_results',
  128.         'caption' => '',
  129.         'type'    => SMOPT_TYPE_HIDDEN,
  130.         'refresh' => SMOPT_REFRESH_NONE,
  131.         //'post_script' => $js_autodetect_script,
  132.         'save'    => 'save_option_javascript_autodetect'
  133.     );
  134.  
  135.     /*** Load the General Options into the array ***/
  136.     $optgrps[SMOPT_GRP_MAILBOX_("Mailbox Display Options");
  137.     $optvals[SMOPT_GRP_MAILBOXarray();
  138.  
  139.     $optvals[SMOPT_GRP_MAILBOX][array(
  140.         'name'    => 'show_num',
  141.         'caption' => _("Number of Messages per Page"),
  142.         'type'    => SMOPT_TYPE_INTEGER,
  143.         'refresh' => SMOPT_REFRESH_NONE,
  144.         'size'    => SMOPT_SIZE_TINY
  145.     );
  146.  
  147.     $optvals[SMOPT_GRP_MAILBOX][array(
  148.         'name'    => 'alt_index_colors',
  149.         'caption' => _("Enable Alternating Row Colors"),
  150.         'type'    => SMOPT_TYPE_BOOLEAN,
  151.         'refresh' => SMOPT_REFRESH_NONE
  152.     );
  153.  
  154.     $optvals[SMOPT_GRP_MAILBOX][array(
  155.         'name'    => 'page_selector',
  156.         'caption' => _("Enable Page Selector"),
  157.         'type'    => SMOPT_TYPE_BOOLEAN,
  158.         'refresh' => SMOPT_REFRESH_NONE
  159.     );
  160.  
  161.     $optvals[SMOPT_GRP_MAILBOX][array(
  162.         'name'    => 'page_selector_max',
  163.         'caption' => _("Maximum Number of Pages to Show"),
  164.         'type'    => SMOPT_TYPE_INTEGER,
  165.         'refresh' => SMOPT_REFRESH_NONE,
  166.         'size'    => SMOPT_SIZE_TINY
  167.     );
  168.  
  169.     $optvals[SMOPT_GRP_MAILBOX][array(
  170.         'name'    => 'show_full_date',
  171.         'caption' => _("Always Show Full Date"),
  172.         'type'    => SMOPT_TYPE_BOOLEAN,
  173.         'refresh' => SMOPT_REFRESH_NONE
  174.     );
  175.  
  176.     $optvals[SMOPT_GRP_MAILBOX][array(
  177.         'name'    => 'truncate_sender',
  178.         'caption' => _("Length of From/To Field (0 for full)"),
  179.         'type'    => SMOPT_TYPE_INTEGER,
  180.         'refresh' => SMOPT_REFRESH_NONE,
  181.         'size'    => SMOPT_SIZE_TINY,
  182.         'initial_value' => 55
  183.     );
  184.  
  185.     $optvals[SMOPT_GRP_MAILBOX][array(
  186.         'name'    => 'truncate_subject',
  187.         'caption' => _("Length of Subject Field (0 for full)"),
  188.         'type'    => SMOPT_TYPE_INTEGER,
  189.         'refresh' => SMOPT_REFRESH_NONE,
  190.         'size'    => SMOPT_SIZE_TINY,
  191.         'initial_value' => 55
  192.     );
  193.  
  194.     /*** Load the General Options into the array ***/
  195.     $optgrps[SMOPT_GRP_MESSAGE_("Message Display and Composition");
  196.     $optvals[SMOPT_GRP_MESSAGEarray();
  197.  
  198.     $optvals[SMOPT_GRP_MESSAGE][array(
  199.         'name'    => 'wrap_at',
  200.         'caption' => _("Wrap Incoming Text At"),
  201.         'type'    => SMOPT_TYPE_INTEGER,
  202.         'refresh' => SMOPT_REFRESH_NONE,
  203.         'size'    => SMOPT_SIZE_TINY
  204.     );
  205.  
  206.     $optvals[SMOPT_GRP_MESSAGE][array(
  207.         'name'    => 'editor_size',
  208.         'caption' => _("Width of Editor Window"),
  209.         'type'    => SMOPT_TYPE_INTEGER,
  210.         'refresh' => SMOPT_REFRESH_NONE,
  211.         'size'    => SMOPT_SIZE_TINY
  212.     );
  213.  
  214.     $optvals[SMOPT_GRP_MESSAGE][array(
  215.         'name'    => 'editor_height',
  216.         'caption' => _("Height of Editor Window"),
  217.         'type'    => SMOPT_TYPE_INTEGER,
  218.         'refresh' => SMOPT_REFRESH_NONE,
  219.         'size'    => SMOPT_SIZE_TINY
  220.     );
  221.  
  222.     $optvals[SMOPT_GRP_MESSAGE][array(
  223.         'name'    => 'location_of_buttons',
  224.         'caption' => _("Location of Buttons when Composing"),
  225.         'type'    => SMOPT_TYPE_STRLIST,
  226.         'refresh' => SMOPT_REFRESH_NONE,
  227.         'posvals' => array(SMPREF_LOC_TOP     => _("Before headers"),
  228.                            SMPREF_LOC_BETWEEN => _("Between headers and message body"),
  229.                            SMPREF_LOC_BOTTOM  => _("After message body"))
  230.     );
  231.  
  232.  
  233.     $optvals[SMOPT_GRP_MESSAGE][array(
  234.         'name'    => 'use_javascript_addr_book',
  235.         'caption' => _("Address Book Display Format"),
  236.         'type'    => SMOPT_TYPE_STRLIST,
  237.         'refresh' => SMOPT_REFRESH_NONE,
  238.         'posvals' => array('1' => _("Javascript"),
  239.                            '0' => _("HTML"))
  240.     );
  241.  
  242.     $optvals[SMOPT_GRP_MESSAGE][array(
  243.         'name'    => 'addrsrch_fullname',
  244.         'caption' => _("Format of Addresses Added From Address Book"),
  245.         'type'    => SMOPT_TYPE_STRLIST,
  246.         'refresh' => SMOPT_REFRESH_NONE,
  247.         'posvals' => array('noprefix' => _("No prefix/Address only"),
  248.                            'nickname' => _("Nickname and address"),
  249.                            'fullname' => _("Full name and address"))
  250.     );
  251.  
  252.     $optvals[SMOPT_GRP_MESSAGE][array(
  253.         'name'    => 'show_html_default',
  254.         'caption' => _("Show HTML Version by Default"),
  255.         'type'    => SMOPT_TYPE_BOOLEAN,
  256.         'refresh' => SMOPT_REFRESH_NONE
  257.     );
  258.  
  259.     $optvals[SMOPT_GRP_MESSAGE][array(
  260.         'name'    => 'enable_forward_as_attachment',
  261.         'caption' => _("Enable Forward as Attachment"),
  262.         'type'    => SMOPT_TYPE_BOOLEAN,
  263.         'refresh' => SMOPT_REFRESH_NONE
  264.     );
  265.  
  266.     $optvals[SMOPT_GRP_MESSAGE][array(
  267.         'name'    => 'do_not_reply_to_self',
  268.         'caption' => _("Send Replies To My Own Messages To Previous Recipient"),
  269.         'type'    => SMOPT_TYPE_BOOLEAN,
  270.         'refresh' => SMOPT_REFRESH_NONE
  271.     );
  272.  
  273.     $optvals[SMOPT_GRP_MESSAGE][array(
  274.         'name'    => 'include_self_reply_all',
  275.         'caption' => _("Include Me in CC when I Reply All"),
  276.         'type'    => SMOPT_TYPE_BOOLEAN,
  277.         'refresh' => SMOPT_REFRESH_NONE
  278.     );
  279.  
  280.     $optvals[SMOPT_GRP_MESSAGE][array(
  281.         'name'    => 'return_to_message_after_reply',
  282.         'caption' => _("Return to Original Message After Replying"),
  283.         'type'    => SMOPT_TYPE_BOOLEAN,
  284.         'refresh' => SMOPT_REFRESH_NONE
  285.     );
  286.  
  287.     $optvals[SMOPT_GRP_MESSAGE][array(
  288.         'name'    => 'show_xmailer_default',
  289.         'caption' => _("Enable Mailer Display"),
  290.         'type'    => SMOPT_TYPE_BOOLEAN,
  291.         'refresh' => SMOPT_REFRESH_NONE
  292.     );
  293.  
  294.     $optvals[SMOPT_GRP_MESSAGE][array(
  295.         'name'    => 'attachment_common_show_images',
  296.         'caption' => _("Display Attached Images with Message"),
  297.         'type'    => SMOPT_TYPE_BOOLEAN,
  298.         'refresh' => SMOPT_REFRESH_NONE
  299.     );
  300.  
  301.     $optvals[SMOPT_GRP_MESSAGE][array(
  302.         'name'    => 'pf_cleandisplay',
  303.         'caption' => _("Enable Printer Friendly Clean Display"),
  304.         'type'    => SMOPT_TYPE_BOOLEAN,
  305.         'refresh' => SMOPT_REFRESH_NONE
  306.     );
  307.  
  308.     if ($default_use_mdn{
  309.         $optvals[SMOPT_GRP_MESSAGE][array(
  310.             'name'    => 'mdn_user_support',
  311.             'caption' => _("Enable Mail Delivery Notification"),
  312.             'type'    => SMOPT_TYPE_BOOLEAN,
  313.             'refresh' => SMOPT_REFRESH_NONE
  314.         );
  315.     }
  316.  
  317.     $optvals[SMOPT_GRP_MESSAGE][array(
  318.         'name'    => 'compose_new_win',
  319.         'caption' => _("Compose Messages in New Window"),
  320.         'type'    => SMOPT_TYPE_BOOLEAN,
  321.         'refresh' => SMOPT_REFRESH_ALL
  322.     );
  323.  
  324.     $optvals[SMOPT_GRP_MESSAGE][array(
  325.         'name'    => 'compose_width',
  326.         'caption' => _("Width of Compose Window"),
  327.         'type'    => SMOPT_TYPE_INTEGER,
  328.         'refresh' => SMOPT_REFRESH_ALL,
  329.         'size'    => SMOPT_SIZE_TINY
  330.     );
  331.  
  332.     $optvals[SMOPT_GRP_MESSAGE][array(
  333.         'name'    => 'compose_height',
  334.         'caption' => _("Height of Compose Window"),
  335.         'type'    => SMOPT_TYPE_INTEGER,
  336.         'refresh' => SMOPT_REFRESH_ALL,
  337.         'size'    => SMOPT_SIZE_TINY
  338.     );
  339.  
  340.     $optvals[SMOPT_GRP_MESSAGE][array(
  341.         'name'    => 'sig_first',
  342.         'caption' => _("Prepend Signature before Reply/Forward Text"),
  343.         'type'    => SMOPT_TYPE_BOOLEAN,
  344.         'refresh' => SMOPT_REFRESH_NONE
  345.     );
  346.  
  347.     $optvals[SMOPT_GRP_MESSAGE][array(
  348.         'name'    => 'strip_sigs',
  349.         'caption' => _("Strip signature when replying"),
  350.         'type'    => SMOPT_TYPE_BOOLEAN,
  351.         'refresh' => SMOPT_REFRESH_NONE
  352.     );
  353.  
  354.     $optvals[SMOPT_GRP_MESSAGE][array(
  355.         'name'    => 'body_quote',
  356.         'caption' => _("Prefix for Original Message when Replying"),
  357.         'type'    => SMOPT_TYPE_STRING,
  358.         'refresh' => SMOPT_REFRESH_NONE,
  359.         'size'    => SMOPT_SIZE_TINY,
  360.         'save'    => 'save_option_reply_prefix'
  361.     );
  362.  
  363.     $optvals[SMOPT_GRP_MESSAGE][array(
  364.         'name'    => 'reply_focus',
  365.         'caption' => _("Cursor Position when Replying"),
  366.         'type'    => SMOPT_TYPE_STRLIST,
  367.         'refresh' => SMOPT_REFRESH_NONE,
  368.         'posvals' => array('' => _("To: field"),
  369.                            'focus' => _("Focus in body"),
  370.                            'select' => _("Select body"),
  371.                            'none' => _("No focus"))
  372.     );
  373.  
  374.     $optvals[SMOPT_GRP_MESSAGE][array(
  375.         'name'          => 'internal_date_sort',
  376.         'caption'       => _("Sort by Received Date"),
  377.         'type'          => SMOPT_TYPE_BOOLEAN,
  378.         'refresh'       => SMOPT_REFRESH_ALL,
  379.         'initial_value' => SMPREF_ON
  380.     );
  381.     if ($allow_thread_sort == TRUE{
  382.         $optvals[SMOPT_GRP_MESSAGE][array(
  383.             'name'    => 'sort_by_ref',
  384.             'caption' => _("Enable Thread Sort by References Header"),
  385.             'type'    => SMOPT_TYPE_BOOLEAN,
  386.             'refresh' => SMOPT_REFRESH_ALL
  387.         );
  388.     }
  389.     /* Assemble all this together and return it as our result. */
  390.     $result array(
  391.         'grps' => $optgrps,
  392.         'vals' => $optvals,
  393.         'xtra' => $onLoadScript
  394.     );
  395.     return ($result);
  396. }
  397.  
  398. /******************************************************************/
  399. /** Define any specialized save functions for this option page. ***/
  400. /******************************************************************/
  401.  
  402. /**
  403.  * This function saves a new theme setting.
  404.  * It updates the theme array.
  405.  */
  406. function save_option_theme($option{
  407.     global $theme;
  408.  
  409.     /* Do checking to make sure $new_theme is in the array. */
  410.     $theme_in_array false;
  411.     for ($i 0$i count($theme)++$i{
  412.         if ($theme[$i]['PATH'== $option->new_value{
  413.             $theme_in_array true;
  414.             break;
  415.         }
  416.     }
  417.  
  418.     if (!$theme_in_array{
  419.         $option->new_value '';
  420.     }
  421.  
  422.     /* Save the option like normal. */
  423.     save_option($option);
  424. }
  425.  
  426. /**
  427.  * This function saves the javascript detection option.
  428.  */
  429. function save_option_javascript_autodetect($option{
  430.     global $data_dir$username;
  431.  
  432.     sqGetGlobalVar('new_javascript_setting'$new_javascript_setting);
  433.  
  434.     // Set javascript either on or off.
  435.     if ($new_javascript_setting == SMPREF_JS_AUTODETECT{
  436.         if ($option->new_value == SMPREF_JS_ON{
  437.             setPref($data_dir$username'javascript_on'SMPREF_JS_ON);
  438.         else {
  439.             setPref($data_dir$username'javascript_on'SMPREF_JS_OFF);
  440.         }
  441.     else {
  442.         setPref($data_dir$username'javascript_on'$new_javascript_setting);
  443.     }
  444. }
  445.  
  446. function save_option_reply_prefix($option{
  447.     global $data_dir$username$new_javascript_setting;
  448.  
  449.     // save as "NONE" if it was blanked out
  450.     //
  451.     if (empty($option->new_value)) $option->new_value 'NONE';
  452.  
  453.  
  454.     // Save the option like normal.
  455.     //
  456.     save_option($option);
  457.  
  458. }

Documentation generated on Mon, 13 Jan 2020 04:24:33 +0100 by phpDocumentor 1.4.3