1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: if (!defined('XOOPS_ROOT_PATH')) exit();
12:
13: require_once XOOPS_LEGACY_PATH . "/admin/class/ModuleInstallUtils.class.php";
14:
15: 16: 17: 18: 19: 20:
21: class Legacy_ModuleInstaller
22: {
23: 24: 25: 26:
27: var $mLog = null;
28:
29: var $_mForceMode = false;
30:
31: 32: 33: 34:
35: var $_mXoopsModule = null;
36:
37: function Legacy_ModuleInstaller()
38: {
39: $this->mLog =new Legacy_ModuleInstallLog();
40: }
41:
42: 43: 44: 45: 46: 47:
48: function setCurrentXoopsModule(&$xoopsModule)
49: {
50: $this->_mXoopsModule =& $xoopsModule;
51: }
52:
53: 54: 55: 56:
57: function setForceMode($isForceMode)
58: {
59: $this->_mForceMode = $isForceMode;
60: }
61:
62: function _installTables()
63: {
64: Legacy_ModuleInstallUtils::installSQLAutomatically($this->_mXoopsModule, $this->mLog);
65: }
66:
67: 68: 69:
70: function _installModule()
71: {
72: $moduleHandler =& xoops_gethandler('module');
73: if (!$moduleHandler->insert($this->_mXoopsModule)) {
74: $this->mLog->addError("*Could not install module information*");
75: return false;
76: }
77:
78: $gpermHandler =& xoops_gethandler('groupperm');
79:
80:
81:
82:
83: if ($this->_mXoopsModule->getInfo('hasAdmin')) {
84: $adminPerm =& $this->_createPermission(XOOPS_GROUP_ADMIN);
85: $adminPerm->setVar('gperm_name', 'module_admin');
86:
87: if (!$gpermHandler->insert($adminPerm)) {
88: $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_ADMIN_PERMISSION);
89: }
90: }
91:
92:
93:
94:
95: if ($this->_mXoopsModule->getVar('dirname') == 'system') {
96: $root =& XCube_Root::getSingleton();
97: $root->mLanguageManager->loadModuleAdminMessageCatalog('system');
98:
99: require_once XOOPS_ROOT_PATH . "/modules/system/constants.php";
100:
101: $fileHandler = opendir(XOOPS_ROOT_PATH . "/modules/system/admin");
102: while ($file = readdir($fileHandler)) {
103: $infoFile = XOOPS_ROOT_PATH . "/modules/system/admin/" . $file . "/xoops_version.php";
104: if (file_exists($infoFile)) {
105: require_once $infoFile;
106: if (!empty($modversion['category'])) {
107: $sysAdminPerm =& $this->_createPermission(XOOPS_GROUP_ADMIN);
108: $adminPerm->setVar('gperm_itemid', $modversion['category']);
109: $adminPerm->setVar('gperm_name', 'system_admin');
110: if (!$gpermHandler->insert($adminPerm)) {
111: $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_SYSTEM_PERMISSION);
112: }
113: unset($sysAdminPerm);
114: }
115: unset($modversion);
116: }
117: }
118: }
119:
120: if ($this->_mXoopsModule->getInfo('hasMain')) {
121: $read_any = $this->_mXoopsModule->getInfo('read_any');
122: if ($read_any) {
123: $memberHandler =& xoops_gethandler('member');
124: $groupObjects =& $memberHandler->getGroups();
125:
126:
127:
128: foreach($groupObjects as $group) {
129: $readPerm =& $this->_createPermission($group->getVar('groupid'));
130: $readPerm->setVar('gperm_name', 'module_read');
131:
132: if (!$gpermHandler->insert($readPerm)) {
133: $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_READ_PERMISSION);
134: }
135: }
136: } else {
137:
138:
139:
140: $root =& XCube_Root::getSingleton();
141: $groups = $root->mContext->mXoopsUser->getGroups(true);
142: foreach($groups as $mygroup) {
143: $readPerm =& $this->_createPermission($mygroup);
144: $readPerm->setVar('gperm_name', 'module_read');
145:
146: if (!$gpermHandler->insert($readPerm)) {
147: $this->mLog->addError(_AD_LEGACY_ERROR_COULD_NOT_SET_READ_PERMISSION);
148: }
149: }
150: }
151: }
152: }
153:
154: 155: 156: 157: 158: 159:
160: function &_createPermission($group)
161: {
162: $gpermHandler =& xoops_gethandler('groupperm');
163:
164: $perm =& $gpermHandler->create();
165:
166: $perm->setVar('gperm_groupid', $group);
167: $perm->setVar('gperm_itemid', $this->_mXoopsModule->getVar('mid'));
168: $perm->setVar('gperm_modid', 1);
169:
170: return $perm;
171: }
172:
173: 174: 175:
176: function _installTemplates()
177: {
178: Legacy_ModuleInstallUtils::installAllOfModuleTemplates($this->_mXoopsModule, $this->mLog);
179: }
180:
181: function _installBlocks()
182: {
183: Legacy_ModuleInstallUtils::installAllOfBlocks($this->_mXoopsModule, $this->mLog);
184: }
185:
186: function _installPreferences()
187: {
188: Legacy_ModuleInstallUtils::installAllOfConfigs($this->_mXoopsModule, $this->mLog);
189: }
190:
191: function _processScript()
192: {
193: $installScript = trim($this->_mXoopsModule->getInfo('onInstall'));
194: if ($installScript != false) {
195: require_once XOOPS_MODULE_PATH . "/" . $this->_mXoopsModule->get('dirname') . "/" . $installScript;
196: $funcName = 'xoops_module_install_' . $this->_mXoopsModule->get('dirname');
197:
198: if (!preg_match("/^[a-zA-Z_][a-zA-Z0-9_]*$/", $funcName)) {
199: $this->mLog->addError(XCUbe_Utils::formatMessage(_AD_LEGACY_ERROR_FAILED_TO_EXECUTE_CALLBACK, $funcName));
200: return;
201: }
202:
203: if (function_exists($funcName)) {
204:
205:
206:
207: $result = $funcName($this->_mXoopsModule, new XCube_Ref($this->mLog));
208: if (!$result) {
209: $this->mLog->addError(XCUbe_Utils::formatMessage(_AD_LEGACY_ERROR_FAILED_TO_EXECUTE_CALLBACK, $funcName));
210: }
211: }
212: }
213: }
214:
215: function _processReport()
216: {
217: if (!$this->mLog->hasError()) {
218: $this->mLog->add(XCube_Utils::formatMessage(_AD_LEGACY_MESSAGE_INSTALLATION_MODULE_SUCCESSFUL, $this->_mXoopsModule->get('name')));
219: }
220: else {
221: $this->mLog->addError(XCube_Utils::formatMessage(_AD_LEGACY_ERROR_INSTALLATION_MODULE_FAILURE, $this->_mXoopsModule->get('name')));
222: }
223: }
224:
225: 226: 227:
228: function executeInstall()
229: {
230: $this->_installTables();
231: if (!$this->_mForceMode && $this->mLog->hasError()) {
232: $this->_processReport();
233: return false;
234: }
235:
236: $this->_installModule();
237: if (!$this->_mForceMode && $this->mLog->hasError()) {
238: $this->_processReport();
239: return false;
240: }
241:
242: $this->_installTemplates();
243: if (!$this->_mForceMode && $this->mLog->hasError()) {
244: $this->_processReport();
245: return false;
246: }
247:
248: $this->_installBlocks();
249: if (!$this->_mForceMode && $this->mLog->hasError()) {
250: $this->_processReport();
251: return false;
252: }
253:
254: $this->_installPreferences();
255: if (!$this->_mForceMode && $this->mLog->hasError()) {
256: $this->_processReport();
257: return false;
258: }
259:
260: $this->_processScript();
261: if (!$this->_mForceMode && $this->mLog->hasError()) {
262: $this->_processReport();
263: return false;
264: }
265:
266: $this->_processReport();
267:
268: return true;
269: }
270: }
271:
272: ?>
273: