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