XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
ModuleInstaller.class.php
1<?php
11
12if (!defined('XOOPS_ROOT_PATH')) {
13 exit();
14}
15
16require_once XOOPS_LEGACY_PATH . '/admin/class/ModuleInstallUtils.class.php';
17
24class Legacy_ModuleInstaller
25{
30 public $mLog = null;
31
32 public $_mForceMode = false;
33
38 public $_mXoopsModule = null;
39
40 public function Legacy_ModuleInstaller()
41 {
42 self::__construct();
43 }
44
45 public function __construct()
46 {
47 $this->mLog =new Legacy_ModuleInstallLog();
48 }
49
56 public function setCurrentXoopsModule(&$xoopsModule)
57 {
58 $this->_mXoopsModule =& $xoopsModule;
59 }
60
65 public function setForceMode($isForceMode)
66 {
67 $this->_mForceMode = $isForceMode;
68 }
69
70 public function _installTables()
71 {
72 Legacy_ModuleInstallUtils::installSQLAutomatically($this->_mXoopsModule, $this->mLog);
73 }
74
78 public function _installModule()
79 {
80 $modversion = [];
81 $adminPerm = null;
82 $moduleHandler =& xoops_gethandler('module');
83 if (!$moduleHandler->insert($this->_mXoopsModule)) {
84 $this->mLog->addError('*Could not install module information*');
85 return false;
86 }
87
88 $gpermHandler =& xoops_gethandler('groupperm');
89
90 //
91 // Add a permission which administrators can manage.
92 //
93 if ($this->_mXoopsModule->getInfo('hasAdmin')) {
94 $adminPerm =& $this->_createPermission(XOOPS_GROUP_ADMIN);
95 $adminPerm->setVar('gperm_name', 'module_admin');
96
97 if (!$gpermHandler->insert($adminPerm)) {
98 $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_ADMIN_PERMISSION);
99 }
100 }
101
102 //
103 // Add a permission which administrators can manage. (Special for Legacy System Module)
104 //
105 if ('system' == $this->_mXoopsModule->getVar('dirname')) {
106 $root =& XCube_Root::getSingleton();
107 $root->mLanguageManager->loadModuleAdminMessageCatalog('system');
108
109 require_once XOOPS_ROOT_PATH . '/modules/system/constants.php';
110
111 $fileHandler = opendir(XOOPS_ROOT_PATH . '/modules/system/admin');
112 while ($file = readdir($fileHandler)) {
113 $infoFile = XOOPS_ROOT_PATH . '/modules/system/admin/' . $file . '/xoops_version.php';
114 if (file_exists($infoFile)) {
115 require_once $infoFile;
116 if (!empty($modversion['category'])) {
117 $sysAdminPerm =& $this->_createPermission(XOOPS_GROUP_ADMIN);
118 $adminPerm->setVar('gperm_itemid', $modversion['category']);
119 $adminPerm->setVar('gperm_name', 'system_admin');
120 if (!$gpermHandler->insert($adminPerm)) {
121 $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_SYSTEM_PERMISSION);
122 }
123 unset($sysAdminPerm);
124 }
125 unset($modversion);
126 }
127 }
128 }
129
130 if ($this->_mXoopsModule->getInfo('hasMain')) {
131 $read_any = $this->_mXoopsModule->getInfo('read_any');
132 if ($read_any) {
133 $memberHandler =& xoops_gethandler('member');
134 $groupObjects =& $memberHandler->getGroups();
135 //
136 // Add a permission all group members and guest can read.
137 //
138 foreach ($groupObjects as $group) {
139 $readPerm =& $this->_createPermission($group->getVar('groupid'));
140 $readPerm->setVar('gperm_name', 'module_read');
141
142 if (!$gpermHandler->insert($readPerm)) {
143 $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_READ_PERMISSION);
144 }
145 }
146 } else {
147 //
148 // Add a permission which administrators can read.
149 //
150 $root =& XCube_Root::getSingleton();
151 $groups = $root->mContext->mXoopsUser->getGroups(true);
152 foreach ($groups as $mygroup) {
153 $readPerm =& $this->_createPermission($mygroup);
154 $readPerm->setVar('gperm_name', 'module_read');
155
156 if (!$gpermHandler->insert($readPerm)) {
157 $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_READ_PERMISSION);
158 }
159 }
160 }
161 }
162 }
163
171 public function &_createPermission($group)
172 {
173 $gpermHandler =& xoops_gethandler('groupperm');
174
175 $perm =& $gpermHandler->create();
176
177 $perm->setVar('gperm_groupid', $group);
178 $perm->setVar('gperm_itemid', $this->_mXoopsModule->getVar('mid'));
179 $perm->setVar('gperm_modid', 1);
180
181 return $perm;
182 }
183
187 public function _installTemplates()
188 {
189 Legacy_ModuleInstallUtils::installAllOfModuleTemplates($this->_mXoopsModule, $this->mLog);
190 }
191
192 public function _installBlocks()
193 {
194 Legacy_ModuleInstallUtils::installAllOfBlocks($this->_mXoopsModule, $this->mLog);
195 }
196
197 public function _installPreferences()
198 {
199 Legacy_ModuleInstallUtils::installAllOfConfigs($this->_mXoopsModule, $this->mLog);
200 }
201
202 public function _processScript()
203 {
204 $installScript = trim($this->_mXoopsModule->getInfo('onInstall'));
205 if (false != $installScript) {
206 require_once XOOPS_MODULE_PATH . '/' . $this->_mXoopsModule->get('dirname') . '/' . $installScript;
207 $funcName = 'xoops_module_install_' . $this->_mXoopsModule->get('dirname');
208
209 if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $funcName)) {
210 $this->mLog->addError(XCube_Utils::formatString(_AD_LEGACY_ERROR_FAILED_TO_EXECUTE_CALLBACK, $funcName));
211 return;
212 }
213
214 if (function_exists($funcName)) {
215 // Because X2 can use reference parameter, Legacy doesn't use the following code;'
216 // if (!call_user_func($funcName, $this->_mXoopsModule)) {
217
218 $result = $funcName($this->_mXoopsModule, new XCube_Ref($this->mLog));
219 if (!$result) {
220 $this->mLog->addError(XCube_Utils::formatString(_AD_LEGACY_ERROR_FAILED_TO_EXECUTE_CALLBACK, $funcName));
221 }
222 }
223 }
224 }
225
226 public function _processReport()
227 {
228 if (!$this->mLog->hasError()) {
229 $this->mLog->add(XCube_Utils::formatString(_AD_LEGACY_MESSAGE_INSTALLATION_MODULE_SUCCESSFUL, $this->_mXoopsModule->get('name')));
230 } else {
231 $this->mLog->addError(XCube_Utils::formatString(_AD_LEGACY_ERROR_INSTALLATION_MODULE_FAILURE, $this->_mXoopsModule->get('name')));
232 }
233 }
234
238 public function executeInstall()
239 {
240 $this->_installTables();
241 if (!$this->_mForceMode && $this->mLog->hasError()) {
242 $this->_processReport();
243 return false;
244 }
245
246 $this->_installModule();
247 if (!$this->_mForceMode && $this->mLog->hasError()) {
248 $this->_processReport();
249 return false;
250 }
251
252 $this->_installTemplates();
253 if (!$this->_mForceMode && $this->mLog->hasError()) {
254 $this->_processReport();
255 return false;
256 }
257
258 $this->_installBlocks();
259 if (!$this->_mForceMode && $this->mLog->hasError()) {
260 $this->_processReport();
261 return false;
262 }
263
264 $this->_installPreferences();
265 if (!$this->_mForceMode && $this->mLog->hasError()) {
266 $this->_processReport();
267 return false;
268 }
269
270 $this->_processScript();
271 if (!$this->_mForceMode && $this->mLog->hasError()) {
272 $this->_processReport();
273 return false;
274 }
275
276 $this->_processReport();
277
278 return true;
279 }
280}
static installAllOfModuleTemplates(&$module, &$log)
static installSQLAutomatically(&$module, &$log)
static installAllOfBlocks(&$module, &$log)
static formatString()
[Static] Formats string with special care for international.