[prev in list] [next in list] [prev in thread] [next in thread] 

List:       squirrelmail-cvs
Subject:    [SM-CVS] SF.net SVN: squirrelmail:[14393] trunk/squirrelmail
From:       pdontthink () users ! sourceforge ! net
Date:       2013-10-22 15:49:27
Message-ID: E1VYeD4-0004Qd-Ss () sfs-ml-1 ! v29 ! ch3 ! sourceforge ! com
[Download RAW message or body]

Revision: 14393
          http://sourceforge.net/p/squirrelmail/code/14393
Author:   pdontthink
Date:     2013-10-22 15:49:26 +0000 (Tue, 22 Oct 2013)
Log Message:
-----------
Add associative edit list option widget with optional folder list selector for \
values; Minor fixes for non-associative edit list widget

Modified Paths:
--------------
    trunk/squirrelmail/doc/ChangeLog
    trunk/squirrelmail/functions/options.php
    trunk/squirrelmail/include/constants.php
    trunk/squirrelmail/templates/default/edit_list_widget.tpl
    trunk/squirrelmail/templates/default/edit_list_widget_list_style.tpl

Added Paths:
-----------
    trunk/squirrelmail/templates/default/edit_list_associative_widget.tpl
    trunk/squirrelmail/templates/default/edit_list_associative_widget_list_style.tpl

