Преглед на файлове

reverted webform_localization as it depends on webform 4.x

Bachir Soussi Chiadmi преди 8 години
родител
ревизия
66fa1d419d

+ 0 - 59
sites/all/modules/contrib/form/webform_localization/components/grid.inc

@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Webform localizations for grid 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.
- */
-
-/**
- * Implements _webform_localization_analysis_data_component().
- *
- * @param array $data
- *   The data array of component results.
- * @param array $node
- *   The node
- * @param array $component
- *   The component.
- *
- * @return array
- *   Translated data array of component results.
- */
-function _webform_localization_analysis_data_grid($data, $node, $component) {
-  if (!isset($component['extra']['translated_strings']) || !is_array($component['extra']['translated_strings'])) {
-    return $data;
-  }
-  $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 options / questions.
-    list (, $key) = explode('-', $name_list[3]);
-
-    if (strpos($name_list[3], 'grid_options') && $name_list[3] !== '#title') {
-      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') && $name_list[3] !== '#title') {
-      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]);
-          }
-        }
-      }
-    }
-  }
-  return $data;
-}

+ 0 - 102
sites/all/modules/contrib/form/webform_localization/components/select.inc

@@ -1,102 +0,0 @@
-<?php
-
-/**
- * @file
- * Webform localizations for select component.
- */
-
-/**
- * Translate a single option from component.
- *
- * @param array $component
- *   The select component
- * @param string $option
- *   Untranslated option string.
- *
- * @return string
- *   The translated option string, if found.
- */
-function webform_localization_translate_select_option($component, $option) {
-  // Find the source for data value and translate it.
-  $item_key_lookup = _webform_localization_string_to_key($component['extra']['items']);
-  foreach ($component['extra']['translated_strings'] as $name) {
-    $name_list = explode(':', $name);
-    // Translate options.
-    if (strpos($name_list[3], '-') !== FALSE) {
-      list (, $key) = explode('-', $name_list[3]);
-      if (isset($item_key_lookup[$key]) && $option == $item_key_lookup[$key]) {
-        return i18n_string($name, $option);
-      }
-    }
-  }
-  return $option;
-}
-
-/**
- * Implements _webform_localization_csv_header_component().
- */
-function _webform_localization_csv_header_select($header, $component) {
-  if (!isset($component['extra']['translated_strings']) || !is_array($component['extra']['translated_strings'])) {
-    return $header;
-  }
-  // Each component has own methods and tricks to add different items to header
-  // rows. Attempt to translate whatever we can.
-  foreach ($component['extra']['translated_strings'] as $name) {
-    $name_list = explode(':', $name);
-    // Translate header from #title property, this is rather common scenario.
-    if ($name_list[3] == '#title' && $component['name'] == $header[2][0]) {
-      $header[2] = i18n_string($name, $component['name']);
-      break;
-    }
-    // Title could be found from position [1][0] and in this case the select
-    // options are on row 2.
-    if ($name_list[3] == '#title' && $component['name'] == $header[1][0]) {
-      $header[1] = i18n_string($name, $component['name']);
-      foreach ($header[2] as $i => $option) {
-        $header[2][$i] = webform_localization_translate_select_option($component, $option);
-      }
-      break;
-    }
-  }
-  return $header;
-}
-
-/**
- * Implements _webform_localization_csv_data_component().
- */
-function _webform_localization_csv_data_select($data, $component, $submission) {
-  // If data is an array then answers are being marked as X:es and there is no
-  // need to translate these.
-  if (is_array($data)) {
-    return $data;
-  }
-  if (!isset($component['extra']['translated_strings']) || !is_array($component['extra']['translated_strings'])) {
-    return $data;
-  }
-  return webform_localization_translate_select_option($component, $data);
-}
-
-/**
- * Implements _webform_localization_analysis_data_component().
- */
-function _webform_localization_analysis_data_select($data, $node, $component) {
-  if (!isset($component['extra']['translated_strings']) || !is_array($component['extra']['translated_strings'])) {
-    return $data;
-  }
-  $item_key_lookup = _webform_localization_string_to_key($component['extra']['items']);
-  foreach ($component['extra']['translated_strings'] as $name) {
-    $name_list = explode(':', $name);
-    // Translate options.
-    if (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]);
-          }
-        }
-      }
-    }
-  }
-  return $data;
-}

+ 42 - 48
sites/all/modules/contrib/form/webform_localization/includes/webform_localization.component.sync.inc

@@ -18,42 +18,38 @@
  *
  * @staticvar array $component_translations
  *   An array of webform components for each tnid.
- *
  * @param array $component
  *   A webform component array.
- *
- * @return array
+ * @return
  *   An array of webform components that match a tnid.
