This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
1 | <?php declare(strict_types=1); |
||
2 | /* |
||
3 | You may not change or alter any portion of this comment or credits |
||
4 | of supporting developers from this source code or any supporting source code |
||
5 | which is considered copyrighted (c) material of the original comment or credit authors. |
||
6 | |||
7 | This program is distributed in the hope that it will be useful, |
||
8 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
10 | */ |
||
11 | |||
12 | /** |
||
13 | * @category Module |
||
14 | * @copyright {@link https://xoops.org/ XOOPS Project} |
||
15 | * @license GNU GPL 2.0 or later (https://www.gnu.org/licenses/gpl-2.0.html) |
||
16 | * @author Jan Pedersen |
||
17 | * @author Taiwen Jiang <[email protected]> |
||
18 | */ |
||
19 | |||
20 | use XoopsModules\Suico\{ |
||
21 | Common\Configurator, |
||
22 | Helper, |
||
23 | Utility |
||
24 | }; |
||
25 | /** @var Helper $helper */ |
||
26 | /** @var Utility $utility */ |
||
27 | /** @var Configurator $configurator */ |
||
28 | include \dirname( |
||
29 | __DIR__ |
||
30 | ) . '/preloads/autoloader.php'; |
||
31 | /** |
||
32 | * Prepares system prior to attempting to install module |
||
33 | * @param \XoopsModule $module {@link XoopsModule} |
||
34 | * |
||
35 | * @return bool true if ready to install, false if not |
||
36 | */ |
||
37 | function xoops_module_pre_install_suico( |
||
38 | XoopsModule $module |
||
39 | ) { |
||
40 | require __DIR__ . '/common.php'; |
||
41 | $utility = new Utility(); |
||
42 | //check for minimum XOOPS version |
||
43 | $xoopsSuccess = $utility::checkVerXoops($module); |
||
44 | // check for minimum PHP version |
||
45 | $phpSuccess = $utility::checkVerPhp($module); |
||
46 | if ($xoopsSuccess && $phpSuccess) { |
||
47 | $moduleTables = &$module->getInfo('tables'); |
||
48 | foreach ($moduleTables as $table) { |
||
49 | $GLOBALS['xoopsDB']->queryF('DROP TABLE IF EXISTS ' . $GLOBALS['xoopsDB']->prefix($table) . ';'); |
||
50 | } |
||
51 | } |
||
52 | |||
53 | return $xoopsSuccess && $phpSuccess; |
||
54 | } |
||
55 | |||
56 | /** |
||
57 | * Performs tasks required during installation of the module |
||
58 | * @param \XoopsModule $module {@link XoopsModule} |
||
59 | * |
||
60 | * @return bool true if installation successful, false if not |
||
61 | */ |
||
62 | function xoops_module_install_suico(XoopsModule $module) |
||
63 | { |
||
64 | global $module_id; |
||
65 | $module_id = $module->getVar('mid'); |
||
66 | xoops_loadLanguage('user'); |
||
67 | require_once \dirname(__DIR__) . '/preloads/autoloader.php'; |
||
68 | $moduleDirName = \basename(\dirname(__DIR__)); |
||
69 | // Create registration steps |
||
70 | suico_install_addStep(_MI_SUICO_STEP_BASIC, '', 1, 1); |
||
71 | // Create categories |
||
72 | suico_install_addCategory(_MI_SUICO_CATEGORY_PERSONAL, 1); |
||
73 | suico_install_addCategory(_MI_SUICO_CATEGORY_MESSAGING, 2); |
||
74 | suico_install_addCategory(_MI_SUICO_CATEGORY_SETTINGS, 3); |
||
75 | suico_install_addCategory(_MI_SUICO_CATEGORY_COMMUNITY, 4); |
||
76 | // Add user fields |
||
77 | xoops_loadLanguage('notification'); |
||
78 | xoops_loadLanguage('main', $module->getVar('dirname', 'n')); |
||
79 | require_once $GLOBALS['xoops']->path('include/notification_constants.php'); |
||
80 | $umode_options = [ |
||
81 | 'nest' => _NESTED, |
||
82 | 'flat' => _FLAT, |
||
83 | 'thread' => _THREADED, |
||
84 | ]; |
||
85 | $uorder_options = [ |
||
86 | 0 => _OLDESTFIRST, |
||
87 | 1 => _NEWESTFIRST, |
||
88 | ]; |
||
89 | $notify_mode_options = [ |
||
90 | XOOPS_NOTIFICATION_MODE_SENDALWAYS => _NOT_MODE_SENDALWAYS, |
||
91 | XOOPS_NOTIFICATION_MODE_SENDONCETHENDELETE => _NOT_MODE_SENDONCE, |
||
92 | XOOPS_NOTIFICATION_MODE_SENDONCETHENWAIT => _NOT_MODE_SENDONCEPERLOGIN, |
||
93 | ]; |
||
94 | $notify_method_options = [ |
||
95 | XOOPS_NOTIFICATION_METHOD_DISABLE => _NOT_METHOD_DISABLE, |
||
96 | XOOPS_NOTIFICATION_METHOD_PM => _NOT_METHOD_PM, |
||
97 | XOOPS_NOTIFICATION_METHOD_EMAIL => _NOT_METHOD_EMAIL, |
||
98 | ]; |
||
99 | suico_install_addField('name', _US_REALNAME, '', 1, 'textbox', 1, 1, 1, [], 0, 255); |
||
100 | suico_install_addField('user_from', _US_LOCATION, '', 1, 'textbox', 1, 2, 1, [], 0, 255); |
||
101 | suico_install_addField('user_occ', _US_OCCUPATION, '', 1, 'textbox', 1, 3, 1, [], 0, 255); |
||
102 | suico_install_addField('user_intrest', _US_INTEREST, '', 1, 'textbox', 1, 4, 1, [], 0, 255); |
||
103 | suico_install_addField('bio', _US_EXTRAINFO, '', 1, 'textarea', 2, 5, 1, [], 0, 0); |
||
104 | suico_install_addField('user_sig', _US_SIGNATURE, '', 1, 'dhtml', 1, 6, 1, [], 0, 0); |
||
105 | suico_install_addField('url', _MI_SUICO_URL_TITLE, '', 1, 'textbox', 1, 7, 1, [], 0, 255, false); |
||
106 | suico_install_addField('timezone_offset', _US_TIMEZONE, '', 3, 'timezone', 1, 0, 1, [], 0, 0, false); |
||
107 | suico_install_addField('user_viewemail', _US_ALLOWVIEWEMAIL, '', 3, 'yesno', 3, 1, 1, [], 0, 1, false); |
||
108 | suico_install_addField('attachsig', _US_SHOWSIG, '', 3, 'yesno', 3, 2, 1, [], 0, 1, false); |
||
109 | suico_install_addField('user_mailok', _US_MAILOK, '', 3, 'yesno', 3, 3, 1, [], 0, 1, false); |
||
110 | suico_install_addField('theme', _MD_SUICO_THEME, '', 3, 'theme', 1, 4, 1, [], 0, 0, false); |
||
111 | suico_install_addField('umode', _US_CDISPLAYMODE, '', 3, 'select', 1, 5, 1, $umode_options, 0, 0, false); |
||
112 | suico_install_addField('uorder', _US_CSORTORDER, '', 3, 'select', 3, 6, 1, $uorder_options, 0, 0, false); |
||
113 | suico_install_addField('notify_mode', _NOT_NOTIFYMODE, '', 3, 'select', 3, 7, 1, $notify_mode_options, 0, 0, false); |
||
114 | suico_install_addField('notify_method', _NOT_NOTIFYMETHOD, '', 3, 'select', 3, 8, 1, $notify_method_options, 0, 0, false); |
||
115 | suico_install_addField('user_regdate', _US_MEMBERSINCE, '', 4, 'datetime', 3, 1, 0, [], 0, 10); |
||
116 | suico_install_addField('posts', _US_POSTS, '', 4, 'textbox', 3, 2, 0, [], 0, 255); |
||
117 | suico_install_addField('rank', _US_RANK, '', 4, 'rank', 3, 3, 2, [], 0, 0); |
||
118 | suico_install_addField('last_login', _US_LASTLOGIN, '', 4, 'datetime', 3, 4, 0, [], 0, 10); |
||
119 | suico_install_initializeProfiles(); |
||
120 | $helper = Helper::getInstance(); |
||
121 | $utility = new Utility(); |
||
122 | $configurator = new Configurator(); |
||
123 | // Load language files |
||
124 | $helper->loadLanguage('admin'); |
||
125 | $helper->loadLanguage('modinfo'); |
||
126 | // default Permission Settings ---------------------- |
||
127 | $moduleId = $module->getVar('mid'); |
||
128 | //$moduleName = $module->getVar('name'); |
||
129 | $grouppermHandler = xoops_getHandler('groupperm'); |
||
130 | // access rights ------------------------------------------ |
||
131 | $grouppermHandler->addRight( |
||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
132 | $moduleDirName . '_approve', |
||
133 | 1, |
||
134 | XOOPS_GROUP_ADMIN, |
||
135 | $moduleId |
||
136 | ); |
||
137 | $grouppermHandler->addRight($moduleDirName . '_submit', 1, XOOPS_GROUP_ADMIN, $moduleId); |
||
138 | $grouppermHandler->addRight($moduleDirName . '_view', 1, XOOPS_GROUP_ADMIN, $moduleId); |
||
139 | $grouppermHandler->addRight($moduleDirName . '_view', 1, XOOPS_GROUP_USERS, $moduleId); |
||
140 | $grouppermHandler->addRight($moduleDirName . '_view', 1, XOOPS_GROUP_ANONYMOUS, $moduleId); |
||
141 | // --- CREATE FOLDERS --------------- |
||
142 | if (count($configurator->uploadFolders) > 0) { |
||
143 | // foreach (array_keys($GLOBALS['uploadFolders']) as $i) { |
||
144 | foreach ( |
||
145 | array_keys( |
||
146 | $configurator->uploadFolders |
||
147 | ) as $i |
||
148 | ) { |
||
149 | $utility::createFolder($configurator->uploadFolders[$i]); |
||
150 | } |
||
151 | } |
||
152 | // --- COPY blank.png FILES --------------- |
||
153 | if (count($configurator->copyBlankFiles) > 0) { |
||
154 | $file = \dirname(__DIR__) . '/assets/images/blank.png'; |
||
155 | foreach (array_keys($configurator->copyBlankFiles) as $i) { |
||
156 | $dest = $configurator->copyBlankFiles[$i] . '/blank.png'; |
||
157 | $utility::copyFile($file, $dest); |
||
158 | } |
||
159 | } |
||
160 | /* |
||
161 | // --- COPY test folder files --------------- |
||
162 | if (count($configurator->copyTestFolders) > 0) { |
||
163 | // $file = \dirname(__DIR__) . '/testdata/images/'; |
||
164 | foreach (array_keys($configurator->copyTestFolders) as $i) { |
||
165 | $src = $configurator->copyTestFolders[$i][0]; |
||
166 | $dest = $configurator->copyTestFolders[$i][1]; |
||
167 | $utility::xcopy($src, $dest); |
||
168 | } |
||
169 | } |
||
170 | */ |
||
171 | //delete .html entries from the tpl table |
||
172 | $sql = 'DELETE FROM ' . $GLOBALS['xoopsDB']->prefix( |
||
173 | 'tplfile' |
||
174 | ) . " WHERE `tpl_module` = '" . $module->getVar( |
||
175 | 'dirname', |
||
176 | 'n' |
||
177 | ) . "' AND `tpl_file` LIKE '%.html%'"; |
||
178 | $GLOBALS['xoopsDB']->queryF($sql); |
||
179 | |||
180 | return true; |
||
181 | } |
||
182 | |||
183 | /** |
||
184 | * @return void |
||
185 | */ |
||
186 | function suico_install_initializeProfiles(): void |
||
187 | { |
||
188 | global $module_id; |
||
189 | $GLOBALS['xoopsDB']->queryF(' INSERT INTO ' . $GLOBALS['xoopsDB']->prefix('suico_profile') . ' (profile_id) ' . ' SELECT uid ' . ' FROM ' . $GLOBALS['xoopsDB']->prefix('users')); |
||
190 | $sql = 'INSERT INTO ' |
||
191 | . $GLOBALS['xoopsDB']->prefix('group_permission') |
||
192 | . ' (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) ' |
||
193 | . ' VALUES ' |
||
194 | . ' (' |
||
195 | . XOOPS_GROUP_ADMIN |
||
196 | . ', ' |
||
197 | . XOOPS_GROUP_ADMIN |
||
198 | . ", {$module_id}, 'profile_access'), " |
||
199 | . ' (' |
||
200 | . XOOPS_GROUP_ADMIN |
||
201 | . ', ' |
||
202 | . XOOPS_GROUP_USERS |
||
203 | . ", {$module_id}, 'profile_access'), " |
||
204 | . ' (' |
||
205 | . XOOPS_GROUP_USERS |
||
206 | . ', ' |
||
207 | . XOOPS_GROUP_USERS |
||
208 | . ", {$module_id}, 'profile_access'), " |
||
209 | . ' (' |
||
210 | . XOOPS_GROUP_ANONYMOUS |
||
211 | . ', ' |
||
212 | . XOOPS_GROUP_USERS |
||
213 | . ", {$module_id}, 'profile_access') " |
||
214 | . ' '; |
||
215 | $GLOBALS['xoopsDB']->queryF($sql); |
||
216 | } |
||
217 | |||
218 | // canedit: 0 - no; 1 - admin; 2 - admin & owner |
||
219 | /** |
||
220 | * @param $name |
||
221 | * @param $title |
||
222 | * @param $description |
||
223 | * @param $category |
||
224 | * @param $type |
||
225 | * @param $valuetype |
||
226 | * @param $weight |
||
227 | * @param $canedit |
||
228 | * @param $options |
||
229 | * @param $step_id |
||
230 | * @param $length |
||
231 | * @param bool $visible |
||
232 | * |
||
233 | * @return bool |
||
234 | */ |
||
235 | function suico_install_addField($name, $title, $description, $category, $type, $valuetype, $weight, $canedit, $options, $step_id, $length, $visible = true) |
||
236 | { |
||
237 | global $module_id; |
||
238 | $fieldHandler = Helper::getInstance()->getHandler('Field'); |
||
239 | $obj = $fieldHandler->create(); |
||
240 | $obj->setVar('field_name', $name, true); |
||
241 | $obj->setVar('field_moduleid', $module_id, true); |
||
242 | $obj->setVar('field_show', 1); |
||
243 | $obj->setVar('field_edit', $canedit ? 1 : 0); |
||
244 | $obj->setVar('field_config', 0); |
||
245 | $obj->setVar('field_title', strip_tags($title), true); |
||
246 | $obj->setVar('field_description', strip_tags($description), true); |
||
247 | $obj->setVar('field_type', $type, true); |
||
248 | $obj->setVar('field_valuetype', $valuetype, true); |
||
249 | $obj->setVar('field_options', $options, true); |
||
250 | if ($canedit) { |
||
251 | $obj->setVar('field_maxlength', $length, true); |
||
252 | } |
||
253 | $obj->setVar('field_weight', $weight, true); |
||
254 | $obj->setVar('cat_id', $category, true); |
||
255 | $obj->setVar('step_id', $step_id, true); |
||
256 | $fieldHandler->insert($obj); |
||
257 | suico_install_setPermissions($obj->getVar('field_id'), $module_id, $canedit, $visible); |
||
258 | |||
259 | return true; |
||
260 | /* |
||
261 | //$GLOBALS['xoopsDB']->query("INSERT INTO ".$GLOBALS['xoopsDB']->prefix("suico_field")." VALUES (0, {$category}, '{$type}', {$valuetype}, '{$name}', " . $GLOBALS['xoopsDB']->quote($title) . ", " . $GLOBALS['xoopsDB']->quote($description) . ", 0, {$length}, {$weight}, '', 1, {$canedit}, 1, 0, '" . serialize($options) . "', {$step_id})"); |
||
262 | $gperm_itemid = $obj->getVar('field_id'); |
||
263 | unset($obj); |
||
264 | $gperm_modid = $module_id; |
||
265 | $sql = "INSERT INTO " . $GLOBALS['xoopsDB']->prefix("group_permission") . |
||
266 | " (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) " . |
||
267 | " VALUES " . |
||
268 | ($canedit ? |
||
269 | " (" . XOOPS_GROUP_ADMIN . ", {$gperm_itemid}, {$gperm_modid}, 'suico_edit'), " |
||
270 | : "" ) . |
||
271 | ($canedit == 1 ? |
||
272 | " (" . XOOPS_GROUP_USERS . ", {$gperm_itemid}, {$gperm_modid}, 'suico_edit'), " |
||
273 | : "" ) . |
||
274 | " (" . XOOPS_GROUP_ADMIN . ", {$gperm_itemid}, {$gperm_modid}, 'suico_search'), " . |
||
275 | " (" . XOOPS_GROUP_USERS . ", {$gperm_itemid}, {$gperm_modid}, 'suico_search') " . |
||
276 | " "; |
||
277 | $GLOBALS['xoopsDB']->query($sql); |
||
278 | |||
279 | if ($visible) { |
||
280 | $sql = "INSERT INTO " . $GLOBALS['xoopsDB']->prefix("suico_profile_visibility") . |
||
281 | " (field_id, user_group, suico_group) " . |
||
282 | " VALUES " . |
||
283 | " ({$gperm_itemid}, " . XOOPS_GROUP_ADMIN . ", " . XOOPS_GROUP_ADMIN . "), " . |
||
284 | " ({$gperm_itemid}, " . XOOPS_GROUP_ADMIN . ", " . XOOPS_GROUP_USERS . "), " . |
||
285 | " ({$gperm_itemid}, " . XOOPS_GROUP_USERS . ", " . XOOPS_GROUP_ADMIN . "), " . |
||
286 | " ({$gperm_itemid}, " . XOOPS_GROUP_USERS . ", " . XOOPS_GROUP_USERS . "), " . |
||
287 | " ({$gperm_itemid}, " . XOOPS_GROUP_ANONYMOUS . ", " . XOOPS_GROUP_ADMIN . "), " . |
||
288 | " ({$gperm_itemid}, " . XOOPS_GROUP_ANONYMOUS . ", " . XOOPS_GROUP_USERS . ")" . |
||
289 | " "; |
||
290 | $GLOBALS['xoopsDB']->query($sql); |
||
291 | } |
||
292 | */ |
||
293 | } |
||
294 | |||
295 | /** |
||
296 | * @param $field_id |
||
297 | * @param $module_id |
||
298 | * @param $canedit |
||
299 | * @param $visible |
||
300 | */ |
||
301 | function suico_install_setPermissions($field_id, $module_id, $canedit, $visible): void |
||
302 | { |
||
303 | $gperm_itemid = $field_id; |
||
304 | $gperm_modid = $module_id; |
||
305 | $sql = 'INSERT INTO ' |
||
306 | . $GLOBALS['xoopsDB']->prefix('group_permission') |
||
307 | . ' (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) ' |
||
308 | . ' VALUES ' |
||
309 | . ($canedit ? ' (' . XOOPS_GROUP_ADMIN . ", {$gperm_itemid}, {$gperm_modid}, 'profile_edit'), " : '') |
||
310 | . (1 == $canedit ? ' (' |
||
311 | . XOOPS_GROUP_USERS |
||
312 | . ", {$gperm_itemid}, {$gperm_modid}, 'profile_edit'), " : '') |
||
313 | . ' (' |
||
314 | . XOOPS_GROUP_ADMIN |
||
315 | . ", {$gperm_itemid}, {$gperm_modid}, 'profile_search'), " |
||
316 | . ' (' |
||
317 | . XOOPS_GROUP_USERS |
||
318 | . ", {$gperm_itemid}, {$gperm_modid}, 'profile_search') " |
||
319 | . ' '; |
||
320 | $GLOBALS['xoopsDB']->queryF($sql); |
||
321 | if ($visible) { |
||
322 | $sql = 'INSERT INTO ' |
||
323 | . $GLOBALS['xoopsDB']->prefix('suico_profile_visibility') |
||
324 | . ' (field_id, user_group, profile_group) ' |
||
325 | . ' VALUES ' |
||
326 | . " ({$gperm_itemid}, " |
||
327 | . XOOPS_GROUP_ADMIN |
||
328 | . ', ' |
||
329 | . XOOPS_GROUP_ADMIN |
||
330 | . '), ' |
||
331 | . " ({$gperm_itemid}, " |
||
332 | . XOOPS_GROUP_ADMIN |
||
333 | . ', ' |
||
334 | . XOOPS_GROUP_USERS |
||
335 | . '), ' |
||
336 | . " ({$gperm_itemid}, " |
||
337 | . XOOPS_GROUP_USERS |
||
338 | . ', ' |
||
339 | . XOOPS_GROUP_ADMIN |
||
340 | . '), ' |
||
341 | . " ({$gperm_itemid}, " |
||
342 | . XOOPS_GROUP_USERS |
||
343 | . ', ' |
||
344 | . XOOPS_GROUP_USERS |
||
345 | . '), ' |
||
346 | . " ({$gperm_itemid}, " |
||
347 | . XOOPS_GROUP_ANONYMOUS |
||
348 | . ', ' |
||
349 | . XOOPS_GROUP_ADMIN |
||
350 | . '), ' |
||
351 | . " ({$gperm_itemid}, " |
||
352 | . XOOPS_GROUP_ANONYMOUS |
||
353 | . ', ' |
||
354 | . XOOPS_GROUP_USERS |
||
355 | . ')' |
||
356 | . ' '; |
||
357 | $GLOBALS['xoopsDB']->queryF($sql); |
||
358 | } |
||
359 | } |
||
360 | |||
361 | /** |
||
362 | * @param $name |
||
363 | * @param $weight |
||
364 | */ |
||
365 | function suico_install_addCategory($name, $weight): void |
||
366 | { |
||
367 | $GLOBALS['xoopsDB']->query('INSERT INTO ' . $GLOBALS['xoopsDB']->prefix('suico_profile_category') . ' VALUES (0, ' . $GLOBALS['xoopsDB']->quote($name) . ", '', {$weight})"); |
||
368 | } |
||
369 | |||
370 | /** |
||
371 | * @param $name |
||
372 | * @param $desc |
||
373 | * @param $order |
||
374 | * @param $save |
||
375 | */ |
||
376 | function suico_install_addStep($name, $desc, $order, $save): void |
||
377 | { |
||
378 | $GLOBALS['xoopsDB']->query('INSERT INTO ' . $GLOBALS['xoopsDB']->prefix('suico_profile_regstep') . ' VALUES (0, ' . $GLOBALS['xoopsDB']->quote($name) . ', ' . $GLOBALS['xoopsDB']->quote($desc) . ", {$order}, {$save})"); |
||
379 | } |
||
380 |