danielebarchiesi@4: array( danielebarchiesi@4: 'name' => t('Languages'), danielebarchiesi@4: 'default_hook' => 'locale_default_languages', danielebarchiesi@4: 'feature_source' => TRUE, danielebarchiesi@4: 'default_file' => FEATURES_DEFAULTS_INCLUDED, danielebarchiesi@4: ), danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_features_export_options(). danielebarchiesi@4: */ danielebarchiesi@4: function language_features_export_options() { danielebarchiesi@4: return locale_language_list('native', TRUE); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_features_export(). danielebarchiesi@4: */ danielebarchiesi@4: function language_features_export($data, &$export, $module_name = '') { danielebarchiesi@4: $export['dependencies']['features'] = 'features'; danielebarchiesi@4: $export['dependencies']['locale'] = 'locale'; danielebarchiesi@4: danielebarchiesi@4: $language_list = locale_language_list('native', TRUE); danielebarchiesi@4: danielebarchiesi@4: foreach ($data as $name) { danielebarchiesi@4: // Only export existing languages. danielebarchiesi@4: if (!empty($language_list[$name])) { danielebarchiesi@4: // Add language to exports. danielebarchiesi@4: $export['features']['language'][$name] = $name; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // No pipe to return. danielebarchiesi@4: return array(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_features_export_render(). danielebarchiesi@4: */ danielebarchiesi@4: function language_features_export_render($module, $data, $export = NULL) { danielebarchiesi@4: $code = array(); danielebarchiesi@4: $code[] = ' $languages = array();'; danielebarchiesi@4: $code[] = ''; danielebarchiesi@4: danielebarchiesi@4: $language_list = language_list(); danielebarchiesi@4: danielebarchiesi@4: foreach ($data as $name) { danielebarchiesi@4: // Only render existing languages. danielebarchiesi@4: if (!empty($language_list[$name])) { danielebarchiesi@4: danielebarchiesi@4: $var = (array) $language_list[$name]; danielebarchiesi@4: // Unset javascript hash danielebarchiesi@4: unset($var['javascript']); danielebarchiesi@4: danielebarchiesi@4: $lang_export = features_var_export($var, ' '); danielebarchiesi@4: $lang_identifier = features_var_export($name); danielebarchiesi@4: $code[] = " // Exported language: $name."; danielebarchiesi@4: $code[] = " \$languages[{$lang_identifier}] = {$lang_export};"; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $code[] = ' return $languages;'; danielebarchiesi@4: $code = implode("\n", $code); danielebarchiesi@4: return array('locale_default_languages' => $code); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_features_revert(). danielebarchiesi@4: */ danielebarchiesi@4: function language_features_revert($module) { danielebarchiesi@4: return language_features_rebuild($module); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_features_rebuild(). danielebarchiesi@4: */ danielebarchiesi@4: function language_features_rebuild($module) { danielebarchiesi@4: if ($defaults = features_get_default('language', $module)) { danielebarchiesi@4: foreach ($defaults as $key => $language) { danielebarchiesi@4: _features_language_save((object) $language); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Set correct language count. danielebarchiesi@4: $enabled_languages = db_select('languages') danielebarchiesi@4: ->condition('enabled', 1) danielebarchiesi@4: ->fields('languages') danielebarchiesi@4: ->execute() danielebarchiesi@4: ->rowCount(); danielebarchiesi@4: variable_set('language_count', $enabled_languages); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Helper function to save the language to database. danielebarchiesi@4: * danielebarchiesi@4: * @see locale_languages_edit_form_submit() danielebarchiesi@4: */ danielebarchiesi@4: function _features_language_save($language) { danielebarchiesi@4: danielebarchiesi@4: $current_language = db_select('languages') danielebarchiesi@4: ->condition('language', $language->language) danielebarchiesi@4: ->fields('languages') danielebarchiesi@4: ->execute() danielebarchiesi@4: ->fetchAssoc(); danielebarchiesi@4: danielebarchiesi@4: // Set the default language when needed. danielebarchiesi@4: $default = language_default(); danielebarchiesi@4: danielebarchiesi@4: // Insert new language via api function. danielebarchiesi@4: if (empty($current_language)) { danielebarchiesi@4: locale_add_language($language->language, danielebarchiesi@4: $language->name, danielebarchiesi@4: $language->native, danielebarchiesi@4: $language->direction, danielebarchiesi@4: $language->domain, danielebarchiesi@4: $language->prefix, danielebarchiesi@4: $language->enabled, danielebarchiesi@4: ($language->language == $default->language)); danielebarchiesi@4: // Additional params, locale_add_language does not implement. danielebarchiesi@4: db_update('languages') danielebarchiesi@4: ->fields(array( danielebarchiesi@4: 'plurals' => empty($language->plurals) ? 0 : $language->plurals, danielebarchiesi@4: 'formula' => empty($language->formula) ? '' : $language->formula, danielebarchiesi@4: )) danielebarchiesi@4: ->condition('language', $language->language) danielebarchiesi@4: ->execute(); danielebarchiesi@4: } danielebarchiesi@4: // Update Existing language. danielebarchiesi@4: else { danielebarchiesi@4: // @TODO: get properties from schema. danielebarchiesi@4: $properties = array('language', 'name', 'native', 'direction', 'enabled', 'plurals', 'formula', 'domain', 'prefix', 'weight', 'javascript'); danielebarchiesi@4: // The javascript hash is not in the imported data but should be empty danielebarchiesi@4: if (!isset($language->javascript)) { danielebarchiesi@4: $language->javascript = ''; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $fields = array_intersect_key((array) $language, array_flip($properties)); danielebarchiesi@4: db_update('languages') danielebarchiesi@4: ->fields($fields) danielebarchiesi@4: ->condition('language', $language->language) danielebarchiesi@4: ->execute(); danielebarchiesi@4: danielebarchiesi@4: // Set the default language when needed. danielebarchiesi@4: $default = language_default(); danielebarchiesi@4: if ($default->language == $language->language) { danielebarchiesi@4: variable_set('language_default', (object) $fields); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: }