+ *
  */
 function webform_localization_component_get_translations($component) {
   static $component_translations = array();
 
   $node = node_load($component['nid']);
   $translations = translation_node_get_translations($node->tnid);
-  $component_translations[$node->tnid] = array();
 
-  if (!empty($translations) && !isset($component_translations[$node->tnid])) {
+  if (!isset($component_translations[$node->tnid])) {
     $nid_list = array();
     foreach ($translations as $trans_node) {
       $nid_list[] = $trans_node->nid;
     }
     // Load components for each translated node.
-    if (!empty($nid_list)) {
-      $components = db_select('webform_component')
-          ->fields('webform_component')
-          ->condition('nid', $nid_list, 'IN')
-          ->condition('cid', $component['cid'], '=')
-          ->orderBy('nid')
-          ->execute()
-          ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
-      // Cleanup on each component.
-      foreach ($components as $cid => $c) {
-        $components[$cid]['nid'] = $c['nid'];
-        $components[$cid]['extra'] = unserialize($c['extra']);
-        webform_component_defaults($components[$cid]);
-      }
-      $component_translations[$node->tnid] = $components;
+    $components = db_select('webform_component')
+            ->fields('webform_component')
+            ->condition('nid', $nid_list, 'IN')
+            ->condition('cid', $component['cid'], '=')
+            ->orderBy('nid')
+            ->execute()
+            ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
+    // Cleanup on each component.
+    foreach ($components as $cid => $c) {
+      $components[$cid]['nid'] = $c['nid'];
+      $components[$cid]['extra'] = unserialize($c['extra']);
+      webform_component_defaults($components[$cid]);
     }
+    $component_translations[$node->tnid] = $components;
   }
 
   return $component_translations[$node->tnid];
@@ -62,17 +58,17 @@ function webform_localization_component_get_translations($component) {
 /**
  * Synchronize the changed component with it's translations versions.
  *
- * @param array $component
+ * @param $component
  *   A webform component that have been modified.
- * @param array $translations
+ * @param $translations
  *   An Array of the translated webform components to sync with.
  */
 function webform_localization_component_sync($component, &$translations) {
-
-  // Get properties to sync.
-  // $sync_properties['standar_values'] = array('mandatory', 'weight', 'pid');
-  // $sync_properties['extra_values'] = array('options', 'private');
-
+  /**
+   * Get properties to sync
+   * $sync_properties['standar_values'] = array('mandatory', 'weight', 'pid');
+   * $sync_properties['extra_values'] = array('options', 'private');
+   */
   $sync_properties = webform_localization_synchronizable_properties($component);
   foreach ($translations as $component_key => $translation) {
     foreach ($sync_properties['standar_values'] as $sync_key) {
@@ -89,14 +85,13 @@ function webform_localization_component_sync($component, &$translations) {
 }
 
 /**
- * Get synchronizable properties for a webform component.
+ * Get synchronizable properties for a webform component
  *
  * @param array $component
  *   A webform component.
- * @param bool $clear_cache
+ * @param boolean $clear_cache
  *   A flag to force a database reading in case that properties are cached.
- *
- * @return array
+ * @return
  *   An array with synchronizable properties.
  */
 function webform_localization_synchronizable_properties($component, $clear_cache = FALSE) {
@@ -107,11 +102,11 @@ function webform_localization_synchronizable_properties($component, $clear_cache
   if ($clear_cache || !isset($webform_component_localization_options[$nid][$cid])) {
     // Select webform localization options that match this node ID.
     $options = db_select('webform_component_localization')
-        ->fields('webform_component_localization')
-        ->condition('nid', $nid, '=')
-        ->condition('cid', $cid, '=')
-        ->execute()
-        ->fetchObject();
+            ->fields('webform_component_localization')
+            ->condition('nid', $nid, '=')
+            ->condition('cid', $cid, '=')
+            ->execute()
+            ->fetchObject();
     if (!$options) {
       $synchronizable = _webform_localization_default_properties($component);
       $webform_component_localization_options[$nid][$cid] = $synchronizable;
@@ -141,8 +136,7 @@ function webform_localization_synchronizable_properties($component, $clear_cache
  *
  * @param array $component
  *   A webform component.
- * 
- * @return array
+ * @return
  *   An array with webform synchronizable default properties.
  */
 function _webform_localization_default_properties($component) {
@@ -177,23 +171,23 @@ function webform_localization_synchronizable_properties_delete($component) {
 }
 
 /**
- * Load a Webform Component.
+ * Load a Webform Component
  *
- * @param int $nid
+ * @param $nid
  *   A node Id.
- * @param int $cid
+ * @param $cid
  *   A webform component Id.
- * 
- * @return array
+ * @return
  *   A webform component array.
+ *
  */
 function webform_localization_component_load($nid, $cid) {
   $component = db_select('webform_component')
-      ->fields('webform_component')
-      ->condition('nid', $nid, '=')
-      ->condition('cid', $cid, '=')
-      ->execute()
-      ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
+          ->fields('webform_component')
+          ->condition('nid', $nid, '=')
+          ->condition('cid', $cid, '=')
+          ->execute()
+          ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
   $component[$nid]['nid'] = $nid;
   $component[$nid]['extra'] = unserialize($component[$nid]['extra']);
   webform_component_defaults($component[$nid]);

+ 126 - 90
sites/all/modules/contrib/form/webform_localization/includes/webform_localization.i18n.inc

@@ -4,7 +4,6 @@
  * @file
  * Webform Localization i18n_string integration.
  */
-
 /**
  * Provides interface with the i18n_string module.
  * Based in patch http://drupal.org/node/245424#comment-5244256
@@ -28,16 +27,9 @@
  */
 function _webform_localization_translate_component(&$element, $component) {
   if (isset($component['extra']['translated_strings']) && is_array($component['extra']['translated_strings'])) {
-    $node = !empty($component['nid']) ? node_load($component['nid']) : NULL;
     foreach ($component['extra']['translated_strings'] as $name) {
       $name_list = explode(':', $name);
       $current_element = &$element;
-      $current_element_format;
-      if (isset($current_element['#format'])) {
-        $current_element_format = $current_element['#format'];
-      } else {
-        $current_element_format = I18N_STRING_FILTER_XSS_ADMIN;
-      }
       if (strpos($name_list[3], '[') !== FALSE) {
         // The property is deeper in the renderable array, we must extract the
         // the place where it is.
@@ -60,15 +52,9 @@ function _webform_localization_translate_component(&$element, $component) {
       }
       if (strpos($property, '-') !== FALSE) {
         // If property is array, we extract the key from the property.
-        list ($property, $key) = explode('-', $property, 2);
+        list ($property, $key) = explode('-', $property);
         if (isset($current_element['#' . $property][$key])) {
-          $text = i18n_string($name, $current_element['#' . $property][$key], array('format' => I18N_STRING_FILTER_XSS));
-          if (module_exists('token')) {
-            $current_element['#' . $property][$key] = webform_replace_tokens($text, $node);
-          }
-          else {
-            $current_element['#' . $property][$key] = $text;
-          }
+          $current_element['#' . $property][$key] = i18n_string($name, $current_element['#' . $property][$key], array('sanitize' => FALSE));
         }
       }
       else {
@@ -77,23 +63,11 @@ function _webform_localization_translate_component(&$element, $component) {
           $option_group = str_replace('/-', '', $name_list[4]);
           // If it's a element.
           if (isset($name_list[5])) {
-            $text = i18n_string($name, $current_element['#' . $property][$option_group][$name_list[5]], array('format' => $current_element_format));
-            if (module_exists('token')) {
-              $current_element['#' . $property][$option_group][$name_list[5]] = webform_replace_tokens($text, $node);
-            }
-            else {
-              $current_element['#' . $property][$option_group][$name_list[5]] = $text;
-            }
+            $current_element['#' . $property][$option_group][$name_list[5]] = i18n_string($name, $current_element['#' . $property][$option_group][$name_list[5]]);
           }
           else {
             // If it's a option group we translate the key.
-            $text = i18n_string($name, $option_group, array('format' => $current_element_format));
-            if (module_exists('token')) {
-              $translated_option_group = webform_replace_tokens($text, $node);
-            }
-            else {
-              $translated_option_group = $text;
-            }
+            $translated_option_group = i18n_string($name, $option_group);
             if ($translated_option_group != $option_group) {
               _webform_localization_array_key_replace($current_element['#' . $property], $option_group, $translated_option_group);
             }
@@ -103,15 +77,84 @@ function _webform_localization_translate_component(&$element, $component) {
           // Else we can treat the property as string.
           if (isset($current_element['#' . $property])) {
             if ($property == 'markup' && $current_element['#type'] == 'markup') {
-              $text = i18n_string($name, $current_element['#' . $property], array('format' => $current_element['#format']));
+              $current_element['#' . $property] = i18n_string($name, $current_element['#' . $property], array('format' => $current_element['#format']));
             }
             elseif ($property == 'description') {
-              $text = i18n_string($name, $current_element['#' . $property], array('sanitize' => FALSE));
+              $current_element['#' . $property] = i18n_string($name, $current_element['#' . $property], array('format' => I18N_STRING_FILTER_XSS));
             }
             else {
-              $text = i18n_string($name, $current_element['#' . $property], array('sanitize' => FALSE));
+              $current_element['#' . $property] = i18n_string($name, $current_element['#' . $property]);
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
+ * 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]);
             }
-            $current_element['#' . $property] = $text;
           }
         }
       }
@@ -151,9 +194,9 @@ function webform_localization_component_update_translation_strings(&$component)
  *   The renderable array to be parsed.
  * @param array $component
  *   The component which was rendered.
- *
- * @return array
+ * @return
  *   An array of translatabled webform properties.
+ *
  */
 function _webform_localization_component_translation_parse($element, $component) {
   $translated_properies = array();
@@ -161,26 +204,19 @@ function _webform_localization_component_translation_parse($element, $component)
     $element['#parents'] = array();
   }
 
-  $element['#translatable'][] = 'placeholder';
   if (isset($element['#translatable']) && is_array($element['#translatable'])) {
     foreach ($element['#translatable'] as $key) {
-      if (!empty($element['#' . $key]) || !empty($element['#attributes'][$key])) {
+      if (isset($element['#' . $key]) && $element['#' . $key] != '') {
         if (isset($element['#parents']) && count($element['#parents'])) {
           $property = '[' . implode('][', $element['#parents']) . ']#' . $key;
         }
         else {
           $property = '#' . $key;
         }
-        $element_key = '';
-        if ($key == 'placeholder' && !empty($element['#attributes']['placeholder'])) {
-          $element_key = $element['#attributes']['placeholder'];
-        } elseif ($key != 'placeholder' && !empty($element['#' . $key])) {
-          $element_key = $element['#' . $key];
-        }
-        if (is_array($element_key)) {
+        if (is_array($element['#' . $key])) {
           // If the translatable property is an array, we translate the
           // children.
-          foreach ($element_key as $elem_key => $elem_value) {
+          foreach ($element['#' . $key] as $elem_key => $elem_value) {
             // If the child if an array, we translate the elements.
             if (is_array($elem_value)) {
               foreach ($elem_value as $k => $v) {
@@ -201,11 +237,13 @@ function _webform_localization_component_translation_parse($element, $component)
           }
         }
         else {
-          // If the translatable property is not an array,
-          // it can be treated as a string.
+          /**
+           * If the translatable property is not an array,
+           * it can be treated as a string.
+           */
           $name = webform_localization_i18n_string_name($component['nid'], $component['cid'], $property);
           $translated_properies[] = $name;
-          i18n_string($name, $element_key, array('update' => TRUE));
+          i18n_string($name, $element['#' . $key], array('update' => TRUE));
         }
       }
     }
@@ -218,7 +256,8 @@ 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)
     );
   }
 
@@ -231,18 +270,18 @@ function _webform_localization_component_translation_parse($element, $component)
  * Additional arguments can be passed to add more depth to context
  *
  * @param int $node_identifier
- *   webform nid.
+ *   webform nid
  *
  * @return string
- *   i18n string name grouped by nid or uuid if module is available.
+ *   i18n string name grouped by nid or uuid if module is available
  */
 function webform_localization_i18n_string_name($node_identifier) {
-  if (module_exists('uuid') and !uuid_is_valid($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.
+  // Remove $node_identifier from args
   array_shift($args);
   foreach ($args as $arg) {
     $name[] = $arg;
@@ -251,7 +290,7 @@ function webform_localization_i18n_string_name($node_identifier) {
 }
 
 /**
- * Delete translation source for all the translatable poperties.
+ * Delete translation source for all the translatable poperties
  *
  * Process components matching webforms configuration.
  */
@@ -313,20 +352,21 @@ function webform_localization_update_translation_strings($properties) {
 /**
  * Translate general webform properties.
  *
- * @param object $node
+ * @param $node
  *   A node object.
  */
 function webform_localization_translate_strings(&$node, $update = FALSE) {
-  $option = array('update' => $update, array('sanitize' => FALSE, array('format' => I18N_STRING_FILTER_XSS_ADMIN)));
-  if (!array_key_exists('nid', $node->webform)) {
-    $node->webform['nid'] = $node->nid;
-  }
+  $option = array('update' => $update, 'sanitize' => FALSE);
   $name = webform_localization_i18n_string_name($node->webform['nid'], 'confirmation');
   $node->webform['confirmation'] = i18n_string(
-      $name, $node->webform['confirmation'], $option);
+          $name,
+          $node->webform['confirmation'],
+          $option);
   $name = webform_localization_i18n_string_name($node->webform['nid'], 'submit_text');
   $node->webform['submit_text'] = i18n_string(
-      $name, $node->webform['submit_text'], $option);
+          $name,
+          $node->webform['submit_text'],
+          $option);
 
   // Allow to translate the redirect url if it's not set to none or the
   // default confirmation page.
@@ -367,9 +407,9 @@ function webform_localization_emails_update_translation_string($properties) {
 /**
  * Update / create translation source for webform email poperties.
  *
- * @param array $emails
+ * @param $emails
  *   An array of webform emails.
- * @param int $nid
+ * @param $nid
  *   The node Id of the webform.
  */
 function webform_localization_emails_translation_string_refresh($emails, $nid) {
@@ -398,7 +438,7 @@ function webform_localization_emails_translation_string_refresh($emails, $nid) {
 /**
  * Translate webform email poperties.
  *
- * @param object $node
+ * @param $node
  *   A node object.
  */
 function webform_localization_email_translate_strings(&$node) {
@@ -419,7 +459,7 @@ function webform_localization_email_translate_strings(&$node) {
     }
     if (!empty($email['template']) && $email['template'] != 'default') {
       $name = webform_localization_i18n_string_name($nid, 'email', $eid, 'template');
-      $email['template'] = i18n_string($name, $email['template'], array('sanitize' => FALSE));
+      $email['template'] = i18n_string($name, $email['template']);
     }
   }
 }
@@ -427,9 +467,9 @@ function webform_localization_email_translate_strings(&$node) {
 /**
  * Remove translation source for webform email poperties.
  *
- * @param int $eid
+ * @param $eid
  *   A webform email Id.
- * @param int $nid
+ * @param $nid
  *   A node Id.
  */
 function webform_localization_emails_delete_translation_string($eid, $nid) {
@@ -444,7 +484,7 @@ function webform_localization_emails_delete_translation_string($eid, $nid) {
 /**
  * Translate general webform poperties.
  *
- * @param object $node
+ * @param $node
  *   A node object.
  */
 function webform_localization_delete_translate_strings($node) {
@@ -459,11 +499,12 @@ function webform_localization_delete_translate_strings($node) {
 
 /**
  * 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',
+        ':webform' => 'webform'
       ))->fetchCol();
   variable_set('webform_localization_using_uuid', !$disabling_uuid);
   if (empty($old_ids)) {
@@ -487,13 +528,13 @@ function webform_localization_uuid_update_strings($disabling_uuid = FALSE) {
 /**
  * Helper function that retrieves entity IDs by their UUIDs.
  *
- * @param string $entity_type
+ *
+ * @param $entity_type
  *   The entity type we should be dealing with.
- * @param array $uuids
+ * @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
+ * @return
  *   Array of entity IDs keyed by their UUIDs. If $revision is TRUE revision
  *   IDs and UUIDs are returned instead.
  */
@@ -511,21 +552,22 @@ function webform_localization_get_id_by_uuid($entity_type, $uuids) {
 
   // 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();
+      ->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.
  *
- * @param array $array
+ * @param $array
  *   Array To process.
- * @param string $old_key
+ * @param $old_key
  *   Array key to be replaced.
- * @param string $new_key
+ * @param $new_key
  *   The new array key.
+ *
  */
 function _webform_localization_array_key_replace(&$array, $old_key, $new_key) {
   $keys = array_keys($array);
@@ -541,23 +583,17 @@ function _webform_localization_array_key_replace(&$array, $old_key, $new_key) {
 /**
  * Helper function to convert select / grid strings to array.
  *
- * @param string $string_array
+ * @param $string_array
  *   Array To process.
  *
- * @return array
- *   Processed array.
  */
 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);
-    if (isset($item_data[1]) && isset($item_data[0])) {
-      $key_array[$item_data[0]] = $item_data[1];
-    }
-    elseif (isset($item_data[1]) && !isset($item_data[0])) {
-      $key_array[$item_data[0]] = '';
-    }
+    $key_array[$item_data[0]] = $item_data[1];
   }
   return $key_array;
 }
+

+ 19 - 22
sites/all/modules/contrib/form/webform_localization/includes/webform_localization.sync.inc

@@ -14,11 +14,10 @@
 /**
  * Sync webform configured properties with its translated versions.
  *
- * @param int $nid
+ * @param $nid
  *   A node Id.
  */
 function webform_localization_webform_properties_sync($nid) {
-
   // Gets webform localization options that match this node ID.
   $webform_localization_options = webform_localization_get_config($nid, TRUE);
   if (count($webform_localization_options['webform_properties']) > 0) {
@@ -26,10 +25,10 @@ function webform_localization_webform_properties_sync($nid) {
     if (count($node_list) > 1) {
       // Select all webforms that match these node IDs.
       $result = db_select('webform')
-          ->fields('webform')
-          ->condition('nid', $node_list, 'IN')
-          ->execute()
-          ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
+              ->fields('webform')
+              ->condition('nid', $node_list, 'IN')
+              ->execute()
+              ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
       if ($result) {
         $origin = $result[$nid];
         unset($result[$nid]);
@@ -48,16 +47,16 @@ function webform_localization_webform_properties_sync($nid) {
 /**
  * Sync webform roles with its translated versions.
  *
- * @param int $nid
+ * @param $nid
  *   A node Id.
  */
 function webform_localization_roles_sync($nid) {
   $node_list = _webform_localization_translation_set_node_list($nid);
   $roles = db_select('webform_roles')
-      ->fields('webform_roles', array('rid'))
-      ->condition('nid', $nid)
-      ->execute()
-      ->fetchCol();
+          ->fields('webform_roles', array('rid'))
+          ->condition('nid', $nid)
+          ->execute()
+          ->fetchCol();
   foreach ($node_list as $n) {
     if ($n != $nid) {
       db_delete('webform_roles')->condition('nid', $n)->execute();
@@ -71,7 +70,7 @@ function webform_localization_roles_sync($nid) {
 /**
  * Sync webform emails recipients with its translated versions.
  *
- * @param int $nid
+ * @param $nid
  *   A node Id.
  */
 function webform_localization_emails_sync($nid) {
@@ -112,18 +111,17 @@ function webform_localization_emails_sync($nid) {
 /**
  * Get an Array of webform emails recipients for a Node Id.
  *
- * @param int $nid
+ * @param $nid
  *   A node Id.
- *
- * @return array
+ * @return
  *   An array of webform emails.
  */
 function _webform_localization_emails_load($nid) {
   $emails = db_select('webform_emails')
-      ->fields('webform_emails')
-      ->condition('nid', $nid)
-      ->execute()
-      ->fetchAllAssoc('eid', PDO::FETCH_ASSOC);
+          ->fields('webform_emails')
+          ->condition('nid', $nid)
+          ->execute()
+          ->fetchAllAssoc('eid', PDO::FETCH_ASSOC);
   // Unserialize the exclude component list for e-mails.
   foreach ($emails as $eid => $email) {
     $emails[$eid]['excluded_components'] = array_filter(explode(',', $email['excluded_components']));
@@ -137,10 +135,9 @@ function _webform_localization_emails_load($nid) {
 /**
  * Get a node Id list of a translation set.
  *
- * @param int $nid
+ * @param $nid
  *   A node Id.
- *
- * @return array
+ * @return
  *   An array of node ids that share a tnid.
  */
 function _webform_localization_translation_set_node_list($nid) {

+ 17 - 88
sites/all/modules/contrib/form/webform_localization/tests/webform_localization.test

@@ -9,61 +9,44 @@ class WebformLocalizationWebTestCase extends DrupalWebTestCase {
   // Webform test class instance.
   public $wtc;
   // Users.
-  public $adminuser;
+  public $admin_user;
   public $translator;
-  public $normaluser;
-  public $perms;
-  protected $profile = 'testing';
+  public $normal_user;
 
   /**
    * Implements setUp().
    */
-  function setUp($added_modules = array()) {
-    $modules = array('webform_localization', 'webform', 'views', 'ctools', 'i18n_translation', 'i18n_string', 'i18n', 'variable', 'translation', 'locale', 'block');
-    $added_modules = array_merge($modules, $added_modules);
-    parent::setUp($added_modules);
+  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.
     module_load_include('test', 'webform', 'tests/webform');
     $this->wtc = new WebformTestCase;
 
-    /* Reset the permissions cache prior to calling drupalCreateUser
-     * see notes here: https://api.drupal.org/comment/28739#comment-28739
-     */
-    $this->checkPermissions(array(), TRUE);
     // Setup users.
-    $this->adminuser = $this->drupalCreateUser(array('bypass node access', 'administer nodes', 'administer languages', 'administer content types', 'administer blocks', 'access administration pages', 'translate content', 'create webform content',
+    $this->admin_user = $this->drupalCreateUser(array('bypass node access', 'administer nodes', 'administer languages', 'administer content types', 'administer blocks', 'access administration pages', 'translate content', 'create webform content',
           'edit any webform content',
           'access all webform results',
           'edit all webform submissions',
           'delete all webform submissions',
-          'edit webform components',
           'translate interface',
           'translate user-defined strings'));
 
-    /* Reset the permissions cache prior to calling drupalCreateUser
-     * see notes here: https://api.drupal.org/comment/28739#comment-28739
-     */
-    $this->checkPermissions(array('access content'), TRUE);
     $this->translator = $this->drupalCreateUser(array('translate content',
           'create webform content',
           'edit any webform content',
           'access all webform results',
-          'edit webform components',
           'translate interface',
           'translate user-defined strings'));
 
-    /* Reset the permissions cache prior to calling drupalCreateUser
-     * see notes here: https://api.drupal.org/comment/28739#comment-28739
-     */
-    $this->checkPermissions(array('access content'), TRUE);
-    $this->normaluser = $this->drupalCreateUser(array('access content', 'edit own webform submissions'));
+    $this->normal_user = $this->drupalCreateUser(array('access content', 'edit own webform submissions'));
 
     // Fix for reuse of webform test class.
-    $this->wtc->webform_users['admin'] = $this->adminuser;
-    $this->wtc->webform_users['admin']->gender = array(LANGUAGE_NONE => array(array('value' => 'Female')));
+    $this->wtc->webform_users['admin'] = $this->admin_user;
+    $this->wtc->webform_users['admin']->profile_gender = array('Female', 'Male');
 
-    $this->drupalLogin($this->adminuser);
+    $this->drupalLogin($this->admin_user);
 
     // Add languages.
     $this->addLanguage('en');
@@ -124,9 +107,8 @@ class WebformLocalizationWebTestCase extends DrupalWebTestCase {
      */
     unset($components['select_no_default_zero']);
     unset($components['radios_zero']);
-    unset($components['checkboxes_zero']);
-    unset($components['grid_keyed']);
     unset($components['select_zero']);
+    unset($components['select_optgroup']);
 
     $cid = 0;
     foreach ($components as $key => $component_info) {
@@ -304,15 +286,14 @@ class WebformLocalizationStringTranslationTestCase extends WebformLocalizationWe
       'name' => 'Webform Localization',
       'description' => 'Webform localization String Translations Tests.',
       'group' => 'Webform Localization',
-      'dependencies' => array('webform_localization', 'webform', 'views', 'ctools', 'i18n_translation', 'i18n_string', 'i18n', 'variable'),
     );
   }
 
   /**
    * Set up test.
    */
-  function setUp($added_modules = array()) {
-    parent::setUp($added_modules);
+  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');
@@ -326,7 +307,7 @@ class WebformLocalizationStringTranslationTestCase extends WebformLocalizationWe
    * Test creating a webform and enabling localization by string translation
    */
   function testWebformLocalizationStringTranslation() {
-    $this->drupalLogin($this->adminuser);
+    $this->drupalLogin($this->admin_user);
     /**
      * Create the Webform test node, and enable
      * localization by string translation feature
@@ -419,59 +400,8 @@ class WebformLocalizationStringTranslationTestCase extends WebformLocalizationWe
       }
       $this->assertRaw($translation, format_string('%c translation is present.', array('%c' => $name)), 'Deutsch Webform translation');
     }
-
-    // Log in as normal user and add a answer to webform so string
-    // translatability can be tested at various webform report pages.
-    $this->drupalLogin($this->normaluser);
-    $this->drupalPost('node/' . $node->nid, array(), t('Submit'));
-    // Log back to admin account and download results, using Deutsch Webform
-    // translations
-    $this->drupalLogin($this->adminuser);
-    $edit = array(
-      'format' => 'delimited',
-    );
-    $this->drupalPost('de/node/' . $node->nid . '/webform-results/download', $edit, t('Download'));
-    // Previous form submission batch created the export file. Click the link
-    // to access export file itself.
-    $this->clickLink(t('download the file here'));
-    // Export file should contain all element titles translated
-    foreach ($options as $key => $value) {
-      $context = $value['context'];
-      if (substr($context, -5) != ':#title') {
-        continue;
-      }
-      $translation = 'de:' . $value['source'];
-      $this->assertRaw($translation, t('%c translation is present.', array('%c' => $value['source'])), 'Deutsch Webform translation');
-    }
-  }
-
-}
-
-/**
- * The same test as WebformLocalizationStringTranslationTestCase, but with the
- * Token module enabled.
- */
-class WebformLocalizationStringTranslationTokenTestCase extends WebformLocalizationStringTranslationTestCase {
-  /**
-   * Test info.
-   */
-  public static function getInfo() {
-    $info = parent::getInfo();
-    $info = array_merge($info, array(
-      'name' => 'Webform Localization Token',
-      'description' => 'Webform localization String Translations with Token Tests.',
-    ));
-    $info['dependencies'][] = 'token';
-    return $info;
   }
 
-  /**
-   * Set up test.
-   */
-  function setUp($added_modules = array()) {
-    $added_modules = array_merge(array('token'), $added_modules);
-    parent::setUp($added_modules);
-  }
 }
 
 class WebformLocalizationApiTestCase extends WebformLocalizationWebTestCase {
@@ -484,15 +414,14 @@ class WebformLocalizationApiTestCase extends WebformLocalizationWebTestCase {
       'name' => 'Test Webform Localization API.',
       'description' => 'Test webform and webform localization interaction at API level.',
       'group' => 'Webform Localization',
-      'dependencies' => array('webform_localization', 'webform', 'views', 'ctools', 'i18n_translation', 'i18n_string', 'i18n', 'variable'),
     );
   }
 
   /**
    * Set up test.
    */
-  function setUp($added_modules = array()) {
-    parent::setUp($added_modules);
+  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');
@@ -506,7 +435,7 @@ class WebformLocalizationApiTestCase extends WebformLocalizationWebTestCase {
    * Test submissions API function with webform localization presence.
    */
   function testWebformLocalizationApi() {
-    $this->drupalLogin($this->adminuser);
+    $this->drupalLogin($this->admin_user);
     $node = $this->createWebformForm();
     /**
      * Enables localization by string translation and reuse the single webform

+ 0 - 72
sites/all/modules/contrib/form/webform_localization/webform_localization.api.php

@@ -1,72 +0,0 @@
-<?php
-
-/**
- * @file
- * Webform localization hooks.
- */
-
-/**
- * Module specific instance of _webform_localization_csv_header().
- *
- * This allows each component to translate the analysis report CSV header.
- * 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 $header
- *   The untranslated CSV header to be altered.
- * @param array $component
- *   The webform component.
- *
- * @return array
- *   The translated header array.
- */
-function _webform_localization_csv_header_component($header, $component) {
-  $header[1] = 'Custom string';
-  return $header;
-}
-
-/**
- * Module specific instance of _webform_localization_csv_data().
- *
- * This allows each component to translate the analysis report CSV data.
- *
- * @param array $data
- *   The untranslated CSV data to be altered.
- * @param array $component
- *   The webform component.
- * @param array $submission
- *   The webform submission.
- *
- * @return array
- *   The translated data array.
- */
-function _webform_localization_csv_data_component($data, $component, $submission) {
-  $data[1] = 'Custom string';
-  return $data;
-}
-
-/**
- * Module specific instance of _webform_localization_analysis_data().
- *
- * This allows each component to translate the analysis report data.
- * 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 untranslated data to be altered
- * @param object $node
- *   The webform node.
- * @param array $component
- *   The webform component.
- *
- * @return array
- *   The translated data array.
- */
-function _webform_localization_analysis_data_component($data, $node, $component) {
-  $data[1] = 'Custom string';
-  return $data;
-}

+ 6 - 13
sites/all/modules/contrib/form/webform_localization/webform_localization.info

@@ -1,23 +1,16 @@
-; $Id: $
+
 name = Webform Localization
 description = Enables localization features to forms and questionnaires.
+dependencies[] = webform
+dependencies[] = i18n_string
 core = 7.x
 package = Webform
-php = 5.3
-dependencies[] = locale
-dependencies[] = translation
-dependencies[] = variable
-dependencies[] = i18n_translation
-dependencies[] = i18n_string
-dependencies[] = webform (4.x)
-test_dependencies[] = token
-test_dependencies[] = i18n_block
 
 files[] = tests/webform_localization.test
 
-; Information added by Drupal.org packaging script on 2016-10-22
-version = "7.x-4.9"
+; Information added by Drupal.org packaging script on 2014-03-28
+version = "7.x-4.x-dev"
 core = "7.x"
 project = "webform_localization"
-datestamp = "1477171440"
+datestamp = "1396049366"
 

+ 6 - 5
sites/all/modules/contrib/form/webform_localization/webform_localization.install

@@ -9,11 +9,12 @@
  * Implements hook_install().
  */
 function webform_localization_install() {
-
-  // NOTE:
-  // We add a field to record the language of the submission since when using
-  // "Localization by String Translation" you can get single webform been
-  // submitted by several nodes in different languages.
+  /**
+   * NOTE:
+   * We add a field to record the language of the submission since when using
+   * "Localization by String Translation" you can get single webform been
+   * submitted by several nodes in different languages.
+   */
   db_add_field('webform_submissions', 'language', array(
     'description' => 'The {languages}.language source of this submission.',
     'type' => 'varchar',

+ 121 - 619
sites/all/modules/contrib/form/webform_localization/webform_localization.module

@@ -53,100 +53,53 @@ function webform_localization_i18n_string_info() {
  * Refresh callback that regenerates all the translatable poperties of the
  * components of the matching webforms configuration.
  */
-function webform_localization_i18n_string_refresh($group) {
-  if ($group == 'webform') {
-    global $language;
-    $languages = language_list();
-    $source_language = $languages[i18n_string_source_language()];
-    // Refresh the strings using source language.
-    $language = $source_language;
-    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();
+function webform_localization_i18n_string_refresh() {
 
-    foreach ($components as $component) {
-      $component = (array) $component;
-      $component['extra'] = unserialize($component['extra']);
+  module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
 
-      webform_localization_component_update_translation_strings($component);
+  // In case updating before UUID support.
+  if (module_exists('uuid') && !variable_get('webform_localization_using_uuid', FALSE)) {
+    webform_localization_uuid_update_strings(FALSE);
+  }
 
-      $component['extra'] = serialize($component['extra']);
-      drupal_write_record('webform_component', $component, array('nid', 'cid'));
-    }
-    // Get emails configured as translatable.
-    $query = db_select('webform_localization', 'wl');
-    $query->fields('wl', array('nid'));
-    $query->condition('wl.expose_strings', 0, '>');
-    $nid_list = $query->execute()->fetchAllAssoc('nid');
-    // @todo: Find a more eficient way to manage webform translatable
-    // properties.
-    $nodes = node_load_multiple(array_keys($nid_list));
-    module_load_include('inc', 'webform_localization', 'includes/webform_localization.sync');
-    foreach ($nid_list as $nid => $value) {
-      $emails = _webform_localization_emails_load($nid);
-      webform_localization_emails_translation_string_refresh($emails, $nid);
-      $node = $nodes[$nid];
-      webform_localization_translate_strings($node, TRUE);
-    }
+  // 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();
 
-    // NOTE: Delete string for webforms that has disabled i18n translation.
-    // This is the only moment when we deleted translation for disabled
-    // webforms. This way we provide the feature to temporally disable the
-    // webform i18n string without losing custom translated texts.
-    webform_localization_delete_all_strings();
-    return TRUE;
-  }
-}
+  foreach ($components as $component) {
+    $component = (array) $component;
+    $component['extra'] = unserialize($component['extra']);
 
-/**
- * Load a component file into memory.
- *
- * @see webform_component_include()
- *
- * @param string $component_type
- *   The string machine name of a component.
- */
-function webform_localization_component_include($component_type) {
-  static $included = array();
+    webform_localization_component_update_translation_strings($component);
 
-  // No need to load components that have already been added once.
-  if (!isset($included[$component_type])) {
-    $included[$component_type] = TRUE;
-    module_load_include('inc', 'webform_localization', 'components/' . $component_type);
+    $component['extra'] = serialize($component['extra']);
+    drupal_write_record('webform_component', $component, array('nid', 'cid'));
   }
-}
-
-/**
- * Invoke a component callback.
- *
- * @see webform_component_invoke()
- *
- * @param string $type
- *   The component type as a string.
- * @param string $callback
- *   The callback to execute.
- * @param ...
- *   Any additional parameters required by the $callback.
- */
-function webform_localization_component_invoke($type, $callback) {
-  $args = func_get_args();
-  $type = array_shift($args);
-  $callback = array_shift($args);
-  $function = '_webform_localization_' . $callback . '_' . $type;
-  webform_localization_component_include($type);
-  if (function_exists($function)) {
-    return call_user_func_array($function, $args);
+  // Get emails configured as translatable.
+  $query = db_select('webform_localization', 'wl');
+  $query->fields('wl', array('nid'));
+  $query->condition('wl.expose_strings', 0, '>');
+  $nid_list = $query->execute()->fetchAllAssoc('nid');
+  // @todo: Find a more eficient way to manage webform translatable properties.
+  $nodes = node_load_multiple(array_keys($nid_list));
+  module_load_include('inc', 'webform_localization', 'includes/webform_localization.sync');
+  foreach ($nid_list as $nid => $value) {
+    $emails = _webform_localization_emails_load($nid);
+    webform_localization_emails_translation_string_refresh($emails, $nid);
+    $node = $nodes[$nid];
+    webform_localization_translate_strings($node, TRUE);
   }
+  /**
+   *  NOTE: Delete string for webforms that has disabled i18n translation.
+   *  This is the only moment when we deleted translation for disabled webforms.
+   *  This way we provide the feature to temporally disable the webform i18n
+   *  string without losing custom translated texts.
+   */
+  webform_localization_delete_all_strings();
+  return TRUE;
 }
 
 /**
@@ -157,12 +110,10 @@ function webform_localization_webform_component_insert($component) {
   $wl_options = webform_localization_get_config($component['nid']);
 
   // Create translation source for i18n_string for all the translatable
-  // properties.
+  // poperties.
   if ($wl_options['expose_strings']) {
     module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
     webform_localization_component_update_translation_strings($component);
-    $component['extra'] = serialize($component['extra']);
-    drupal_write_record('webform_component', $component, array('nid', 'cid'));
   }
 
   if ($wl_options['sync_components'] && _webform_localization_sync()) {
@@ -205,25 +156,19 @@ function webform_localization_webform_component_presave(&$component) {
   }
 
   if ($wl_options['sync_components'] && _webform_localization_sync()) {
-    $test_node = node_load($component['nid']);
-    if ($test_node->tnid > 0) {
-      // Turn Off Sync.
-      _webform_localization_sync(FALSE);
-      module_load_include('inc', 'webform_localization', 'includes/webform_localization.component.sync');
-      // Get all versions of the component across all translations.
-      $translations = webform_localization_component_get_translations($component);
-      unset($translations[$component['nid']]);
-      // Sync the changed component with it's translations versions.
-      webform_localization_component_sync($component, $translations);
-      foreach ($translations as $trans_c) {
-        webform_component_update($trans_c);
-      }
-      // Turn On Sync.
-      _webform_localization_sync(TRUE);
-    }
-    else {
-      debug('configuration error: webform_localization_sync enabled AND Keep a single webform across a translation set. but no tnid, to resolve this either disable <Keep a single webform across a translation set> by unchecking this option, or enable node translation on the webform', t('debug'));
+    // Turn Off Sync.
+    _webform_localization_sync(FALSE);
+    module_load_include('inc', 'webform_localization', 'includes/webform_localization.component.sync');
+    // Get all versions of the component across all translations.
+    $translations = webform_localization_component_get_translations($component);
+    unset($translations[$component['nid']]);
+    // Sync the changed component with it's translations versions.
+    webform_localization_component_sync($component, $translations);
+    foreach ($translations as $trans_c) {
+      webform_component_update($trans_c);
     }
+    // Turn On Sync.
+    _webform_localization_sync(TRUE);
   }
 }
 
@@ -246,52 +191,16 @@ function webform_localization_webform_component_delete($component) {
     // Get all versions of the node.
     $node = node_load($component['nid']);
     $translations = translation_node_get_translations($node->tnid);
-    if ($translations) {
-      unset($translations[$node->language]);
-      foreach ($translations as $trans_c) {
-        $component_version = webform_localization_component_load($trans_c->nid, $component['cid']);
-        webform_component_delete($trans_c, $component_version);
-      }
+    unset($translations[$node->language]);
+    foreach ($translations as $trans_c) {
+      $component_version = webform_localization_component_load($trans_c->nid, $component['cid']);
+      webform_component_delete($trans_c, $component_version);
     }
-
     // Turn On Sync.
     _webform_localization_sync(TRUE);
   }
 }
 
-/**
- * A menu to_arg handler explicitly invoked by webform_menu_to_arg().
- *
- * If a single webform is used across all translations, use the appropriate
- * node ID for webform paths.
- */
-function webform_localization_webform_menu_to_arg($arg, $map, $index) {
-  if ($node = node_load($arg)) {
-    if ($nid = webform_localization_single_webform_nid($node)) {
-      $node = node_load($nid);
-    }
-  }
-  return $node ? $node->nid : $arg;
-}
-
-/**
- * Find nid of node containing the 'single webform' for this translation set.
- */
-function webform_localization_single_webform_nid($node) {
-  $cache = &drupal_static(__FUNCTION__, array());
-  if (!array_key_exists($node->nid, $cache)) {
-    // Select all webforms that match the localization configuration.
-    $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', $node->tnid, '=');
-    $query->condition('w.nid', $node->nid, '<>');
-    $cache[$node->nid] = $query->execute()->fetchField();
-  }
-  return $cache[$node->nid];
-}
-
 /**
  * Implements hook_node_view().
  */
@@ -299,13 +208,23 @@ function webform_localization_node_view($node, $view_mode) {
   if (!in_array($node->type, webform_variable_get('webform_node_types'))) {
     return;
   }
-  if ($nid = webform_localization_single_webform_nid($node)) {
+  // Select all webforms that match the localization configuration.
+  $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', $node->tnid, '=');
+  $query->condition('w.nid', $node->nid, '<>');
+  $result = $query->execute()->fetchField();
 
-    // NOTE:
-    // Perhaps not most eficient way.. a possible alternative
-    // @todo rewrite the webform load and view process as a
-    // independent function to reuse.
-    $source_node = node_load($nid);
+  if ($result) {
+    /**
+     * NOTE:
+     * Perhaps not most eficient way.. a possible alternative
+     * @todo rewrite the webform load and view process as a
+     * independent function to reuse.
+     */
+    $source_node = node_load($result);
     // We replace the webform with the node translation source.
     $node->webform = $source_node->webform;
 
@@ -346,10 +265,11 @@ function webform_localization_node_load($nodes, $types) {
  * Implements hook_webform_submission_update().
  */
 function webform_localization_webform_submission_insert($node, $submission) {
-
-  // NOTE:
-  // We have 2 options here: to use the node language or the language of
-  // the page... for now make more sense use the node as language source.
+  /**
+   * NOTE:
+   * We have 2 options here: to use the node language or the language of
+   * the page... for now make more sense use the node as language source
+   */
   $language = $node->language;
   // Update language field when a submission is updated.
   db_update('webform_submissions')
@@ -364,8 +284,8 @@ function webform_localization_webform_submission_insert($node, $submission) {
  * Implements hook_webform_submission_load().
  */
 function webform_localization_webform_submission_load(&$submissions) {
-  if (empty($submissions)) {
-    return;
+  if(empty($submissions)) {
+      return;
   }
   $query = db_select('webform_submissions', 's');
   $query->fields('s', array('language', 'sid'));
@@ -376,20 +296,12 @@ function webform_localization_webform_submission_load(&$submissions) {
   }
 }
 
-/**
- * Implements hook_webform_submission_presave().
- */
-function webform_localization_webform_submission_presave(&$node, &$submission) {
-  if (isset($node->tnid) && $node->tnid != 0) {
-    $submission->serial = _webform_submission_serial_next_value($node->tnid);
-  }
-}
-
 /**
  * Implements hook_node_delete().
  */
 function webform_localization_node_delete($node) {
-  if (!in_array($node->type, webform_variable_get('webform_node_types')) || empty($node->webform['components'])) {
+  if (!in_array($node->type, webform_variable_get('webform_node_types'))
+      || empty($node->webform['components'])) {
     return;
   }
   module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
@@ -409,10 +321,6 @@ function webform_localization_webform_component_render_alter(&$element, $compone
   if ($wl_options['expose_strings']) {
     module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
     _webform_localization_translate_component($element, $component);
-    if (!empty($element['#attributes']['placeholder'])) {
-      $name = webform_localization_i18n_string_name($component['nid'], $component['cid'], '#placeholder');
-      $element['#attributes']['placeholder'] = i18n_string($name, $element['#attributes']['placeholder']);
-    }
   }
 }
 
@@ -437,67 +345,22 @@ function webform_localization_webform_analysis_component_data_alter(&$data, $nod
   $wl_options = webform_localization_get_config($node->nid);
   // Translate the translatable properties.
   if ($wl_options['expose_strings']) {
-    // Translate component name, this is not a component spesific property.
-    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']);
-        break;
-      }
-    }
-    // Translate data array.
-    $result = webform_localization_component_invoke($component['type'], 'analysis_data', $data, $node, $component);
-    if (!empty($result)) {
-      $data = $result;
-    }
-  }
-}
-
-/**
- * Implements hook_webform_csv_header_alter().
- */
-function webform_localization_webform_csv_header_alter(&$header, $component) {
-  // Gets webform localization options that match this node ID.
-  $wl_options = webform_localization_get_config($component['nid']);
-  // Translate the translatable properties.
-  if ($wl_options['expose_strings']) {
-    $result = webform_localization_component_invoke($component['type'], 'csv_header', $header, $component);
-    if (!empty($result)) {
-      $header = $result;
-    }
-  }
-}
-
-/**
- * Implements hook_webform_csv_data_alter().
- */
-function webform_localization_webform_csv_data_alter(&$data, $component, $submission) {
-  // Gets webform localization options that match this node ID.
-  $wl_options = webform_localization_get_config($component['nid']);
-  // Translate the translatable properties.
-  if ($wl_options['expose_strings']) {
-    $result = webform_localization_component_invoke($component['type'], 'csv_data', $data, $component, $submission);
-    if (!empty($result)) {
-      $data = $result;
-    }
+    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.
+ * Add specific localization options to Webform Configure Form
  */
 function webform_localization_form_webform_configure_form_alter(&$form, &$form_state, $form_id) {
 
-  // @see https://api.drupal.org/comment/52443#comment-52443
-  $enabled_languages = locale_language_list('name');
-
   // 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'] && count($enabled_languages) > 1) {
+  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']);
@@ -506,17 +369,6 @@ function webform_localization_form_webform_configure_form_alter(&$form, &$form_s
       $form['submission']['redirection']['redirect_url']['#default_value'] = $form['#node']->webform['redirect_url'];
     }
     $form['advanced']['submit_text']['#default_value'] = $form['#node']->webform['submit_text'];
-    // Add friendly translation link.
-    $name = webform_localization_i18n_string_name($form['#node']->nid, 'confirmation');
-    $string_source = i18n_string_get_string($name);
-    if (isset($string_source->lid) && $string_source->lid != FALSE) {
-      $link = l(t('here'), 'admin/config/regional/translate/edit/' . $string_source->lid, array('query' => drupal_get_destination()));
-      $description = t('Click !here to translate this string.', array('!here' => $link));
-    }
-    else {
-      $description = t('<i>The message must be filled in before it can be translated.</i>');
-    }
-    $form['submission']['confirmation']['#description'] .= ' ' . $description;
   }
 
   $single_webform = 0;
@@ -643,42 +495,17 @@ function _webform_localization_webform_configure_form_submit($form, &$form_state
  */
 function _webform_localization_webform_configure_form_submit_i18n_tweaks($form, &$form_state) {
   global $language;
-  $source_language = i18n_string_source_language();
-  if ($source_language != $language->language) {
-    // Webform Configure Form not in source 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');
-    // Collect the form elements that are translatable.
-    $form_elements = array('confirmation', 'submit_text');
-    // Add redirect url if it's not set to none or the default
-    // confirmation page.
-    if (!in_array($form_state['values']['redirect_url'], array('<confirmation>', '<none>'))) {
-      $form_elements[] = 'redirect_url';
-    }
-    foreach ($form_elements as $element) {
-      // Get i18n string for $element.
-      $name = webform_localization_i18n_string_name($form['#node']->webform['nid'], $element);
-      $i18n_string = i18n_string_get_string($name);
-      // Get submitted value for $element (the translation).
-      $string_translation = ($element == 'confirmation' ? $form_state['values'][$element]['value'] : $form_state['values'][$element]);
-      if ($i18n_string->lid) {
-        // There is an i18n string source.
-        $string_source = $i18n_string->get_string();
-        // We reset the source string value before saving the form.
-        if ($element == 'confirmation') {
-          $form_state['values'][$element]['value'] = $string_source;
-        }
-        else {
-          $form_state['values'][$element] = $string_source;
-        }
-      }
-      else {
-        // No i18n string source found: use the current translation as the
-        // string source.
-        $string_source = $string_translation;
-      }
-      // We save the translated string using i18n string.
-      i18n_string_translation_update($name, $string_translation, $language->language, $string_source);
-    }
+    $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);
   }
 }
 
@@ -702,13 +529,9 @@ function _webform_localization_webform_email_edit_form_submit($form, &$form_stat
     module_load_include('inc', 'webform_localization', 'includes/webform_localization.sync');
     webform_localization_emails_sync($node->nid);
   }
-  if (isset($form_state['values']['node'])) {
-    // Above isset avoids problem when using entity_translation.
-    // @see https://www.drupal.org/node/2482521
-    if ($webform_localization_options['expose_strings']) {
-      module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
-      webform_localization_emails_update_translation_string($form_state['values'] + array('node' => $node));
-    }
+  if ($webform_localization_options['expose_strings']) {
+    module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
+    webform_localization_emails_update_translation_string($form_state['values'] + array('node' => $node));
   }
 }
 
@@ -726,19 +549,15 @@ function webform_localization_form_webform_email_delete_form_alter(&$form, &$for
  */
 function _webform_localization_webform_email_delete_form_submit($form, &$form_state) {
 
-  $node = $form['node']['#value'];
+  $node = $form['#node'];
   $webform_localization_options = webform_localization_get_config($node->nid);
   if ($webform_localization_options['sync_emails']) {
     module_load_include('inc', 'webform_localization', 'includes/webform_localization.sync');
     webform_localization_emails_sync($node->nid);
   }
-  if (isset($form_state['values']['node'])) {
-    // Above isset avoids problem when using entity_translation.
-    // @see https://www.drupal.org/node/2482521
-    if ($webform_localization_options['expose_strings']) {
-      module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
-      webform_localization_emails_delete_translation_string($form_state['values']['email']['eid'], $node->nid);
-    }
+  if ($webform_localization_options['expose_strings']) {
+    module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
+    webform_localization_emails_delete_translation_string($form_state['values']['email']['eid'], $node->nid);
   }
 }
 
@@ -781,8 +600,10 @@ function webform_localization_form_webform_component_edit_form_alter(&$form, &$f
       '#default_value' => $select_options['extra_values'],
       '#description' => t('Special properties that applies only for this type of component.'),
     );
-    // NOTE:
-    // First we save the sync options to know what to do with the changes.
+    /**
+     * NOTE:
+     * First we save the sync options to know what to do with the changes.
+     */
     array_unshift($form['#submit'], '_webform_localization_webform_component_edit_form_submit');
   }
 }
@@ -817,131 +638,28 @@ function webform_localization_field_attach_prepare_translation_alter(&$entity, $
   if ($context['entity_type'] == 'node') {
     if (isset($context['source_entity']->webform)) {
       $webform_localization_options = webform_localization_get_config($context['source_entity']->nid);
-      // Copy all Webform settings over to translated versions of this node
-      // if the configuration match.
+      /**
+       * Copy all Webform settings over to translated versions of this node
+       * if the configuration match.
+       */
       if ($webform_localization_options['sync_components']) {
-        // NOTE:
-        // Perhaps could be interesting to copy only specific properties
-        // but for now the entire webform make more sense.
+        /**
+         * NOTE:
+         * Perhaps could be interesting to copy only specific properties
+         * but for now the entire webform make more sense.
+         */
         $entity->webform = $context['source_entity']->webform;
       }
     }
   }
 }
 
-/**
- * Implements hook_form_alter().
- */
-function webform_localization_form_alter(&$form, &$form_state, $form_id) {
-  // n.b. We are not using hook_form_BASE_FORM_ID_alter(), as we need
-  // to interact closely with other hook_form_alter() implementations.
-  // @see webform_localization_module_implements_alter()
-  if (strpos($form_id, 'webform_client_form_') !== 0) {
-    return;
-  }
-
-  // Enhance webform's mollom support, to handle our 'single_webform' option.
-  if (module_exists('mollom')) {
-    _webform_localization_mollom_form_alter($form, $form_state, $form_id);
-  }
-}
-
-/**
- * Interaction with mollom_form_alter() for 'single_webform' localization.
- *
- * If the translation source node's webform is protected by mollom, and
- * uses our 'single_webform' setting, then we must also protect the other
- * nodes in the translation set.
- *
- * This is because each node in the translation set will still have a
- * unique client form_id (based on the nid, not the tnid), but mollom will
- * only know about one of those form_ids.
- * 
- * @see webform_localization_module_implements_alter()
- */
-function _webform_localization_mollom_form_alter(&$form, &$form_state, $form_id) {
-  // Establish that the current node has a (different) translation source.
-  // (If this is the translation source, mollom will already know about it).
-  $node = $form['#node'];
-  if (empty($node->tnid) || $node->tnid == $node->nid) {
-    return;
-  }
-
-  // Prime the static mollom form cache (for manipulation).
-  mollom_form_cache();
-  $mollom_cache = &drupal_static('mollom_form_cache');
-  $protected = &$mollom_cache['protected'];
-
-  // If the source node's webform is not protected by mollom, we can bail
-  // out immediately.
-  $source_form_id = 'webform_client_form_' . $node->tnid;
-  if (!array_key_exists($source_form_id, $protected)) {
-    return;
-  }
-
-  // Check that the 'single_webform' option is configured for the source.
-  $source_wl_options = webform_localization_get_config($node->tnid);
-  if (empty($source_wl_options['single_webform'])) {
-    return;
-  }
-
-  // Protect this form using the settings for the single webform.
-  // Firstly we take care of the mollom_form_cache() static cache.
-  $protected[$form_id] = $protected[$source_form_id];
-
-  // Then, if necessary, we update the mollom_form_load() cache.
-  $mollom_form = mollom_form_load($form_id);
-  if (!$mollom_form) {
-    $source_mollom_form = mollom_form_load($source_form_id);
-    $mollom_form = $source_mollom_form;
-    $mollom_form['form_id'] = $form_id;
-    $cid = 'mollom:form:' . $form_id;
-    cache_set($cid, $mollom_form);
-  }
-}
-
-/**
- * Implements hook_module_implements_alter().
- *
- * We need our hook_form_alter() to run before mollom's, so that we can
- * prime and modify its cache before mollom uses it.
- *
- * @see webform_localization_form_alter()
- * @see mollom_form_alter()
- */
-function webform_localization_module_implements_alter(&$implementations, $hook) {
-  if ($hook != 'form_alter') {
-    return;
-  }
-
-  // If mollom isn't enabled, do nothing.
-  if (!module_exists('mollom')) {
-    return;
-  }
-
-  // If our code will run before mollom's, do nothing.
-  $pos = array_flip(array_keys($implementations));
-  if ($pos['webform_localization'] < $pos['mollom']) {
-    return;
-  }
-
-  // Make it so our hook implementation runs before mollom's.
-  $webform_localization = array(
-    'webform_localization' => $implementations['webform_localization'],
-  );
-  $implementations = array_diff_key($implementations, $webform_localization);
-  $implementations = array_merge(
-      array_slice($implementations, 0, $pos['mollom'], TRUE), $webform_localization, array_slice($implementations, $pos['mollom'], NULL, TRUE)
-  );
-}
-
 /**
  * Gets webform localization options that match a node ID.
  *
  * @staticvar array $webform_localization_options
  *   An array of webform localization options group by nid.
- *
- * @param int $nid
+ * @param $nid
  *   A node Id.
  * @param bool $clear_cache
  *   A flag to force a database reading in case that properties are cached.
@@ -961,20 +679,12 @@ function webform_localization_get_config($nid, $clear_cache = FALSE) {
     unset($webform_properties['roles']);
     unset($webform_properties['emails']);
     unset($webform_properties['record_exists']);
-
-    // If webform_uuid is being used since $component['nid'] is really a UUID
-    // get the nid.
-    if (module_exists('webform_uuid') && variable_get('webform_localization_using_uuid', FALSE)) {
-      $record = entity_get_id_by_uuid('node', array($nid));
-      $nid = (!empty($record)) ? array_pop($record) : $nid;
-    }
-
     // Select webform localization options that match this node ID.
     $options = db_select('webform_localization')
-        ->fields('webform_localization')
-        ->condition('nid', $nid, '=')
-        ->execute()
-        ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
+            ->fields('webform_localization')
+            ->condition('nid', $nid, '=')
+            ->execute()
+            ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
     if (count($options) == 0) {
       $webform_localization_options[$nid] = array(
         'nid' => $nid,
@@ -1085,212 +795,4 @@ function webform_localization_modules_enabled($modules) {
     module_load_include('inc', 'webform_localization', 'includes/webform_localization.i18n');
     webform_localization_uuid_update_strings(FALSE);
   }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- *
- * Add related translations to translation form.
- */
-function webform_localization_form_i18n_string_locale_translate_edit_form_alter(&$form, &$form_state, $form_id) {
-  if ($form['textgroup']['#value'] == 'webform') {
-    if (isset($form['context']['#markup']) && preg_match('/#title/', $form['context']['#markup'])) {
-      list($id, $cid, $name) = explode(':', $form['context']['#markup']);
-      $form['#submit'][] = 'webform_localization_i18n_string_locale_translate_edit_form_submit';
-      $rel_key = 'webform:' . $id . ':' . $cid . '%';
-      $related = db_query('SELECT lid, source, context, textgroup, location FROM {locales_source} WHERE location LIKE :key', array(':key' => $rel_key));
-
-      $langs_installed = language_list();
-
-      $langs_enabled = language_list('enabled');
-      $langs_enabled = $langs_enabled[1];
-
-      if (isset($form['translations'])) {
-        foreach ($form['translations'] as $key => $value) {
-          if (array_key_exists($key, $langs_installed) && !array_key_exists($key, $langs_enabled)) {
-            unset($form['translations'][$key]);
-          }
-        }
-      }
-
-      $form['items'] = array(
-        '#type' => 'fieldset',
-        '#title' => t('Related strings'),
-        '#collapsible' => TRUE,
-        '#collapsed' => TRUE,
-        '#weight' => 2,
-      );
-      foreach ($related as $source) {
-        if ($source->context != $form['context']['#markup']) {
-          $lid = $source->lid;
-          // Add original text to the top and some values for form altering.
-          $form['items'][$lid]['original'] = array(
-            '#type' => 'item',
-            '#title' => t('Original text'),
-            '#markup' => check_plain(wordwrap($source->source, 0)),
-          );
-          if (!empty($source->context)) {
-            $form['items'][$lid]['context'] = array(
-              '#type' => 'item',
-              '#title' => t('Context'),
-              '#markup' => check_plain($source->context),
-            );
-          }
-          $form['items'][$lid]['textgroup'] = array(
-            '#type' => 'value',
-            '#value' => $source->textgroup,
-          );
-          $form['items'][$lid]['location'] = array(
-            '#type' => 'value',
-            '#value' => $source->location,
-          );
-
-          $languages = $langs_enabled;
-          // We don't need the default language value, that value is in $source.
-          $omit = $source->textgroup == 'default' ? 'en' : i18n_string_source_language();
-          unset($languages[($omit)]);
-          $form['items'][$lid]['translations-' . $lid] = array('#tree' => TRUE);
-          // Approximate the number of rows to use in the default textarea.
-          $rows = min(ceil(str_word_count($source->source) / 12), 10);
-          foreach ($languages as $langcode => $language) {
-            $form['items'][$lid]['translations-' . $lid][$langcode] = array(
-              '#type' => 'textarea',
-              '#title' => t($language->name),
-              '#rows' => $rows,
-              '#default_value' => '',
-            );
-          }
-
-          // Fetch translations and fill in default values in the form.
-          $result = db_query("SELECT DISTINCT translation, language FROM {locales_target} WHERE lid = :lid AND language <> :omit", array(':lid' => $lid, ':omit' => $omit));
-          foreach ($result as $translation) {
-            $form['items'][$lid]['translations-' . $lid][$translation->language]['#default_value'] = $translation->translation;
-          }
-        }
-      }
-    }
-  }
-}
-
-/**
- * Submit handler for translations form.
- */
-function webform_localization_i18n_string_locale_translate_edit_form_submit($form, &$form_state) {
-  foreach ($form_state['values'] as $key => $value) {
-    if (preg_match("/translations-(.*)/", $key, $lid)) {
-      foreach ($value as $lang => $translation) {
-        $existing = db_query("SELECT translation FROM {locales_target} WHERE lid = :lid AND language = :language", array(':lid' => $lid[1], ':language' => $lang))->fetchField();
-        if (!empty($translation)) {
-          if (!empty($existing)) {
-            db_update('locales_target')
-                ->fields(array(
-                  'translation' => $translation,
-                  'i18n_status' => I18N_STRING_STATUS_CURRENT,
-                ))
-                ->condition('lid', $lid[1])
-                ->condition('language', $lang)
-                ->execute();
-          }
-          else {
-            db_insert('locales_target')
-                ->fields(array(
-                  'lid' => $lid[1],
-                  'translation' => $translation,
-                  'language' => $lang,
-                ))
-                ->execute();
-          }
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_preprocess_webform_components_form().
- *
- * Adds a translate link to each webform component.
- */
-function webform_localization_preprocess_webform_components_form(&$variables) {
-  $form = $variables['form'];
-  if (!isset($form['#node']->webform['nid'])) {
-    return;
-  }
-
-  $header = $variables['header'];
-  $rows = $variables['rows'];
-  $node = $form['#node'];
-
-  $enabled_languages = locale_language_list('name');
-
-  $webform_localization_options = webform_localization_get_config($form['#node']->webform['nid']);
-  $row_data = array();
-  if ($webform_localization_options['expose_strings'] && count($enabled_languages) > 1) {
-    // Change colspan of header and footer.
-    $footer = array_pop($rows);
-    $header[6]['colspan'] = 4;
-    $footer['data'][6]['colspan'] = 4;
-    // Add translate link to rows.
-    foreach ($rows as $key => $row) {
-      $row_data[$key] = $row;
-      if (isset($row['data-cid'])) {
-        $name = webform_localization_i18n_string_name($node->nid, $row['data-cid'], '#title');
-        $string_source = i18n_string_get_string($name);
-        if (isset($string_source->lid)) {
-          $row_data[$key]['data'][] = l(t('Translate'), 'admin/config/regional/translate/edit/' . $string_source->lid, array('query' => drupal_get_destination()));
-        }
-      }
-    }
-    $variables['rows'] = $row_data;
-    $variables['rows'][] = $footer;
-    $variables['header'] = $header;
-    $variables['form'] = $form;
-  }
-}
-
-/**
- * Implements hook_js_alter().
- */
-function webform_localization_js_alter(&$javascript) {
-  // Only react on webform nodes.
-  if ($node = menu_get_object()) {
-    if (!isset($node->type) || !in_array($node->type, webform_variable_get('webform_node_types'))) {
-      return FALSE;
-    }
-
-    // Only react when we are not on the source node.
-    if ($node->nid != $node->tnid && $node->tnid > 0) {
-      // Gets webform localization options that match this node ID.
-      $webform_localization_options = webform_localization_get_config($node->tnid);
-
-      // Only react when keep a single webform across a translation set.
-      if ($webform_localization_options['single_webform'] > 0) {
-        foreach ($javascript['settings']['data'] as &$setting) {
-          if (isset($setting['webform']['conditionals']['webform-client-form-' . $node->tnid])) {
-            $setting['webform']['conditionals']['webform-client-form-' . $node->nid] = $setting['webform']['conditionals']['webform-client-form-' . $node->tnid];
-            unset($setting['webform']['conditionals']['webform-client-form-' . $node->tnid]);
-          }
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_entitycache_node_load().
- */
-function webform_localization_entitycache_node_load($nodes) {
-  $webform_types = webform_variable_get('webform_node_types');
-  foreach ($nodes as $nid => &$node) {
-    if (in_array($node->type, $webform_types)) {
-      // Gets webform localization options that match this node ID.
-      $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.
-        webform_localization_translate_strings($node);
-        webform_localization_email_translate_strings($node);
-      }
-    }
-  }
-}
+}