XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
PreferenceEditAction.class.php
1<?php
11
12if (!defined('XOOPS_ROOT_PATH')) {
13 exit();
14}
15
16require_once XOOPS_MODULE_PATH . '/legacy/admin/forms/PreferenceEditForm.class.php';
17
18define('LEGACY_PREFERENCE_ID_GENERAL', 1);
19
20class Legacy_PreferenceEditAction extends Legacy_Action
21{
22 public $mPreparedFlag = false;
23
24 public $mCategory = null;
25 public $mModule = null;
26
27 public $mObjects = [];
28 public $mActionForm = null;
29
30 public $mState = null;
31
32 public function prepare(&$controller, &$xoopsUser)
33 {
34 $controller->mRoot->mLanguageManager->loadPageTypeMessageCatalog('comment');
35 $controller->mRoot->mLanguageManager->loadPageTypeMessageCatalog('notification');
36
37 $this->mState = (xoops_getrequest('confmod_id') > 0) ? new Legacy_ModulePreferenceEditState($this) : new Legacy_PreferenceEditState($this);
38 $this->mState->prepare($controller, $xoopsUser);
39
40 if ($this->mPreparedFlag) {
41 $handler =& xoops_gethandler('config');
42
43 $criteria =new CriteriaCompo();
44 $criteria->add(new Criteria('conf_modid', $this->mActionForm->getModuleId()));
45 $criteria->add(new Criteria('conf_catid', $this->mActionForm->getCategoryId()));
46
47 $this->mObjects =& $handler->getConfigs($criteria);
48 $this->mActionForm->prepare($this->mObjects);
49 }
50 }
51
52 public function getDefaultView(&$controller, &$xoopsUser)
53 {
54 if (!$this->mPreparedFlag) {
55 return LEGACY_FRAME_VIEW_ERROR;
56 }
57
58 return LEGACY_FRAME_VIEW_INPUT;
59 }
60
61 public function hasPermission(&$controller, &$xoopsUser)
62 {
63 return $this->mState->hasPermission($controller, $xoopsUser);
64 }
65
66 public function execute(&$controller, &$xoopsUser)
67 {
68 if (!$this->mPreparedFlag) {
69 return LEGACY_FRAME_VIEW_ERROR;
70 }
71
72 if (null !== xoops_getrequest('_form_control_cancel')) {
73 return LEGACY_FRAME_VIEW_CANCEL;
74 }
75
76 $this->mActionForm->fetch();
77 $this->mActionForm->validate();
78
79 if ($this->mActionForm->hasError()) {
80 return $this->getDefaultView($controller, $xoopsUser);
81 }
82
83 $this->mActionForm->update($this->mObjects);
84 $handler =& xoops_gethandler('config');
85
86 foreach (array_keys($this->mObjects) as $key) {
87 if (!$handler->insertConfig($this->mObjects[$key])) {
88 die('ERROR' . $this->mObjects[$key]->get('conf_name'));
89 }
90 }
91
92 $this->mState->postFilter($this->mObjects, $this->mActionForm);
93
94 return LEGACY_FRAME_VIEW_SUCCESS;
95 }
96
97 public function executeViewInput(&$controller, &$xoopsUser, &$render)
98 {
99 $render->setTemplateName('preference_edit.html');
100 $render->setAttribute('actionForm', $this->mActionForm);
101 $render->setAttribute('objectArr', $this->mObjects);
102
103 $render->setAttribute('category', $this->mCategory);
104 $render->setAttribute('module', $this->mModule);
105
106 $render->setAttribute('mcrypt_enabled', extension_loaded('mcrypt'));
107
108 $formtypeArr = [];
109 foreach ($this->mObjects as $object) {
110 $formtypeArr[] = $object->get('conf_formtype');
111 }
112 $formtypeArr = array_unique($formtypeArr);
113
114 //
115 // Make the array of timezone object
116 //
117 if (in_array('timezone', $formtypeArr)) {
118 $handler =& xoops_gethandler('timezone');
119 $timezoneArr =& $handler->getObjects();
120 $render->setAttribute('timezoneArr', $timezoneArr);
121 }
122
123 //
124 // Make the array of group object
125 //
126 if (in_array('group', $formtypeArr)||in_array('group_multi', $formtypeArr)||in_array('group_checkbox', $formtypeArr)) {
127 $handler =& xoops_gethandler('group');
128 $groupArr =& $handler->getObjects();
129 $render->setAttribute('groupArr', $groupArr);
130 }
131
132 //
133 // Make the array of tplset object
134 //
135 if (in_array('tplset', $formtypeArr)) {
136 $handler =& xoops_gethandler('tplset');
137 $tplsetArr =& $handler->getObjects();
138 $render->setAttribute('tplsetArr', $tplsetArr);
139 }
140
141 //
142 // Make the list of installed languages.
143 //
144 if (in_array('language', $formtypeArr)) {
145 $languageArr = [];
146 $dirHandler = opendir(XOOPS_ROOT_PATH . '/language/');
147 while ($file = readdir($dirHandler)) {
148 if (is_dir(XOOPS_ROOT_PATH . '/language/' . $file) && preg_match("/^[a-z][0-9a-z_\-]+$/", $file)) {
149 $languageArr[$file] = $file;
150 }
151 }
152 closedir($dirHandler);
153 $render->setAttribute('languageArr', $languageArr);
154 }
155
156 //
157 // Make the array of module object for selecting startpage.
158 //
159 if (in_array('startpage', $formtypeArr)||in_array('module_cache', $formtypeArr)) {
160 $handler =& xoops_gethandler('module');
161 $criteria =new CriteriaCompo();
162 $criteria->add(new Criteria('hasmain', 1));
163 $criteria->add(new Criteria('isactive', 1));
164 $moduleArr = $handler->getObjects($criteria);
165 $render->setAttribute('moduleArr', $moduleArr);
166 }
167
168 //
169 // Make the list of theme.
170 //
171 if (in_array('theme', $formtypeArr)||in_array('theme_multi', $formtypeArr)) {
172 $handler =& xoops_getmodulehandler('theme');
173 $themeArr =& $handler->getObjects();
174 $render->setAttribute('themeArr', $themeArr);
175 }
176
177 //
178 // Make the array of cachetime.
179 //
180 if (in_array('module_cache', $formtypeArr)) {
181 $handler =& xoops_gethandler('cachetime');
182 $cachetimeArr = $handler->getObjects();
183 $render->setAttribute('cachetimeArr', $cachetimeArr);
184 }
185
186 //
187 // Make the list of user groups
188 //
189 if (in_array('user', $formtypeArr)||in_array('user_multi', $formtypeArr)) {
190 $handler =& xoops_gethandler('member');
191 $userArr = $handler->getUserList();
192 $render->setAttribute('userArr', $userArr);
193 }
194 }
195
196 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
197 {
198 $this->mState->executeViewSuccess($controller, $xoopsUser, $render);
199 }
200
201 public function executeViewError(&$controller, &$xoopsUser, &$render)
202 {
203 $controller->executeRedirect('./index.php?action=PreferenceList', 1, _MD_LEGACY_ERROR_DBUPDATE_FAILED);
204 }
205
206 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
207 {
208 $this->mState->executeViewCancel($controller, $xoopsUser, $render);
209 }
210}
211
212class Legacy_AbstractPreferenceEditState
213{
214 public $_mMaster = null;
215
216 public function Legacy_AbstractPreferenceEditState(&$master)
217 {
218 self::__construct($master);
219 }
220
221 public function __construct(&$master)
222 {
223 $this->_mMaster =& $master;
224 }
225
226 public function prepare(&$controller, &$xoopsUser)
227 {
228 }
229
230 public function hasPermission(&$controller, &$xoopsUser)
231 {
232 }
233
234 public function postFilter(&$objectArr, &$actionForm)
235 {
236 }
237
238 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
239 {
240 }
241
242 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
243 {
244 }
245}
246
247class Legacy_PreferenceEditState extends Legacy_AbstractPreferenceEditState
248{
249 public function prepare(&$controller, &$xoopsUser)
250 {
251 parent::prepare($controller, $xoopsUser);
252
253 $handler =& xoops_gethandler('configcategory');
254 $this->_mMaster->mCategory =& $handler->get((int)xoops_getrequest('confcat_id'));
255
256 if (!is_object($this->_mMaster->mCategory)) {
257 return;
258 }
259
260 $this->_mMaster->mActionForm =new Legacy_PreferenceEditForm($this->_mMaster->mCategory);
261
262 $this->_mMaster->mPreparedFlag = true;
263 }
264
265 public function hasPermission(&$controller, &$xoopsUser)
266 {
267 $moduleHandler =& xoops_gethandler('module');
268 $module =& $moduleHandler->getByDirname('legacy');
269
270 $permHandler =& xoops_gethandler('groupperm');
271 return $permHandler->checkRight('module_admin', $module->get('mid'), $xoopsUser->getGroups());
272 }
273
274 public function postFilter(&$objectArr, &$actionForm)
275 {
276 $name = null;
277 $useMysession = null;
278 $sessionName = null;
279 $sessionExpire = null;
280 $themeName = null;
281 $allowedThemes = null;
282 foreach (array_keys($objectArr) as $key) {
283 $name = $objectArr[$key]->get('conf_name');
284 if ('theme_set' === $name) {
285 $themeName = $objectArr[$key]->getConfValueForOutput();
286 } elseif ('theme_set_allowed' === $name) {
287 $allowedThemes = $actionForm->get('theme_set_allowed');
288 } elseif ('use_mysession' === $name) {
289 $useMysession = $actionForm->get('use_mysession');
290 } elseif ('session_name' === $name) {
291 $sessionName = $actionForm->get('session_name');
292 } elseif ('session_expire' === $name) {
293 $sessionExpire = $actionForm->get('session_expire');
294 }
295 }
296
297 if (null !== $name && null !== $allowedThemes) {
298 XCube_DelegateUtils::call('Legacy.Event.ThemeSettingChanged', $themeName, $allowedThemes);
299 }
300
301 if (LEGACY_PREFERENCE_ID_GENERAL == $this->_mMaster->mCategory->get('confcat_id'))
302 { //GIJ
303 $root =& XCube_Root::getSingleton();
304 if ($useMysession) {
305 $root->mSession->setParam($sessionName, $sessionExpire);
306 } else {
307 $root->mSession->setParam();
308 }
309 $root->mSession->rename();
310 } // GIJ
311 }
312
313 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
314 {
315 $controller->executeForward('./index.php?action=PreferenceList');
316 }
317
318 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
319 {
320 $controller->executeForward('./index.php?action=PreferenceList');
321 }
322}
323
324class Legacy_ModulePreferenceEditState extends Legacy_AbstractPreferenceEditState
325{
326 public function prepare(&$controller, &$xoopsUser)
327 {
328 parent::prepare($controller, $xoopsUser);
329
330 $handler =& xoops_gethandler('module');
331 $this->_mMaster->mModule =& $handler->get((int)xoops_getrequest('confmod_id'));
332
333 if (!(is_object($this->_mMaster->mModule) && $this->_mMaster->mModule->get('isactive') &&
334 ($this->_mMaster->mModule->get('hasconfig') ||
335 $this->_mMaster->mModule->get('hascomments') ||
336 $this->_mMaster->mModule->get('hasnotification')))) {
337 // Exception
338 $controller->executeForward(XOOPS_URL . '/admin.php');
339 }
340
341 $this->_mMaster->mActionForm =new Legacy_ModulePreferenceEditForm($this->_mMaster->mModule);
342
343 //
344 // Load constants
345 //
346 $root =& XCube_Root::getSingleton();
347 $root->mLanguageManager->loadModinfoMessageCatalog($this->_mMaster->mModule->get('dirname'));
348
349 $this->_mMaster->mPreparedFlag = true;
350 }
351
352 public function hasPermission(&$controller, &$xoopsUser)
353 {
354 $controller->mRoot->mRoleManager->loadRolesByModule($this->_mMaster->mModule);
355 return $controller->mRoot->mContext->mUser->isInRole('Module.' . $this->_mMaster->mModule->get('dirname') . '.Admin');
356 }
357
358 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
359 {
360 $module = Legacy_Utils::createModule($this->_mMaster->mModule);
361 XCube_DelegateUtils::call('Legacy.Admin.Event.ModulePreference.' . ucfirst($this->_mMaster->mModule->get('dirname')) . '.Success', new XCube_Ref($module), new XCube_Ref($this->_mMaster->mModule));
362 XCube_DelegateUtils::call('Legacy.Admin.Event.ModulePreference.Success', new XCube_Ref($module), new XCube_Ref($this->_mMaster->mModule));
363 $controller->executeForward($module->getAdminIndex());
364 }
365
366 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
367 {
368 $module = Legacy_Utils::createModule($this->_mMaster->mModule);
369 $controller->executeForward($module->getAdminIndex());
370 }
371}