Mercurial > hg > rr-repo
diff sites/all/modules/features/includes/features.locale.inc @ 4:ce11bbd8f642
added modules
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:38:44 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/features/includes/features.locale.inc Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,162 @@ +<?php + +/** + * @file + * Features hooks for language. + */ + +/** + * Implements of hook_features_api(). + */ +function locale_features_api() { + return array( + 'language' => array( + 'name' => t('Languages'), + 'default_hook' => 'locale_default_languages', + 'feature_source' => TRUE, + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + ); +} + +/** + * Implements hook_features_export_options(). + */ +function language_features_export_options() { + return locale_language_list('native', TRUE); +} + +/** + * Implements hook_features_export(). + */ +function language_features_export($data, &$export, $module_name = '') { + $export['dependencies']['features'] = 'features'; + $export['dependencies']['locale'] = 'locale'; + + $language_list = locale_language_list('native', TRUE); + + foreach ($data as $name) { + // Only export existing languages. + if (!empty($language_list[$name])) { + // Add language to exports. + $export['features']['language'][$name] = $name; + } + } + + // No pipe to return. + return array(); +} + +/** + * Implements hook_features_export_render(). + */ +function language_features_export_render($module, $data, $export = NULL) { + $code = array(); + $code[] = ' $languages = array();'; + $code[] = ''; + + $language_list = language_list(); + + foreach ($data as $name) { + // Only render existing languages. + if (!empty($language_list[$name])) { + + $var = (array) $language_list[$name]; + // Unset javascript hash + unset($var['javascript']); + + $lang_export = features_var_export($var, ' '); + $lang_identifier = features_var_export($name); + $code[] = " // Exported language: $name."; + $code[] = " \$languages[{$lang_identifier}] = {$lang_export};"; + } + } + + $code[] = ' return $languages;'; + $code = implode("\n", $code); + return array('locale_default_languages' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function language_features_revert($module) { + return language_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + */ +function language_features_rebuild($module) { + if ($defaults = features_get_default('language', $module)) { + foreach ($defaults as $key => $language) { + _features_language_save((object) $language); + } + + // Set correct language count. + $enabled_languages = db_select('languages') + ->condition('enabled', 1) + ->fields('languages') + ->execute() + ->rowCount(); + variable_set('language_count', $enabled_languages); + } +} + +/** + * Helper function to save the language to database. + * + * @see locale_languages_edit_form_submit() + */ +function _features_language_save($language) { + + $current_language = db_select('languages') + ->condition('language', $language->language) + ->fields('languages') + ->execute() + ->fetchAssoc(); + + // Set the default language when needed. + $default = language_default(); + + // Insert new language via api function. + if (empty($current_language)) { + locale_add_language($language->language, + $language->name, + $language->native, + $language->direction, + $language->domain, + $language->prefix, + $language->enabled, + ($language->language == $default->language)); + // Additional params, locale_add_language does not implement. + db_update('languages') + ->fields(array( + 'plurals' => empty($language->plurals) ? 0 : $language->plurals, + 'formula' => empty($language->formula) ? '' : $language->formula, + )) + ->condition('language', $language->language) + ->execute(); + } + // Update Existing language. + else { + // @TODO: get properties from schema. + $properties = array('language', 'name', 'native', 'direction', 'enabled', 'plurals', 'formula', 'domain', 'prefix', 'weight', 'javascript'); + // The javascript hash is not in the imported data but should be empty + if (!isset($language->javascript)) { + $language->javascript = ''; + } + + $fields = array_intersect_key((array) $language, array_flip($properties)); + db_update('languages') + ->fields($fields) + ->condition('language', $language->language) + ->execute(); + + // Set the default language when needed. + $default = language_default(); + if ($default->language == $language->language) { + variable_set('language_default', (object) $fields); + } + } +}