Skip to content

Commit 174e7a4

Browse files
committed
full rework (in progress) see changelog
1 parent bdb4b6d commit 174e7a4

16 files changed

+1894
-3579
lines changed

CHANGELOG.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
2021.09.02.1 - dev
22
- [ ] help translation
33
- [ ] source translation
4-
- [ ] fix constante for official modules
5-
- [ ] fix third-party API (all are broken)
6-
- [ ] add dashboard icon
4+
- [ ] fix third-party API (temp remoed)
5+
- [ ] add support for plural (.po ok)
6+
- add dashboard icon
7+
- fix constante for official modules
8+
- fix superadmin permissions
9+
- remove modules list tab and add button to existing lists
10+
- remove multi-modules import/export
711

812
2021.09.02
913
- clean up code and fix typo

_admin.php

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,40 @@
1515
return;
1616
}
1717

18-
$core->blog->settings->addNamespace('translater');
1918
$core->addBehavior('adminModulesListGetActions', ['translaterAdminBehaviors', 'adminModulesGetActions']);
2019
$core->addBehavior('adminModulesListDoActions', ['translaterAdminBehaviors', 'adminModulesDoActions']);
2120
$core->addBehavior('adminDashboardFavorites', ['translaterAdminBehaviors', 'adminDashboardFavorites']);
22-
$core->addBehavior('addTranslaterProposalTool', ['translaterAdminBehaviors', 'addGoogleProposalTool']);
23-
$core->addBehavior('addTranslaterProposalTool', ['translaterAdminBehaviors', 'addYahooProposalTool']);
24-
$core->addBehavior('addTranslaterProposalTool', ['translaterAdminBehaviors', 'addMicrosoftProposalTool']);
25-
$core->rest->addFunction('getProposal', ['translaterRest', 'getProposal']);
2621

2722
$_menu['Plugins']->addItem(
2823
__('Translater'),
29-
$core->adminurl->get('admin.plugin.translater'),
24+
$core->adminurl->get('translater'),
3025
dcPage::getPF('translater/icon.png'),
3126
preg_match(
32-
'/' . preg_quote($core->adminurl->get('admin.plugin.translater')) . '(&.*)?$/',
27+
'/' . preg_quote($core->adminurl->get('translater')) . '(&.*)?$/',
3328
$_SERVER['REQUEST_URI']
3429
),
3530
$core->auth->isSuperAdmin()
3631
);
3732

3833
class translaterAdminBehaviors
3934
{
35+
/** @var dcTranlsater dcTranslater instance */
36+
private static $translater = null;
37+
38+
/**
39+
* Create instance of dcTranslater once
40+
*
41+
* @param dCore $core dcCore instance
42+
* @return dctranslater dcTranslater instance
43+
*/
44+
private static function translater($core)
45+
{
46+
if (!(self::$translater instanceof dcTranslater)) {
47+
self::$translater = new dcTranslater($core);
48+
}
49+
return self::$translater;
50+
}
51+
4052
/**
4153
* Add button to go to module translation
4254
*
@@ -48,7 +60,7 @@ class translaterAdminBehaviors
4860
public static function adminModulesGetActions(adminModulesList $list, string $id, array $prop): ?string
4961
{
5062
if ($list->getList() != $prop['type'] . '-activate'
51-
|| !$list->core->blog->settings->translater->get('translater_' . $prop['type'] . '_menu')
63+
|| !self::translater($list->core)->getSetting($prop['type'] . '_menu')
5264
|| !$list->core->auth->isSuperAdmin()
5365
) {
5466
return null;
@@ -74,7 +86,7 @@ public static function adminModulesDoActions(adminModulesList $list, array $modu
7486
}
7587

7688
$list->core->adminurl->redirect(
77-
'admin.plugin.translater',
89+
'translater',
7890
['part' => 'module', 'type' => $type, 'module' => key($_POST['translater'])],
7991
'#module-lang'
8092
);
@@ -90,40 +102,10 @@ public static function adminDashboardFavorites(dcCore $core, dcFavorites$favs)
90102
{
91103
$favs->register('translater', [
92104
'title' => __('Translater'),
93-
'url' => $core->adminurl->get('admin.plugin.translater'),
105+
'url' => $core->adminurl->get('translater'),
94106
'small-icon' => urldecode(dcPage::getPF('translater/icon.png')),
95107
'large-icon' => urldecode(dcPage::getPF('translater/icon-big.png')),
96108
'permissions' => $core->auth->isSuperAdmin()
97109
]);
98110
}
99-
100-
/**
101-
* Register Google Translater tools in translate
102-
*
103-
* @param translaterProposals $proposal translaterProposals instance
104-
*/
105-
public static function addGoogleProposalTool(translaterProposals $proposal)
106-
{
107-
$proposal->addTool('googleProposalTool');
108-
}
109-
110-
/**
111-
* Register Yahoo Babelfish tools in translater
112-
*
113-
* @param translaterProposals $proposal translaterProposals instance
114-
*/
115-
public static function addYahooProposalTool(translaterProposals $proposal)
116-
{
117-
$proposal->addTool('yahooProposalTool');
118-
}
119-
120-
/**
121-
* Register Microsoft Bing tools in translater
122-
*
123-
* @param translaterProposals $proposal translaterProposals instance
124-
*/
125-
public static function addMicrosoftProposalTool(translaterProposals $proposal)
126-
{
127-
$proposal->addTool('microsoftProposalTool');
128-
}
129111
}

