/[drupal]/contributions/modules/menutranslation/menutranslation.module
ViewVC logotype

Contents of /contributions/modules/menutranslation/menutranslation.module

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


Revision 1.4 - (show annotations) (download) (as text)
Mon Nov 19 12:25:01 2007 UTC (2 years ago) by svendecabooter
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +3 -3 lines
File MIME type: text/x-php
Fixed issue 193263
1 <?php
2 // $Id $
3
4 /**
5 * @file
6 * Author: Sven Decabooter
7 * Provides an easy interface to translate menu items
8 * Parts of the code inspired by i18nmenu module by Jose A. Reyero
9 */
10
11 /**
12 * Implementation of hook_help().
13 */
14 function menutranslation_help($section = '') {
15 $output = '';
16 switch ($section) {
17 case "admin/help#menutranslation" :
18 $output = t("Provides an easy interface to translate menu items");
19 break;
20 }
21 return $output;
22 }
23
24 /**
25 * Valid permissions for this module
26 * @return array An array of valid permissions for the module
27 */
28 function menutranslation_perm() {
29 return array('translate menus', 'administer menutranslation');
30 }
31
32 /**
33 * Implementation of hook_menu().
34 */
35 function menutranslation_menu($may_cache) {
36 $items = array();
37 if ($may_cache) {
38 $items[] = array(
39 'path' => 'admin/settings/menutranslation',
40 'title' => t('Menu Translation'),
41 'description' => t('Provides an easy interface to translate menu items'),
42 'callback' => 'drupal_get_form',
43 'callback arguments' => 'menutranslation_admin',
44 'access' => user_access('administer menutranslation'),
45 'type' => MENU_NORMAL_ITEM
46 );
47 $items[] = array(
48 'path' => 'admin/build/menu/menutranslation',
49 'title' => t('Menu Translation'),
50 'callback' => 'menutranslation_page',
51 'access' => user_access('translate menus'),
52 'type' => MENU_LOCAL_TASK
53 );
54 }
55 else {
56 menutranslation_translate_menus();
57 }
58 return $items;
59 }
60
61 function menutranslation_admin() {
62 $form = array();
63 $menu_options = menu_get_root_menus();
64
65 $form['menutranslation_menu'] = array(
66 '#type' => 'select',
67 '#title' => t('Menu(s) to translate'),
68 '#default_value' => variable_get('menutranslation_menu', 0),
69 '#options' => $menu_options,
70 '#multiple' => true,
71 '#size' => count($menu_options),
72 '#description' => t('Select which menu(s) should be translatable. Hold Shift key to select multiple items.')
73 );
74
75 menu_rebuild();
76
77 return system_settings_form($form);
78 }
79
80 function menutranslation_page($mid = 0, $lang = NULL) {
81 $output = '';
82 if ($mid != 0 && $lang == NULL) {
83 // show add/edit form
84 $output .= _menutranslation_lang_list($mid);
85 }
86 elseif ($mid != 0 && $lang != NULL) {
87 // show translation form
88 $output .= _menutranslation_translate($mid, $lang);
89 }
90 else {
91 // show menu item list
92 if ($selected_menus = variable_get('menutranslation_menu', array())) {
93 foreach ($selected_menus as $mid) {
94 $output .= theme('menutranslation_menutable',$mid);
95 }
96 }
97 else {
98 drupal_set_message('Please select a menu that you want to translate in the <a href="/admin/settings/menutranslation">menutranslation settings</a>.', 'error');
99 }
100 }
101 return $output;
102 }
103
104 function theme_menutranslation_menutable($mid) {
105 $header = array(t('Menu item'), t('Operations'));
106 $menu = menu_get_item($mid);
107 $rows = array();
108 _menutranslation_render_rows($rows, $menu, 0);
109 $table = theme('table', $header, $rows);
110 $output .= theme('box', $menu['visible'][$mid]['title'], $table);
111 return $output;
112 }
113
114 function _menutranslation_render_rows(&$rows, $menu = NULL, $depth = 0) {
115 $curr_depth = $depth;
116 if (isset($menu['children'])) {
117 $depth++;
118 foreach ($menu['children'] as $mid) {
119 $menu = menu_get_item($mid);
120 $rows[] = array(array('data' => theme('menutranslation_show_depth',$curr_depth) . $menu['title']), array('data' => l(t('add/edit translation'), 'admin/build/menu/menutranslation/'. $mid)));
121 _menutranslation_render_rows($rows, $menu, $depth);
122 }
123 }
124 }
125
126 function theme_menutranslation_show_depth($depth) {
127 $depthstring = '';
128 if ($depth > 0) {
129 for ($i=1;$i<$depth;$i++) {
130 $depthstring .= '&nbsp;&nbsp;';
131 }
132 $depthstring .= '-&nbsp;';
133 }
134 return $depthstring;
135 }
136
137 function _menutranslation_lang_list($mid) {
138 if (is_numeric($mid)) {
139 $menu_item = menu_get_item($mid);
140 $sql_title = "SELECT title FROM {menu} WHERE mid = '%d'";
141 $result = db_fetch_array(db_query($sql_title, $mid));
142 $title = $result['title'];
143 return theme('menutranslation_translationtable',$mid,$title);
144 }
145 }
146
147 function theme_menutranslation_translationtable($mid,$title){
148 // set breadcrumb
149 drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Administer'), 'admin'), l(t('Menutranslation'), 'admin/build/menu/menutranslation')));
150 // set title
151 drupal_set_title(t('Translation for menu item') .'<em> '. $title .'</em>');
152 // get languages
153 $languages = _i18n_locale_supported_languages();
154 $translation_arr = array();
155 $header = array(t('Language'), t('Translation'), t('Operations'));
156 foreach ($languages as $lang => $lang_name) {
157 $translation = _menutranslation_get_translation($mid,$lang);
158 $label = ($translation != t('n/a'))?t('edit translation'):t('create translation');
159 $rows[] = array(array('data' => $lang_name), array('data' => $translation), array('data' => l($label, 'admin/build/menu/menutranslation/'. $mid .'/'. $lang)));
160 }
161 return theme('table', $header, $rows);
162 }
163
164 function _menutranslation_get_translation($mid,$lang){
165 $sql = "SELECT title FROM {menutranslation} WHERE mid = '%d' AND lang = '%s'";
166 $result = db_fetch_array(db_query($sql, $mid, $lang));
167 $translation = ($result['title'] != NULL)?$result['title']:t('n/a');
168 return $translation;
169 }
170
171 function _menutranslation_translate($mid, $lang) {
172 $sql_title = "SELECT title FROM {menu} WHERE mid = '%d'";
173 $result = db_fetch_array(db_query($sql_title, $mid));
174 drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Administer'), 'admin'), l(t('Menutranslation'), 'admin/build/menu/menutranslation'), l(t('Translation for menu item @item', array('@item' => $result['title'])), 'admin/build/menu/menutranslation/'. $mid)));
175 $lang_arr = _i18n_locale_supported_languages();
176 drupal_set_title($lang_arr[$lang] .' translation:');
177 return drupal_get_form('menutranslation_form', $mid, $lang);
178 }
179
180 function menutranslation_form($mid, $lang) {
181 $sql = "SELECT title FROM {menutranslation} WHERE mid = '%d' AND lang = '%s'";
182 $result = db_fetch_array(db_query($sql, $mid, $lang));
183 $mode = ($result)?'update':'insert';
184 $form['translation'] = array(
185 '#type' => 'textfield',
186 '#title' => t('Translation'),
187 '#default_value' => $result['title'],
188 '#size' => 60,
189 '#maxlength' => 64,
190 '#description' => t('Specify the translation for this menu item'),
191 );
192 $form['mid'] = array('#type' => 'hidden', '#value' => $mid);
193 $form['lang'] = array('#type' => 'hidden', '#value' => $lang);
194 $form['mode'] = array('#type' => 'hidden', '#value' => $mode);
195 $form['submit'] = array(
196 '#type' => 'submit',
197 '#value' => t('Save'),
198 );
199 return $form;
200 }
201
202
203 function menutranslation_form_submit($form_id, $form_values) {
204 if ($form_values['mode'] == 'insert') {
205 db_query("INSERT INTO {menutranslation} (mid, lang, title) VALUES (%d, '%s', '%s')", $form_values['mid'], $form_values['lang'], $form_values['translation']);
206 }
207 elseif ($form_values['mode'] == 'update') {
208 db_query("UPDATE {menutranslation} SET title = '%s' WHERE mid = %d AND lang = '%s'", $form_values['translation'], $form_values['mid'], $form_values['lang']);
209 }
210 cache_clear_all(NULL, 'cache_menu');
211 drupal_goto('admin/build/menu/menutranslation/'. $form_values['mid']);
212 }
213
214 function menutranslation_translate_menus() {
215 global $_menu;
216 global $user;
217 global $locale;
218 $cid = "$user->uid:$locale";
219 cache_clear_all($cid, 'cache_menu');
220 foreach ($_menu['items'] as $mid => $item) {
221 if (($item['type'])) {
222 $sql = "SELECT title FROM {menutranslation} WHERE mid = '%d' AND lang = '%s'";
223 $result = db_fetch_array( db_query( $sql, $mid, $locale ) );
224 $title = $result['title'];
225 if ($title) {
226 $_menu['items'][$mid]['title'] = $title;
227 }
228 }
229 }
230 cache_set($cid, 'cache_menu', serialize($_menu), time() + (60 * 60 * 24));
231 }

  ViewVC Help
Powered by ViewVC 1.1.2