Reset language form field in language import form after saving
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / acp / form / LanguageImportForm.class.php
1 <?php
2 namespace wcf\acp\form;
3 use wcf\data\language\Language;
4 use wcf\data\language\LanguageEditor;
5 use wcf\form\AbstractForm;
6 use wcf\system\exception\SystemException;
7 use wcf\system\exception\UserInputException;
8 use wcf\system\language\LanguageFactory;
9 use wcf\system\WCF;
10 use wcf\system\WCFACP;
11 use wcf\util\XML;
12
13 /**
14 * Shows the language import form.
15 *
16 * @author Marcel Werk
17 * @copyright 2001-2018 WoltLab GmbH
18 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
19 * @package WoltLabSuite\Core\Acp\Form
20 */
21 class LanguageImportForm extends AbstractForm {
22 /**
23 * @inheritDoc
24 */
25 public $activeMenuItem = 'wcf.acp.menu.link.language.import';
26
27 /**
28 * @inheritDoc
29 */
30 public $neededPermissions = ['admin.language.canManageLanguage'];
31
32 /**
33 * file name
34 * @var string
35 */
36 public $filename = '';
37
38 /**
39 * language object
40 * @var Language
41 */
42 public $language;
43
44 /**
45 * list of available languages
46 * @var Language[]
47 */
48 public $languages = [];
49
50 /**
51 * source language object
52 * @var Language
53 */
54 public $sourceLanguage;
55
56 /**
57 * source language id
58 * @var integer
59 */
60 public $sourceLanguageID = 0;
61
62 /**
63 * @inheritDoc
64 */
65 public function readParameters() {
66 parent::readParameters();
67
68 $this->languages = LanguageFactory::getInstance()->getLanguages();
69 }
70
71 /**
72 * @inheritDoc
73 */
74 public function readFormParameters() {
75 parent::readFormParameters();
76
77 if (isset($_FILES['languageUpload']) && !empty($_FILES['languageUpload']['tmp_name'])) {
78 $this->filename = $_FILES['languageUpload']['tmp_name'];
79 }
80 if (isset($_POST['sourceLanguageID'])) $this->sourceLanguageID = intval($_POST['sourceLanguageID']);
81 }
82
83 /**
84 * @inheritDoc
85 */
86 public function validate() {
87 parent::validate();
88
89 // check file
90 if (!file_exists($this->filename)) {
91 throw new UserInputException('languageUpload');
92 }
93
94 if (empty($this->sourceLanguageID)) {
95 throw new UserInputException('sourceLanguageID');
96 }
97
98 // get language
99 $this->sourceLanguage = LanguageFactory::getInstance()->getLanguage($this->sourceLanguageID);
100 if (!$this->sourceLanguage->languageID) {
101 throw new UserInputException('sourceLanguageID');
102 }
103
104 // try to import
105 try {
106 // open xml document
107 $xml = new XML();
108 $xml->load($this->filename);
109
110 // import xml document
111 $this->language = LanguageEditor::importFromXML($xml, -1, $this->sourceLanguage);
112
113 // copy content
114 if (!isset($this->languages[$this->language->languageID])) {
115 LanguageEditor::copyLanguageContent($this->sourceLanguage->languageID, $this->language->languageID);
116 }
117 }
118 catch (SystemException $e) {
119 throw new UserInputException('languageUpload', $e->getMessage());
120 }
121 }
122
123 /**
124 * @inheritDoc
125 */
126 public function save() {
127 parent::save();
128
129 LanguageFactory::getInstance()->clearCache();
130 LanguageFactory::getInstance()->deleteLanguageCache();
131 $this->saved();
132
133 // reset fields
134 $this->sourceLanguageID = 0;
135
136 // show success message
137 WCF::getTPL()->assign('success', true);
138 }
139
140 /**
141 * @inheritDoc
142 */
143 public function assignVariables() {
144 parent::assignVariables();
145
146 WCF::getTPL()->assign([
147 'languages' => $this->languages,
148 'sourceLanguageID' => $this->sourceLanguageID
149 ]);
150 }
151
152 /**
153 * @inheritDoc
154 */
155 public function show() {
156 // check master password
157 WCFACP::checkMasterPassword();
158
159 parent::show();
160 }
161 }