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');
12
13$multilinguallib = TikiLib::lib('multilingual');
14include_once('modules/mod-func-translation.php');
15
16require_once('lib/debug/Tracer.php');
17
18execute_module_translation();
19
20$access->check_feature('feature_multilingual');
21
22if (! (isset($_REQUEST['page']) && $_REQUEST['page']) && ! (isset($_REQUEST['id']) && $_REQUEST['id'])) {
23	$smarty->assign('msg', tra("No object indicated"));
24	$smarty->display("error.tpl");
25	die;
26}
27
28if (isset($_REQUEST['type'], $_REQUEST['id']) && $_REQUEST['type'] == 'wiki page') {
29	$_REQUEST['page'] = $tikilib->get_page_name_from_id($_REQUEST['id']);
30}
31
32include_once("lang/langmapping.php");
33
34if ((! isset($_REQUEST['type']) || $_REQUEST['type'] == 'wiki page' || $_REQUEST['type'] == 'wiki') && isset($_REQUEST['page']) && $_REQUEST['page']) {
35	$info = $tikilib->get_page_info($_REQUEST['page']);
36	if (empty($info)) {
37		$smarty->assign('msg', tra("Page cannot be found"));
38		$smarty->display("error.tpl");
39		die;
40	}
41	$name = $_REQUEST['page'];
42	$type = "wiki page";
43	$objId = $info['page_id'];
44	$langpage = $info['lang'];
45	$fullLangName = $langmapping[$langpage][0];
46	$smarty->assign('languageName', $fullLangName);
47	$cat_type = 'wiki page';
48	$cat_objid = $name;
49
50	$edit_data = $info['data'];
51	$smarty->assign('pagedata', TikiLib::htmldecode($edit_data));
52
53	if ($prefs['feature_translation_incomplete_notice'] == 'y') {
54		$smarty->assign('translate_message', "^" . tra("Translation of this page is incomplete.") . "^\n\n");
55	}
56} elseif ($_REQUEST['id']) {
57	$smarty->assign('msg', tra("Only wiki pages are supported."));
58	$smarty->display("error.tpl");
59	die;
60}
61
62$smarty->assign('name', $name);
63$smarty->assign('type', $type);
64$smarty->assign('id', $objId);
65
66include_once 'categorize_list.php';
67
68if (isset($_REQUEST['langpage']) && ! empty($_REQUEST['langpage']) && $_REQUEST['langpage'] != "NULL"
69				&& $langpage != $_REQUEST['langpage']) { // update the language
70	$error = $multilinguallib->updateObjectLang($type, $objId, $_REQUEST['langpage']);
71	if ($error) {
72		$smarty->assign('error', $error);
73	} else {
74		$info['lang'] = $_REQUEST['langpage'];
75		$langpage = $_REQUEST['langpage'];
76	}
77
78	$fullLangName = $langmapping[$langpage][0];
79	$smarty->assign('languageName', $fullLangName);
80}
81$smarty->assign('langpage', $langpage);
82
83if ($type == "wiki page") {
84	$tikilib->get_perm_object($name, 'wiki page', $info, true);
85	if (! ($tiki_p_edit == 'y' || ($prefs['wiki_creator_admin'] == 'y' && $user && $info['creator'] == $user) )) {
86		$smarty->assign('errortype', 401);
87		$smarty->assign('msg', tra("You do not have permission to edit this page."));
88		$smarty->display("error.tpl");
89		die;
90	}
91}
92
93$trads = $multilinguallib->getTranslations($type, $objId, $name, $langpage, true);
94
95$usedLang = [];
96foreach ($trads as $trad) {
97	$usedLang[] = $trad['lang'];
98}
99
100$langLib = TikiLib::lib('language');
101$rawLangs = $langLib->list_languages();
102$languages = [];
103foreach ($rawLangs as $langInfo) {
104	if (! in_array($langInfo['value'], $usedLang)) {
105		$languages[] = $langInfo;
106	}
107}
108$smarty->assign_by_ref('languages', $languages);
109if (count($languages) == 1) {
110	$smarty->assign('only_one_language_left', 'y');
111}
112
113if (isset($_REQUEST['target_lang'])) {
114	smarty_assign_default_target_lang($langpage, $_REQUEST['target_lang'], $trads, $prefs['read_language']);
115}
116
117smarty_assign_translation_name();
118
119ask_ticket('edit-translation');
120
121// disallow robots to index page:
122$smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW');
123
124// Display the template
125$smarty->assign('mid', 'tiki-edit_translation.tpl');
126$smarty->display("tiki.tpl");
127
128function execute_module_translation()
129{
130	$smarty = TikiLib::lib('smarty');
131	$module_reference = [
132		'name' => 'translation',
133		'params' => ['show_language' => 'n'],
134		'position' => 'r',
135		'ord' => 1,
136		'moduleId' => 0
137	];
138
139	$modlib = TikiLib::lib('mod');
140
141	$out = $modlib->execute_module($module_reference);
142	$smarty->assign('content_of_update_translation_section', $out);
143}
144
145function smarty_assign_default_target_lang($src_lang, $targ_lang_requested, $existing_translations, $user_langs)
146{
147	global $tracer;
148	$multilinguallib = TikiLib::lib('multilingual');
149	$smarty = TikiLib::lib('smarty');
150
151	$default_target_lang = $targ_lang_requested;
152	if (! isset($default_target_lang)) {
153		$collect_lang_callback = function ($translation) {
154			return $translation['lang'];
155		};
156		$langs_already_translated = array_map($collect_lang_callback, $existing_translations);
157		$default_target_lang = $multilinguallib->defaultTargetLanguageForNewTranslation($src_lang, $langs_already_translated, $user_langs);
158	}
159
160	$smarty->assign('default_target_lang', $default_target_lang);
161}
162
163function smarty_assign_translation_name()
164{
165	$smarty = TikiLib::lib('smarty');
166
167	$translation_name = '';
168	if (isset($_REQUEST['translation_name'])) {
169		$translation_name = $_REQUEST['translation_name'];
170	}
171	$smarty->assign('translation_name', $translation_name);
172}
173