danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * Features hooks for language.
|
danielebarchiesi@4
|
6 */
|
danielebarchiesi@4
|
7
|
danielebarchiesi@4
|
8 /**
|
danielebarchiesi@4
|
9 * Implements of hook_features_api().
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11 function locale_features_api() {
|
danielebarchiesi@4
|
12 return array(
|
danielebarchiesi@4
|
13 'language' => array(
|
danielebarchiesi@4
|
14 'name' => t('Languages'),
|
danielebarchiesi@4
|
15 'default_hook' => 'locale_default_languages',
|
danielebarchiesi@4
|
16 'feature_source' => TRUE,
|
danielebarchiesi@4
|
17 'default_file' => FEATURES_DEFAULTS_INCLUDED,
|
danielebarchiesi@4
|
18 ),
|
danielebarchiesi@4
|
19 );
|
danielebarchiesi@4
|
20 }
|
danielebarchiesi@4
|
21
|
danielebarchiesi@4
|
22 /**
|
danielebarchiesi@4
|
23 * Implements hook_features_export_options().
|
danielebarchiesi@4
|
24 */
|
danielebarchiesi@4
|
25 function language_features_export_options() {
|
danielebarchiesi@4
|
26 return locale_language_list('native', TRUE);
|
danielebarchiesi@4
|
27 }
|
danielebarchiesi@4
|
28
|
danielebarchiesi@4
|
29 /**
|
danielebarchiesi@4
|
30 * Implements hook_features_export().
|
danielebarchiesi@4
|
31 */
|
danielebarchiesi@4
|
32 function language_features_export($data, &$export, $module_name = '') {
|
danielebarchiesi@4
|
33 $export['dependencies']['features'] = 'features';
|
danielebarchiesi@4
|
34 $export['dependencies']['locale'] = 'locale';
|
danielebarchiesi@4
|
35
|
danielebarchiesi@4
|
36 $language_list = locale_language_list('native', TRUE);
|
danielebarchiesi@4
|
37
|
danielebarchiesi@4
|
38 foreach ($data as $name) {
|
danielebarchiesi@4
|
39 // Only export existing languages.
|
danielebarchiesi@4
|
40 if (!empty($language_list[$name])) {
|
danielebarchiesi@4
|
41 // Add language to exports.
|
danielebarchiesi@4
|
42 $export['features']['language'][$name] = $name;
|
danielebarchiesi@4
|
43 }
|
danielebarchiesi@4
|
44 }
|
danielebarchiesi@4
|
45
|
danielebarchiesi@4
|
46 // No pipe to return.
|
danielebarchiesi@4
|
47 return array();
|
danielebarchiesi@4
|
48 }
|
danielebarchiesi@4
|
49
|
danielebarchiesi@4
|
50 /**
|
danielebarchiesi@4
|
51 * Implements hook_features_export_render().
|
danielebarchiesi@4
|
52 */
|
danielebarchiesi@4
|
53 function language_features_export_render($module, $data, $export = NULL) {
|
danielebarchiesi@4
|
54 $code = array();
|
danielebarchiesi@4
|
55 $code[] = ' $languages = array();';
|
danielebarchiesi@4
|
56 $code[] = '';
|
danielebarchiesi@4
|
57
|
danielebarchiesi@4
|
58 $language_list = language_list();
|
danielebarchiesi@4
|
59
|
danielebarchiesi@4
|
60 foreach ($data as $name) {
|
danielebarchiesi@4
|
61 // Only render existing languages.
|
danielebarchiesi@4
|
62 if (!empty($language_list[$name])) {
|
danielebarchiesi@4
|
63
|
danielebarchiesi@4
|
64 $var = (array) $language_list[$name];
|
danielebarchiesi@4
|
65 // Unset javascript hash
|
danielebarchiesi@4
|
66 unset($var['javascript']);
|
danielebarchiesi@4
|
67
|
danielebarchiesi@4
|
68 $lang_export = features_var_export($var, ' ');
|
danielebarchiesi@4
|
69 $lang_identifier = features_var_export($name);
|
danielebarchiesi@4
|
70 $code[] = " // Exported language: $name.";
|
danielebarchiesi@4
|
71 $code[] = " \$languages[{$lang_identifier}] = {$lang_export};";
|
danielebarchiesi@4
|
72 }
|
danielebarchiesi@4
|
73 }
|
danielebarchiesi@4
|
74
|
danielebarchiesi@4
|
75 $code[] = ' return $languages;';
|
danielebarchiesi@4
|
76 $code = implode("\n", $code);
|
danielebarchiesi@4
|
77 return array('locale_default_languages' => $code);
|
danielebarchiesi@4
|
78 }
|
danielebarchiesi@4
|
79
|
danielebarchiesi@4
|
80 /**
|
danielebarchiesi@4
|
81 * Implements hook_features_revert().
|
danielebarchiesi@4
|
82 */
|
danielebarchiesi@4
|
83 function language_features_revert($module) {
|
danielebarchiesi@4
|
84 return language_features_rebuild($module);
|
danielebarchiesi@4
|
85 }
|
danielebarchiesi@4
|
86
|
danielebarchiesi@4
|
87 /**
|
danielebarchiesi@4
|
88 * Implements hook_features_rebuild().
|
danielebarchiesi@4
|
89 */
|
danielebarchiesi@4
|
90 function language_features_rebuild($module) {
|
danielebarchiesi@4
|
91 if ($defaults = features_get_default('language', $module)) {
|
danielebarchiesi@4
|
92 foreach ($defaults as $key => $language) {
|
danielebarchiesi@4
|
93 _features_language_save((object) $language);
|
danielebarchiesi@4
|
94 }
|
danielebarchiesi@4
|
95
|
danielebarchiesi@4
|
96 // Set correct language count.
|
danielebarchiesi@4
|
97 $enabled_languages = db_select('languages')
|
danielebarchiesi@4
|
98 ->condition('enabled', 1)
|
danielebarchiesi@4
|
99 ->fields('languages')
|
danielebarchiesi@4
|
100 ->execute()
|
danielebarchiesi@4
|
101 ->rowCount();
|
danielebarchiesi@4
|
102 variable_set('language_count', $enabled_languages);
|
danielebarchiesi@4
|
103 }
|
danielebarchiesi@4
|
104 }
|
danielebarchiesi@4
|
105
|
danielebarchiesi@4
|
106 /**
|
danielebarchiesi@4
|
107 * Helper function to save the language to database.
|
danielebarchiesi@4
|
108 *
|
danielebarchiesi@4
|
109 * @see locale_languages_edit_form_submit()
|
danielebarchiesi@4
|
110 */
|
danielebarchiesi@4
|
111 function _features_language_save($language) {
|
danielebarchiesi@4
|
112
|
danielebarchiesi@4
|
113 $current_language = db_select('languages')
|
danielebarchiesi@4
|
114 ->condition('language', $language->language)
|
danielebarchiesi@4
|
115 ->fields('languages')
|
danielebarchiesi@4
|
116 ->execute()
|
danielebarchiesi@4
|
117 ->fetchAssoc();
|
danielebarchiesi@4
|
118
|
danielebarchiesi@4
|
119 // Set the default language when needed.
|
danielebarchiesi@4
|
120 $default = language_default();
|
danielebarchiesi@4
|
121
|
danielebarchiesi@4
|
122 // Insert new language via api function.
|
danielebarchiesi@4
|
123 if (empty($current_language)) {
|
danielebarchiesi@4
|
124 locale_add_language($language->language,
|
danielebarchiesi@4
|
125 $language->name,
|
danielebarchiesi@4
|
126 $language->native,
|
danielebarchiesi@4
|
127 $language->direction,
|
danielebarchiesi@4
|
128 $language->domain,
|
danielebarchiesi@4
|
129 $language->prefix,
|
danielebarchiesi@4
|
130 $language->enabled,
|
danielebarchiesi@4
|
131 ($language->language == $default->language));
|
danielebarchiesi@4
|
132 // Additional params, locale_add_language does not implement.
|
danielebarchiesi@4
|
133 db_update('languages')
|
danielebarchiesi@4
|
134 ->fields(array(
|
danielebarchiesi@4
|
135 'plurals' => empty($language->plurals) ? 0 : $language->plurals,
|
danielebarchiesi@4
|
136 'formula' => empty($language->formula) ? '' : $language->formula,
|
danielebarchiesi@4
|
137 ))
|
danielebarchiesi@4
|
138 ->condition('language', $language->language)
|
danielebarchiesi@4
|
139 ->execute();
|
danielebarchiesi@4
|
140 }
|
danielebarchiesi@4
|
141 // Update Existing language.
|
danielebarchiesi@4
|
142 else {
|
danielebarchiesi@4
|
143 // @TODO: get properties from schema.
|
danielebarchiesi@4
|
144 $properties = array('language', 'name', 'native', 'direction', 'enabled', 'plurals', 'formula', 'domain', 'prefix', 'weight', 'javascript');
|
danielebarchiesi@4
|
145 // The javascript hash is not in the imported data but should be empty
|
danielebarchiesi@4
|
146 if (!isset($language->javascript)) {
|
danielebarchiesi@4
|
147 $language->javascript = '';
|
danielebarchiesi@4
|
148 }
|
danielebarchiesi@4
|
149
|
danielebarchiesi@4
|
150 $fields = array_intersect_key((array) $language, array_flip($properties));
|
danielebarchiesi@4
|
151 db_update('languages')
|
danielebarchiesi@4
|
152 ->fields($fields)
|
danielebarchiesi@4
|
153 ->condition('language', $language->language)
|
danielebarchiesi@4
|
154 ->execute();
|
danielebarchiesi@4
|
155
|
danielebarchiesi@4
|
156 // Set the default language when needed.
|
danielebarchiesi@4
|
157 $default = language_default();
|
danielebarchiesi@4
|
158 if ($default->language == $language->language) {
|
danielebarchiesi@4
|
159 variable_set('language_default', (object) $fields);
|
danielebarchiesi@4
|
160 }
|
danielebarchiesi@4
|
161 }
|
danielebarchiesi@4
|
162 }
|