| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | <?php/** * @file * Implementation of i18n hooks *//** * Implements hook_i18n_string_objects(). *  * Automate object list for object types that have a 'table' property */function i18n_string_i18n_string_objects($type) {  if ($function = i18n_object_info($type, 'list callback')) {    return call_user_func($function);  }  elseif ($table = i18n_string_object_info($type, 'table')) {    $query = db_select($table, 's')->fields('s');    return $query->execute()->fetchAll();  }}/** * Implements hook_i18n_string_list(). *  * Collect all strings from objects of this group. */function i18n_string_i18n_string_list($group) {  $strings = array();  // It may be for one group or all groups  $groups = $group == 'all' ? array_keys(i18n_string_group_info()) : array($group);  foreach ($groups as $group) {      // Compile strings for object types for this group    foreach (i18n_string_group_object_types($group) as $type) {      $type_strings = i18n_string_object_type_string_list($type);      if ($type_strings && !empty($type_strings[$group])) {        $strings[$group] = isset($strings[$group]) ? i18n_string_array_merge($strings[$group], $type_strings[$group]) : $type_strings[$group];      }    }  }  return $strings;}/** * Get object types for text group */function i18n_string_group_object_types($group) {  $types = array();  foreach (i18n_object_info() as $type => $type_info) {    if (!empty($type_info['string translation']) && $type_info['string translation']['textgroup'] == $group) {      $types[] = $type;    }  }  return $types;}/** * Get object string list that are in this text group. *  * @param $type *   Object type */function i18n_string_object_type_string_list($type) {  $strings = array();  if ($objects = module_invoke_all('i18n_string_objects', $type)) {    foreach ($objects as $object) {      if ($object_strings = i18n_object($type, $object)->get_properties()) {        $strings = i18n_string_array_merge($strings, $object_strings);      }    }  }  return $strings;}/** * Merges multiple arrays, recursively, and returns the merged array. * * This function is not equivalent to PHP's array_merge_recursive(), * as this version leaves integer keys intact. * * @see drupal_array_merge_deep(), @see array_merge_recursive() * * @param ... *   Arrays to merge. * @return *   The merged array. */function i18n_string_array_merge() {  $arrays = func_get_args();  $result = array();  foreach ($arrays as $array) {    foreach ($array as $key => $value) {      // Recurse when both values are arrays.      if (isset($result[$key]) && is_array($result[$key]) && is_array($value)) {        $result[$key] = i18n_string_array_merge($result[$key], $value);      }      // Otherwise, use the latter value, overriding any previous value.      else {        $result[$key] = $value;      }    }  }  return $result;}
 |