_config.php

Lines changed: 72 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -15,148 +15,89 @@
1515
return null;
1616
}
1717

18-
$redir = empty($_REQUEST['redir']) ?
19-
$list->getURL() . '#plugins' : $_REQUEST['redir'];
20-
21-
# -- Get settings --
22-
$core->blog->settings->addNamespace('translater');
23-
$s = $core->blog->settings->translater;
24-
2518
$translater = new dcTranslater($core);
2619

27-
$combo_backup_limit = [
28-
5 => 5,
29-
10 => 10,
30-
15 => 15,
31-
20 => 20,
32-
40 => 40,
33-
60 => 60
34-
];
35-
36-
$combo_backup_folder = [
37-
'module' => __('locales folders of each module'),
38-
'plugin' => __('plugins folder root'),
39-
'public' => __('public folder root'),
40-
'cache' => __('cache folder of Dotclear'),
41-
'translater' =>__('locales folder of translater')
42-
];
43-
44-
$combo_start_page = [
45-
'modules_plugin' => __('Plugins'),
46-
'modules_theme' => __('Themes'),
47-
'pack' => __('Import/Export')
48-
];
49-
50-
# -- Set settings --
5120
if (!empty($_POST['save'])) {
52-
try {
53-
if (empty($_POST['translater_write_po'])
54-
&& empty($_POST['translater_write_langphp'])) {
55-
throw new Exception('You must choose one file format at least');
56-
}
57-
foreach($translater->getDefaultSettings() as $k => $v) {
58-
$translater->setSetting($k, (isset($_POST['translater_' . $k]) ? $_POST['translater_' . $k] : ''));
59-
}
60-
foreach($translater->proposal->getTools() AS $k => $v) {
61-
$v->save();
62-
}
63-
dcPage::addSuccessNotice(
64-
__('Configuration has been successfully updated.')
65-
);
66-
http::redirect(
67-
$list->getURL('module=translater&conf=1&redir=' .
68-
$list->getRedir())
21+
try {
22+
if (empty($_POST['write_po']) && empty($_POST['write_langphp'])) {
23+
throw new Exception(
24+
__('You must at least choose one file format to write')
6925
);
70-
} catch (Exception $e) {
71-
$core->error->add(sprintf($errors[$action], $e->getMessage()));
7226
}
73-
}
74-
75-
# -- Display form --
76-
echo '
77-
<div class="fieldset">
78-
<h4>' . __('Translation') . '</h4>
79-
<p><label class="classic">' .
80-
form::checkbox('translater_write_po', '1' ,$translater->write_po) . '
81-
' . __('Write .po files') . '</label></p>
82-
<p><label class="classic">' .
83-
form::checkbox('translater_write_langphp', '1', $translater->write_langphp) . '
84-
' . __('Write .lang.php files') . '</label></p>
85-
<p><label class="classic">' .
86-
form::checkbox('translater_scan_tpl', '1', $translater->scan_tpl) . '
87-
' . __('Translate also strings of template files') . '</label></p>
88-
<p><label class="classic">' .
89-
form::checkbox('translater_parse_nodc', '1', $translater->parse_nodc) . '
90-
' . __('Translate only unknow strings') . '</label></p>
91-
<p><label class="classic">' .
92-
form::checkbox('translater_hide_default', '1', $translater->hide_default) . '
93-
' . __('Hide default modules of Dotclear') . '</label></p>
94-
<p><label class="classic">' .
95-
form::checkbox('translater_parse_comment', '1', $translater->parse_comment) . '
96-
' . __('Write comments in files') . '</label></p>
97-
<p><label class="classic">' .
98-
form::checkbox('translater_parse_user', '1', $translater->parse_user) . '
99-
' . __('Write informations about author in files') . '</label><br />
100-
' . form::field('translater_parse_userinfo', 65, 255, $translater->parse_userinfo) . '</p>
101-
</div>
102-
103-
<div class="fieldset">
104-
<h4>' . __('Tools') . '</h4>
105-
<p><label class="classic">' . __('Default language of l10n source:') . '<br />' .
106-
form::combo('translater_proposal_lang',
107-
array_flip($translater->getIsoCodes()), $translater->proposal_lang) . '</label></p>
108-
109-
<h4>' . __('Select and configure the tool to use to translate strings:') . '</h4>';
110-
111-
foreach($translater->proposal->getTools() AS $k => $v) {
112-
$form = $v->form();
113-
114-
echo '
115-
<dd>
116-
<dt><label class="classic">' .
117-
form::radio('translater_proposal_tool', $k, $k == $translater->proposal_tool) . '
118-
' . $v->getDesc() . '</label></dt><dd>' .
119-
(empty($form) ?
120-
'<p>' . sprintf(__('Nothing to configure for %s tool . '), $v->getName()) . '</p>' :
121-
$form
122-
) . '</dd></dl>';
27+
foreach($translater->getDefaultSettings() as $k => $v) {
28+
$translater->setSetting($k, (isset($_POST[$k]) ? $_POST[$k] : ''));
29+
}
30+
dcPage::addSuccessNotice(
31+
__('Configuration successfully updated.')
32+
);
33+
$core->adminurl->redirect(
34+
'admin.plugins',
35+
['module' => 'translater', 'conf' => 1, 'redir' => $list->getRedir()]
36+
);
37+
} catch (Exception $e) {
38+
$core->error->add($e->getMessage());
39+
}
12340
}
12441

12542
echo '
43+
<div class="fieldset"><h4>' . __('Translation') . '</h4>
44+
<p><label for="write_po">' .
45+
form::checkbox('write_po', '1' ,$translater->write_po) .
46+
__('Write .po files') . '</label></p>
47+
<p><label for="write_langphp">' .
48+
form::checkbox('write_langphp', '1', $translater->write_langphp) .
49+
__('Write .lang.php files') . '</label></p>
50+
<p><label for="scan_tpl">' .
51+
form::checkbox('scan_tpl', '1', $translater->scan_tpl) .
52+
__('Translate also strings of template files') . '</label></p>
53+
<p><label for="parse_nodc">' .
54+
form::checkbox('parse_nodc', '1', $translater->parse_nodc) .
55+
__('Translate only unknow strings') . '</label></p>
56+
<p><label for="hide_default">' .
57+
form::checkbox('hide_default', '1', $translater->hide_default) .
58+
__('Hide default modules of Dotclear') . '</label></p>
59+
<p><label for="parse_comment">' .
60+
form::checkbox('parse_comment', '1', $translater->parse_comment) .
61+
__('Write comments in files') . '</label></p>
62+
<p><label for="parse_user">' .
63+
form::checkbox('parse_user', '1', $translater->parse_user) .
64+
__('Write informations about author in files') . '</label></p>
65+
<p><label for="parse_userinfo">' . __('User info:') . '</label>' .
66+
form::field('parse_userinfo', 65, 255, $translater->parse_userinfo) . '</p>
67+
<p class="form-note">' . sprintf(
68+
__('Following informations can be used: %s '), implode(', ', $translater::$allowed_user_informations)) . '
69+
</p>
12670
</div>
12771
128-
<div class="fieldset">
129-
<h4>' . __('Import/Export') . '</h4>
130-
<p><label class="classic">' .
131-
form::checkbox('translater_import_overwrite', '1', $translater->import_overwrite) . '
132-
' . __('Overwrite existing languages') . '</label></p>
133-
<p><label class="classic">' . __('Name of exported package') . '<br />
134-
' . form::field('translater_export_filename', 65, 255, $translater->export_filename) . '</label></p>
72+
<div class="fieldset"><h4>' . __('Import/Export') . '</h4>
73+
<p><label for="import_overwrite">' .
74+
form::checkbox('import_overwrite', '1', $translater->import_overwrite) .
75+
__('Overwrite existing languages') . '</label></p>
76+
<p><label for="export_filename">' . __('Name of exported package:') . '</label>' .
77+
form::field('export_filename', 65, 255, $translater->export_filename) . '</p>
13578
</div>
13679
137-
<div class="fieldset">
138-
<h4>' . __('Backups') . '</h4>
139-
<p><label class="classic">' .
140-
form::checkbox('translater_backup_auto', '1', $translater->backup_auto) . '
141-
' . __('Make backups when changes are made') . '</label></p>
142-
<p><label class="classic">' . sprintf(__('Limit backups to %s files per module'),
143-
form::combo('translater_backup_limit',
144-
array_flip($combo_backup_limit), $translater->backup_limit)) . '</label></p>
145-
<p><label class="classic">' . sprintf(__('Store backups in %s'),
146-
form::combo('translater_backup_folder',
147-
array_flip($combo_backup_folder), $translater->backup_folder)) . '</label></p>
80+
<div class="fieldset"><h4>' . __('Backups') . '</h4>
81+
<p><label for="backup_auto">' .
82+
form::checkbox('backup_auto', '1', $translater->backup_auto) .
83+
__('Make backups when changes are made') . '</label></p>
84+
<p><label for="backup_limit" class="classic">' . sprintf(__('Limit backups to %s files per module'),
85+
form::number('backup_limit', ['min' => 0, 'max' => 50, 'default' => $translater->backup_limit])) . '</label></p>
86+
<p><label for="backup_folder">' . __('Store backups in:') . '</label>' .
87+
form::combo('backup_folder', $translater::$allowed_backup_folders, $translater->backup_folder) . '</p>
14888
</div>
14989
150-
<div class="fieldset">
151-
<h4>' . __('Behaviors') . '</h4>
152-
<p><label class="classic">' . __('Default start menu:') . '<br />' .
153-
form::combo('translater_start_page',
154-
array_flip($combo_start_page), $translater->start_page) . '</label></p>
155-
<p><label class="classic">' .
156-
form::checkbox('translater_plugin_menu', '1', $translater->plugin_menu) . '
157-
' . __('Enable menu on extensions page') . '</label></p>
158-
<p><label class="classic">' .
159-
form::checkbox('translater_theme_menu', '1', $translater->theme_menu) . '
160-
' . __('Enable menu on themes page') . '</label></p>
161-
</div>
162-
';
90+
<div class="fieldset"><h4>' . __('Behaviors') . '</h4>
91+
<p><label for="start_page">' . __('Default start menu:') . '</label>' .
92+
form::combo('start_page',[
93+
__('Plugins') => 'plugin',
94+
__('Themes') => 'theme',
95+
__('Home') => '-'
96+
], $translater->start_page) . '</p>
97+
<p><label for="plugin_menu">' .
98+
form::checkbox('plugin_menu', '1', $translater->plugin_menu) .
99+
__('Enable menu on extensions page') . '</label></p>
100+
<p><label for="theme_menu">' .
101+
form::checkbox('theme_menu', '1', $translater->theme_menu) .
102+
__('Enable menu on themes page') . '</label></p>
103+
</div>';

