From 974c80f9390e51ce01947dafd8f07d96a6ff292c Mon Sep 17 00:00:00 2001
From: M Parker <mparker17@536298.no-reply.drupal.org>
Date: Mon, 21 Jul 2014 08:12:40 -0400
Subject: [PATCH] 2283675-8

---
 core/includes/form.inc | 44 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 35 insertions(+), 9 deletions(-)

diff --git a/core/includes/form.inc b/core/includes/form.inc
index de7bc39..84f4b14 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -849,17 +849,43 @@ function template_preprocess_select(&$variables) {
 }
 
 /**
- * Converts a select form element's options array into HTML.
+ * Converts an array of options into HTML, for use in select list form elements.
  *
- * @param $element
- *   An associative array containing the properties of the element.
- * @param $choices
- *   Mixed: Either an associative array of items to list as choices, or an
- *   object with an 'option' member that is an associative array. This
- *   parameter is only used internally and should not be passed.
+ * This function calls itself recursively to obtain the values for each optgroup
+ * within the list of options and when the function encounters an object with
+ * an 'options' property inside $element['#options'].
  *
- * @return
- *   An HTML string of options for the select form element.
+ * @param array $element
+ *   An associative array containing the following key-value pairs:
+ *   - #multiple: Optional Boolean indicating if the user may select more than
+ *     one item.
+ *   - #options: A associative array of options to render as HTML. Each array
+ *     value can be a string, array, or an object with an 'option' property:
+ *     - A string or integer key mapped to a translated string is interpreted as
+ *     a single HTML option element. Do not use placeholders to sanitize data:
+ *     doing so will lead to double-escaping. Note that the key will be visible
+ *     in the HTML and could be modified by malicious users, so don't put
+ *     sensitive information in it and sanitize it before use.
+ *     - A translated string key mapped to an array indicates a group of
+ *     options. The translated string is used as the label attribute for the
+ *     optgroup. Do not use placeholders to sanitize data: doing so will lead to
+ *     double-escaping. The array should contain the options you wish to group.
+ *     Groups are output as HTML optgroup elements.
+ *     - If the function encounters a string or integer key mapped to an object
+ *     with an 'option' property, the key is ignored, the contents of the
+ *     option property are interpreted as $element['#options'], and the
+ *     resulting HTML is added to the output.
+ *   - #value: Optional integer, string, or array representing which option(s)
+ *     to pre-select when the list is first displayed. The integer or string
+ *     must match the key of an option in the '#options' list. If '#multiple' is
+ *     TRUE, this can be an array of integers or strings.
+ * @param array|null $choices
+ *   (optional) Either an associative array of options in the same format as
+ *   $element['options'] above, or NULL. This parameter is only used internally
+ *   and is not intended to be passed in to the initial function call.
+ *
+ * @return string
+ *   An HTML string of options and optgroups for use in a select form element.
  */
 function form_select_options($element, $choices = NULL) {
   if (!isset($choices)) {
-- 
2.0.0