Modified: trunk/squirrelmail/doc/ChangeLog
===================================================================
--- trunk/squirrelmail/doc/ChangeLog	2013-10-22 14:40:19 UTC (rev 14392)
+++ trunk/squirrelmail/doc/ChangeLog	2013-10-22 15:49:26 UTC (rev 14393)
@@ -376,6 +376,8 @@
   - Improvements for PHP 5.4 compatibility.
   - Added option that allows users to have replies to their own
     messages sent to the recipient of the previous message (#3520988).
+  - Added associative edit list option widget, with optional folder
+    list selector for values
 
 Version 1.5.1 (branched on 2006-02-12)
 --------------------------------------

Modified: trunk/squirrelmail/functions/options.php
===================================================================
--- trunk/squirrelmail/functions/options.php	2013-10-22 14:40:19 UTC (rev 14392)
+++ trunk/squirrelmail/functions/options.php	2013-10-22 15:49:26 UTC (rev 14393)
@@ -104,6 +104,19 @@
      */
     var $use_delete_widget;
     /**
+     * associative array, treated the same as $possible_values
+     * (see its documentation below), but usually expected to
+     * have its first value contain a list of IMAP folders, an
+     * array itself in the format as passed back by
+     * sqimap_mailbox_list(). Used to display folder selector
+     * for possible values of an associative edit list option
+     * widget
+     *
+     * @since 1.5.2
+     * @var array
+     */
+    var $poss_value_folders;
+    /**
      * text displayed to the user
      *
      * Used with SMOPT_TYPE_COMMENT options
@@ -158,7 +171,10 @@
     var $htmlencoded=false;
     /**
      * Controls folder list limits in SMOPT_TYPE_FLDRLIST and
-     * SMOPT_TYPE_FLDRLIST_MULTI widgets.
+     * SMOPT_TYPE_FLDRLIST_MULTI widgets as well as the optional
+     * embedded folder lists provided for inputting values for
+     * the SMOPT_TYPE_EDIT_LIST and SMOPT_TYPE_EDIT_LIST_ASSOCIATIVE
+     * :idgets.
      * See $flag argument in sqimap_mailbox_option_list() function.
      * @var string
      * @since 1.5.1
@@ -195,6 +211,7 @@
         $this->layout_type = 0;
         $this->use_add_widget = TRUE;
         $this->use_delete_widget = TRUE;
+        $this->poss_value_folders = '';
         $this->aExtraAttribs = array();
         $this->post_script = '';
 
@@ -227,7 +244,8 @@
     function is_multiple_valued() {
         return ($this->type == SMOPT_TYPE_FLDRLIST_MULTI
              || $this->type == SMOPT_TYPE_STRLIST_MULTI
-             || $this->type == SMOPT_TYPE_EDIT_LIST);
+             || $this->type == SMOPT_TYPE_EDIT_LIST
+             || $this->type == SMOPT_TYPE_EDIT_LIST_ASSOCIATIVE);
     }
 
     /**
@@ -296,6 +314,13 @@
         $this->use_delete_widget = $use_delete_widget;
     }
 
+    /* Set the "poss value folders" value for this option.
+       See the associative edit list widget, which uses this
+       to offer folder list selection for the values */
+    function setPossValueFolders($poss_value_folders) {
+        $this->poss_value_folders = $poss_value_folders;
+    }
+
     /**
      * Set the layout type for this option.
      * @param int $layout_type
@@ -406,6 +431,9 @@
             case SMOPT_TYPE_EDIT_LIST:
                 $result = $this->createWidget_EditList();
                 break;
+            case SMOPT_TYPE_EDIT_LIST_ASSOCIATIVE:
+                $result = $this->createWidget_EditListAssociative();
+                break;
             case SMOPT_TYPE_STRLIST_MULTI:
                 $result = $this->createWidget_StrList(TRUE);
                 break;
@@ -725,7 +753,7 @@
     }
 
     /**
-     * Creates an edit list
+     * Creates a (non-associative) edit list
      *
      * Note that multiple layout types are supported for this widget.
      * $this->layout_type must be one of the SMOPT_EDIT_LIST_LAYOUT_*
@@ -769,7 +797,9 @@
 
         $oTemplate->assign('trailing_text', $this->trailing_text);
         $oTemplate->assign('possible_values', $this->possible_values);
-        $oTemplate->assign('select_widget', addSelect('new_' . $this->name, \
$this->possible_values, $this->value, FALSE, !checkForJavascript() ? \
$this->aExtraAttribs : array_merge(array('onchange' => 'if (typeof(window.addinput_' \
. $this->name . ') == \'undefined\') { var f = document.forms.length; var i = 0; var \
pos = -1; while( pos == -1 && i < f ) { var e = document.forms[i].elements.length; \
var j = 0; while( pos == -1 && j < e ) { if ( document.forms[i].elements[j].type == \
\'text\' && document.forms[i].elements[j].name == \'add_' . $this->name . '\' ) { pos \
= j; } j++; } i++; } if( pos >= 0 ) { window.addinput_' . $this->name . ' = \
document.forms[i-1].elements[pos]; } } for (x = 0; x < this.length; x++) { if \
(this.options[x].selected) { window.addinput_' . $this->name . '.value = \
this.options[x].value; break; } }'), $this->aExtraAttribs), TRUE, $height)); +        \
$oTemplate->assign('current_value', $this->value); +        \
$oTemplate->assign('select_widget', addSelect('new_' . $this->name, \
$this->possible_values, $this->value, FALSE, !checkForJavascript() ? \
$this->aExtraAttribs : array_merge(array('onchange' => 'if (typeof(window.addinput_' \
. $this->name . ') == \'undefined\') { var f = document.forms.length; var i = 0; var \
pos = -1; while( pos == -1 && i < f ) { var e = document.forms[i].elements.length; \
var j = 0; while( pos == -1 && j < e ) { if ( document.forms[i].elements[j].type == \
\'text\' && document.forms[i].elements[j].name == \'add_' . $this->name . '\' ) { pos \
= j; i=f-1; j=e-1; } j++; } i++; } if( pos >= 0 ) { window.addinput_' . $this->name . \
' = document.forms[i-1].elements[pos]; } } for (x = 0; x < this.length; x++) { if \
(this.options[x].selected) { window.addinput_' . $this->name . '.value = \
this.options[x].text; break; } }'), $this->aExtraAttribs), TRUE, $height)); +// NOTE: \
i=f-1; j=e-1 is in lieu of break 2  $oTemplate->assign('checkbox_widget', \
addCheckBox('delete_' . $this->name, FALSE, SMPREF_YES, array_merge(array('id' => \
'delete_' . $this->name), $this->aExtraAttribs)));  $oTemplate->assign('name', \
$this->name);  
@@ -779,12 +809,86 @@
             case SMOPT_EDIT_LIST_LAYOUT_LIST:
                 return $oTemplate->fetch('edit_list_widget_list_style.tpl');
             default:
-                error_box(sprintf(_("Edit List Layout Type '%s' Not Found"), \
$layout_type)); +                error_box(sprintf(_("Edit List Layout Type '%s' Not \
Found"), $this->layout_type));  }
 
     }
 
     /**
+     * Creates an associative edit list
+     *
+     * Note that multiple layout types are supported for this widget.
+     * $this->layout_type must be one of the SMOPT_EDIT_LIST_LAYOUT_*
+     * constants.
+     *
+     * @return string html formated list of edit fields and
+     *                their associated controls
+     */
+    function createWidget_EditListAssociative() {
+
+        global $oTemplate;
+
+        switch ($this->size) {
+            case SMOPT_SIZE_TINY:
+                $height = 3;
+                break;
+            case SMOPT_SIZE_SMALL:
+                $height = 8;
+                break;
+            case SMOPT_SIZE_MEDIUM:
+                $height = 15;
+                break;
+            case SMOPT_SIZE_LARGE:
+                $height = 25;
+                break;
+            case SMOPT_SIZE_HUGE:
+                $height = 40;
+                break;
+            case SMOPT_SIZE_NORMAL:
+            default:
+                $height = 5;
+        }
+
+
+        // ensure correct format of current value(s)
+        //
+        if (empty($this->possible_values)) $this->possible_values = array();
+        if (!is_array($this->possible_values)) $this->possible_values = \
array($this->possible_values); +
+
+        $oTemplate->assign('name', $this->name);
+        $oTemplate->assign('current_value', $this->value);
+        $oTemplate->assign('possible_values', $this->possible_values);
+        $oTemplate->assign('poss_value_folders', $this->poss_value_folders);
+        $oTemplate->assign('folder_filter', $this->folder_filter);
+
+        $oTemplate->assign('use_input_widget', $this->use_add_widget);
+        $oTemplate->assign('use_delete_widget', $this->use_delete_widget);
+
+        $oTemplate->assign('checkbox_widget', addCheckBox('delete_' . $this->name, \
FALSE, SMPREF_YES, array_merge(array('id' => 'delete_' . $this->name), \
$this->aExtraAttribs))); +
+//FIXME: $this->aExtraAttribs probably should only be used in one place
+        $oTemplate->assign('input_key_widget', addInput('add_' . $this->name . \
'_key', '', 22, 0, $this->aExtraAttribs)); +        \
$oTemplate->assign('input_value_widget', addInput('add_' . $this->name . '_value', \
'', 12, 0, $this->aExtraAttribs)); +
+        $oTemplate->assign('select_height', $height);
+
+        $oTemplate->assign('aAttribs', $this->aExtraAttribs);
+
+        $oTemplate->assign('trailing_text', $this->trailing_text);
+
+        switch ($this->layout_type) {
+            case SMOPT_EDIT_LIST_LAYOUT_SELECT:
+                return $oTemplate->fetch('edit_list_associative_widget.tpl');
+            case SMOPT_EDIT_LIST_LAYOUT_LIST:
+                return \
$oTemplate->fetch('edit_list_associative_widget_list_style.tpl'); +            \
default: +                error_box(sprintf(_("Associative Edit List Layout Type '%s' \
Not Found"), $this->layout_type)); +        }
+
+    }
+
+    /**
      * Creates a submit button
      *
      * @return string html formated submit button widget
@@ -811,7 +915,9 @@
 
         // edit lists have a lot going on, so we'll always process them
         //
-        if ($this->type == SMOPT_TYPE_EDIT_LIST) return TRUE;
+        if ($this->type == SMOPT_TYPE_EDIT_LIST
+         || $this->type == SMOPT_TYPE_EDIT_LIST_ASSOCIATIVE)
+            return TRUE;
 
         return ($this->value != $this->new_value);
     }
@@ -880,6 +986,51 @@
         //
         setPref($data_dir, $username, $option->name, \
serialize($option->possible_values));  
+    // associative edit lists are handled similar to
+    // non-associative ones
+    //
+    } else if ($option->type == SMOPT_TYPE_EDIT_LIST_ASSOCIATIVE) {
+
+        if (empty($option->possible_values)) $option->possible_values = array();
+        if (!is_array($option->possible_values)) $option->possible_values = \
array($option->possible_values); +
+        // add element if given
+        //
+        $new_element_key = '';
+        $new_element_value = '';
+        $retrieve_key = sqGetGlobalVar('add_' . $option->name . '_key', \
$new_element_key, SQ_POST); +        $retrieve_value = sqGetGlobalVar('add_' . \
$option->name . '_value', $new_element_value, SQ_POST); +
+        if ((isset($option->use_add_widget) && $option->use_add_widget)
+         && ($retrieve_key || $retrieve_value)) {
+            $new_element_key = trim($new_element_key);
+            $new_element_value = trim($new_element_value);
+            if ($option->poss_value_folders && empty($new_element_key))
+                $new_element_value = '';
+            if (!empty($new_element_key) || !empty($new_element_value)) {
+                if (empty($new_element_key)) $new_element_key = '0';
+                $option->possible_values[$new_element_key] = $new_element_value;
+            }
+        }
+
+        // delete selected elements if needed
+        //
+        if ((isset($option->use_delete_widget) && $option->use_delete_widget)
+         && is_array($option->new_value)
+         && sqGetGlobalVar('delete_' . $option->name, $ignore, SQ_POST)) {
+
+            if ($option->layout_type == SMOPT_EDIT_LIST_LAYOUT_SELECT) {
+                foreach ($option->new_value as $key)
+                    unset($option->possible_values[urldecode($key)]);
+            }
+            else
+                $option->possible_values = array_diff($option->possible_values, \
$option->new_value); +        }
+
+        // save full list (stored in "possible_values")
+        //
+        setPref($data_dir, $username, $option->name, \
serialize($option->possible_values)); +
     // Certain option types need to be serialized because
     // they are not scalar
     //
@@ -999,6 +1150,11 @@
                 $next_option->setNoText($optset['no_text']);
             }
 
+            /* If provided, set the poss_value_folders value for this option. */
+            if (isset($optset['poss_value_folders'])) {
+                $next_option->setPossValueFolders($optset['poss_value_folders']);
+            }
+
             /* If provided, set the layout type for this option. */
             if (isset($optset['layout_type'])) {
                 $next_option->setLayoutType($optset['layout_type']);

Modified: trunk/squirrelmail/include/constants.php
===================================================================
--- trunk/squirrelmail/include/constants.php	2013-10-22 14:40:19 UTC (rev 14392)
+++ trunk/squirrelmail/include/constants.php	2013-10-22 15:49:26 UTC (rev 14393)
@@ -231,13 +231,14 @@
 define('SMOPT_TYPE_FLDRLIST', 8);
 define('SMOPT_TYPE_FLDRLIST_MULTI', 9);
 define('SMOPT_TYPE_EDIT_LIST', 10);
-define('SMOPT_TYPE_STRLIST_MULTI', 11);
-define('SMOPT_TYPE_BOOLEAN_CHECKBOX', 12);
-define('SMOPT_TYPE_BOOLEAN_RADIO', 13);
-define('SMOPT_TYPE_STRLIST_RADIO', 14);
-define('SMOPT_TYPE_SUBMIT', 15);
-define('SMOPT_TYPE_INFO', 16);
-define('SMOPT_TYPE_PASSWORD', 17);
+define('SMOPT_TYPE_EDIT_LIST_ASSOCIATIVE', 11);
+define('SMOPT_TYPE_STRLIST_MULTI', 12);
+define('SMOPT_TYPE_BOOLEAN_CHECKBOX', 13);
+define('SMOPT_TYPE_BOOLEAN_RADIO', 14);
+define('SMOPT_TYPE_STRLIST_RADIO', 15);
+define('SMOPT_TYPE_SUBMIT', 16);
+define('SMOPT_TYPE_INFO', 17);
+define('SMOPT_TYPE_PASSWORD', 18);
 
 // Define constants for the layout scheme for edit lists
 define('SMOPT_EDIT_LIST_LAYOUT_LIST', 0);

Added: trunk/squirrelmail/templates/default/edit_list_associative_widget.tpl
===================================================================
--- trunk/squirrelmail/templates/default/edit_list_associative_widget.tpl	            \
                (rev 0)
+++ trunk/squirrelmail/templates/default/edit_list_associative_widget.tpl	2013-10-22 \
15:49:26 UTC (rev 14393) @@ -0,0 +1,173 @@
+<?php
+
+/**
+  * edit_list_associative_widget.tpl
+  *
+  * Template for constructing an associative edit list.
+  *
+  * The following variables are available in this template:
+  *
+  * string   $name               The name of the edit list
+  * mixed    $current_value      The currently selected value(s)
+  * array    $possible_values    The original list of options in the edit list
+  * array    $poss_value_folders When not empty, contains a list of names
+  *                              to be used to populate a drop-down selection
+  *                              list for the value input (instead of the
+  *                              $input_value_widget textual input). If any
+  *                              of the values is an array, it is assumed to
+  *                              be an IMAP folder list in the format given
+  *                              by sqimap_mailbox_list()
+  * string   $folder_filter      Controls the folders listed by
+  *                              $poss_value_folders. See $flag argument in
+  *                              the sqimap_mailbox_option_list() function
+  * boolean  $use_input_widget   Whether or not to present the key/value inputs
+  * boolean  $use_delete_widget  Whether or not to present the $checkbox_widget
+  * string   $checkbox_widget    A preconstructed checkbox used for deleting
+  *                              elements from the edit list
+  * string   $input_key_widget   A preconstructed input text box used
+  *                              for adding new element keys to the edit list
+  * string   $input_value_widget A preconstructed input text box used
+  *                              for adding new element values to the edit list
+  * int      $select_height      The size of the edit list select widget
+FIXME: which inputs to use $aAttribs for? currently only the <select> tag
+  * array    $aAttribs           Any extra attributes: an associative array,
+  *                              where keys are attribute names, and values
+  *                              (which are optional and might be null)
+  *                              should be placed in double quotes as attribute
+  *                              values (optional; may not be present)
+  * string   $trailing_text      Any text given by the caller to be displayed
+  *                              after the edit list input
+  *
+  * @copyright 1999-2013 The SquirrelMail Project Team
+  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+  * @version $Id$
+  * @package squirrelmail
+  * @subpackage templates
+  */
+
+
+// retrieve the template vars
+//
+extract($t);
+
+
+// Construct the add key/value inputs
+//
+//FIXME implement poss_key_folders here? probably not worth the trouble, is there a \
use case? +if ($use_input_widget) {
+    echo _("Add") . '&nbsp;' . $input_key_widget . ' ';
+
+// FIXME: shall we allow these "poss value folders" (folder list selection for edit \
list values) for NON-Associative EDIT_LIST widgets? +    if ($poss_value_folders) {
+        echo '<select name="add_' . $name . '_value">';
+
+        // Add each possible value to the select list
+        foreach ($poss_value_folders as $real_value => $disp_value) {
+
+            if ( is_array($disp_value) ) {
+                // For folder list, we passed in the array of boxes
+                $new_option = sqimap_mailbox_option_list(0, 0, 0, $disp_value, \
$folder_filter); +
+            } else {
+                // Start the next new option string
+                $new_option = '<option value="' . \
sm_encode_html_special_chars($real_value) . '"'; +
+                // Add the display value to our option string
+                $new_option .= '>' . sm_encode_html_special_chars($disp_value) . \
"</option>\n"; +            }
+            // And add the new option string to our select tag
+            echo $new_option;
+        }
+        // Close the select tag and return our happy result
+        echo '</select>';
+    }
+    else
+        echo $input_value_widget . '<br />';
+}
+
+
+// Construct the select input showing all current values in the list
+// 
+echo '<select name="new_' . $name . '[]" multiple="multiple" size="' . \
$select_height . '"'; +
+$onchange = '';
+foreach ($aAttribs as $key => $value) {
+    if (strtolower($key) == 'onchange' && $javascript_on) {
+        $onchange = $value;
+        continue;
+    }
+    echo ' ' . $key . (is_null($value) ? '' : '="' . $value . '"');
+}
+
+// FIXME: this can be fooled by having the delimiter " = " in a key value - in \
general, we may want to use a different delimiter other than " = " +if \
($javascript_on) { +    echo ' onchange="';
+    if (!empty($onchange)) echo $onchange;
+    echo ' if (typeof(window.addinput_key_' . $name . ') == \'undefined\') { var f = \
document.forms.length; var i = 0; var pos = -1; while( pos == -1 && i < f ) { var e = \
document.forms[i].elements.length; var j = 0; while( pos == -1 && j < e ) { if ( \
document.forms[i].elements[j].type == \'text\' && document.forms[i].elements[j].name \
== \'add_' . $name . '_key\' ) { pos = j; j=e-1; i=f-1; } j++; } i++; } if( pos >= 0 \
) { window.addinput_key_' . $name . ' = document.forms[i-1].elements[pos]; } } if \
(typeof(window.addinput_value_' . $name . ') == \'undefined\') { var f = \
document.forms.length; var i = 0; var pos = -1; while( pos == -1 && i < f ) { var e = \
document.forms[i].elements.length; var j = 0; while( pos == -1 && j < e ) { if ( \
document.forms[i].elements[j].type == \'text\' && document.forms[i].elements[j].name \
== \'add_' . $name . '_value\' ) { pos = j; j=e-1; i=f-1; } j++; } i++; } if( pos >= \
0 ) { window.addinput_value_' . $name . ' = document.forms[i-1].elements[pos]; } } \
for (x = 0; x < this.length; x++) { if (this.options[x].selected) { pos = \
this.options[x].text.indexOf(\' = \'); if (pos > -1) { window.addinput_key_' . $name \
. '.value = this.options[x].text.substr(0, pos); if (typeof(window.addinput_value_' . \
$name . ') != \'undefined\') window.addinput_value_' . $name . '.value = \
this.options[x].text.substr(pos + 3); } break; } }"'; +// NOTE: i=f-1; j=e-1 is in \
lieu of break 2 +}
+
+echo ">\n";
+
+
+if (is_array($current_value))
+    $selected = $current_value;
+else
+    $selected = array($current_value);
+
+
+// Add each possible value to the select list.
+//
+foreach ($possible_values as $key => $value) {
+
+    // Start the next new option string.
+    //
+    echo '<option value="' . urlencode($key) . '"';
+
+    // having a selected item in the edit list doesn't have
+    // any meaning, but maybe someone will think of a way to
+    // use it, so we might as well put the code in
+    //
+    foreach ($selected as $default) {
+        if ((string)$default == (string)$key) {
+            echo ' selected="selected"';
+            break;
+        }
+    }
+
+    // Add the display value to our option string.
+    //
+    echo '>' . sm_encode_html_special_chars($key) . ' = ';
+
+    if ($poss_value_folders) {
+        foreach ($poss_value_folders as $real_value => $disp_value) {
+            if ( is_array($disp_value) ) {
+                foreach ($disp_value as $folder_info) {
+                    if ($value == $folder_info['unformatted']) {
+                        echo sm_encode_html_special_chars(str_replace('&nbsp;', '', \
$folder_info['formatted'])); +                        break 2;
+                    }
+                }
+            }
+            else
+                if ($value == $disp_value) {
+                    echo sm_encode_html_special_chars($disp_value);
+                    break;
+                }
+        }
+    }
+    else
+        echo sm_encode_html_special_chars($value);
+
+    echo "</option>\n";
+
+}
+
+echo '</select>';
+
+
+// Construct the delete input
+// 
+if (!empty($possible_values) && $use_delete_widget)
+   echo '<br />' . $checkbox_widget . '&nbsp;<label for="delete_' . $name . '">' 
+      . _("Delete Selected") . '</label>';


Property changes on: \
trunk/squirrelmail/templates/default/edit_list_associative_widget.tpl \
                ___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: trunk/squirrelmail/templates/default/edit_list_associative_widget_list_style.tpl
 ===================================================================
--- trunk/squirrelmail/templates/default/edit_list_associative_widget_list_style.tpl	 \
                (rev 0)
+++ trunk/squirrelmail/templates/default/edit_list_associative_widget_list_style.tpl	2013-10-22 \
15:49:26 UTC (rev 14393) @@ -0,0 +1,159 @@
+<?php
+
+/**
+  * edit_list_associative_widget_list_style.tpl
+  *
+  * Template for constructing an associative edit list using a list-format layout.
+  *
+  * The following variables are available in this template:
+  *
+  * string   $name               The name of the edit list
+  * mixed    $current_value      The currently selected value(s)
+  * array    $possible_values    The original list of options in the edit list
+  * array    $poss_value_folders When not empty, contains a list of names
+  *                              to be used to populate a drop-down selection
+  *                              list for the value input (instead of the
+  *                              $input_value_widget textual input). If any
+  *                              of the values is an array, it is assumed to
+  *                              be an IMAP folder list in the format given
+  *                              by sqimap_mailbox_list()
+  * string   $folder_filter      Controls the folders listed by
+  *                              $poss_value_folders. See $flag argument in
+  *                              the sqimap_mailbox_option_list() function
+  * boolean  $use_input_widget   Whether or not to present the key/value inputs
+  * boolean  $use_delete_widget  Whether or not to present the $checkbox_widget
+  * string   $checkbox_widget    A preconstructed checkbox used for deleting
+  *                              elements from the edit list
+  * string   $input_key_widget   A preconstructed input text box used
+  *                              for adding new element keys to the edit list
+  * string   $input_value_widget A preconstructed input text box used
+  *                              for adding new element values to the edit list
+  * int      $select_height      The size of the edit list select widget
+FIXME: which inputs to use $aAttribs for? currently only the <select> tag
+  * array    $aAttribs           Any extra attributes: an associative array,
+  *                              where keys are attribute names, and values
+  *                              (which are optional and might be null)
+  *                              should be placed in double quotes as attribute
+  *                              values (optional; may not be present)
+  * string   $trailing_text      Any text given by the caller to be displayed
+  *                              after the edit list input
+  *
+  * @copyright 1999-2013 The SquirrelMail Project Team
+  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+  * @version $Id$
+  * @package squirrelmail
+  * @subpackage templates
+  */
+
+
+// retrieve the template vars
+//
+extract($t);
+
+
+// Construct the add key/value inputs
+//
+echo '<table class="table2" cellspacing="0"><tr><td>';
+if ($use_input_widget) {
+//FIXME implement poss_key_folders here? probably not worth the trouble, is there a \
use case? +    echo _("Add") . '&nbsp;' . $input_key_widget . ' ';
+
+// FIXME: shall we allow these "poss value folders" (folder list selection for edit \
list values) for NON-Associative EDIT_LIST widgets? +    if ($poss_value_folders) {
+        echo '<select name="add_' . $name . '_value">';
+
+        // Add each possible value to the select list
+        foreach ($poss_value_folders as $real_value => $disp_value) {
+
+            if ( is_array($disp_value) ) {
+                // For folder list, we passed in the array of boxes
+                $new_option = sqimap_mailbox_option_list(0, 0, 0, $disp_value, \
$folder_filter); +
+            } else {
+                // Start the next new option string
+                $new_option = '<option value="' . \
sm_encode_html_special_chars($real_value) . '"'; +
+                // Add the display value to our option string
+                $new_option .= '>' . sm_encode_html_special_chars($disp_value) . \
"</option>\n"; +            }
+            // And add the new option string to our select tag
+            echo $new_option;
+        }
+        // Close the select tag and return our happy result
+        echo '</select>';
+    }
+    else
+        echo $input_value_widget . '<br />';
+}
+
+
+// Construct the select input showing all current values in the list
+//
+echo '<table class="table_messageList" cellspacing="0">';
+
+$class = 'even';
+$index = 0;
+
+if (is_array($current_value))
+    $selected = $current_value;
+else
+    $selected = array($current_value);
+
+foreach ($possible_values as $key => $value) {
+
+    if ($class == 'even') $class = 'odd';
+    else $class = 'even';
+
+    echo '<tr class="' . $class . '">'
+       . '<td class="col_check" style="width:1%"><input type="checkbox" name="new_' \
. $name . '[' . urlencode($key) . ']" id="' . $name . '_list_item_' . urlencode($key) \
. '" value="' . sm_encode_html_special_chars($value); +
+    // having a selected item in the edit list doesn't have
+    // any meaning, but maybe someone will think of a way to
+    // use it, so we might as well put the code in
+    //
+    foreach ($selected as $default) {
+        if ((string)$default == (string)$key) {
+            echo '" checked="checked';
+            break;
+        }
+    }
+
+    echo '"></td>'
+       . '<td><label for="' . $name . '_list_item_' . urlencode($key) . '">' . \
sm_encode_html_special_chars($key) . ' = '; +
+    if ($poss_value_folders) {
+        foreach ($poss_value_folders as $real_value => $disp_value) {
+            if ( is_array($disp_value) ) {
+                foreach ($disp_value as $folder_info) {
+                    if ($value == $folder_info['unformatted']) {
+                        echo sm_encode_html_special_chars(str_replace('&nbsp;', '', \
$folder_info['formatted'])); +                        break 2;
+                    }
+                }
+            }
+            else
+                if ($value == $disp_value) {
+                    echo sm_encode_html_special_chars($disp_value);
+                    break;
+                }
+        }
+    }
+    else
+        echo sm_encode_html_special_chars($value);
+
+    echo '</label></td>'
+             . "</tr>\n";
+
+}
+
+echo '</table>';
+
+
+// Construct the delete input
+//
+if (!empty($possible_values) && $use_delete_widget)
+    echo $checkbox_widget . '&nbsp;<label for="delete_' . $name . '">'
+       . _("Delete Selected") . '</label>';
+
+
+echo '</td></tr></table>';


