You are here

function _commerce_webform_get_selected_products_from_input_values in Commerce Webform 7.2

Same name and namespace in other branches
  1. 8 productfield.inc \_commerce_webform_get_selected_products_from_input_values()

Helper function for conditional callbacks.

The input value format to a conditional callback changes depending on the configuration of the component. This function normalises the input to an array of selected product ids and quantities.

Parameters

array $input_values: This is either: 1. an array with one element which is an array of product ids 2. an array where each value is a json blob object with the following properties: product_id - int id quantity - int order_id - FALSE This occurs after web form submission when the data has been turned into a JSON blob. 3. an array of 2 elements where the first element is the product id and the second is the quantity 4. an array with a single element with key 'multiple_product_quantities' whose values are an array with keys as the product ids and values are the quantities

This table describes the web form component options and which of the values structures is used :- single | no quantity | 1 product | radio - 3 single | no quantity | 2 product | radio - 3 single | quantity | 1 product | radio - 3 single | quantity | 2 products | radio - 3 multiple | no quantity | 1 product | radio - 1 multiple | no quantity | 2 products | radio - 1 multiple | quantity | 1 product | radio - 5 multiple | quantity | 2 product | radio - 5 single | no quantity | 1 product | list - 3 single | no quantity | 2 products | list - 3 single | quantity | 1 product | list - 3 single | quantity | 2 products | list - 3 multiple | no quantity | 1 product | list - 1 multiple | no quantity | 2 products | list - 1 multiple | quantity | 1 product | list - 5 multiple | quantity | 2 product | list - 5

Return value

array Keys are product ids, values are quantities.

3 calls to _commerce_webform_get_selected_products_from_input_values()
webform_conditional_operator_product_is in ./productfield.inc
Webform conditionals comparison callback for product fields.
webform_conditional_operator_product_is_of_type in ./productfield.inc
Webform conditionals comparison callback for product fields.
_commerce_webform_get_total_quantity_from_input_values in ./productfield.inc
Get the total quantity selected from input values.

File

./productfield.inc, line 1122

Code

function _commerce_webform_get_selected_products_from_input_values(array $input_values = array()) {
  if (empty($input_values)) {
    return array();
  }
  if (!empty($input_values['multiple_product_quantities'])) {

    // Situation 4 - product ids and quantities are stored in 'multiple_product_quantities'.
    return $input_values['multiple_product_quantities'];
  }
  $selected_products = array();
  if (is_array($input_values[0])) {

    // Situation 1 - singular list of product ids stored in array element 0.
    foreach ($input_values[0] as $product_id) {
      if ($product_id > 0) {
        $selected_products[$product_id] = 1;
      }
    }
  }
  elseif (!empty($input_values[0]) && !is_numeric($input_values[0]) && !is_null(json_decode($input_values[0]))) {

    // Situation 2 - each element of input values is a json encoded string.
    foreach ($input_values as $json_string) {
      $json_object = json_decode($json_string);
      $selected_products[$json_object->product_id] = $json_object->quantity;
    }
  }
  else {

    // Situation 3 - element 0 is the product id, element 1 is the quantity.
    $selected_products[$input_values[0]] = $input_values[1];
  }
  return $selected_products;
}