/[drupal]/contributions/modules/translatable/translatable.object.inc
ViewVC logotype

Contents of /contributions/modules/translatable/translatable.object.inc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download) (as text)
Fri Nov 14 01:11:34 2008 UTC (12 months, 1 week ago) by sun
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +14 -16 lines
File MIME type: text/x-php
#334057 by smk-ka: Code clean-up.
1 <?php
2 // $Id: translatable.object.inc,v 1.3 2008/02/22 20:19:29 sun Exp $
3
4 /**
5 * @file
6 * Provides generic object translation services.
7 */
8
9 /**
10 * Implementation of hook_menu().
11 *
12 * Due to its early execution, hook_menu() is a good place to translate
13 * variables.
14 */
15 function translatable_object_menu($may_cache) {
16 static $processed = FALSE;
17 $items = array();
18
19 // Translate system variables.
20 if (!$processed && !$may_cache) {
21 global $conf;
22 // Fetch translated variables for the current locale.
23 $variables = translatable_find('translation', "object_name = 'variable' AND locale = '". translatable_get_locale() ."'");
24 foreach ($variables as $variable) {
25 // Check whether a variable name exists in source variables.
26 if (array_key_exists($variable['object_field'], $conf)) {
27 // Replace source variable with translation.
28 $conf[$variable['object_field']] = $variable['translation'];
29 }
30 }
31 $processed = TRUE;
32 }
33
34 // Experimental taxonomy UI.
35 /*
36 if (!$may_cache) {
37 if (arg(2) == 'taxonomy' && arg(3) == 'edit' && arg(4) == 'term' && is_numeric(arg(5))) {
38 $items[] = array(
39 'path' => 'admin/content/taxonomy/edit/term/'. arg(5),
40 'type' => MENU_CALLBACK,
41 );
42 $items[] = array(
43 'path' => 'admin/content/taxonomy/edit/term/'. arg(5) .'/view',
44 'title' => t('View'),
45 'type' => MENU_DEFAULT_LOCAL_TASK,
46 'weight' => -10,
47 );
48 $items[] = array(
49 'path' => 'admin/content/taxonomy/edit/term/'. arg(5) .'/translations',
50 'title' => t('Translations'),
51 'callback' => 'translatable_node_node_page',
52 'access' => user_access('access translatable'),
53 'type' => MENU_LOCAL_TASK,
54 'weight' => 3,
55 );
56 if (arg(6) == 'translation' && translatable_validate_locale(arg(7))) {
57 $items[] = array(
58 'path' => 'admin/content/taxonomy/edit/term/'. arg(5) .'/translation/'. arg(7),
59 'title' => t('Edit translation'),
60 'callback' => 'translatable_node_edit_translation',
61 'callback arguments' => array('taxonomy_admin_term_edit', arg(5), arg(7)),
62 'weight' => 1,
63 'type' => MENU_LOCAL_TASK,
64 );
65 }
66 }
67 }
68 */
69 return $items;
70 }
71
72 /**
73 * Implementation of hook_form_alter().
74 */
75 function translatable_object_form_alter($form_id, &$form) {
76 if (translatable_alter_core_forms($form_id, $form)) {
77 // Enable translation language block.
78 translatable_adminlocale_formselect($form_id, $form);
79
80 $languages = translatable_available_languages();
81 $adminlocale = translatable_get_adminlocale();
82 if (translatable_get_default_locale() != $adminlocale) {
83 drupal_set_title(t('%language translation of %title', array('%language' => $languages[$adminlocale], '%title' => drupal_get_title())));
84
85 // Translate fields.
86 $source_form = $form;
87 $condition = "object_name = '". $source_form['#translatable_object'] ."'";
88 $condition .= " AND object_key = '". $source_form['#translatable_key'] ."'";
89 $condition .= " AND locale = '". translatable_get_adminlocale() ."'";
90 $items = translatable_find('translation', $condition);
91 translatable_translate_form_values($form, $items);
92
93 // Filter out untranslated fields.
94 translatable_filter_form($form, $source_form);
95
96 // Replace submit callback(s); submitting translations to other callbacks
97 // potentially breaks everything.
98 $form['#submit'] = array('translatable_object_form_submit' => array($source_form));
99 }
100 }
101 }
102
103 /**
104 * Form submit callback.
105 */
106 function translatable_object_form_submit($form_id, $form_values, $source_form) {
107 $variables = translatable_get_translatable_fields($source_form);
108 if ($variables) {
109 $translation = array(
110 'object_name' => $source_form['#translatable_object'],
111 'object_key' => $source_form['#translatable_key'],
112 'locale' => translatable_get_adminlocale(),
113 );
114 foreach ($variables as $name) {
115 if (array_key_exists($name, $form_values)) {
116 $translation['object_field'] = $name;
117 $translation['translation'] = $form_values[$name];
118 translatable_save('translation', $translation);
119 }
120 }
121 // Reset the cached menu, if a menu item is translated.
122 if ($source_form['#translatable_object'] == 'menu') {
123 menu_rebuild();
124 }
125 }
126 }
127
128 /**
129 * Form submit callback to delete translations.
130 */
131 function translatable_object_form_delete($form_id, $form_values, $source_form) {
132 translatable_delete_all('translation', "object_name = '". $source_form['#translatable_object'] ."' AND object_key = '". $source_form['#translatable_key'] ."'");
133 }
134
135 /**
136 * Make certain forms in Drupal core #translatable-aware.
137 *
138 * Basically, any system variable is translatable. Thus, we only need to
139 * disable untranslatable ones, but we can also return only TRUE to allow
140 * translation of all form fields.
141 * For any $form_id that is not covered by translatable rules, we return FALSE
142 * by default.
143 */
144 function translatable_alter_core_forms($form_id, &$form) {
145 // Default properties for system_settings_forms.
146 $variables_properties = array(
147 '#translatable_object' => 'variable',
148 '#translatable_key' => $form['form_id']['#value'],
149 );
150 switch ($form_id) {
151 // Blocks.
152 case 'block_admin_configure':
153 if (arg(3) == 'add') {
154 return FALSE;
155 }
156 $form['block_settings']['title']['#translatable'] = TRUE;
157 $form['block_settings']['info']['#translatable'] = TRUE;
158 $form['block_settings']['body_filter']['body']['#translatable'] = TRUE;
159 $form['block_settings']['body_filter']['format']['#translatable'] = TRUE;
160 $form['user_vis_settings']['#translatable'] = FALSE;
161 $form['role_vis_settings']['#translatable'] = FALSE;
162 $form['page_vis_settings']['#translatable'] = TRUE;
163 $form['#translatable_object'] = 'block';
164 $form['#translatable_key'] = $form['module']['#value'] .'-'. $form['delta']['#value'] .'-'. $GLOBALS['theme'];
165 return TRUE;
166
167 case 'block_box_delete':
168 // Delete translations, if an user-generated block is deleted.
169 $form['#translatable_object'] = 'block';
170 $form['#translatable_key'] = 'block-'. $form['bid']['#value'] .'-'. $GLOBALS['theme'];
171 $form['#submit']['translatable_object_form_delete'] = array($form);
172 return FALSE;
173
174 // Filter.
175 case 'filter_admin_format_form':
176 if (arg(3) == 'add') {
177 return FALSE;
178 }
179 $form['roles']['#translatable'] = FALSE;
180 $form['filters']['#translatable'] = FALSE;
181 $form += $variables_properties;
182 return TRUE;
183
184 // Menu.
185 case 'menu_edit_menu_form':
186 case 'menu_edit_item_form':
187 if (arg(4) == 'add') {
188 return FALSE;
189 }
190 global $_menu;
191 $mid = $form['mid']['#value'];
192 $type = $_menu['items'][$mid]['type'];
193 if (!($type & (MENU_CREATED_BY_ADMIN | MENU_MODIFIED_BY_ADMIN))) {
194 return FALSE;
195 }
196 if ($form_id == 'menu_edit_menu_form') {
197 $form['title']['#translatable'] = TRUE;
198 }
199 else {
200 $form['title']['#translatable'] = TRUE;
201 $form['description']['#translatable'] = TRUE;
202 $form['path']['#translatable'] = FALSE;
203 $form['expanded']['#translatable'] = FALSE;
204 $form['pid']['#translatable'] = FALSE;
205 $form['weight']['#translatable'] = FALSE;
206 }
207 $form['#translatable_object'] = 'menu';
208 $form['#translatable_key'] = $mid;
209 return TRUE;
210
211 case 'menu_confirm_delete_form':
212 // Delete translations, if a menu [item] is deleted.
213 $form['#translatable_object'] = 'menu';
214 $form['#translatable_key'] = $form['mid']['#value'];
215 $form['#submit']['translatable_object_form_delete'] = array($form);
216 return FALSE;
217
218 // System.
219 case 'system_site_maintenance_settings':
220 $form['site_offline']['#translatable'] = FALSE;
221 $form += $variables_properties;
222 return TRUE;
223
224 case 'system_date_time_settings':
225 $form['date_default_timezone']['#translatable'] = FALSE;
226 $form['configurable_timezones']['#translatable'] = FALSE;
227 $form += $variables_properties;
228 return TRUE;
229
230 case 'system_error_reporting_settings':
231 $form['error_level']['#translatable'] = FALSE;
232 $form['watchdog_clear']['#translatable'] = FALSE;
233 $form += $variables_properties;
234 return TRUE;
235
236 case 'system_site_information_settings':
237 $form += $variables_properties;
238 return TRUE;
239
240 case 'system_themes':
241 $form['status']['#translatable'] = FALSE;
242 $form += $variables_properties;
243 return TRUE;
244
245 case 'system_theme_settings':
246 // Translation of per-theme settings not (yet) supported.
247 if (arg(4) != NULL) {
248 return FALSE;
249 }
250 $form['logo']['logo_upload']['#translatable'] = FALSE;
251 $form['favicon']['favicon_upload']['#translatable'] = FALSE;
252 $form += $variables_properties;
253 return TRUE;
254
255 // Taxonomy.
256 case 'taxonomy_form_vocabulary':
257 if (arg(3) == 'add') {
258 return FALSE;
259 }
260 $form['nodes']['#translatable'] = FALSE;
261 $form['hierarchy']['#translatable'] = FALSE;
262 $form['relations']['#translatable'] = FALSE;
263 $form['tags']['#translatable'] = FALSE;
264 $form['multiple']['#translatable'] = FALSE;
265 $form['required']['#translatable'] = FALSE;
266 $form['weight']['#translatable'] = FALSE;
267 $form['#translatable_object'] = 'taxonomy_vocabulary';
268 $form['#translatable_key'] = $form['vid']['#value'];
269 return TRUE;
270
271 case 'taxonomy_vocabulary_confirm_delete':
272 // Delete translations, if a vocabulary is deleted.
273 $form['#translatable_object'] = 'taxonomy_vocabulary';
274 $form['#translatable_key'] = $form['vid']['#value'];
275 $form['#submit']['translatable_object_form_delete'] = array($form);
276 return FALSE;
277
278 case 'taxonomy_form_term':
279 if (arg(4) == 'add') {
280 return FALSE;
281 }
282 $form['weight']['#translatable'] = FALSE;
283 $form['#translatable_object'] = 'taxonomy_term';
284 $form['#translatable_key'] = $form['tid']['#value'];
285 return TRUE;
286
287 case 'taxonomy_term_confirm_delete':
288 // Delete translations, if a term is deleted.
289 $form['#translatable_object'] = 'taxonomy_term';
290 $form['#translatable_key'] = $form['tid']['#value'];
291 $form['#submit']['translatable_object_form_delete'] = array($form);
292 return FALSE;
293
294 // User.
295 case 'user_admin_settings':
296 $form['registration']['user_register']['#translatable'] = FALSE;
297 $form['registration']['user_email_verification']['#translatable'] = FALSE;
298 $form['pictures']['user_pictures']['#translatable'] = FALSE;
299 $form['pictures']['user_picture_path']['#translatable'] = FALSE;
300 $form['pictures']['user_picture_dimensions']['#translatable'] = FALSE;
301 $form['pictures']['user_picture_file_size']['#translatable'] = FALSE;
302 $form += $variables_properties;
303 return TRUE;
304 }
305 return FALSE;
306 }
307
308

  ViewVC Help
Powered by ViewVC 1.1.2