Dotclear

source: plugins/translater/index.php @ 1726

Revision 1726, 10.9 KB checked in by JcDenis, 14 years ago (diff)

translater 1.3:

  • Added babelfish help
  • Added behaviors on files writing
  • Fixed regexp again
  • Changed priority to .po files instead of .lang.php files
Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of translater, a plugin for Dotclear 2.
4#
5# Copyright (c) 2009 JC Denis and contributors
6# jcdenis@gdwd.com
7#
8# Licensed under the GPL version 2.0 license.
9# A copy of this license is available in LICENSE file or at
10# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11# -- END LICENSE BLOCK ------------------------------------
12
13if (!defined('DC_CONTEXT_ADMIN')){return;}
14
15# Check user perms
16dcPage::check('admin,translater');
17
18# Load translations of alert messages
19$_lang = $core->auth->getInfo('user_lang');
20$_lang = preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_lang) ? $_lang : 'en';
21l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/error');
22l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/admin');
23
24# Load class
25$O = new dcTranslater($core);
26
27# Init some vars
28$p_url    = 'plugin.php?p=translater';
29$msg = '';
30$code = isset($_REQUEST['code']) ? $_REQUEST['code'] : '';
31$tab = isset($_REQUEST['tab']) ? $_REQUEST['tab'] : '';
32$from = isset($_POST['from']) && $_POST['from'] != '-' ? $_POST['from'] : '';
33$lang = isset($_REQUEST['lang']) && $_REQUEST['lang'] != '-' ? $_REQUEST['lang'] : '';
34$action = isset($_POST['action']) ? $_POST['action'] : '';
35$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
36$module = isset($_REQUEST['module']) ? $_REQUEST['module'] : '';
37
38if ($type == '-' || $module == '-')
39     $type = $module = '';
40
41# Combos
42$combo_proposal_tool = array('-' => '');
43foreach($O->proposal->getTools() AS $id => $tool)
44{
45     $combo_proposal_tool[$tool['name']] = $id;
46}
47
48$combo_backup_folder = array(
49     'module' => __('locales folders of each module'),
50     'plugin' => __('plugins folder root'),
51     'public' => __('public folder root'),
52     'cache' => __('cache folder of Dotclear'),
53     'translater' =>__('locales folder of translater')
54);
55
56# Tabs
57$tabs = array(
58     'about' => __('About'),
59     'plugin' => __('Translate extensions'),
60     'theme' => __('Translate themes'),
61     'pack' =>  __('Import/Export'),
62     'module' => __('Translate'),
63     'setting' => __('Settings'),
64     'summary' => __('Summary'),
65     'lang' => __('Translations'),
66     'backup' => __('Backups')
67);
68
69# succes_codes
70$succes = array(
71     'save_setting' => __('Configuration successfully updated'),
72     'update_lang' => __('Translation successfully updated'),
73     'add_lang' => __('Translation successfully created'),
74     'delete_lang' => __('Translation successfully deleted'),
75     'create_backup' => __('Backups successfully create'),
76     'restore_backup' => __('Backups successfully restored'),
77     'delete_backup' => __('Backups successfully deleted'),
78     'import_pack' => __('Package successfully imported'),
79     'export_pack' => __('Package successfully exported')
80);
81
82# errors_codes
83$errors = array(
84     'save_setting' => __('Failed to update settings: %s'),
85     'update_lang' => __('Failed to update translation: %s'),
86     'add_lang' => __('Failed to create translation: %s'),
87     'delete_lang' => __('Failed to delete translation: %s'),
88     'create_backup' => __('Failed to create backups: %s'),
89     'restore_backup' => __('Failed to restore backups: %s'),
90     'delete_backup' => __('Failed to delete backups: %s'),
91     'import_pack' => __('Failed to import package: %s'),
92     'export_pack' => __('Failed to export package: %s')
93);
94
95# Get infos on module wanted
96try {
97     $M = $O->getModule($module,$type);
98}
99catch(Exception $e) {
100     $core->error->add(sprintf(
101          __('Failed to launch translater: %s'),$e->getMessage()));
102     $action = $module = $type = '';
103     $M = false;
104}
105if (!empty($module) && !empty($type) && !$M) {
106     $action = $module = $type = '';
107     $M = false;
108}
109
110# Actions
111if ('' != $action) {
112     try {
113          switch($action) {
114
115          # Update settings
116          case 'save_setting':
117          if (empty($_POST['settings'])) break;
118
119          if (empty($_POST['settings']['write_po'])
120           && empty($_POST['settings']['write_langphp'])) {
121               throw new Exception('You must choose one file format at least');
122          }
123          $settings = array();
124          foreach($O->getDefaultSettings() as $k => $v) {
125               $O->set($k,(isset($_POST['settings'][$k]) ? $_POST['settings'][$k] : ''));
126          }
127          $tab = 'setting';
128          break;
129
130          # Save changes on translation
131          case 'update_lang':
132          if (empty($_POST['entries']))
133               throw new Exception(__('Nothing to update'));
134
135          foreach($_POST['entries'] as $i => $entry)
136          {
137               if (isset($entry['check']) && isset($_POST['multigroup']))
138               {
139                    $_POST['entries'][$i]['group'] = $_POST['multigroup'];
140                    unset($_POST['entries'][$i]['check']);
141               }
142          }
143          $O->updLang($module,$lang,$_POST['entries']);
144          $tab = $lang;
145          break;
146
147          # create translation
148          case 'add_lang':
149          if (empty($lang)) break;
150
151          $O->addLang($module,$lang,$from);
152          $tab = $lang;
153          break;
154
155          # Delete translation
156          case 'delete_lang':
157          if (empty($lang)) break;
158
159          $O->delLang($module,$lang);
160          $tab = 'lang';
161          break;
162
163          # Create backups
164          case 'create_backup':
165          if (empty($_POST['modules'])
166           || empty($_POST['langs'])) break;
167
168          foreach($_POST['modules'] as $b_module) {
169               $b_list = $O->listLangs($b_module);
170               foreach($_POST['langs'] as $b_lang) {
171                    if (isset($b_list[$b_lang]))
172                         $O->createBackup($b_module,$b_lang);
173               }
174          }
175          $tab = 'backup';
176          break;
177
178          # Restore translations from backup
179          case 'restore_backup':
180          if (empty($_POST['modules']) || empty($_POST['files'])) break;
181
182          sort($_POST['files']);
183          $done = false;
184          foreach($_POST['modules'] as $b_module) {
185               $b_list = $O->listBackups($b_module,true);
186               foreach($_POST['files'] as $b_file) {
187                    if (in_array($b_file,$b_list))
188                         $O->restoreBackup($b_module,$b_file);
189                         $done = true;
190               }
191          }
192          if (!$done)
193               throw new Exception(__('Nothing to restore'));
194          $tab = 'backup';
195          break;
196
197          # Deletes translations backups
198          case 'delete_backup':
199          if (empty($_POST['modules']) 
200           || empty($_POST['files'])) break;
201
202          $done = false;
203          foreach($_POST['modules'] as $b_module) {
204               $b_list = $O->listBackups($b_module,true);
205               foreach($_POST['files'] as $b_file) {
206                    if (in_array($b_file,$b_list))
207                         $O->deleteBackup($b_module,$b_file);
208                         $done = true;
209               }
210          }
211          if (!$done)
212               throw new Exception(__('Nothing to backup'));
213          $tab = 'backup';
214          break;
215
216          # Import langs package
217          case 'import_pack':
218          if (empty($_FILES['packfile']['name']))
219               throw new Exception(__('Nothing to import'));
220
221          $O->importPack($_POST['modules'],$_FILES['packfile']);
222          $tab = 'pack';
223          break;
224
225          # Export langs package
226          case 'export_pack':
227          if (empty($_POST['modules']) 
228           || empty($_POST['entries']))
229               throw new Exception(__('Nothing to export'));
230
231          $O->exportPack($_POST['modules'],$_POST['entries']);
232          $tab = 'pack';
233          break;
234
235          # Unkonw action
236          default:
237          $tab = 'setting';
238          throw new Exception('Unknow action '.$action);
239          break;
240          }
241     }
242     catch(Exception $e) {
243          $core->error->add(sprintf($errors[$action],$e->getMessage()));
244     }
245     if (!$core->error->flag())
246          http::redirect($p_url.'&module='.$module.'&type='.$type.'&tab='.$tab.'&code='.$action);
247}
248
249# Action message
250if (isset($succes[$code]))
251     $msg = $succes[$code];
252
253# Tab
254if ($O->light_face) {
255     if ($tab == 'setting' || $tab == 'summary' || empty($tab))
256          $tab = $lang;
257} elseif (!$M) {
258     if ($tab == 'summary' || empty($tab))
259          $tab = 'plugin';
260} else {
261     if ($tab == 'setting' || empty($tab))
262          $tab = 'summary';
263}
264
265# Header
266echo
267'<html>'.
268'<head>'.
269'<title>'.__('Translater').'</title>'.
270dcPage::jsLoad('js/_posts_list.js').
271dcPage::jsPageTabs($tab).
272dcPage::jsLoad('index.php?pf=translater/js/jquery.translater.js');
273
274if ('' != $O->proposal_tool) {
275     echo
276     '<style type="text/css">'.
277     ' .addfield { border: none; }'.
278     "</style>\n".
279     "<script type=\"text/javascript\"> \n".
280     "//<![CDATA[\n".
281     " \$(function(){if(!document.getElementById){return;} \n".
282     \$.fn.translater.defaults.url = '".html::escapeJS('services.php')."'; \n".
283     \$.fn.translater.defaults.func = '".html::escapeJS('getProposal')."'; \n".
284     \$.fn.translater.defaults.from = '".html::escapeJS($O->proposal_lang)."'; \n".
285     \$.fn.translater.defaults.to = '".html::escapeJS($tab)."'; \n".
286     \$.fn.translater.defaults.tool = '".html::escapeJS($O->proposal_tool)."'; \n".
287     \$.fn.translater.defaults.title = '".html::escapeJS(sprintf(__('Use this %s translation:'),$O->proposal_tool))."'; \n".
288     \$.fn.translater.defaults.title_go = '".html::escapeJS(sprintf(__('Translate this text with %s'),$O->proposal_tool))."'; \n".
289     \$.fn.translater.defaults.title_add = '".html::escapeJS(__('Use this text'))."'; \n".
290     \$('.translaterline').translater(); \n".
291     "})\n".
292     "//]]>\n".
293     "</script>\n";
294}
295
296# --BEHAVIOR-- translaterAdminHeaders
297$core->callBehavior('translaterAdminHeaders');
298
299
300echo 
301'</head>'.
302'<body>';
303
304# Simple page
305if ($O->light_face)
306     require dirname(__FILE__).'/inc/simple.php';
307
308# Module page
309elseif (!$M)
310     require dirname(__FILE__).'/inc/modules.php';
311
312# Modules page
313else
314     require dirname(__FILE__).'/inc/module.php';
315
316# Footer
317echo 
318'<hr class="clear"/>
319'.dcPage::helpBlock('translater').'
320<div class="two-cols">
321<form method="post" action="'.$p_url.'" id="advancedmode">
322<p class="col left">
323'.($O->light_face ?
324     '<input class="submit" type="submit" name="save" '.
325     ' value="'.__('Switch to advance mode').'" />'.
326     form::hidden(array('settings[light_face]'),'0')
327:
328     '<input class="submit" type="submit" name="save" '.
329     ' value="'.__('Switch to light mode').'" />'.
330     form::hidden(array('settings[light_face]'),'1')
331).
332$core->formNonce().
333form::hidden(array('settings[two_cols]'),$O->two_cols).
334form::hidden(array('settings[plugin_menu]'),$O->plugin_menu).
335form::hidden(array('settings[theme_menu]'),$O->theme_menu).
336form::hidden(array('settings[backup_auto]'),$O->backup_auto).
337form::hidden(array('settings[backup_limit]'),$O->backup_limit).
338form::hidden(array('settings[backup_folder]'),$O->backup_folder).
339form::hidden(array('settings[write_po]'),$O->write_po).
340form::hidden(array('settings[write_langphp]'),$O->write_langphp).
341form::hidden(array('settings[scan_tpl]'),$O->scan_tpl).
342form::hidden(array('settings[parse_nodc]'),$O->parse_nodc).
343form::hidden(array('settings[parse_comment]'),$O->parse_comment).
344form::hidden(array('settings[parse_user]'),$O->parse_user).
345form::hidden(array('settings[parse_userinfo]'),$O->parse_userinfo).
346form::hidden(array('settings[import_overwrite]'),$O->import_overwrite).
347form::hidden(array('settings[export_filename]'),$O->export_filename).
348form::hidden(array('settings[proposal_tool]'),$O->proposal_tool).
349form::hidden(array('settings[proposal_lang]'),$O->proposal_lang).
350form::hidden(array('tab'),'setting').
351form::hidden(array('module'),$module).
352form::hidden(array('type'),$type).
353form::hidden(array('action'),'save_setting').
354form::hidden(array('p'),'translater').'
355</p>
356<p class="col right">
357translater - '.$core->plugins->moduleInfo('translater','version').'&nbsp;
358<img alt="translater" src="index.php?pf=translater/icon.png" />
359</p>
360</form>
361</div>
362</body></html>';
363?>
Note: See TracBrowser for help on using the repository browser.

Sites map