Property changes on: \
trunk/squirrelmail/templates/default/edit_list_associative_widget_list_style.tpl \
                ___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Modified: trunk/squirrelmail/templates/default/edit_list_widget.tpl
===================================================================
--- trunk/squirrelmail/templates/default/edit_list_widget.tpl	2013-10-22 14:40:19 UTC \
                (rev 14392)
+++ trunk/squirrelmail/templates/default/edit_list_widget.tpl	2013-10-22 15:49:26 UTC \
(rev 14393) @@ -21,6 +21,7 @@
   * array    $possible_values   The original list of options in the edit list,
   *                             for use constructing layouts alternative to
   *                             the select widget
+  * mixed    $current_value     The currently selected value(s)
   *
   * @copyright 1999-2013 The SquirrelMail Project Team
   * @license http://opensource.org/licenses/gpl-license.php GNU Public License

Modified: trunk/squirrelmail/templates/default/edit_list_widget_list_style.tpl
===================================================================
--- trunk/squirrelmail/templates/default/edit_list_widget_list_style.tpl	2013-10-22 \
                14:40:19 UTC (rev 14392)
+++ trunk/squirrelmail/templates/default/edit_list_widget_list_style.tpl	2013-10-22 \
15:49:26 UTC (rev 14393) @@ -21,6 +21,7 @@
   * array    $possible_values   The original list of options in the edit list,
   *                             for use constructing layouts alternative to
   *                             the select widget
