more module updates
This commit is contained in:
		@@ -8,7 +8,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Development sponsored by Riot Games.
 | 
			
		||||
 *
 | 
			
		||||
 * @author German Martin <gmartin.prg@gmail.com>
 | 
			
		||||
 * @author German Martin <gmartin.php@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -4,13 +4,12 @@
 | 
			
		||||
 * @file
 | 
			
		||||
 * Webform Localization i18n_string integration.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Provides interface with the i18n_string module.
 | 
			
		||||
 * Based in patch http://drupal.org/node/245424#comment-5244256
 | 
			
		||||
 * by Calin Marian. Further development sponsored by Riot Games.
 | 
			
		||||
 *
 | 
			
		||||
 * @author German Martin <gmartin.prg@gmail.com>
 | 
			
		||||
 * @author German Martin <gmartin.php@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -80,6 +79,9 @@ function _webform_localization_translate_component(&$element, $component) {
 | 
			
		||||
            if ($property == 'markup' && $current_element['#type'] == 'markup') {
 | 
			
		||||
              $current_element['#' . $property] = i18n_string($name, $current_element['#' . $property], array('format' => $current_element['#format']));
 | 
			
		||||
            }
 | 
			
		||||
            elseif ($property == 'description') {
 | 
			
		||||
              $current_element['#' . $property] = i18n_string($name, $current_element['#' . $property], array('format' => I18N_STRING_FILTER_XSS));
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
              $current_element['#' . $property] = i18n_string($name, $current_element['#' . $property]);
 | 
			
		||||
            }
 | 
			
		||||
@@ -90,6 +92,76 @@ function _webform_localization_translate_component(&$element, $component) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Translates the analysis component properties that are translatable.
 | 
			
		||||
 *
 | 
			
		||||
 * These are found in under 'translated_strings' in the 'extra' array of the
 | 
			
		||||
 * component, which is build when the component is inserted / updated, or
 | 
			
		||||
 * when all webform strings are updated from
 | 
			
		||||
 * admin/config/regional/translate/i18n_string.
 | 
			
		||||
 *
 | 
			
		||||
 * @param array $data
 | 
			
		||||
 *   The data array of component results.
 | 
			
		||||
 * @param array $component
 | 
			
		||||
 *   The component.
 | 
			
		||||
 */
 | 
			
		||||
function _webform_localization_translate_analysis_component(&$data, &$component) {
 | 
			
		||||
  if (!isset($component['extra']['translated_strings']) || !is_array($component['extra']['translated_strings'])) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  // Attempt to translate select options.
 | 
			
		||||
  if ($component['type'] == 'select') {
 | 
			
		||||
    $item_key_lookup = _webform_localization_string_to_key($component['extra']['items']);
 | 
			
		||||
  }
 | 
			
		||||
  // Attempt to translate grid options / questions.
 | 
			
		||||
  if ($component['type'] == 'grid') {
 | 
			
		||||
    $options_key_lookup = _webform_localization_string_to_key($component['extra']['options']);
 | 
			
		||||
    $questions_key_lookup = _webform_localization_string_to_key($component['extra']['questions']);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  foreach ($component['extra']['translated_strings'] as $name) {
 | 
			
		||||
    $name_list = explode(':', $name);
 | 
			
		||||
    // Translate component name from title property.
 | 
			
		||||
    if ($name_list[3] == '#title') {
 | 
			
		||||
      $component['name'] = i18n_string($name, $component['name']);
 | 
			
		||||
      continue;
 | 
			
		||||
    }
 | 
			
		||||
    // Translate options for select elements.
 | 
			
		||||
    if ($component['type'] == 'select' && strpos($name_list[3], '-') !== FALSE) {
 | 
			
		||||
      list (, $key) = explode('-', $name_list[3]);
 | 
			
		||||
      if (isset($item_key_lookup[$key])) {
 | 
			
		||||
        foreach ($data['table_rows'] as $index => $row) {
 | 
			
		||||
          if ($row[0] == $item_key_lookup[$key]) {
 | 
			
		||||
            $data['table_rows'][$index][0] = i18n_string($name, $row[0]);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // Translate options / questions for grid elements.
 | 
			
		||||
    if ($component['type'] == 'grid' && $name_list[3] !== '#title') {
 | 
			
		||||
      list (, $key) = explode('-', $name_list[3]);
 | 
			
		||||
      if (strpos($name_list[3], 'grid_options')) {
 | 
			
		||||
        if (isset($options_key_lookup[$key])) {
 | 
			
		||||
          foreach ($data['table_header'] as $index => $row) {
 | 
			
		||||
            if ($row == $options_key_lookup[$key]) {
 | 
			
		||||
              $data['table_header'][$index] = i18n_string($name, $row);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (strpos($name_list[3], 'grid_questions')) {
 | 
			
		||||
        if (isset($questions_key_lookup[$key])) {
 | 
			
		||||
          foreach ($data['table_rows'] as $index => $row) {
 | 
			
		||||
            if (trim($row[0]) == trim($questions_key_lookup[$key])) {
 | 
			
		||||
              $data['table_rows'][$index][0] = i18n_string($name, $row[0]);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Update / create translation source for all the translatable poperties.
 | 
			
		||||
 *
 | 
			
		||||
@@ -148,36 +220,17 @@ function _webform_localization_component_translation_parse($element, $component)
 | 
			
		||||
            // If the child if an array, we translate the elements.
 | 
			
		||||
            if (is_array($elem_value)) {
 | 
			
		||||
              foreach ($elem_value as $k => $v) {
 | 
			
		||||
                $name = implode(':',
 | 
			
		||||
                                array(
 | 
			
		||||
                                      'webform',
 | 
			
		||||
                                      $component['nid'],
 | 
			
		||||
                                      $component['cid'],
 | 
			
		||||
                                      $property,
 | 
			
		||||
                                      '/-' . $elem_key . '/-',
 | 
			
		||||
                                      $k,
 | 
			
		||||
                                      )
 | 
			
		||||
                                );
 | 
			
		||||
                $name = webform_localization_i18n_string_name($component['nid'], $component['cid'], $property, '/-' . $elem_key . '/-', $k);
 | 
			
		||||
                $translated_properies[] = $name;
 | 
			
		||||
                i18n_string($name, $v, array('update' => TRUE));
 | 
			
		||||
              }
 | 
			
		||||
              $name = implode(':',
 | 
			
		||||
                              array(
 | 
			
		||||
                                    'webform',
 | 
			
		||||
                                    $component['nid'],
 | 
			
		||||
                                    $component['cid'],
 | 
			
		||||
                                    $property,
 | 
			
		||||
                                    '/-' . $elem_key . '/-',
 | 
			
		||||
                                    )
 | 
			
		||||
                              );
 | 
			
		||||
              $name = webform_localization_i18n_string_name($component['nid'], $component['cid'], $property, '/-' . $elem_key . '/-');
 | 
			
		||||
              $translated_properies[] = $name;
 | 
			
		||||
              i18n_string($name, $elem_key, array('update' => TRUE));
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
              // If the child is not an array.
 | 
			
		||||
              $name = implode(':', array('webform',
 | 
			
		||||
                    $component['nid'], $component['cid'],
 | 
			
		||||
                    $property . '-' . $elem_key));
 | 
			
		||||
              $name = webform_localization_i18n_string_name($component['nid'], $component['cid'], $property . '-' . $elem_key);
 | 
			
		||||
              $translated_properies[] = $name;
 | 
			
		||||
              i18n_string($name, $elem_value, array('update' => TRUE));
 | 
			
		||||
            }
 | 
			
		||||
@@ -188,15 +241,7 @@ function _webform_localization_component_translation_parse($element, $component)
 | 
			
		||||
           * If the translatable property is not an array,
 | 
			
		||||
           * it can be treated as a string.
 | 
			
		||||
           */
 | 
			
		||||
          $name = implode(
 | 
			
		||||
                          ':',
 | 
			
		||||
                          array(
 | 
			
		||||
                                'webform',
 | 
			
		||||
                                $component['nid'],
 | 
			
		||||
                                $component['cid'],
 | 
			
		||||
                                $property
 | 
			
		||||
                                )
 | 
			
		||||
                          );
 | 
			
		||||
          $name = webform_localization_i18n_string_name($component['nid'], $component['cid'], $property);
 | 
			
		||||
          $translated_properies[] = $name;
 | 
			
		||||
          i18n_string($name, $element['#' . $key], array('update' => TRUE));
 | 
			
		||||
        }
 | 
			
		||||
@@ -211,14 +256,39 @@ function _webform_localization_component_translation_parse($element, $component)
 | 
			
		||||
    $element[$child]['#parents'][] = $child;
 | 
			
		||||
    // Add the translated propertied to the list.
 | 
			
		||||
    $translated_properies = array_merge(
 | 
			
		||||
      $translated_properies,
 | 
			
		||||
      _webform_localization_component_translation_parse($element[$child], $component)
 | 
			
		||||
      );
 | 
			
		||||
            $translated_properies,
 | 
			
		||||
            _webform_localization_component_translation_parse($element[$child], $component)
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $translated_properies;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Utility function to create i18n string name.
 | 
			
		||||
 *
 | 
			
		||||
 * Additional arguments can be passed to add more depth to context
 | 
			
		||||
 *
 | 
			
		||||
 * @param int $node_identifier
 | 
			
		||||
 *   webform nid
 | 
			
		||||
 *
 | 
			
		||||
 * @return string
 | 
			
		||||
 *   i18n string name grouped by nid or uuid if module is available
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_i18n_string_name($node_identifier) {
 | 
			
		||||
  if (module_exists('uuid')) {
 | 
			
		||||
    $node_identifier = current(entity_get_uuid_by_id('node', array($node_identifier)));
 | 
			
		||||
  }
 | 
			
		||||
  $name = array('webform', $node_identifier);
 | 
			
		||||
  $args = func_get_args();
 | 
			
		||||
  // Remove $node_identifier from args
 | 
			
		||||
  array_shift($args);
 | 
			
		||||
  foreach ($args as $arg) {
 | 
			
		||||
    $name[] = $arg;
 | 
			
		||||
  }
 | 
			
		||||
  return implode(':', $name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Delete translation source for all the translatable poperties
 | 
			
		||||
 *
 | 
			
		||||
@@ -263,18 +333,18 @@ function webform_localization_component_delete_translation_strings($component) {
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_update_translation_strings($properties) {
 | 
			
		||||
  if (!empty($properties['confirmation']['value'])) {
 | 
			
		||||
    $name = implode(':', array('webform', $properties['nid'], 'confirmation'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($properties['nid'], 'confirmation');
 | 
			
		||||
    i18n_string($name, $properties['confirmation']['value'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
  if (!empty($properties['submit_text'])) {
 | 
			
		||||
    $name = implode(':', array('webform', $properties['nid'], 'submit_text'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($properties['nid'], 'submit_text');
 | 
			
		||||
    i18n_string($name, $properties['submit_text'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Allow to translate the redirect url if it's not set to none or the
 | 
			
		||||
  // default confirmation page.
 | 
			
		||||
  if (!in_array($properties['redirect_url'], array('<confirmation>', '<none>'))) {
 | 
			
		||||
    $name = implode(':', array('webform', $properties['nid'], 'redirect_url'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($properties['nid'], 'redirect_url');
 | 
			
		||||
    i18n_string($name, $properties['redirect_url'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -287,19 +357,12 @@ function webform_localization_update_translation_strings($properties) {
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_translate_strings(&$node, $update = FALSE) {
 | 
			
		||||
  $option = array('update' => $update, 'sanitize' => FALSE);
 | 
			
		||||
  $name = implode(':', array('webform',
 | 
			
		||||
        $node->webform['nid'],
 | 
			
		||||
        'confirmation'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($node->webform['nid'], 'confirmation');
 | 
			
		||||
  $node->webform['confirmation'] = i18n_string(
 | 
			
		||||
          $name,
 | 
			
		||||
          $node->webform['confirmation'],
 | 
			
		||||
          $option);
 | 
			
		||||
  $name = implode(
 | 
			
		||||
          ':',
 | 
			
		||||
          array(
 | 
			
		||||
            'webform',
 | 
			
		||||
            $node->webform['nid'],
 | 
			
		||||
            'submit_text'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($node->webform['nid'], 'submit_text');
 | 
			
		||||
  $node->webform['submit_text'] = i18n_string(
 | 
			
		||||
          $name,
 | 
			
		||||
          $node->webform['submit_text'],
 | 
			
		||||
@@ -308,7 +371,7 @@ function webform_localization_translate_strings(&$node, $update = FALSE) {
 | 
			
		||||
  // Allow to translate the redirect url if it's not set to none or the
 | 
			
		||||
  // default confirmation page.
 | 
			
		||||
  if (!in_array($node->webform['redirect_url'], array('<confirmation>', '<none>'))) {
 | 
			
		||||
    $name = implode(':', array('webform', $node->webform['nid'], 'redirect_url'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($node->webform['nid'], 'redirect_url');
 | 
			
		||||
    $node->webform['redirect_url'] = i18n_string($name, $node->webform['redirect_url'], $option);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -323,29 +386,20 @@ function webform_localization_emails_update_translation_string($properties) {
 | 
			
		||||
  $nid = $properties['node']->webform['nid'];
 | 
			
		||||
  $eid = $properties['eid'];
 | 
			
		||||
  if (!empty($properties['subject_custom'])) {
 | 
			
		||||
    $name = implode(':',
 | 
			
		||||
            array('webform',
 | 
			
		||||
              $nid,
 | 
			
		||||
              'email',
 | 
			
		||||
              $eid,
 | 
			
		||||
              'subject_custom'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'subject_custom');
 | 
			
		||||
    i18n_string($name, $properties['subject_custom'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
  // Allow to translate the mail recipients if not based on a component.
 | 
			
		||||
  if (!empty($properties['email']) && !is_numeric($properties['email'])) {
 | 
			
		||||
    $name = implode(':', array('webform', $nid, 'email', $eid, 'email'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'email');
 | 
			
		||||
    i18n_string($name, $properties['email'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
  if (!empty($properties['from_name_custom'])) {
 | 
			
		||||
    $name = implode(':', array('webform',
 | 
			
		||||
          $nid,
 | 
			
		||||
          'email',
 | 
			
		||||
          $eid,
 | 
			
		||||
          'from_name_custom'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'from_name_custom');
 | 
			
		||||
    i18n_string($name, $properties['from_name_custom'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
  if (!empty($properties['template'])) {
 | 
			
		||||
    $name = implode(':', array('webform', $nid, 'email', $eid, 'template'));
 | 
			
		||||
    $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'template');
 | 
			
		||||
    i18n_string($name, $properties['template'], array('update' => TRUE));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -362,28 +416,20 @@ function webform_localization_emails_translation_string_refresh($emails, $nid) {
 | 
			
		||||
  foreach ($emails as $email) {
 | 
			
		||||
    $eid = $email['eid'];
 | 
			
		||||
    if (!empty($email['subject']) && $email['subject'] != 'default') {
 | 
			
		||||
      $name = implode(':', array('webform',
 | 
			
		||||
            $nid,
 | 
			
		||||
            'email',
 | 
			
		||||
            $eid,
 | 
			
		||||
            'subject_custom'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'subject_custom');
 | 
			
		||||
      i18n_string($name, $email['subject'], array('update' => TRUE));
 | 
			
		||||
    }
 | 
			
		||||
    // Allow to translate the mail recipients if not based on a component.
 | 
			
		||||
    if (!empty($email['email']) && !is_numeric($email['email'])) {
 | 
			
		||||
      $name = implode(':', array('webform', $nid, 'email', $eid, 'email'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'email');
 | 
			
		||||
      i18n_string($name, $email['email'], array('update' => TRUE));
 | 
			
		||||
    }
 | 
			
		||||
    if (!empty($email['from_name']) && $email['from_name'] != 'default') {
 | 
			
		||||
      $name = implode(':', array('webform',
 | 
			
		||||
            $nid,
 | 
			
		||||
            'email',
 | 
			
		||||
            $eid,
 | 
			
		||||
            'from_name_custom'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'from_name_custom');
 | 
			
		||||
      i18n_string($name, $email['from_name'], array('update' => TRUE));
 | 
			
		||||
    }
 | 
			
		||||
    if (!empty($email['template']) && $email['template'] != 'default') {
 | 
			
		||||
      $name = implode(':', array('webform', $nid, 'email', $eid, 'template'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'template');
 | 
			
		||||
      i18n_string($name, $email['template'], array('update' => TRUE));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -399,28 +445,20 @@ function webform_localization_email_translate_strings(&$node) {
 | 
			
		||||
  $nid = $node->webform['nid'];
 | 
			
		||||
  foreach ($node->webform['emails'] as $eid => &$email) {
 | 
			
		||||
    if (!empty($email['subject']) && $email['subject'] != 'default') {
 | 
			
		||||
      $name = implode(':', array('webform',
 | 
			
		||||
            $nid,
 | 
			
		||||
            'email',
 | 
			
		||||
            $eid,
 | 
			
		||||
            'subject_custom'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'subject_custom');
 | 
			
		||||
      $email['subject'] = i18n_string($name, $email['subject']);
 | 
			
		||||
    }
 | 
			
		||||
    // Allow to translate the mail recipients if not based on a component.
 | 
			
		||||
    if (!empty($email['email']) && !is_numeric($email['email'])) {
 | 
			
		||||
      $name = implode(':', array('webform', $nid, 'email', $eid, 'email'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'email');
 | 
			
		||||
      $email['email'] = i18n_string($name, $email['email']);
 | 
			
		||||
    }
 | 
			
		||||
    if (!empty($email['from_name']) && $email['from_name'] != 'default') {
 | 
			
		||||
      $name = implode(':', array('webform',
 | 
			
		||||
            $nid,
 | 
			
		||||
            'email',
 | 
			
		||||
            $eid,
 | 
			
		||||
            'from_name_custom'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'from_name_custom');
 | 
			
		||||
      $email['from_name'] = i18n_string($name, $email['from_name']);
 | 
			
		||||
    }
 | 
			
		||||
    if (!empty($email['template']) && $email['template'] != 'default') {
 | 
			
		||||
      $name = implode(':', array('webform', $nid, 'email', $eid, 'template'));
 | 
			
		||||
      $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'template');
 | 
			
		||||
      $email['template'] = i18n_string($name, $email['template']);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -435,17 +473,11 @@ function webform_localization_email_translate_strings(&$node) {
 | 
			
		||||
 *   A node Id.
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_emails_delete_translation_string($eid, $nid) {
 | 
			
		||||
  $name = implode(':', array('webform', $nid, 'email', $eid, 'subject_custom'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'subject_custom');
 | 
			
		||||
  i18n_string_remove($name);
 | 
			
		||||
  $name = implode(
 | 
			
		||||
          ':',
 | 
			
		||||
          array('webform',
 | 
			
		||||
            $nid,
 | 
			
		||||
            'email',
 | 
			
		||||
            $eid,
 | 
			
		||||
            'from_name_custom'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'from_name_custom');
 | 
			
		||||
  i18n_string_remove($name);
 | 
			
		||||
  $name = implode(':', array('webform', $nid, 'email', $eid, 'template'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'template');
 | 
			
		||||
  i18n_string_remove($name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -456,15 +488,76 @@ function webform_localization_emails_delete_translation_string($eid, $nid) {
 | 
			
		||||
 *   A node object.
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_delete_translate_strings($node) {
 | 
			
		||||
  $name = implode(':', array('webform', $node->webform['nid'], 'confirmation'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($node->webform['nid'], 'confirmation');
 | 
			
		||||
  i18n_string_remove($name);
 | 
			
		||||
  $name = implode(':', array('webform', $node->webform['nid'], 'submit_text'));
 | 
			
		||||
  $name = webform_localization_i18n_string_name($node->webform['nid'], 'submit_text');
 | 
			
		||||
  i18n_string_remove($name);
 | 
			
		||||
  foreach ($node->webform['emails'] as $eid => $value) {
 | 
			
		||||
    webform_localization_emails_delete_translation_string($eid, $node->nid);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Update i18n string contexts if uuid module is enabled/disabled.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_uuid_update_strings($disabling_uuid = FALSE) {
 | 
			
		||||
  module_load_install('i18n_string');
 | 
			
		||||
  $old_ids = db_query('SELECT distinct type FROM {i18n_string} WHERE textgroup = :webform', array(
 | 
			
		||||
        ':webform' => 'webform'
 | 
			
		||||
      ))->fetchCol();
 | 
			
		||||
  variable_set('webform_localization_using_uuid', !$disabling_uuid);
 | 
			
		||||
  if (empty($old_ids)) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  if (!$disabling_uuid) {
 | 
			
		||||
    $old_context_ids = entity_get_uuid_by_id('node', array($old_ids));
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    // entity_get_id_by_uuid() do not work properly on hook_disable.
 | 
			
		||||
    $old_context_ids = webform_localization_get_id_by_uuid('node', array($old_ids));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  foreach ($old_context_ids as $old_id => $new_id) {
 | 
			
		||||
    $old_context = 'webform:' . $old_id . ':*';
 | 
			
		||||
    $new_context = 'webform:' . $new_id . ':*';
 | 
			
		||||
    i18n_string_install_update_context($old_context, $new_context);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper function that retrieves entity IDs by their UUIDs.
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * @param $entity_type
 | 
			
		||||
 *   The entity type we should be dealing with.
 | 
			
		||||
 * @param $uuids
 | 
			
		||||
 *   An array of UUIDs for which we should find their entity IDs. If $revision
 | 
			
		||||
 *   is TRUE this should be revision UUIDs instead.
 | 
			
		||||
 * @return
 | 
			
		||||
 *   Array of entity IDs keyed by their UUIDs. If $revision is TRUE revision
 | 
			
		||||
 *   IDs and UUIDs are returned instead.
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_get_id_by_uuid($entity_type, $uuids) {
 | 
			
		||||
  if (empty($uuids)) {
 | 
			
		||||
    return array();
 | 
			
		||||
  }
 | 
			
		||||
  $info = entity_get_info($entity_type);
 | 
			
		||||
  $table = $info['base table'];
 | 
			
		||||
  $id_key = $info['entity keys']['id'];
 | 
			
		||||
 | 
			
		||||
  // The uuid key is not available at hook_disable.
 | 
			
		||||
  $core_info = uuid_get_core_entity_info();
 | 
			
		||||
  $uuid_key = $core_info['node']['entity keys']['uuid'];
 | 
			
		||||
 | 
			
		||||
  // Get all UUIDs in one query.
 | 
			
		||||
  return db_select($table, 't')
 | 
			
		||||
      ->fields('t', array($uuid_key, $id_key))
 | 
			
		||||
      ->condition($uuid_key, array_values($uuids), 'IN')
 | 
			
		||||
      ->execute()
 | 
			
		||||
      ->fetchAllKeyed();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper function to replace an array key and its content.
 | 
			
		||||
 *
 | 
			
		||||
@@ -486,3 +579,21 @@ function _webform_localization_array_key_replace(&$array, $old_key, $new_key) {
 | 
			
		||||
  }
 | 
			
		||||
  $array = array_combine($keys, $values);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper function to convert select / grid strings to array.
 | 
			
		||||
 *
 | 
			
		||||
 * @param $string_array
 | 
			
		||||
 *   Array To process.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
function _webform_localization_string_to_key($string_array) {
 | 
			
		||||
  $key_array = array();
 | 
			
		||||
  $items = explode("\n", trim($string_array));
 | 
			
		||||
  foreach ($items as $item) {
 | 
			
		||||
    $item_data = explode('|', $item);
 | 
			
		||||
    $key_array[$item_data[0]] = $item_data[1];
 | 
			
		||||
  }
 | 
			
		||||
  return $key_array;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Development sponsored by Riot Games.
 | 
			
		||||
 *
 | 
			
		||||
 * @author German Martin <gmartin.prg@gmail.com>
 | 
			
		||||
 * @author German Martin <gmartin.php@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -4,31 +4,23 @@
 | 
			
		||||
 * @file
 | 
			
		||||
 * Webform localization module tests.
 | 
			
		||||
 */
 | 
			
		||||
class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
class WebformLocalizationWebTestCase extends DrupalWebTestCase {
 | 
			
		||||
 | 
			
		||||
  // Webform test class instance.
 | 
			
		||||
  public $wtc;
 | 
			
		||||
  // Users.
 | 
			
		||||
  public $admin_user;
 | 
			
		||||
  public $translator;
 | 
			
		||||
  public $normal_user;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Implements getInfo().
 | 
			
		||||
   */
 | 
			
		||||
  public static function getInfo() {
 | 
			
		||||
    return array(
 | 
			
		||||
      'name' => t('Webform Localization'),
 | 
			
		||||
      'description' => t('Webform localization features test.'),
 | 
			
		||||
      'group' => t('Webform'),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Implements setUp().
 | 
			
		||||
   */
 | 
			
		||||
  function setUp() {
 | 
			
		||||
    parent::setUp('locale', 'translation', 'translation_test', 'i18n', 'i18n_string', 'webform', 'webform_localization');
 | 
			
		||||
  function setUp($modules = array()) {
 | 
			
		||||
    $modules = array_merge($modules, array('locale', 'webform', 'webform_localization'));
 | 
			
		||||
    parent::setUp($modules);
 | 
			
		||||
 | 
			
		||||
    // We load webform test class to reuse webform and components creation functions
 | 
			
		||||
    // We load webform test class to reuse webform and components creation functions.
 | 
			
		||||
    module_load_include('test', 'webform', 'tests/webform');
 | 
			
		||||
    $this->wtc = new WebformTestCase;
 | 
			
		||||
 | 
			
		||||
@@ -38,17 +30,19 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
          'access all webform results',
 | 
			
		||||
          'edit all webform submissions',
 | 
			
		||||
          'delete all webform submissions',
 | 
			
		||||
          'translate interface'));
 | 
			
		||||
          'translate interface',
 | 
			
		||||
          'translate user-defined strings'));
 | 
			
		||||
 | 
			
		||||
    $this->translator = $this->drupalCreateUser(array('translate content',
 | 
			
		||||
          'create webform content',
 | 
			
		||||
          'edit any webform content',
 | 
			
		||||
          'access all webform results',
 | 
			
		||||
          'translate interface'));
 | 
			
		||||
          'translate interface',
 | 
			
		||||
          'translate user-defined strings'));
 | 
			
		||||
 | 
			
		||||
    $this->normal_user = $this->drupalCreateUser(array('access content', 'edit own webform submissions'));
 | 
			
		||||
 | 
			
		||||
    // Fix for reuse of webform test class
 | 
			
		||||
    // Fix for reuse of webform test class.
 | 
			
		||||
    $this->wtc->webform_users['admin'] = $this->admin_user;
 | 
			
		||||
    $this->wtc->webform_users['admin']->profile_gender = array('Female', 'Male');
 | 
			
		||||
 | 
			
		||||
@@ -59,112 +53,15 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
    $this->addLanguage('es');
 | 
			
		||||
    $this->addLanguage('de');
 | 
			
		||||
 | 
			
		||||
    // Enable URL language detection and selection
 | 
			
		||||
    // Enable URL language detection and selection.
 | 
			
		||||
    $edit = array('language[enabled][locale-url]' => TRUE);
 | 
			
		||||
    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
 | 
			
		||||
    $this->assertRaw(t('Language negotiation configuration saved.'), t('URL language detection enabled.'));
 | 
			
		||||
    $this->assertRaw(t('Language negotiation configuration saved.'), 'URL language detection enabled.');
 | 
			
		||||
    drupal_static_reset('locale_url_outbound_alter');
 | 
			
		||||
 | 
			
		||||
    // Set "Webform" content type to use multilingual support with translation.
 | 
			
		||||
    $this->drupalGet('admin/structure/types/manage/webform');
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['language_content_type'] = 2;
 | 
			
		||||
    $this->drupalPost('admin/structure/types/manage/webform', $edit, t('Save content type'));
 | 
			
		||||
    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Webform')), t('Webform content type has been updated.'));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Test creating a webform and enabling localization by string translation
 | 
			
		||||
   */
 | 
			
		||||
  function testWebformLocalizationConfig() {
 | 
			
		||||
    $this->drupalLogin($this->admin_user);
 | 
			
		||||
    /**
 | 
			
		||||
     * Create the Webform test node, and enable
 | 
			
		||||
     * localization by string translation feature
 | 
			
		||||
     */
 | 
			
		||||
    $node = $this->createWebformForm();
 | 
			
		||||
 | 
			
		||||
    // Submit translation in Spanish.
 | 
			
		||||
    $node_translation_title = 'Webform title in Spanish';
 | 
			
		||||
    $node_translation_body = 'Content in Spanish';
 | 
			
		||||
    $node_translation1 = $this->createWebformTranslation($node, $node_translation_title, $node_translation_body, 'es');
 | 
			
		||||
 | 
			
		||||
    // Submit translation in German.
 | 
			
		||||
    $node_translation_title = 'Webform title in German';
 | 
			
		||||
    $node_translation_body = 'Content in German';
 | 
			
		||||
    $node_translation2 = $this->createWebformTranslation($node, $node_translation_title, $node_translation_body, 'de');
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enables localization by string translation and reuse the single webform
 | 
			
		||||
     * across the translation set.
 | 
			
		||||
     */
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['expose_strings'] = TRUE;
 | 
			
		||||
    $edit['single_webform'] = TRUE;
 | 
			
		||||
    $this->drupalPost('node/' . $node->nid . '/webform/configure', $edit, t('Save configuration'));
 | 
			
		||||
    $this->assertRaw(t('The form settings have been updated.'), t('Webform string translation and single webform enabled.'));
 | 
			
		||||
 | 
			
		||||
    // Checks for webform components in the Spanish node
 | 
			
		||||
    $this->drupalGet('es/node/' . $node_translation1->nid);
 | 
			
		||||
    foreach ($node->webform['components'] as $key => $value) {
 | 
			
		||||
      if ($value['name'] == 'Hidden') {
 | 
			
		||||
        $this->assertNoRaw($value['name'], t('The %c webform component is not present.', array('%c' => $value['name'])), 'Spanish Webform translation');
 | 
			
		||||
        CONTINUE;
 | 
			
		||||
      }
 | 
			
		||||
      $this->assertRaw($value['name'], t('The %c webform component is present.', array('%c' => $value['name'])), 'Spanish Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Checks for webform components in the Deutsch node
 | 
			
		||||
    $this->drupalGet('de/node/' . $node_translation2->nid);
 | 
			
		||||
    foreach ($node->webform['components'] as $key => $value) {
 | 
			
		||||
      if ($value['name'] == 'Hidden') {
 | 
			
		||||
        $this->assertNoRaw($value['name'], t('The %c webform component is not present.', array('%c' => $value['name'])), 'German Webform translation');
 | 
			
		||||
        CONTINUE;
 | 
			
		||||
      }
 | 
			
		||||
      $this->assertRaw($value['name'], t('The %c webform component is present.', array('%c' => $value['name'])), 'Deutsch Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Refresh webform strings
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['groups[webform]'] = 'webform';
 | 
			
		||||
    $this->drupalPost('admin/config/regional/translate/i18n_string', $edit, t('Refresh strings'));
 | 
			
		||||
 | 
			
		||||
    // Select webform localization options that match this node ID.
 | 
			
		||||
    $options = db_select('locales_source')
 | 
			
		||||
            ->fields('locales_source')
 | 
			
		||||
            ->condition('textgroup', 'webform', '=')
 | 
			
		||||
            ->execute()
 | 
			
		||||
            ->fetchAllAssoc('lid', PDO::FETCH_ASSOC);
 | 
			
		||||
 | 
			
		||||
    // $refresh_node = node_load($node->nid,$node->vid, TRUE);
 | 
			
		||||
    // Translates webform components
 | 
			
		||||
    $translations = array();
 | 
			
		||||
    foreach ($options as $key => $value) {
 | 
			
		||||
      $name = $value['source'];
 | 
			
		||||
      $translations['de'] = 'de:' . $name;
 | 
			
		||||
      $translations['es'] = 'es:' . $name;
 | 
			
		||||
      $this->createStringTranslation('webform', $name, $translations);
 | 
			
		||||
    }
 | 
			
		||||
    $this->drupalGet('es/node/' . $node_translation1->nid);
 | 
			
		||||
    foreach ($options as $key => $value) {
 | 
			
		||||
      $name = $value['source'];
 | 
			
		||||
      $translation = 'es:' . $name;
 | 
			
		||||
      $this->assertRaw($translation, t('%c translation is present.', array('%c' => $name)), 'Spanish Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
    $this->drupalGet('de/node/' . $node_translation2->nid);
 | 
			
		||||
    foreach ($options as $key => $value) {
 | 
			
		||||
      $name = $value['source'];
 | 
			
		||||
      $translation = 'de:' . $name;
 | 
			
		||||
      $this->assertRaw($translation, t('%c translation is present.', array('%c' => $name)), 'Deutsch Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * @todo
 | 
			
		||||
     * Pending to Fix deveral fails and exceptions
 | 
			
		||||
     */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Create a webform node with test components
 | 
			
		||||
   * Create a webform node with test components.
 | 
			
		||||
   */
 | 
			
		||||
  function createWebformForm() {
 | 
			
		||||
    if (isset($this->_webform_node)) {
 | 
			
		||||
@@ -183,7 +80,7 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
      'translate' => '0',
 | 
			
		||||
      'title' => 'Webform title in english',
 | 
			
		||||
      'body' => array('en' => array(
 | 
			
		||||
                array('value' => 'Donec placerat. Nullam nibh dolor, blandit sed, fermentum id, imperdiet sit amet, neque. Nam mollis ultrices justo.
 | 
			
		||||
          array('value' => 'Donec placerat. Nullam nibh dolor, blandit sed, fermentum id, imperdiet sit amet, neque. Nam mollis ultrices justo.
 | 
			
		||||
                                 Sed tempor. Sed vitae tellus. Etiam sem arcu, eleifend sit amet, gravida eget, porta at, wisi. Nam non lacus vitae ipsum viverra
 | 
			
		||||
                                 pretium. Phasellus massa. Fusce magna sem, gravida in, feugiat ac, molestie eget, wisi. Fusce consectetuer luctus ipsum.
 | 
			
		||||
                                 Vestibulum nunc. Suspendisse dignissim adipiscing libero. Integer leo. Sed pharetra ligula a dui. Quisque ipsum nibh,
 | 
			
		||||
@@ -191,7 +88,7 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
                                 retium quis, dapibus sed, varius non, lectus. Proin a quam. Praesent lacinia, eros quis aliquam porttitor, urna lacus
 | 
			
		||||
                                 volutpat urna, ut fermentum neque mi egestas dolor.'))),
 | 
			
		||||
      'teaser' => array('en' => array(
 | 
			
		||||
                  array('value' => 'Donec placerat. Nullam nibh dolor, blandit sed, fermentum id, imperdiet sit amet, neque. Nam mollis ultrices justo.
 | 
			
		||||
          array('value' => 'Donec placerat. Nullam nibh dolor, blandit sed, fermentum id, imperdiet sit amet, neque. Nam mollis ultrices justo.
 | 
			
		||||
                                   Sed tempor. Sed vitae tellus. Etiam sem arcu, eleifend sit amet, gravida eget, porta at, wisi. Nam non lacus vitae ipsum
 | 
			
		||||
                                   viverra pretium. Phasellus massa. Fusce magna sem, gravida in, feugiat ac, molestie eget, wisi. Fusce consectetuer luctus
 | 
			
		||||
                                   ipsum. Vestibulum nunc. Suspendisse dignissim adipiscing libero. Integer leo. Sed pharetra ligula a dui. Quisque ipsum nibh,
 | 
			
		||||
@@ -199,23 +96,22 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
      'log' => '',
 | 
			
		||||
      'format' => '1',
 | 
			
		||||
      'webform' => array(
 | 
			
		||||
        'confirmation' => 'Thanks!',
 | 
			
		||||
        'confirmation_format' => filter_default_format(),
 | 
			
		||||
        'redirect_url' => '<confirmation>',
 | 
			
		||||
        'teaser' => '0',
 | 
			
		||||
        'allow_draft' => '1',
 | 
			
		||||
        'submit_text' => '',
 | 
			
		||||
        'submit_limit' => '-1',
 | 
			
		||||
        'submit_interval' => '-1',
 | 
			
		||||
        'submit_notice' => '1',
 | 
			
		||||
        'roles' => array('1', '2'),
 | 
			
		||||
        'components' => array(),
 | 
			
		||||
        'emails' => array(),
 | 
			
		||||
      ),
 | 
			
		||||
    'confirmation' => 'Thanks!',
 | 
			
		||||
      ) + webform_node_defaults(),
 | 
			
		||||
    );
 | 
			
		||||
    $components = $this->wtc->testWebformComponents();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     *  @todo : We need further debug to find how to support
 | 
			
		||||
     *  this components or why are they breaking everything
 | 
			
		||||
     */
 | 
			
		||||
    unset($components['select_no_default_zero']);
 | 
			
		||||
    unset($components['radios_zero']);
 | 
			
		||||
    unset($components['select_zero']);
 | 
			
		||||
    unset($components['select_optgroup']);
 | 
			
		||||
 | 
			
		||||
    $cid = 0;
 | 
			
		||||
    foreach ($this->wtc->testWebformComponents() as $key => $component_info) {
 | 
			
		||||
    foreach ($components as $key => $component_info) {
 | 
			
		||||
      $cid++;
 | 
			
		||||
      $settings['webform']['components'][$cid] = $component_info['component'];
 | 
			
		||||
      $settings['webform']['components'][$cid]['cid'] = $cid;
 | 
			
		||||
@@ -247,10 +143,10 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
      // Make sure we are not using a stale list.
 | 
			
		||||
      drupal_static_reset('language_list');
 | 
			
		||||
      $languages = language_list('language');
 | 
			
		||||
      $this->assertTrue(array_key_exists($language_code, $languages), t('Language was installed successfully.'));
 | 
			
		||||
      $this->assertTrue(array_key_exists($language_code, $languages), 'Language was installed successfully.');
 | 
			
		||||
 | 
			
		||||
      if (array_key_exists($language_code, $languages)) {
 | 
			
		||||
        $this->assertRaw(t('The language %language has been created and can now be used. More information is available on the <a href="@locale-help">help screen</a>.', array('%language' => $languages[$language_code]->name, '@locale-help' => url('admin/help/locale'))), t('Language has been created.'));
 | 
			
		||||
        $this->assertRaw(t('The language %language has been created and can now be used. More information is available on the <a href="@locale-help">help screen</a>.', array('%language' => $languages[$language_code]->name, '@locale-help' => url('admin/help/locale'))), 'Language has been created.');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    elseif ($this->xpath('//input[@type="checkbox" and @name=:name and @checked="checked"]', array(':name' => 'enabled[' . $language_code . ']'))) {
 | 
			
		||||
@@ -261,7 +157,7 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
      // It's installed but not enabled. Enable it.
 | 
			
		||||
      $this->assertTrue(TRUE, 'Language [' . $language_code . '] already installed.');
 | 
			
		||||
      $this->drupalPost(NULL, array('enabled[' . $language_code . ']' => TRUE), t('Save configuration'));
 | 
			
		||||
      $this->assertRaw(t('Configuration saved.'), t('Language successfully enabled.'));
 | 
			
		||||
      $this->assertRaw(t('Configuration saved.'), 'Language successfully enabled.');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -288,14 +184,14 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit["title"] = $title;
 | 
			
		||||
    $edit[$body_key] = $body;
 | 
			
		||||
    //$edit[$body_key] = $body;
 | 
			
		||||
    $this->drupalPost(NULL, $edit, t('Save'));
 | 
			
		||||
    $this->assertRaw(t('Webform %title has been created.', array('%title' => $title)), t('Translation created.'));
 | 
			
		||||
    $this->assertRaw(t('Webform %title has been created.', array('%title' => $title)), 'Translation created.');
 | 
			
		||||
 | 
			
		||||
    // Check to make sure that translation was successful.
 | 
			
		||||
    $translation = $this->drupalGetNodeByTitle($title);
 | 
			
		||||
    $this->assertTrue($translation, t('Node found in database.'));
 | 
			
		||||
    $this->assertTrue($translation->tnid == $node->nid, t('Translation set id correctly stored.'));
 | 
			
		||||
    $this->assertTrue($translation, 'Node found in database.');
 | 
			
		||||
    $this->assertTrue($translation->tnid == $node->nid, 'Translation set id correctly stored.');
 | 
			
		||||
 | 
			
		||||
    return $translation;
 | 
			
		||||
  }
 | 
			
		||||
@@ -307,14 +203,7 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
   *   Optional array of langcode => translation. If not present, it will be generated.
 | 
			
		||||
   */
 | 
			
		||||
  function createStringTranslation($textgroup, $name, $translations = NULL) {
 | 
			
		||||
    // Generate translations if not found, they will be the same length as source string
 | 
			
		||||
    if (!$translations) {
 | 
			
		||||
      $length = drupal_strlen($name);
 | 
			
		||||
      foreach ($this->getOtherLanguages() as $language) {
 | 
			
		||||
        $translations[$language->language] = $this->randomName($length);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    //$this->drupalLogin($this->translator);
 | 
			
		||||
 | 
			
		||||
    // This is the language indicator on the translation search screen for
 | 
			
		||||
    // untranslated strings. Copied straight from locale.inc.
 | 
			
		||||
    $language_indicator = "<em class=\"locale-untranslated\">";
 | 
			
		||||
@@ -329,32 +218,43 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
    // assertText() seems to remove the input field where $name always could be
 | 
			
		||||
    // found, so this is not a false assert. See how assertNoText succeeds
 | 
			
		||||
    // later.
 | 
			
		||||
    //$this->assertNoUniqueText();
 | 
			
		||||
    $this->assertText(check_plain($name), t('Search found the name.'));
 | 
			
		||||
    $this->assertRaw($language_indicator, t('Name is untranslated.'));
 | 
			
		||||
    $this->assertText(check_plain($name), 'Search found the name.');
 | 
			
		||||
    $this->assertRaw($language_indicator, 'Name is untranslated.');
 | 
			
		||||
 | 
			
		||||
    // Is not always the only result, iif there is more than one click the first.
 | 
			
		||||
    // Is not always the only result, if there is more than one click the first.
 | 
			
		||||
    if ($this->countString(check_plain($name)) > 1) {
 | 
			
		||||
      $this->clickLink(t('edit'), 0);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    else {
 | 
			
		||||
      $this->clickLink(t('edit'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // We save the lid from the path.
 | 
			
		||||
    $matches = array();
 | 
			
		||||
    preg_match('!admin/config/regional/translate/edit/(\d+)!', $this->getUrl(), $matches);
 | 
			
		||||
    $lid = $matches[1];
 | 
			
		||||
    // No t() here, it's surely not translated yet.
 | 
			
		||||
    $this->assertRaw(check_plain($name), t($name . ' name found on edit screen.'));
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Using check_plain() and wordwrap() as i18n_string_locale_translate_edit_form().
 | 
			
		||||
     * Assert fails otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    $this->assertRaw(check_plain(wordwrap($name, 0)), t($name . ' name found on edit screen.'));
 | 
			
		||||
    foreach ($translations as $langcode => $translation) {
 | 
			
		||||
      $edit["translations[$langcode]"] = $translation;
 | 
			
		||||
    }
 | 
			
		||||
    $this->drupalPost(NULL, $edit, t('Save translations'));
 | 
			
		||||
    $this->assertText(t('The string has been saved.'), t('The string has been saved.'));
 | 
			
		||||
    $this->assertEqual($this->getUrl(), url('admin/config/regional/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
 | 
			
		||||
    $this->assertText(t('The string has been saved.'), 'The string has been saved.');
 | 
			
		||||
    $this->assertEqual($this->getUrl(), url('admin/config/regional/translate/translate', array('absolute' => TRUE)), 'Correct page redirection.');
 | 
			
		||||
    $search = array(
 | 
			
		||||
      'string' => $name,
 | 
			
		||||
      'language' => 'all',
 | 
			
		||||
      'translation' => 'translated',
 | 
			
		||||
      'group' => $textgroup,
 | 
			
		||||
    );
 | 
			
		||||
    $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter'));
 | 
			
		||||
    // The indicator should not be here.
 | 
			
		||||
    //$this->assertNoRaw($language_indicator, t('String is translated.'));
 | 
			
		||||
    $this->assertText(check_plain($name), 'Search found the name.');
 | 
			
		||||
    $this->assertNoRaw($language_indicator, 'Name is translated.');
 | 
			
		||||
 | 
			
		||||
    return $translations;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -375,3 +275,180 @@ class WebformLocalizationTestCase extends DrupalWebTestCase {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class WebformLocalizationStringTranslationTestCase extends WebformLocalizationWebTestCase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Implements getInfo().
 | 
			
		||||
   */
 | 
			
		||||
  public static function getInfo() {
 | 
			
		||||
    return array(
 | 
			
		||||
      'name' => 'Webform Localization',
 | 
			
		||||
      'description' => 'Webform localization String Translations Tests.',
 | 
			
		||||
      'group' => 'Webform Localization',
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Set up test.
 | 
			
		||||
   */
 | 
			
		||||
  public function setUp($modules = array()) {
 | 
			
		||||
    parent::setUp(array('translation', 'i18n', 'i18n_string'));
 | 
			
		||||
 | 
			
		||||
    // Set "Webform" content type to use multilingual support with translation.
 | 
			
		||||
    $this->drupalGet('admin/structure/types/manage/webform');
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['language_content_type'] = 2;
 | 
			
		||||
    $this->drupalPost('admin/structure/types/manage/webform', $edit, t('Save content type'));
 | 
			
		||||
    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Webform')), 'Webform content type has been updated.');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Test creating a webform and enabling localization by string translation
 | 
			
		||||
   */
 | 
			
		||||
  function testWebformLocalizationStringTranslation() {
 | 
			
		||||
    $this->drupalLogin($this->admin_user);
 | 
			
		||||
    /**
 | 
			
		||||
     * Create the Webform test node, and enable
 | 
			
		||||
     * localization by string translation feature
 | 
			
		||||
     */
 | 
			
		||||
    $node = $this->createWebformForm();
 | 
			
		||||
 | 
			
		||||
    // Submit translation in Spanish.
 | 
			
		||||
    $node_translation_title = 'Webform title in Spanish';
 | 
			
		||||
    $node_translation_body = 'Content in Spanish';
 | 
			
		||||
    $node_translation1 = $this->createWebformTranslation($node, $node_translation_title, $node_translation_body, 'es');
 | 
			
		||||
 | 
			
		||||
    // Submit translation in German.
 | 
			
		||||
    $node_translation_title = 'Webform title in German';
 | 
			
		||||
    $node_translation_body = 'Content in German';
 | 
			
		||||
    $node_translation2 = $this->createWebformTranslation($node, $node_translation_title, $node_translation_body, 'de');
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enables localization by string translation and reuse the single webform
 | 
			
		||||
     * across the translation set.
 | 
			
		||||
     */
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['expose_strings'] = TRUE;
 | 
			
		||||
    $edit['single_webform'] = TRUE;
 | 
			
		||||
    $this->drupalPost('node/' . $node->nid . '/webform/configure', $edit, t('Save configuration'));
 | 
			
		||||
    $this->assertRaw(t('The form settings have been updated.'), 'Webform string translation and single webform enabled.');
 | 
			
		||||
 | 
			
		||||
    // Checks for webform components in the Spanish node
 | 
			
		||||
    $this->drupalGet('es/node/' . $node_translation1->nid);
 | 
			
		||||
    foreach ($node->webform['components'] as $key => $value) {
 | 
			
		||||
      if ($value['name'] == 'Hidden') {
 | 
			
		||||
        $this->assertNoRaw($value['name'], format_string('The %c webform component is not present.', array('%c' => $value['name'])), 'Spanish Webform translation');
 | 
			
		||||
        CONTINUE;
 | 
			
		||||
      }
 | 
			
		||||
      $this->assertRaw($value['name'], format_string('The %c webform component is present.', array('%c' => $value['name'])), 'Spanish Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Checks for webform components in the Deutsch node
 | 
			
		||||
    $this->drupalGet('de/node/' . $node_translation2->nid);
 | 
			
		||||
    foreach ($node->webform['components'] as $key => $value) {
 | 
			
		||||
      if ($value['name'] == 'Hidden') {
 | 
			
		||||
        $this->assertNoRaw($value['name'], format_string('The %c webform component is not present.', array('%c' => $value['name'])), 'German Webform translation');
 | 
			
		||||
        CONTINUE;
 | 
			
		||||
      }
 | 
			
		||||
      $this->assertRaw($value['name'], format_string('The %c webform component is present.', array('%c' => $value['name'])), 'Deutsch Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Refresh webform strings
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['groups[webform]'] = 'webform';
 | 
			
		||||
    $this->drupalPost('admin/config/regional/translate/i18n_string', $edit, t('Refresh strings'));
 | 
			
		||||
 | 
			
		||||
    // Select webform localization options that match this node ID.
 | 
			
		||||
    $options = db_select('locales_source')
 | 
			
		||||
            ->fields('locales_source')
 | 
			
		||||
            ->condition('textgroup', 'webform', '=')
 | 
			
		||||
            ->execute()
 | 
			
		||||
            ->fetchAllAssoc('lid', PDO::FETCH_ASSOC);
 | 
			
		||||
 | 
			
		||||
    // Translates webform components.
 | 
			
		||||
    $translations = array();
 | 
			
		||||
    $extra_translations = array();
 | 
			
		||||
    foreach ($options as $key => $value) {
 | 
			
		||||
      $name = $value['source'];
 | 
			
		||||
      $translations['de'] = 'de:' . $name;
 | 
			
		||||
      $translations['es'] = 'es:' . $name;
 | 
			
		||||
      $this->createStringTranslation('webform', $name, $translations);
 | 
			
		||||
      // We take out confirmation to check after submit.
 | 
			
		||||
      if (strpos($value['location'], 'confirmation')) {
 | 
			
		||||
        $extra_translations['confirmation'] = $value['source'];
 | 
			
		||||
        unset($options[$key]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    $this->drupalGet('es/node/' . $node_translation1->nid);
 | 
			
		||||
    foreach ($options as $key => $value) {
 | 
			
		||||
      list(, $cid, ) = explode(':', $value['context']);
 | 
			
		||||
      $component = $node->webform['components'][$cid];
 | 
			
		||||
      $name = $value['source'];
 | 
			
		||||
      $translation = 'es:' . $name;
 | 
			
		||||
      if ($name == 'Hidden') {
 | 
			
		||||
        CONTINUE;
 | 
			
		||||
      }
 | 
			
		||||
      $this->assertRaw($translation, format_string('%c translation is present.', array('%c' => $name)), 'Spanish Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
    $this->drupalGet('de/node/' . $node_translation2->nid);
 | 
			
		||||
    foreach ($options as $key => $value) {
 | 
			
		||||
      $name = $value['source'];
 | 
			
		||||
      $translation = 'de:' . $name;
 | 
			
		||||
      if ($name == 'Hidden') {
 | 
			
		||||
        CONTINUE;
 | 
			
		||||
      }
 | 
			
		||||
      $this->assertRaw($translation, format_string('%c translation is present.', array('%c' => $name)), 'Deutsch Webform translation');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class WebformLocalizationApiTestCase extends WebformLocalizationWebTestCase {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Test info.
 | 
			
		||||
   */
 | 
			
		||||
  public static function getInfo() {
 | 
			
		||||
    return array(
 | 
			
		||||
      'name' => 'Test Webform Localization API.',
 | 
			
		||||
      'description' => 'Test webform and webform localization interaction at API level.',
 | 
			
		||||
      'group' => 'Webform Localization',
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Set up test.
 | 
			
		||||
   */
 | 
			
		||||
  public function setUp($modules = array()) {
 | 
			
		||||
    parent::setUp(array('translation', 'i18n', 'i18n_string'));
 | 
			
		||||
 | 
			
		||||
    // Set "Webform" content type to use multilingual support with translation.
 | 
			
		||||
    $this->drupalGet('admin/structure/types/manage/webform');
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['language_content_type'] = 2;
 | 
			
		||||
    $this->drupalPost('admin/structure/types/manage/webform', $edit, t('Save content type'));
 | 
			
		||||
    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Webform')), 'Webform content type has been updated.');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Test submissions API function with webform localization presence.
 | 
			
		||||
   */
 | 
			
		||||
  function testWebformLocalizationApi() {
 | 
			
		||||
    $this->drupalLogin($this->admin_user);
 | 
			
		||||
    $node = $this->createWebformForm();
 | 
			
		||||
    /**
 | 
			
		||||
     * Enables localization by string translation and reuse the single webform
 | 
			
		||||
     * across the translation set.
 | 
			
		||||
     */
 | 
			
		||||
    $edit = array();
 | 
			
		||||
    $edit['expose_strings'] = TRUE;
 | 
			
		||||
    $edit['single_webform'] = TRUE;
 | 
			
		||||
    $this->drupalPost('node/' . $node->nid . '/webform/configure', $edit, t('Save configuration'));
 | 
			
		||||
    $this->assertRaw(t('The form settings have been updated.'), 'Webform string translation and single webform enabled.');
 | 
			
		||||
 | 
			
		||||
    module_load_include('inc', 'webform', 'includes/webform.submissions');
 | 
			
		||||
    $this->assertFalse(webform_get_submissions($node->nid), "Function webform_get_submission($node->nid,1000) work correctly with empty submissions.");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,9 @@ package = Webform
 | 
			
		||||
 | 
			
		||||
files[] = tests/webform_localization.test
 | 
			
		||||
 | 
			
		||||
; Information added by drupal.org packaging script on 2013-09-11
 | 
			
		||||
; Information added by Drupal.org packaging script on 2014-03-28
 | 
			
		||||
version = "7.x-4.x-dev"
 | 
			
		||||
core = "7.x"
 | 
			
		||||
project = "webform_localization"
 | 
			
		||||
datestamp = "1378901956"
 | 
			
		||||
datestamp = "1396049366"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ function webform_localization_install() {
 | 
			
		||||
    'not null' => TRUE,
 | 
			
		||||
    'default' => '',
 | 
			
		||||
  ));
 | 
			
		||||
  variable_set('webform_localization_using_uuid', module_exists('uuid'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -29,6 +30,7 @@ function webform_localization_install() {
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_uninstall() {
 | 
			
		||||
  db_drop_field('webform_submissions', 'language');
 | 
			
		||||
  variable_del('webform_localization_using_uuid');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 * Further development sponsored by Riot Games.
 | 
			
		||||
 *
 | 
			
		||||
 * @author German Martin <gmartin.prg@gmail.com>
 | 
			
		||||
 * @author German Martin <gmartin.php@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -48,19 +48,27 @@ function webform_localization_i18n_string_info() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Update / create / delete translation source for components
 | 
			
		||||
 * Update / create / delete translation source for components.
 | 
			
		||||
 *
 | 
			
		||||
 * Refresh callback that regenerates all the translatable poperties of the
 | 
			
		||||
 * components of the matching webforms configuration
 | 
			
		||||
 * components of the matching webforms configuration.
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_i18n_string_refresh() {
 | 
			
		||||
 | 
			
		||||
  module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
 | 
			
		||||
  // In case updating before UUID support.
 | 
			
		||||
  if (module_exists('uuid') && !variable_get('webform_localization_using_uuid', FALSE)) {
 | 
			
		||||
    webform_localization_uuid_update_strings(FALSE);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Get components configured as translatable.
 | 
			
		||||
  $query = db_select('webform_component', 'wc');
 | 
			
		||||
  $query->fields('wc');
 | 
			
		||||
  $query->condition('wl.expose_strings', 0, '>');
 | 
			
		||||
  $query->innerJoin('webform_localization', 'wl', 'wc.nid = wl.nid');
 | 
			
		||||
  $components = $query->execute()->fetchAll();
 | 
			
		||||
  module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
 | 
			
		||||
  foreach ($components as $component) {
 | 
			
		||||
    $component = (array) $component;
 | 
			
		||||
    $component['extra'] = unserialize($component['extra']);
 | 
			
		||||
@@ -204,9 +212,9 @@ function webform_localization_node_view($node, $view_mode) {
 | 
			
		||||
  $query = db_select('webform', 'w');
 | 
			
		||||
  $query->innerJoin('webform_localization', 'wl', 'w.nid = wl.nid');
 | 
			
		||||
  $query->fields('w', array('nid'));
 | 
			
		||||
  $query->condition('wl.single_webform', 0, '!=');
 | 
			
		||||
  $query->condition('wl.single_webform', 0, '<>');
 | 
			
		||||
  $query->condition('wl.single_webform', $node->tnid, '=');
 | 
			
		||||
  $query->condition('w.nid', $node->nid, '!=');
 | 
			
		||||
  $query->condition('w.nid', $node->nid, '<>');
 | 
			
		||||
  $result = $query->execute()->fetchField();
 | 
			
		||||
 | 
			
		||||
  if ($result) {
 | 
			
		||||
@@ -217,10 +225,18 @@ function webform_localization_node_view($node, $view_mode) {
 | 
			
		||||
     * independent function to reuse.
 | 
			
		||||
     */
 | 
			
		||||
    $source_node = node_load($result);
 | 
			
		||||
    // We replace the webform with the node translation source
 | 
			
		||||
    // We replace the webform with the node translation source.
 | 
			
		||||
    $node->webform = $source_node->webform;
 | 
			
		||||
    // Call node view implementation to update the $node->content
 | 
			
		||||
 | 
			
		||||
    // This fool webform_node_view to avoid errors with drafts in between pages.
 | 
			
		||||
    $translation_nid = $node->nid;
 | 
			
		||||
    if (($node->webform['allow_draft'] || $node->webform['auto_save']) && $user->uid != 0) {
 | 
			
		||||
      $node->nid = $source_node->nid;
 | 
			
		||||
    }
 | 
			
		||||
    // Call node view implementation to update the $node->content.
 | 
			
		||||
    webform_node_view($node, $view_mode);
 | 
			
		||||
    // Reset the nid if we used the drafts fix.
 | 
			
		||||
    $node->nid = $translation_nid;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -238,7 +254,7 @@ function webform_localization_node_load($nodes, $types) {
 | 
			
		||||
    $wl_options = webform_localization_get_config($nid);
 | 
			
		||||
    if ($wl_options['expose_strings']) {
 | 
			
		||||
      module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
      // Translate custom strings
 | 
			
		||||
      // Translate custom strings.
 | 
			
		||||
      webform_localization_translate_strings($node);
 | 
			
		||||
      webform_localization_email_translate_strings($node);
 | 
			
		||||
    }
 | 
			
		||||
@@ -268,6 +284,9 @@ function webform_localization_webform_submission_insert($node, $submission) {
 | 
			
		||||
 * Implements hook_webform_submission_load().
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_webform_submission_load(&$submissions) {
 | 
			
		||||
  if(empty($submissions)) {
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
  $query = db_select('webform_submissions', 's');
 | 
			
		||||
  $query->fields('s', array('language', 'sid'));
 | 
			
		||||
  $query->condition('s.sid', array_keys($submissions), 'IN');
 | 
			
		||||
@@ -282,7 +301,7 @@ function webform_localization_webform_submission_load(&$submissions) {
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_node_delete($node) {
 | 
			
		||||
  if (!in_array($node->type, webform_variable_get('webform_node_types'))
 | 
			
		||||
    || empty($node->webform['components'])) {
 | 
			
		||||
      || empty($node->webform['components'])) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
@@ -318,14 +337,40 @@ function webform_localization_webform_component_display_alter(&$display_element,
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_webform_analysis_component_data_alter().
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_webform_analysis_component_data_alter(&$data, $node, &$component) {
 | 
			
		||||
  // Gets webform localization options that match this node ID.
 | 
			
		||||
  $wl_options = webform_localization_get_config($node->nid);
 | 
			
		||||
  // Translate the translatable properties.
 | 
			
		||||
  if ($wl_options['expose_strings']) {
 | 
			
		||||
    module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
    _webform_localization_translate_analysis_component($data, $component);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_form_FORM_ID_alter().
 | 
			
		||||
 *
 | 
			
		||||
 * Add specific localization options to Webform Configure Form
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_form_webform_configure_form_alter(&$form, &$form_state, $form_id) {
 | 
			
		||||
 | 
			
		||||
  // Gets webform localization options that match this node ID.
 | 
			
		||||
  $webform_localization_options = webform_localization_get_config($form['nid']['#value']);
 | 
			
		||||
 | 
			
		||||
  if ($webform_localization_options['expose_strings']) {
 | 
			
		||||
    // Avoid caching for translatable element values.
 | 
			
		||||
    entity_get_controller('node')->resetCache(array($form['nid']['#value']));
 | 
			
		||||
    $form['#node'] = node_load($form['nid']['#value']);
 | 
			
		||||
    $form['submission']['confirmation']['#default_value'] = $form['#node']->webform['confirmation'];
 | 
			
		||||
    if ($form['submission']['redirection']['redirect']['#default_value'] == 'url') {
 | 
			
		||||
      $form['submission']['redirection']['redirect_url']['#default_value'] = $form['#node']->webform['redirect_url'];
 | 
			
		||||
    }
 | 
			
		||||
    $form['advanced']['submit_text']['#default_value'] = $form['#node']->webform['submit_text'];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $single_webform = 0;
 | 
			
		||||
  if ($webform_localization_options['single_webform'] > 0) {
 | 
			
		||||
    $single_webform = 1;
 | 
			
		||||
@@ -388,10 +433,16 @@ function webform_localization_form_webform_configure_form_alter(&$form, &$form_s
 | 
			
		||||
    '#description' => '<p>' . t('Keep the webform e-mail recipients synchronized in a translation set.') . '</p>',
 | 
			
		||||
  );
 | 
			
		||||
  $form['#submit'][] = '_webform_localization_webform_configure_form_submit';
 | 
			
		||||
  if ($webform_localization_options['expose_strings']) {
 | 
			
		||||
    // Using i18n string we need to tweak values before submit.
 | 
			
		||||
    $submit_array = $form['#submit'];
 | 
			
		||||
    array_unshift($submit_array, '_webform_localization_webform_configure_form_submit_i18n_tweaks');
 | 
			
		||||
    $form['#submit'] = $submit_array;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handle specific localization options in Webform Configure Form
 | 
			
		||||
 * Handle specific localization options in Webform Configure Form.
 | 
			
		||||
 */
 | 
			
		||||
function _webform_localization_webform_configure_form_submit($form, &$form_state) {
 | 
			
		||||
 | 
			
		||||
@@ -439,6 +490,25 @@ function _webform_localization_webform_configure_form_submit($form, &$form_state
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handle translated element tweaks in Webform Configure Form.
 | 
			
		||||
 */
 | 
			
		||||
function _webform_localization_webform_configure_form_submit_i18n_tweaks($form, &$form_state) {
 | 
			
		||||
  global $language;
 | 
			
		||||
  $default_language = language_default();
 | 
			
		||||
  if ($default_language->language != $language->language) {
 | 
			
		||||
    // Webform Configure Form not in default language.
 | 
			
		||||
    module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
    $name = webform_localization_i18n_string_name($form['#node']->webform['nid'], 'confirmation');
 | 
			
		||||
    $string_source = i18n_string_get_string($name);
 | 
			
		||||
    $string_translation = $form_state['values']['confirmation']['value'];
 | 
			
		||||
    // We reset the source string value before saving the form.
 | 
			
		||||
    $form_state['values']['confirmation']['value'] = $string_source->get_string();
 | 
			
		||||
    // We save the translated string using i18n string.
 | 
			
		||||
    i18n_string_translation_update($name, $string_translation, $language->language);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_form_FORM_ID_alter().
 | 
			
		||||
 *
 | 
			
		||||
@@ -578,9 +648,8 @@ function webform_localization_field_attach_prepare_translation_alter(&$entity, $
 | 
			
		||||
         * Perhaps could be interesting to copy only specific properties
 | 
			
		||||
         * but for now the entire webform make more sense.
 | 
			
		||||
         */
 | 
			
		||||
          $entity->webform = $context['source_entity']->webform;
 | 
			
		||||
        $entity->webform = $context['source_entity']->webform;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -592,8 +661,9 @@ function webform_localization_field_attach_prepare_translation_alter(&$entity, $
 | 
			
		||||
 *   An array of webform localization options group by nid.
 | 
			
		||||
 * @param $nid
 | 
			
		||||
 *   A node Id.
 | 
			
		||||
 * @param boolean $clear_cache
 | 
			
		||||
 * @param bool $clear_cache
 | 
			
		||||
 *   A flag to force a database reading in case that properties are cached.
 | 
			
		||||
 *
 | 
			
		||||
 * @return array
 | 
			
		||||
 *   Webform localization options that match the nid.
 | 
			
		||||
 */
 | 
			
		||||
@@ -644,9 +714,10 @@ function webform_localization_get_config($nid, $clear_cache = FALSE) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Global switch to enable / disable syncing.
 | 
			
		||||
 *
 | 
			
		||||
 * This function also check whether we are synching at the moment.
 | 
			
		||||
 *
 | 
			
		||||
 * @return boolean
 | 
			
		||||
 * @return bool
 | 
			
		||||
 *   TRUE if we need to run sync operations. FALSE during syncing
 | 
			
		||||
 *   so we don't have recursion.
 | 
			
		||||
 */
 | 
			
		||||
@@ -659,7 +730,7 @@ function _webform_localization_sync($status = NULL) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Translate webform confirmation field
 | 
			
		||||
 * Translate webform confirmation field.
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_preprocess_webform_confirmation(&$vars) {
 | 
			
		||||
  if (empty($vars['node']->tnid)) {
 | 
			
		||||
@@ -670,7 +741,7 @@ function webform_localization_preprocess_webform_confirmation(&$vars) {
 | 
			
		||||
  $query->innerJoin('webform_localization', 'wl', 'w.nid = wl.nid');
 | 
			
		||||
  $query->fields('w', array('nid'));
 | 
			
		||||
  $query->condition('wl.single_webform', $vars['node']->tnid, '=');
 | 
			
		||||
  $query->condition('w.nid', $vars['node']->nid, '!=');
 | 
			
		||||
  $query->condition('w.nid', $vars['node']->nid, '<>');
 | 
			
		||||
  $result = $query->execute()->fetchField();
 | 
			
		||||
  if ($result) {
 | 
			
		||||
    $source_node = node_load($result);
 | 
			
		||||
@@ -684,3 +755,44 @@ function webform_localization_preprocess_webform_confirmation(&$vars) {
 | 
			
		||||
  // Strip out empty tags added by WYSIWYG editors if needed.
 | 
			
		||||
  $vars['confirmation_message'] = drupal_strlen(trim(strip_tags($confirmation))) ? $confirmation : '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_form_webform_client_form_alter().
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_form_webform_client_form_alter(&$form, &$form_state, $form_id) {
 | 
			
		||||
  if (!isset($form['#node']->webform['nid'])) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  $webform_localization_options = webform_localization_get_config($form['#node']->webform['nid']);
 | 
			
		||||
  if ($webform_localization_options['single_webform']) {
 | 
			
		||||
    if (isset($form['details']['nid']['#value']) && $form['#node']->webform['nid'] == $form['#node']->tnid) {
 | 
			
		||||
      // We keep current language node nid.
 | 
			
		||||
      $form['details']['current_language_nid'] = array(
 | 
			
		||||
        '#type' => 'value',
 | 
			
		||||
        '#value' => $form['details']['nid']['#value'],
 | 
			
		||||
      );
 | 
			
		||||
      // Nid from the source webform for webform_validation.
 | 
			
		||||
      $form['details']['nid']['#value'] = $form['#node']->webform['nid'];
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_modules_disabled().
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_modules_disabled($modules) {
 | 
			
		||||
  if (in_array('uuid', $modules)) {
 | 
			
		||||
    module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
    webform_localization_uuid_update_strings(TRUE);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_modules_enabled().
 | 
			
		||||
 */
 | 
			
		||||
function webform_localization_modules_enabled($modules) {
 | 
			
		||||
  if (in_array('uuid', $modules)) {
 | 
			
		||||
    module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 | 
			
		||||
    webform_localization_uuid_update_strings(FALSE);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -22,6 +22,7 @@ function _webform_defaults_phone() {
 | 
			
		||||
      'private'                    => FALSE,
 | 
			
		||||
      'attributes'                 => array(),
 | 
			
		||||
      'description'                => '',
 | 
			
		||||
      'placeholder'                => '',
 | 
			
		||||
      'country'                    => 'ca',
 | 
			
		||||
      'phone_country_code'         => 0,
 | 
			
		||||
      'phone_default_country_code' => 1,
 | 
			
		||||
@@ -74,8 +75,8 @@ function _webform_edit_phone($component) {
 | 
			
		||||
    '#type'   => 'markup',
 | 
			
		||||
    '#value'  => t('International phone numbers are in the form +XX YYYYYYY where XX is a country code and YYYYYYY is the local number. This field type is based off of the <a href="http://www.itu.int/rec/T-REC-E.123/en">E.123 specification</a>.'),
 | 
			
		||||
    '#states' => array(
 | 
			
		||||
      'visible' => array( // action to take.
 | 
			
		||||
                          ':input[name="extra[country]"]' => array( 'value' => 'int' ),
 | 
			
		||||
      'visible' => array(
 | 
			
		||||
        ':input[name="extra[country]"]' => array( 'value' => 'int' ),
 | 
			
		||||
      ),
 | 
			
		||||
    ),
 | 
			
		||||
  );
 | 
			
		||||
@@ -84,8 +85,8 @@ function _webform_edit_phone($component) {
 | 
			
		||||
    '#title'         => t('Default country code to add to international numbers without one (omit + sign)'),
 | 
			
		||||
    '#default_value' => $component['extra']['phone_default_country_code'],
 | 
			
		||||
    '#states'        => array(
 | 
			
		||||
      'visible' => array( // action to take.
 | 
			
		||||
                          ':input[name="extra[country]"]' => array( 'value' => 'int' ),
 | 
			
		||||
      'visible' => array(
 | 
			
		||||
        ':input[name="extra[country]"]' => array( 'value' => 'int' ),
 | 
			
		||||
      ),
 | 
			
		||||
    ),
 | 
			
		||||
  );
 | 
			
		||||
@@ -94,8 +95,8 @@ function _webform_edit_phone($component) {
 | 
			
		||||
    '#title'         => t('Maximum length of international numbers, according to the ITU this is 15'),
 | 
			
		||||
    '#default_value' => $component['extra']['phone_int_max_length'],
 | 
			
		||||
    '#states'        => array(
 | 
			
		||||
      'visible' => array( // action to take.
 | 
			
		||||
                          ':input[name="extra[country]"]' => array( 'value' => 'int' ),
 | 
			
		||||
      'visible' => array(
 | 
			
		||||
        ':input[name="extra[country]"]' => array( 'value' => 'int' ),
 | 
			
		||||
      ),
 | 
			
		||||
    ),
 | 
			
		||||
  );
 | 
			
		||||
@@ -106,8 +107,8 @@ function _webform_edit_phone($component) {
 | 
			
		||||
    '#default_value' => $component['extra']['ca_phone_separator'],
 | 
			
		||||
    '#size'          => 2,
 | 
			
		||||
    '#states'        => array(
 | 
			
		||||
      'visible' => array( // action to take.
 | 
			
		||||
                          ':input[name="extra[country]"]' => array( 'value' => 'ca' ),
 | 
			
		||||
      'visible' => array(
 | 
			
		||||
        ':input[name="extra[country]"]' => array( 'value' => 'ca' ),
 | 
			
		||||
      ),
 | 
			
		||||
    ),
 | 
			
		||||
  );
 | 
			
		||||
@@ -116,8 +117,8 @@ function _webform_edit_phone($component) {
 | 
			
		||||
    '#title'         => t('Use parentheses around area code'),
 | 
			
		||||
    '#default_value' => $component['extra']['ca_phone_parentheses'],
 | 
			
		||||
    '#states'        => array(
 | 
			
		||||
      'visible' => array( // action to take.
 | 
			
		||||
                          ':input[name="extra[country]"]' => array( 'value' => 'ca' ),
 | 
			
		||||
      'visible' => array(
 | 
			
		||||
        ':input[name="extra[country]"]' => array( 'value' => 'ca' ),
 | 
			
		||||
      ),
 | 
			
		||||
    ),
 | 
			
		||||
  );
 | 
			
		||||
@@ -140,6 +141,14 @@ function _webform_edit_phone($component) {
 | 
			
		||||
    '#weight'        => 0,
 | 
			
		||||
    '#parents'       => array( 'extra', 'width' ),
 | 
			
		||||
  );
 | 
			
		||||
  $form['display']['placeholder'] = array(
 | 
			
		||||
    '#type'          => 'textfield',
 | 
			
		||||
    '#title'         => t('Placeholder'),
 | 
			
		||||
    '#default_value' => $component['extra']['placeholder'],
 | 
			
		||||
    '#description'   => t('The text will be shown in the field until the user starts entering a value.'),
 | 
			
		||||
    '#weight'        => 1,
 | 
			
		||||
    '#parents'       => array( 'extra', 'placeholder' ),
 | 
			
		||||
  );
 | 
			
		||||
  $form['display']['disabled'] = array(
 | 
			
		||||
    '#type'          => 'checkbox',
 | 
			
		||||
    '#title'         => t('Disabled'),
 | 
			
		||||
@@ -189,22 +198,26 @@ function _webform_render_phone($component, $value = NULL, $filter = TRUE) {
 | 
			
		||||
    '#weight'           => $component['weight'],
 | 
			
		||||
    '#translatable'     => array( 'title', 'description' ),
 | 
			
		||||
  );
 | 
			
		||||
  if ( isset( $value ) ) {
 | 
			
		||||
  if (isset( $value )) {
 | 
			
		||||
    $form_item['#default_value'] = $value[0];
 | 
			
		||||
  }
 | 
			
		||||
  // Change the 'width' option to the correct 'size' option.
 | 
			
		||||
  if ( $component['extra']['width'] > 0 ) {
 | 
			
		||||
  if ($component['extra']['width'] > 0) {
 | 
			
		||||
    $form_item['#size'] = $component['extra']['width'];
 | 
			
		||||
  }
 | 
			
		||||
  if ( $component['extra']['disabled'] ) {
 | 
			
		||||
    if ( $filter ) {
 | 
			
		||||
  // Show the placeholder text if used.
 | 
			
		||||
  if ($component['extra']['placeholder']) {
 | 
			
		||||
    $form_item['#attributes']['placeholder'] = $component['extra']['placeholder'];
 | 
			
		||||
  }
 | 
			
		||||
  if ($component['extra']['disabled']) {
 | 
			
		||||
    if ($filter) {
 | 
			
		||||
      $form_item['#attributes']['readonly'] = 'readonly';
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      $form_item['#disabled'] = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if ( isset( $value[0] ) ) {
 | 
			
		||||
  if (isset( $value[0] )) {
 | 
			
		||||
    $form_item['#default_value'] = $value[0];
 | 
			
		||||
  }
 | 
			
		||||
  return $form_item;
 | 
			
		||||
@@ -215,10 +228,10 @@ function _webform_render_phone($component, $value = NULL, $filter = TRUE) {
 | 
			
		||||
 */
 | 
			
		||||
function webform_validate_phone($element, $form_state) {
 | 
			
		||||
  $value = $element['#value'];
 | 
			
		||||
  if ( isset( $value ) && $value != '' ) {
 | 
			
		||||
  if (isset( $value ) && $value != '') {
 | 
			
		||||
    $ccode = $element['#webform_component']['extra']['country'];
 | 
			
		||||
    //run through 'phone' module's validation
 | 
			
		||||
    if ( !valid_phone_number($ccode, $value) ) {
 | 
			
		||||
    if (!valid_phone_number($ccode, $value)) {
 | 
			
		||||
      $country = phone_country_info($ccode);
 | 
			
		||||
      form_error($element, t($country['error'], array( '%value' => $value )));
 | 
			
		||||
    }
 | 
			
		||||
@@ -272,7 +285,7 @@ function _webform_display_phone($component, $value, $format = 'html') {
 | 
			
		||||
function theme_webform_display_phonefield($variables) {
 | 
			
		||||
  $element = $variables['element'];
 | 
			
		||||
  $plain_value = check_plain($element['#value']);
 | 
			
		||||
  if ( $element['#format'] == 'html' ) {
 | 
			
		||||
  if ($element['#format'] == 'html') {
 | 
			
		||||
    //Use smarter detection if available for formatting the output
 | 
			
		||||
    $is_mobile_device = module_exists('mobile_tools') ? mobile_tools_is_mobile_device() : strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== FALSE || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== FALSE;
 | 
			
		||||
    $value = ( $is_mobile_device ) ? '<a href="tel:' . $plain_value . '">' . $plain_value . '</a>' : $plain_value;
 | 
			
		||||
@@ -304,8 +317,8 @@ function theme_webform_display_phonefield($variables) {
 | 
			
		||||
 */
 | 
			
		||||
function _webform_submit_phone($component, $value) {
 | 
			
		||||
  $ccode = $component['extra']['country'];
 | 
			
		||||
  if ( phone_countries($ccode) !== NULL ) {
 | 
			
		||||
    if ( isset( $value ) && !empty( $value ) ) {
 | 
			
		||||
  if (phone_countries($ccode) !== NULL) {
 | 
			
		||||
    if (isset( $value ) && !empty( $value )) {
 | 
			
		||||
      //Use 'phone' module to format the number
 | 
			
		||||
      return format_phone_number($ccode, $value, $component['extra']);
 | 
			
		||||
    }
 | 
			
		||||
@@ -336,14 +349,14 @@ function _webform_submit_phone($component, $value) {
 | 
			
		||||
function _webform_analysis_phone($component, $sids = array(), $single = FALSE) {
 | 
			
		||||
  // Generate the list of options and questions.
 | 
			
		||||
  $query = db_select('webform_submitted_data', 'wsd', array( 'fetch' => PDO::FETCH_ASSOC ))->fields('wsd', array( 'data' ))->condition('nid', $component['nid'])->condition('cid', $component['cid']);
 | 
			
		||||
  if ( count($sids) ) {
 | 
			
		||||
  if (count($sids)) {
 | 
			
		||||
    $query->condition('sid', $sids, 'IN');
 | 
			
		||||
  }
 | 
			
		||||
  $non_blanks = 0;
 | 
			
		||||
  $submissions = 0;
 | 
			
		||||
  $result = $query->execute();
 | 
			
		||||
  foreach ( $result as $data ) {
 | 
			
		||||
    if ( drupal_strlen(trim($data['data'])) > 0 ) {
 | 
			
		||||
  foreach ($result as $data) {
 | 
			
		||||
    if (drupal_strlen(trim($data['data'])) > 0) {
 | 
			
		||||
      $non_blanks++;
 | 
			
		||||
    }
 | 
			
		||||
    $submissions++;
 | 
			
		||||
@@ -422,11 +435,11 @@ function _webform_csv_data_phone($component, $export_options, $value) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 The first hook provides the name and position of the field in the Form Builder palette, as well as a default element to display when the field is pulled out of the palette.
 | 
			
		||||
The second hook maps the component properties and options to FormAPI properties that Form Builder can manipulate.
 | 
			
		||||
Form Builder then will manage pulling the form out of the normal Webform configuration form, loading configuration, and saving it.
 | 
			
		||||
There are plenty of examples in the form_builder_webform.components.inc file that other modules (such as Webform Phone Number) can use as templates.
 | 
			
		||||
I'm moving this request over to that module's queue, and changing to a feature request.
 | 
			
		||||
 * The first hook provides the name and position of the field in the Form Builder palette, as well as a default element to display when the field is pulled out of the palette.
 | 
			
		||||
 * The second hook maps the component properties and options to FormAPI properties that Form Builder can manipulate.
 | 
			
		||||
 * Form Builder then will manage pulling the form out of the normal Webform configuration form, loading configuration, and saving it.
 | 
			
		||||
 * There are plenty of examples in the form_builder_webform.components.inc file that other modules (such as Webform Phone Number) can use as templates.
 | 
			
		||||
 * I'm moving this request over to that module's queue, and changing to a feature request.
 | 
			
		||||
 */
 | 
			
		||||
/**
 | 
			
		||||
 * @defgroup form-builder-webform-phone-callbacks Callbacks for the Phone component
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,13 @@ name = Webform Phone Number
 | 
			
		||||
description = "Phone Field type for webform."
 | 
			
		||||
package = "Webform"
 | 
			
		||||
dependencies[] = webform
 | 
			
		||||
dependencies[] = phone
 | 
			
		||||
dependencies[] = phone (1.x)
 | 
			
		||||
files[] = webform_phone.module
 | 
			
		||||
core = 7.x
 | 
			
		||||
; Information added by Drupal.org packaging script on 2014-10-16
 | 
			
		||||
version = "7.x-1.19"
 | 
			
		||||
 | 
			
		||||
; Information added by Drupal.org packaging script on 2015-01-06
 | 
			
		||||
version = "7.x-1.21"
 | 
			
		||||
core = "7.x"
 | 
			
		||||
project = "webform_phone"
 | 
			
		||||
datestamp = "1413479630"
 | 
			
		||||
datestamp = "1420529914"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,9 @@ dependencies[] = webform
 | 
			
		||||
dependencies[] = simplenews
 | 
			
		||||
files[] = webform_simplenews.inc
 | 
			
		||||
 | 
			
		||||
; Information added by drupal.org packaging script on 2013-10-01
 | 
			
		||||
; Information added by drupal.org packaging script on 2013-10-26
 | 
			
		||||
version = "7.x-1.x-dev"
 | 
			
		||||
core = "7.x"
 | 
			
		||||
project = "webform_simplenews"
 | 
			
		||||
datestamp = "1380659452"
 | 
			
		||||
datestamp = "1382756138"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user