Mercurial > defr > drupal > core
comparison modules/translation/translation.module @ 19:3edae6ecd6c6 6.9
Drupal 6.9
| author | Franck Deroche <franck@defr.org> |
|---|---|
| date | Thu, 15 Jan 2009 10:15:56 +0100 |
| parents | 4347c45bb494 |
| children |
comparison
equal
deleted
inserted
replaced
| 18:f5131a9cd9e5 | 19:3edae6ecd6c6 |
|---|---|
| 1 <?php | 1 <?php |
| 2 // $Id: translation.module,v 1.23.2.3 2008/12/10 20:35:06 goba Exp $ | 2 // $Id: translation.module,v 1.23.2.4 2009/01/14 23:34:07 goba Exp $ |
| 3 | 3 |
| 4 /** | 4 /** |
| 5 * @file | 5 * @file |
| 6 * Manages content translations. | 6 * Manages content translations. |
| 7 * | 7 * |
| 74 * Only display translation tab for node types, which have translation enabled | 74 * Only display translation tab for node types, which have translation enabled |
| 75 * and where the current node is not language neutral (which should span | 75 * and where the current node is not language neutral (which should span |
| 76 * all languages). | 76 * all languages). |
| 77 */ | 77 */ |
| 78 function _translation_tab_access($node) { | 78 function _translation_tab_access($node) { |
| 79 if (!empty($node->language) && translation_supported_type($node->type)) { | 79 return !empty($node->language) && translation_supported_type($node->type) && node_access('view', $node) && user_access('translate content'); |
| 80 return user_access('translate content'); | |
| 81 } | |
| 82 return FALSE; | |
| 83 } | 80 } |
| 84 | 81 |
| 85 /** | 82 /** |
| 86 * Implementation of hook_perm(). | 83 * Implementation of hook_perm(). |
| 87 */ | 84 */ |
| 190 return; | 187 return; |
| 191 } | 188 } |
| 192 | 189 |
| 193 switch ($op) { | 190 switch ($op) { |
| 194 case 'prepare': | 191 case 'prepare': |
| 195 if (empty($node->nid) && isset($_GET['translation']) && isset($_GET['language']) && | 192 if (empty($node->nid) && user_access('translate content') && isset($_GET['translation']) && isset($_GET['language']) && is_numeric($_GET['translation'])) { |
| 196 ($source_nid = $_GET['translation']) && ($language = $_GET['language']) && | 193 $translation_source = node_load($_GET['translation']); |
| 197 (user_access('translate content'))) { | 194 if (empty($translation_source) || !node_access('view', $translation_source)) { |
| 198 // We are translating a node from a source node, so | 195 // Source node not found or no access to view. We should not check |
| 199 // load the node to be translated and populate fields. | 196 // for edit access, since the translator might not have permissions |
| 200 $node->language = $language; | 197 // to edit the source node but should still be able to translate. |
| 201 $node->translation_source = node_load($source_nid); | 198 return; |
| 202 $node->title = $node->translation_source->title; | 199 } |
| 203 $node->body = $node->translation_source->body; | 200 $language_list = language_list(); |
| 201 if (!isset($language_list[$_GET['language']]) || ($translation_source->language == $_GET['language'])) { | |
| 202 // If not supported language, or same language as source node, break. | |
| 203 return; | |
| 204 } | |
| 205 // Populate fields based on source node. | |
| 206 $node->language = $_GET['language']; | |
| 207 $node->translation_source = $translation_source; | |
| 208 $node->title = $translation_source->title; | |
| 209 // If user has no access to the filter used for the body, Drupal core | |
| 210 // does not let the edit form to appear, so we should avoid exposing | |
| 211 // the source text here too. | |
| 212 $node->body = filter_access($translation_source->format) ? $translation_source->body : ''; | |
| 204 // Let every module add custom translated fields. | 213 // Let every module add custom translated fields. |
| 205 node_invoke_nodeapi($node, 'prepare translation'); | 214 node_invoke_nodeapi($node, 'prepare translation'); |
| 206 } | 215 } |
| 207 break; | 216 break; |
| 208 | 217 |
