XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
TplsetUploadAction.class.php
1<?php
6
7if (!defined('XOOPS_ROOT_PATH')) {
8 exit();
9}
10
11require_once XOOPS_MODULE_PATH . '/legacyRender/class/AbstractEditAction.class.php';
12require_once XOOPS_MODULE_PATH . '/legacyRender/admin/forms/TplsetUploadForm.class.php';
13
15{
16 public $mActionForm = null;
17 public $mErrorMessages = [];
18
19 public function prepare(&$controller, &$xoopsUser, $moduleConfig)
20 {
21 $this->mActionForm =new LegacyRender_TplsetUploadForm();
22 $this->mActionForm->prepare();
23 }
24
25 public function getDefaultView(&$controller, &$xoopsUser)
26 {
27 return LEGACYRENDER_FRAME_VIEW_INPUT;
28 }
29
30 public function _addErrorMessage($msg)
31 {
32 $this->mErrorMessages[] = $msg;
33 }
34
35 public function execute(&$controller, &$xoopsUser)
36 {
37 if (null != xoops_getrequest('_form_control_cancel')) {
38 return LEGACYRENDER_FRAME_VIEW_CANCEL;
39 }
40
41 $this->mActionForm->fetch();
42 $this->mActionForm->validate();
43
44 if ($this->mActionForm->hasError()) {
45 return $this->getDefaultView($controller, $xoopsUser);
46 }
47
48 require_once XOOPS_ROOT_PATH . '/class/class.tar.php';
49 $tar =new tar();
50
51 $formFile = $this->mActionForm->get('upload');
52
53 //
54 // [Warn] access private member directly
55 // TODO We should define the access method because we oftern
56 // access private member of XCube_FormFile.
57 //
58 $tar->openTar($formFile->_mTmpFileName);
59
60 if (!is_array($tar->files)) {
61 return LEGACYRENDER_FRAME_VIEW_ERROR;
62 }
63
64 $tplsetName = null;
65 foreach ($tar->files as $id => $info) {
66 $infoArr = explode('/', str_replace("\\", '/', $info['name']));
67 $tplsetName = $this->mActionForm->get('tplset_name');
68 if (null == $tplsetName) {
69 $tplsetName = trim($infoArr[0]);
70 }
71
72 if (null != $tplsetName) {
73 break;
74 }
75 }
76
77 //
78 // Check tplset name.
79 //
80 if (null == $tplsetName || preg_match('/[' . preg_quote('\/:*?"<>|', '/') . ']/', $tplsetName)) {
81 $this->_addErrorMessage(_AD_LEGACYRENDER_ERROR_TPLSET_NAME_WRONG);
82 return LEGACYRENDER_FRAME_VIEW_ERROR;
83 }
84
85 $handler =& xoops_getmodulehandler('tplset');
86 if (0 != $handler->getCount(new Criteria('tplset_name', $tplsetName))) {
87 $this->_addErrorMessage(XCube_Utils::formatString(_AD_LEGACYRENDER_ERROR_TPLSET_ALREADY_EXISTS, $tplsetName));
88 return LEGACYRENDER_FRAME_VIEW_ERROR;
89 }
90
91 $tplset =& $handler->create();
92 $tplset->set('tplset_name', $tplsetName);
93 if (!$handler->insert($tplset)) {
94 $this->_addErrorMessage(_AD_LEGACYRENDER_ERROR_COULD_NOT_SAVE_TPLSET);
95 return LEGACYRENDER_FRAME_VIEW_ERROR;
96 }
97
98 $themeimages = [];
99 if (!$this->_fetchTemplateFiles($tar, $tplset, $themeimages)) {
100 return LEGACYRENDER_FRAME_VIEW_ERROR;
101 }
102
103 if (!$this->_fetchImageset($tar, $tplset, $themeimages)) {
104 return LEGACYRENDER_FRAME_VIEW_ERROR;
105 }
106
107 return LEGACYRENDER_FRAME_VIEW_SUCCESS;
108 }
109
110 public function _fetchTemplateFiles(&$tar, &$tplset, &$themeimages)
111 {
112 $handler =& xoops_getmodulehandler('tplfile');
113 foreach ($tar->files as $id => $info) {
114 $infoArr = explode('/', str_replace("\\", '/', $info['name']));
115 if (isset($infoArr[3]) && 'blocks' == trim($infoArr[3])) {
116 $default =& $handler->find('default', 'block', null, trim($infoArr[2]), trim($infoArr[4]));
117 } elseif ((!isset($infoArr[4]) || '' == trim($infoArr[4])) && 'templates' == $infoArr[1]) {
118 $default =& $handler->find('default', 'module', null, trim($infoArr[2]), trim($infoArr[3]));
119 } elseif (isset($infoArr[3]) && 'images' == trim($infoArr[3])) {
120 $infoArr[2] = trim($infoArr[2]);
121 if (preg_match("/(.*)\.(gif|jpg|jpeg|png)$/i", $infoArr[2], $match)) {
122 $themeimages[] = ['name' => $infoArr[2], 'content' => $info['file']];
123 }
124 }
125 if ((is_countable($default) ? count($default) : 0) > 0) {
126 $tplfile =& $default[0]->createClone($tplset->get('tplset_name'));
127 $tplfile->Source->set('tpl_source', $info['file']);
128 $tplfile->set('tpl_lastimported', time());
129
130 if (!$handler->insert($tplfile)) {
131 $this->_addErrorMessage(XCube_Utils::formatString(_AD_LEGACYRENDER_ERROR_COULD_NOT_SAVE_TPLFILE, $tplfile->get('tpl_file')));
132 }
133 unset($default);
134 }
135 unset($info);
136 }
137
138 return true;
139 }
140
141 public function _fetchImageset(&$tar, &$tplset, &$themeimages)
142 {
143 if (0 == (is_countable($themeimages) ? count($themeimages) : 0)) {
144 return true;
145 }
146
147 $handler =& xoops_gethandler('imageset');
148 $imgset =& $handler->create();
149 $imgset->set('imgset_name', $tplset->get('tplset_name'));
150 $imgset->set('imgset_refid', 0);
151
152 if (!$handler->insert($imgset)) {
153 $this->_addErrorMessage(XCube_Utils::formatString(_AD_LEGACYRENDER_ERROR_COULD_NOT_SAVE_IMAGESET, $tplset->get('tplset_name')));
154 return false;
155 }
156
157 if (!$handler->linktplset($imgset->get('imgset_id'), $tplset->get('tplset_name'))) {
158 $this->_addErrorMessage(_AD_LEGACYRENDER_ERROR_COULD_NOT_SAVE_LINKTPLSET);
159 return false;
160 }
161
162 $handler =& xoops_gethandler('imagesetimg');
163 for ($i = 0; $i < (is_countable($themeimages) ? count($themeimages) : 0); $i++) {
164 if (isset($themeimages[$i]['name']) && '' != $themeimages[$i]['name']) {
165 $image =& $handler->create();
166 $image->set('imgsetimg_file', $themeimages[$i]['name']);
167 $image->set('imgsetimg_imgset', $imgset->get('imgset_id'));
168 $image->set('imgsetimg_body', $themeimages[$i]['content'], true);
169 if (!$handler->insert($image)) {
170 $this->_addErrorMessage(XCube_Utils::formatString(_AD_LEGACYRENDER_ERROR_COULD_NOT_SAVE_IMAGE_FILE, $image->get('imgsetimg_file')));
171 }
172 unset($image);
173 }
174 }
175
176 return true;
177 }
178
179 public function executeViewInput(&$controller, &$xoopsUser, &$render)
180 {
181 $render->setTemplateName('tplset_upload.html');
182 $render->setAttribute('actionForm', $this->mActionForm);
183 }
184
185 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
186 {
187 $controller->executeForward('./index.php?action=TplsetList');
188 }
189
190 public function executeViewError(&$controller, &$xoopsUser, &$render)
191 {
192 if (0 == count($this->mErrorMessages)) {
193 $controller->executeRedirect('./index.php?action=TplsetList', 1, _AD_LEGACYRENDER_ERROR_DBUPDATE_FAILED);
194 } else {
195 $render->setTemplateName('tplset_upload_error.html');
196 $render->setAttribute('errorMessages', $this->mErrorMessages);
197 }
198 }
199
200 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
201 {
202 $controller->executeForward('./index.php?action=TplsetList');
203 }
204}
static formatString()
[Static] Formats string with special care for international.