_install.php

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,38 +13,21 @@
1313

1414
if (!defined('DC_CONTEXT_ADMIN')) {
1515
return null;
16-
}
17-
18-
$s = [
19-
['translater_plugin_menu', 0, 'boolean', 'Put a link in plugins page'],
20-
['translater_theme_menu', 0,'boolean', 'Put a link in themes page'],
21-
['translater_backup_auto', 1,'boolean', 'Make a backup of languages old files when there are modified'],
22-
['translater_backup_limit', 20,'string', 'Maximum backups per module'],
23-
['translater_backup_folder', 'module',' string', 'In which folder to store backups'],
24-
['translater_start_page', 'setting,', 'string', 'Page to start on'],
25-
['translater_write_po', 1, 'boolean', 'Write .po languages files'],
26-
['translater_write_langphp', 1, 'boolean', 'Write .lang.php languages files'],
27-
['translater_scan_tpl', 0, 'boolean', 'Translate strings of templates files'],
28-
['translater_parse_nodc', 1, 'boolean', 'Translate only untranslated strings of Dotclear'],
29-
['translater_hide_default', 1, 'boolean', 'Hide default modules of Dotclear'],
30-
['translater_parse_comment', 1, 'boolean', 'Write comments and strings informations in lang files'],
31-
['translater_parse_user', 1,'boolean', 'Write inforamtions about author in lang files'],
32-
['translater_parse_userinfo', 'displayname, email', 'string','Type of informations about user to write'],
33-
['translater_import_overwrite', 0, 'boolean', 'Overwrite existing languages when import packages'],
34-
['translater_export_filename', 'type-module-l10n-timestamp', 'string','Name of files of exported package'],
35-
['translater_proposal_tool', 'google', 'string', 'Id of default tool for proposed translation'],
36-
['translater_proposal_lang', 'en', 'string', 'Default source language for proposed translation']
37-
];
16+
}
3817

3918
try {
4019
if (version_compare($core->getVersion($id), $this->moduleInfo($id, 'version'), '>=')) {
4120
return null;
4221
}
43-
$core->blog->settings->addNamespace('translater');
22+
23+
$t = new dcTranslater($core);
24+
$s = $t->getDefaultSettings();
4425
foreach($s as $v) {
45-
$core->blog->settings->translater->put($v[0], $v[1], $v[2], $v[3], false, true);
26+
$t->setSetting($v[0], $v[1], false);
4627
}
28+
4729
$core->setVersion($id, $this->moduleInfo($id, 'version'));
30+
4831
return true;
4932
} catch (Exception $e) {
5033
$core->error->add($e->getMessage());

0 commit comments

Comments
 (0)