1<?php
2/**
3 * @package tikiwiki
4 */
5// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
6//
7// All Rights Reserved. See copyright.txt for details and a complete list of authors.
8// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
9// $Id$
10
11require_once('tiki-setup.php');
12require_once('lib/language/Language.php');
13require_once('lib/language/LanguageTranslations.php');
14
15$access->check_feature('lang_use_db');
16$access->check_permission('tiki_p_edit_languages');
17
18// Get available languages
19$langLib = TikiLib::lib('language');
20$languages = $langLib->list_languages();
21$smarty->assign_by_ref('languages', $languages);
22
23// preserving variables
24if (isset($_REQUEST["edit_language"])) {
25	$smarty->assign('edit_language', $_REQUEST["edit_language"]);
26	$edit_language = $_REQUEST["edit_language"];
27} else {
28	$smarty->assign('edit_language', $prefs['language']);
29	$edit_language = $prefs['language'];
30}
31
32$translations = new LanguageTranslations($edit_language);
33
34if (! isset($_REQUEST["action"])) {
35	$_REQUEST['action'] = 'edit_tran_sw';
36}
37$smarty->assign('action', $_REQUEST["action"]);
38
39if (isset($_REQUEST['only_db_translations']) && $_REQUEST['only_db_translations'] != 'n') {
40	$smarty->assign('only_db_translations', 'y');
41} else {
42	$smarty->assign('only_db_translations', 'n');
43}
44
45if (isset($_REQUEST['only_db_untranslated']) && $_REQUEST['only_db_untranslated'] != 'n') {
46	$smarty->assign('only_db_untranslated', 'y');
47} else {
48	$smarty->assign('only_db_untranslated', 'n');
49}
50
51// Adding strings
52if (isset($_REQUEST["add_tran"])) {
53	check_ticket('edit-languages');
54	$add_tran_source = $_REQUEST["add_tran_source"];
55	$add_tran_tran = $_REQUEST["add_tran_tran"];
56
57	if (strlen($add_tran_source) != 0 && strlen($add_tran_tran) != 0) {
58		$add_tran_source = strip_tags($add_tran_source);
59		$add_tran_tran = strip_tags($add_tran_tran);
60
61		$translations->updateTrans($add_tran_source, $add_tran_tran);
62	}
63}
64
65// Delete all db translations
66if (isset($_REQUEST['delete_all']) && $tiki_p_admin) {
67	$translations->deleteTranslations();
68}
69
70//Selection for untranslated Strings and edit translations
71if (isset($_REQUEST["action"])) {
72	$action = $_REQUEST["action"];
73} else {
74	$action = "";
75}
76
77if ($action == "edit_rec_sw" || $action == "edit_tran_sw") {
78	check_ticket('edit-languages');
79
80	$offset = isset($_REQUEST["offset"]) ? $_REQUEST['offset'] : 0;
81	$smarty->assign('offset', $offset);
82
83	$maxRecords = (isset($_REQUEST['maxRecords']) && $_REQUEST['maxRecords'] > 0) ? $_REQUEST['maxRecords'] : $prefs['maxRecords'];
84	$smarty->assign('maxRecords', $maxRecords);
85
86	//check if user has translated something
87	for ($i = 0; $i < $maxRecords; $i++) {
88		// Handle edits in untranslated strings
89		if (isset($_REQUEST["edit_tran_$i"]) || isset($_REQUEST['translate_all'])) {
90			// Handle edits in edit translations
91			if (strlen($_REQUEST["tran_$i"]) > 0 && strlen($_REQUEST["source_$i"]) > 0) {
92				if ($prefs['lang_control_contribution'] == 'y') {
93					if (! isset($_REQUEST["scope_$i"])) {
94						 throw new Exception('scope parameter required');
95					} elseif ($_REQUEST["scope_$i"] == '') {
96						 $general = null;
97					} else {
98						 $general = $_REQUEST["scope_$i"] == 'general';
99					}
100					$optionalParameters = ['general' => $general];
101				} else {
102					$optionalParameters = [];
103				}
104				$translations->updateTrans($_REQUEST["source_$i"], $_REQUEST["tran_$i"], $optionalParameters);
105			}
106		} elseif (isset($_REQUEST["del_tran_$i"])) {
107			// Handle deletes here
108			if (strlen($_REQUEST["source_$i"]) > 0) {
109				$translations->deleteTranslation($_REQUEST["source_$i"]);
110			}
111		}
112	} // end of for ...
113	// for resetting untranslated
114	if (isset($_REQUEST["tran_reset"])) {
115		$translations->deleteAllUntranslated();
116	}
117
118	// update language array with new translations
119	$query = "select `source`, `tran` from `tiki_language` where `lang`=?";
120	$result = $tikilib->fetchAll($query, [$edit_language]);
121
122	foreach ($result as $row) {
123		${"lang_$edit_language"}[ $row['source'] ] = $row['tran'];
124	}
125
126	//Handle searches
127	$find = '';
128
129	if (isset($_REQUEST['find']) && strlen($_REQUEST['find']) > 0) {
130		$find = $_REQUEST['find'];
131		$smarty->assign('find', $find);
132	}
133
134	$sort_mode = "source_asc";
135
136	$data = [];
137
138	if ($action == "edit_rec_sw") {
139		if (isset($_REQUEST['only_db_untranslated']) && $_REQUEST['only_db_untranslated'] != 'n') {
140			// display only database stored untranslated strings
141			$data = $translations->getDbUntranslated($maxRecords, $offset, $find);
142		} else {
143			// display all untranslated strings (language.php + db)
144			$data = $translations->getAllUntranslated($maxRecords, $offset, $find);
145		}
146	} elseif ($action == "edit_tran_sw") {
147		if (isset($_REQUEST['only_db_translations']) && $_REQUEST['only_db_translations'] != 'n') {
148			// display only database stored translations
149			$data = $translations->getDbTranslations($sort_mode, $maxRecords, $offset, $find);
150		} else {
151			// display all available translations (db + custom.php + language.php)
152			$data = $translations->getAllTranslations($maxRecords, $offset, $find);
153		}
154	}
155
156	$smarty->assign_by_ref('translations', $data['translations']);
157	$smarty->assign('total', $data['total']);
158	$smarty->assign('hasDbTranslations', $translations->hasDbTranslations);
159}
160
161$db_languages = Language::getDbTranslatedLanguages();
162$db_languages = $langLib->format_language_list($db_languages);
163$smarty->assign_by_ref('db_languages', $db_languages);
164
165ask_ticket('edit-languages');
166
167// disallow robots to index page:
168$smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW');
169
170$headerlib->add_cssfile('themes/base_files/feature_css/admin.css');
171$headerlib->add_jsfile('lib/language/js/tiki-edit_languages.js');
172
173$headtitle = tra('Edit languages');
174$description = tra('Edit or export languages');
175$crumbs[] = new Breadcrumb($headtitle, $description, '', '', '');
176$headtitle = breadcrumb_buildHeadTitle($crumbs);
177$smarty->assign('headtitle', $headtitle);
178$smarty->assign('trail', $crumbs);
179
180$smarty->assign('mid', 'tiki-edit_languages.tpl');
181$smarty->display("tiki.tpl");
182