+  * mixed    $current_value     The currently selected value(s)
   *
   * @copyright 1999-2013 The SquirrelMail Project Team
   * @license http://opensource.org/licenses/gpl-license.php GNU Public License
@@ -45,13 +46,31 @@
 $class = 'even';
 $index = 0;
 
+if (is_array($current_value))
+    $selected = $current_value;
+else
+    $selected = array($current_value);
+
 foreach ($possible_values as $key => $value) {
 
     if ($class == 'even') $class = 'odd';
     else $class = 'even';
 
     echo '<tr class="' . $class . '">'
-       . '<td class="col_check" style="width:1%"><input type="checkbox" name="new_' \
. $name . '[' . ($index++) . ']" id="' . $name . '_list_item_' . $key . '" value="' . \
$value . '"></td>' +       . '<td class="col_check" style="width:1%"><input \
type="checkbox" name="new_' . $name . '[' . ($index++) . ']" id="' . $name . \
'_list_item_' . $key . '" value="' . $value; +
+    // having a selected item in the edit list doesn't have
+    // any meaning, but maybe someone will think of a way to
+    // use it, so we might as well put the code in
+    //
+    foreach ($selected as $default) {
+        if ((string)$default == (string)$value) {
+            echo '" checked="checked';
+            break;
+        }
+    }
+
+    echo '"></td>'
        . '<td><label for="' . $name . '_list_item_' . $key . '">' . $value . \
                '</label></td>'
        . "</tr>\n";
     

This was sent by the SourceForge.net collaborative development platform, the world's \
largest Open Source development site.


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk
-----
squirrelmail-cvs mailing list
List address: squirrelmail-cvs@lists.sourceforge.net
List info (subscribe/unsubscribe/change options): \
                https://lists.sourceforge.net/lists/listinfo/squirrelmail-cvs
Repository: http://squirrelmail.org/svn


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic