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 | /* |
||||
4 | * You may not change or alter any portion of this comment or credits |
||||
5 | * of supporting developers from this source code or any supporting source code |
||||
6 | * which is considered copyrighted (c) material of the original comment or credit authors. |
||||
7 | * |
||||
8 | * This program is distributed in the hope that it will be useful, |
||||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||||
11 | */ |
||||
12 | |||||
13 | /** |
||||
14 | * @copyright {@link https://xoops.org/ XOOPS Project} |
||||
15 | * @license {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later} |
||||
16 | * @author Brian Wahoff <[email protected]> |
||||
17 | * @author Eric Juden <[email protected]> |
||||
18 | * @author XOOPS Development Team |
||||
19 | */ |
||||
20 | |||||
21 | use Xmf\Module\Admin; |
||||
22 | use Xmf\Request; |
||||
23 | use XoopsModules\Xhelp; |
||||
24 | |||||
25 | require_once __DIR__ . '/admin_header.php'; |
||||
26 | xoops_load('XoopsPagenav'); |
||||
27 | |||||
28 | $helper = Xhelp\Helper::getInstance(); |
||||
29 | |||||
30 | global $xoopsModule; |
||||
31 | $module_id = $xoopsModule->getVar('mid'); |
||||
32 | |||||
33 | $op = 'default'; |
||||
34 | |||||
35 | if (Request::hasVar('op', 'REQUEST')) { |
||||
36 | $op = $_REQUEST['op']; |
||||
37 | } |
||||
38 | |||||
39 | switch ($op) { |
||||
40 | case 'checkTables': |
||||
41 | checkTables(); |
||||
42 | break; |
||||
43 | case 'upgradeDB': |
||||
44 | try { |
||||
45 | upgradeDB(); |
||||
46 | } catch (Exception $e) { |
||||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
![]() |
|||||
47 | } |
||||
48 | break; |
||||
49 | default: |
||||
50 | $helper->redirect('admin/index.php'); |
||||
51 | break; |
||||
52 | } |
||||
53 | |||||
54 | /** |
||||
55 | * @param string $oldName |
||||
56 | * @param string $newName |
||||
57 | * @return bool |
||||
58 | */ |
||||
59 | function renameTable(string $oldName, string $newName): bool |
||||
60 | { |
||||
61 | global $xoopsDB; |
||||
62 | $qry = runQuery(sprintf('ALTER TABLE %s RENAME %s', $xoopsDB->prefix($oldName), $xoopsDB->prefix($newName)), sprintf(_AM_XHELP_MSG_RENAME_TABLE, $oldName, $newName), sprintf(_AM_XHELP_MSG_RENAME_TABLE_ERR, $oldName)); |
||||
63 | |||||
64 | return $qry; |
||||
65 | } |
||||
66 | |||||
67 | /** |
||||
68 | * @param string $query |
||||
69 | * @param string $goodmsg |
||||
70 | * @param string $badmsg |
||||
71 | * @return bool |
||||
72 | */ |
||||
73 | function runQuery(string $query, string $goodmsg, string $badmsg): bool |
||||
74 | { |
||||
75 | global $xoopsDB; |
||||
76 | $ret = $xoopsDB->query($query); |
||||
77 | if (!$ret) { |
||||
78 | echo "<li class='err'>$badmsg</li>"; |
||||
79 | |||||
80 | return false; |
||||
81 | } |
||||
82 | |||||
83 | echo "<li class='ok'>$goodmsg</li>"; |
||||
84 | |||||
85 | return true; |
||||
86 | } |
||||
87 | |||||
88 | function checkTables() |
||||
89 | { |
||||
90 | global $xoopsModule; |
||||
91 | xoops_cp_header(); |
||||
92 | //echo $oAdminButton->renderButtons(''); |
||||
93 | $adminObject = Admin::getInstance(); |
||||
94 | $adminObject->displayNavigation('upgrade.php?op=checkTables'); |
||||
95 | //1. Determine previous release |
||||
96 | if (!Xhelp\Utility::tableExists('xhelp_meta')) { |
||||
97 | $ver = '0.5'; |
||||
98 | } elseif (!$ver = Xhelp\Utility::getMeta('version')) { |
||||
99 | echo('Unable to determine previous version.'); |
||||
100 | } |
||||
101 | |||||
102 | $currentVer = round($xoopsModule->getVar('version') / 100, 2); |
||||
103 | |||||
104 | printf('<h2>' . _AM_XHELP_CURRENTVER . '</h2>', $currentVer); |
||||
105 | printf('<h2>' . _AM_XHELP_DBVER . '</h2>', $ver); |
||||
106 | |||||
107 | if ($ver == $currentVer) { |
||||
108 | //No updates are necessary |
||||
109 | echo '<div>' . _AM_XHELP_DB_NOUPDATE . '</div>'; |
||||
110 | } elseif ($ver < $currentVer) { |
||||
111 | //Needs to upgrade |
||||
112 | echo '<div>' . _AM_XHELP_DB_NEEDUPDATE . '</div>'; |
||||
113 | echo '<form method="post" action="upgrade.php"><input type="hidden" name="op" value="upgradeDB"><input type="submit" value="' . _AM_XHELP_UPDATE_NOW . "\" onclick='_openProgressWindow();'></form>"; |
||||
114 | } else { |
||||
115 | //Tried to downgrade |
||||
116 | echo '<div>' . _AM_XHELP_DB_NEEDINSTALL . '</div>'; |
||||
117 | } |
||||
118 | |||||
119 | require_once __DIR__ . '/admin_footer.php'; |
||||
120 | } |
||||
121 | |||||
122 | echo "<script type='text/javascript'> |
||||
123 | function _openProgressWindow() |
||||
124 | { |
||||
125 | newwindow = openWithSelfMain('upgradeProgress.php','progress','430','100', true); |
||||
126 | } |
||||
127 | </script>"; |
||||
128 | |||||
129 | /** |
||||
130 | * @throws \Exception |
||||
131 | */ |
||||
132 | function upgradeDB() |
||||
133 | { |
||||
134 | global $xoopsModule; |
||||
135 | $helper = Xhelp\Helper::getInstance(); |
||||
136 | /** @var \XoopsMySQLDatabase $xoopsDB */ |
||||
137 | $xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection(); |
||||
138 | //1. Determine previous release |
||||
139 | // *** Update this in sql/mysql.sql for each release ** |
||||
140 | if (!Xhelp\Utility::tableExists('xhelp_meta')) { |
||||
141 | $ver = '0.5'; |
||||
142 | } elseif (!$ver = Xhelp\Utility::getMeta('version')) { |
||||
143 | exit(_AM_XHELP_VERSION_ERR); |
||||
0 ignored issues
–
show
|
|||||
144 | } |
||||
145 | |||||
146 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||||
147 | $staffHandler = $helper->getHandler('Staff'); |
||||
148 | /** @var \XoopsModules\Xhelp\MembershipHandler $membershipHandler */ |
||||
149 | $membershipHandler = $helper->getHandler('Membership'); |
||||
150 | /** @var \XoopsModules\Xhelp\TicketHandler $ticketHandler */ |
||||
151 | $ticketHandler = $helper->getHandler('Ticket'); |
||||
152 | /** @var \XoopsMemberHandler $memberHandler */ |
||||
153 | $memberHandler = xoops_getHandler('member'); |
||||
154 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||||
155 | $roleHandler = $helper->getHandler('Role'); |
||||
156 | |||||
157 | $mid = $xoopsModule->getVar('mid'); |
||||
158 | |||||
159 | xoops_cp_header(); |
||||
160 | //echo $oAdminButton->renderButtons(''); |
||||
161 | $adminObject = Admin::getInstance(); |
||||
162 | $adminObject->displayNavigation(basename(__FILE__)); |
||||
163 | |||||
164 | echo '<h2>' . _AM_XHELP_UPDATE_DB . '</h2>'; |
||||
165 | $ret = true; |
||||
166 | //2. Do All Upgrades necessary to make current |
||||
167 | // Break statements are omitted on purpose |
||||
168 | switch ($ver) { |
||||
169 | case '0.5': |
||||
170 | set_time_limit(60); |
||||
171 | printf('<h3>' . _AM_XHELP_UPDATE_TO . '</h3>', '0.6'); |
||||
172 | echo '<ul>'; |
||||
173 | //Create meta table |
||||
174 | $ret = $ret |
||||
175 | && runQuery( |
||||
176 | sprintf("CREATE TABLE %s (metakey VARCHAR(50) NOT NULL DEFAULT '', metavalue VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (metakey)) ENGINE=MyISAM;", $xoopsDB->prefix('xhelp_meta')), |
||||
177 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_meta'), |
||||
178 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_meta') |
||||
179 | ); |
||||
180 | |||||
181 | //Insert Current Version into table |
||||
182 | $qry = $xoopsDB->query(sprintf("INSERT INTO `%s` VALUES('version', %s)", $xoopsDB->prefix('xhelp_meta'), $xoopsDB->quoteString($ver))); |
||||
0 ignored issues
–
show
|
|||||
183 | |||||
184 | //Update xhelp_responses table |
||||
185 | $ret = $ret |
||||
186 | && runQuery(sprintf("ALTER TABLE %s ADD private INT(11) NOT NULL DEFAULT '0'", $xoopsDB->prefix('xhelp_responses')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_responses'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_responses')); |
||||
187 | |||||
188 | //Retrieve uid's of all staff members |
||||
189 | $qry = $xoopsDB->query('SELECT uid FROM ' . $xoopsDB->prefix('xhelp_staff') . ' ORDER BY uid'); |
||||
190 | |||||
191 | //Get email addresses in user profile |
||||
192 | $staff = []; |
||||
193 | while (false !== ($arr = $xoopsDB->fetchArray($qry))) { |
||||
0 ignored issues
–
show
It seems like
$qry can also be of type boolean ; however, parameter $result of XoopsMySQLDatabase::fetchArray() does only seem to accept mysqli_result , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
194 | $staff[$arr['uid']] = ''; |
||||
195 | } |
||||
196 | $xoopsDB->freeRecordSet($qry); |
||||
0 ignored issues
–
show
It seems like
$qry can also be of type boolean ; however, parameter $result of XoopsMySQLDatabase::freeRecordSet() does only seem to accept mysqli_result , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
197 | |||||
198 | $query = 'SELECT uid, email FROM ' . $xoopsDB->prefix('users') . ' WHERE uid IN (' . implode(',', array_keys($staff)) . ')'; |
||||
199 | $qry = $xoopsDB->query($query); |
||||
200 | while (false !== ($arr = $xoopsDB->fetchArray($qry))) { |
||||
201 | $staff[$arr['uid']] = $arr['email']; |
||||
202 | } |
||||
203 | $xoopsDB->freeRecordSet($qry); |
||||
204 | |||||
205 | //Update xhelp_staff table |
||||
206 | $ret = $ret |
||||
207 | && runQuery(sprintf("ALTER TABLE %s ADD email VARCHAR(255) NOT NULL DEFAULT '' AFTER uid, ADD notify INT(11) NOT NULL DEFAULT '0'", $xoopsDB->prefix('xhelp_staff')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_staff'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_staff')); |
||||
208 | |||||
209 | //Update existing staff records |
||||
210 | $staff_tbl = $xoopsDB->prefix('xhelp_staff'); |
||||
211 | $notif_tbl = $xoopsDB->prefix('xoopsnotifications'); |
||||
212 | $email_tpl = $xoopsModule->getInfo('_email_tpl'); |
||||
213 | foreach ($staff as $uid => $email) { |
||||
214 | //get notifications for current user |
||||
215 | $usernotif = 0; |
||||
216 | $qry = $xoopsDB->query(sprintf("SELECT DISTINCT not_category, not_event FROM `%s` WHERE not_uid = %u AND not_category='dept' AND not_modid=%u", $notif_tbl, $uid, $mid)); |
||||
217 | while (false !== ($arr = $xoopsDB->fetchArray($qry))) { |
||||
218 | //Look for current event information in $email_tpl |
||||
219 | foreach ($email_tpl as $tpl) { |
||||
220 | if (($tpl['name'] == $arr['not_event']) && ($tpl['category'] == $arr['not_category'])) { |
||||
221 | $usernotif |= 2 ** $tpl['bit_value']; |
||||
222 | break; |
||||
223 | } |
||||
224 | } |
||||
225 | } |
||||
226 | |||||
227 | //Update xhelp_staff with user notifications & email address |
||||
228 | $ret = $ret |
||||
229 | && runQuery(sprintf('UPDATE `%s` SET email = %s, notify = %u WHERE uid = %u', $staff_tbl, $xoopsDB->quoteString($email), $usernotif, $uid), sprintf(_AM_XHELP_MSG_UPDATESTAFF, $uid), sprintf(_AM_XHELP_MSG_UPDATESTAFF_ERR, $uid)); |
||||
230 | } |
||||
231 | echo '</ul>'; |
||||
232 | // no break |
||||
233 | case '0.6': |
||||
234 | set_time_limit(60); |
||||
235 | //Do DB updates to make 0.7 |
||||
236 | printf('<h3>' . _AM_XHELP_UPDATE_TO . '</h3>', '0.7'); |
||||
237 | |||||
238 | echo '<ul>'; |
||||
239 | // change table names to lowercase |
||||
240 | $ret = $ret && renameTable('xhelp_logMessages', 'xhelp_logmessages'); |
||||
241 | $ret = $ret && renameTable('xhelp_responseTemplates', 'xhelp_responsetemplates'); |
||||
242 | $ret = $ret && renameTable('xhelp_jStaffDept', 'xhelp_jstaffdept'); |
||||
243 | $ret = $ret && renameTable('xhelp_staffReview', 'xhelp_staffreview'); |
||||
244 | $ret = $ret && renameTable('xhelp_emailTpl', 'xhelp_emailtpl'); |
||||
245 | |||||
246 | // Remove unused table - xhelp_emailtpl |
||||
247 | $ret = $ret |
||||
248 | && runQuery(sprintf('DROP TABLE %s', $xoopsDB->prefix('xhelp_emailtpl')), sprintf(_AM_XHELP_MSG_REMOVE_TABLE, 'xhelp_emailtpl'), sprintf(_AM_XHELP_MSG_NOT_REMOVE_TABLE, 'xhelp_emailtpl')); |
||||
249 | |||||
250 | // xhelp_staff table - permTimestamp |
||||
251 | $ret = $ret |
||||
252 | && runQuery(sprintf("ALTER TABLE %s ADD permTimestamp INT(11) NOT NULL DEFAULT '0'", $xoopsDB->prefix('xhelp_staff')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_staff'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_staff')); |
||||
253 | |||||
254 | //Update xhelp_tickets table |
||||
255 | $ret = $ret |
||||
256 | && runQuery(sprintf("ALTER TABLE %s MODIFY SUBJECT VARCHAR(100) NOT NULL DEFAULT ''", $xoopsDB->prefix('xhelp_tickets')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_tickets'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_tickets')); |
||||
257 | |||||
258 | $ret = $ret |
||||
259 | && runQuery( |
||||
260 | sprintf( |
||||
261 | "ALTER TABLE %s ADD (serverid INT(11) DEFAULT NULL, |
||||
262 | emailHash VARCHAR(100) DEFAULT NULL, |
||||
263 | email VARCHAR(100) DEFAULT NULL, |
||||
264 | overdueTime INT(11) NOT NULL DEFAULT '0', |
||||
265 | KEY emailHash (emailHash))", |
||||
266 | $xoopsDB->prefix('xhelp_tickets') |
||||
267 | ), |
||||
268 | sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_tickets'), |
||||
269 | sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_tickets') |
||||
270 | ); |
||||
271 | |||||
272 | // Create xhelp_department_mailbox table |
||||
273 | $ret = $ret |
||||
274 | && runQuery( |
||||
275 | sprintf( |
||||
276 | 'CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
277 | departmentid INT(11) DEFAULT NULL, |
||||
278 | emailaddress VARCHAR(255) DEFAULT NULL, |
||||
279 | SERVER VARCHAR(50) DEFAULT NULL, |
||||
280 | serverport INT(11) DEFAULT NULL, |
||||
281 | username VARCHAR(50) DEFAULT NULL, |
||||
282 | PASSWORD VARCHAR(50) DEFAULT NULL, |
||||
283 | priority TINYINT(4) DEFAULT NULL, |
||||
284 | mboxtype INT(11) NOT NULL DEFAULT 1, |
||||
285 | PRIMARY KEY (id), |
||||
286 | UNIQUE KEY id (id), |
||||
287 | KEY departmentid (departmentid), |
||||
288 | KEY emailaddress (emailaddress), |
||||
289 | KEY mboxtype (mboxtype) |
||||
290 | )ENGINE=MyISAM;', |
||||
291 | $xoopsDB->prefix('xhelp_department_mailbox') |
||||
292 | ), |
||||
293 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_department_mailbox'), |
||||
294 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_department_mailbox') |
||||
295 | ); |
||||
296 | |||||
297 | // Create xhelp_mailevent table |
||||
298 | $ret = $ret |
||||
299 | && runQuery( |
||||
300 | sprintf( |
||||
301 | "CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
302 | mbox_id INT(11) NOT NULL DEFAULT '0', |
||||
303 | event_desc TEXT, |
||||
304 | event_class INT(11) NOT NULL DEFAULT '0', |
||||
305 | posted INT(11) NOT NULL DEFAULT '0', |
||||
306 | PRIMARY KEY(id) |
||||
307 | )ENGINE=MyISAM;", |
||||
308 | $xoopsDB->prefix('xhelp_mailevent') |
||||
309 | ), |
||||
310 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_mailevent'), |
||||
311 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_mailevent') |
||||
312 | ); |
||||
313 | |||||
314 | // Create xhelp_roles table |
||||
315 | $ret = $ret |
||||
316 | && runQuery( |
||||
317 | sprintf( |
||||
318 | "CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
319 | name VARCHAR(35) NOT NULL DEFAULT '', |
||||
320 | description MEDIUMTEXT, |
||||
321 | tasks INT(11) NOT NULL DEFAULT '0', |
||||
322 | PRIMARY KEY(id) |
||||
323 | )ENGINE=MyISAM;", |
||||
324 | $xoopsDB->prefix('xhelp_roles') |
||||
325 | ), |
||||
326 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_roles'), |
||||
327 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_roles') |
||||
328 | ); |
||||
329 | |||||
330 | // Create xhelp_staffroles table |
||||
331 | $ret = $ret |
||||
332 | && runQuery( |
||||
333 | sprintf( |
||||
334 | "CREATE TABLE %s (uid INT(11) NOT NULL DEFAULT '0', |
||||
335 | roleid INT(11) NOT NULL DEFAULT '0', |
||||
336 | deptid INT(11) NOT NULL DEFAULT '0', |
||||
337 | PRIMARY KEY(uid, roleid, deptid) |
||||
338 | )ENGINE=MyISAM;", |
||||
339 | $xoopsDB->prefix('xhelp_staffroles') |
||||
340 | ), |
||||
341 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_staffroles'), |
||||
342 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_staffroles') |
||||
343 | ); |
||||
344 | |||||
345 | // Add default roles to db |
||||
346 | if ($hasRoles = Xhelp\Utility::createRoles()) { |
||||
0 ignored issues
–
show
|
|||||
347 | echo '<li>' . _AM_XHELP_MESSAGE_DEF_ROLES . '</li>'; |
||||
348 | } else { |
||||
349 | echo '<li>' . _AM_XHELP_MESSAGE_DEF_ROLES_ERROR . '</li>'; |
||||
350 | } |
||||
351 | |||||
352 | // Set all staff members to have admin permission role |
||||
353 | $staffArray = $staffHandler->getObjects(); |
||||
354 | if ($staffArray) { |
||||
0 ignored issues
–
show
The expression
$staffArray of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||||
355 | foreach ($staffArray as $staff) { |
||||
356 | $uid = $staff->getVar('uid'); |
||||
357 | $depts = $membershipHandler->membershipByStaff($uid, true); |
||||
358 | if ($staffHandler->addStaffRole($uid, 1, 0)) { |
||||
359 | echo '<li>' . sprintf(_AM_XHELP_MSG_GLOBAL_PERMS, $uid) . '</li>'; |
||||
360 | } |
||||
361 | |||||
362 | foreach ($depts as $dept) { |
||||
363 | $deptid = $dept->getVar('id'); |
||||
364 | if ($staffHandler->addStaffRole($uid, 1, $deptid)) { // Departmental permissions |
||||
365 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPD_PERMS, $uid, $dept->getVar('department')) . '</li>'; |
||||
366 | } |
||||
367 | } |
||||
368 | |||||
369 | $staff->setVar('permTimestamp', time()); // Set initial value for permTimestamp field |
||||
370 | if ($staffHandler->insert($staff)) { |
||||
371 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATESTAFF, $uid) . '</li>'; |
||||
372 | } else { |
||||
373 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATESTAFF_ERR, $uid) . '</li>'; |
||||
374 | } |
||||
375 | } |
||||
376 | } |
||||
377 | echo '</ul>'; |
||||
378 | |||||
379 | // no break |
||||
380 | case '0.7': |
||||
381 | set_time_limit(60); |
||||
382 | //Do DB updates to make 0.71 |
||||
383 | printf('<h3>' . _AM_XHELP_UPDATE_TO . '</h3>', '0.71'); |
||||
384 | |||||
385 | echo '<ul>'; |
||||
386 | echo '</ul>'; |
||||
387 | |||||
388 | // no break |
||||
389 | case '0.71': |
||||
390 | set_time_limit(60); |
||||
391 | //Do DB updates to make 0.75 |
||||
392 | printf('<h3>' . _AM_XHELP_UPDATE_TO . '</h3>', '0.75'); |
||||
393 | |||||
394 | echo '<ul>'; |
||||
395 | |||||
396 | //Changes for php5 compabibility |
||||
397 | $ret = $ret |
||||
398 | && runQuery(sprintf("ALTER TABLE %s MODIFY lastUpdated INT(11) NOT NULL DEFAULT '0'", $xoopsDB->prefix('xhelp_logmessages')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_logmessages'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_logmessages')); |
||||
399 | $ret = $ret |
||||
400 | && runQuery(sprintf("ALTER TABLE %s MODIFY department INT(11) NOT NULL DEFAULT '0'", $xoopsDB->prefix('xhelp_jstaffdept')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_jstaffdept'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_jstaffdept')); |
||||
401 | |||||
402 | // Create table for email template information |
||||
403 | $ret = $ret |
||||
404 | && runQuery( |
||||
405 | sprintf( |
||||
406 | "CREATE TABLE %s (notif_id INT(11) NOT NULL DEFAULT '0', |
||||
407 | staff_setting INT(11) NOT NULL DEFAULT '0', |
||||
408 | user_setting INT(11) NOT NULL DEFAULT '0', |
||||
409 | staff_options MEDIUMTEXT NOT NULL, |
||||
410 | PRIMARY KEY (notif_id) |
||||
411 | )ENGINE=MyISAM;", |
||||
412 | $xoopsDB->prefix('xhelp_notifications') |
||||
413 | ), |
||||
414 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_notifications'), |
||||
415 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_notifications') |
||||
416 | ); |
||||
417 | |||||
418 | // Add xhelp_status table |
||||
419 | $ret = $ret |
||||
420 | && runQuery( |
||||
421 | sprintf( |
||||
422 | "CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
423 | state INT(11) NOT NULL DEFAULT '0', |
||||
424 | description VARCHAR(50) NOT NULL DEFAULT '', |
||||
425 | PRIMARY KEY(id), |
||||
426 | KEY state (state) |
||||
427 | )ENGINE=MyISAM;", |
||||
428 | $xoopsDB->prefix('xhelp_status') |
||||
429 | ), |
||||
430 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_status'), |
||||
431 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_status') |
||||
432 | ); |
||||
433 | |||||
434 | // Give default statuses for upgrade |
||||
435 | /** @var \XoopsModules\Xhelp\StatusHandler $statusHandler */ |
||||
436 | $statusHandler = $helper->getHandler('Status'); |
||||
437 | $startStatuses = [_XHELP_STATUS0 => 1, _XHELP_STATUS1 => 1, _XHELP_STATUS2 => 2]; |
||||
438 | |||||
439 | $count = 1; |
||||
440 | set_time_limit(60); |
||||
441 | foreach ($startStatuses as $desc => $state) { |
||||
442 | /** @var \XoopsModules\Xhelp\Status $newStatus */ |
||||
443 | $newStatus = $statusHandler->create(); |
||||
444 | $newStatus->setVar('id', $count); |
||||
445 | $newStatus->setVar('description', $desc); |
||||
446 | $newStatus->setVar('state', $state); |
||||
447 | if ($statusHandler->insert($newStatus)) { |
||||
448 | echo '<li>' . sprintf(_AM_XHELP_MSG_ADD_STATUS, $desc) . '</li>'; |
||||
449 | } else { |
||||
450 | echo '<li>' . sprintf(_AM_XHELP_MSG_ADD_STATUS_ERR, $desc) . '</li>'; |
||||
451 | } |
||||
452 | ++$count; |
||||
453 | } |
||||
454 | |||||
455 | // Change old status values to new status values |
||||
456 | $oldStatuses = [2 => 3, 1 => 2, 0 => 1]; |
||||
457 | |||||
458 | foreach ($oldStatuses as $cStatus => $newStatus) { |
||||
459 | $criteria = new \Criteria('status', (string)$cStatus); |
||||
460 | $success = $ticketHandler->updateAll('status', $newStatus, $criteria); |
||||
461 | } |
||||
462 | if ($success) { |
||||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||||
463 | echo '<li>' . _AM_XHELP_MSG_CHANGED_STATUS . '</li>'; |
||||
464 | } else { |
||||
465 | echo '<li>' . _AM_XHELP_MSG_CHANGED_STATUS_ERR . '</li>'; |
||||
466 | } |
||||
467 | |||||
468 | // Add xhelp_ticket_submit_emails table |
||||
469 | $ret = $ret |
||||
470 | && runQuery( |
||||
471 | sprintf( |
||||
472 | "CREATE TABLE %s (ticketid INT(11) NOT NULL DEFAULT '0', |
||||
473 | uid INT(11) NOT NULL DEFAULT '0', |
||||
474 | email VARCHAR(100) NOT NULL DEFAULT '', |
||||
475 | suppress INT(11) NOT NULL DEFAULT '0', |
||||
476 | PRIMARY KEY(ticketid, email) |
||||
477 | )ENGINE=MyISAM;", |
||||
478 | $xoopsDB->prefix('xhelp_ticket_submit_emails') |
||||
479 | ), |
||||
480 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_ticket_submit_emails'), |
||||
481 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_ticket_submit_emails') |
||||
482 | ); |
||||
483 | |||||
484 | // Add records to xhelp_ticket_submit_emails for existing tickets |
||||
485 | $count = $ticketHandler->getCount(); |
||||
486 | $batchsize = 100; |
||||
487 | |||||
488 | $criteria = new \Criteria('', ''); |
||||
489 | $criteria->setLimit($batchsize); |
||||
490 | $i = 0; |
||||
491 | |||||
492 | while ($i <= $count) { |
||||
493 | set_time_limit(60); |
||||
494 | $criteria->setStart($i); |
||||
495 | $tickets = $ticketHandler->getObjects($criteria); |
||||
496 | |||||
497 | $all_users = []; |
||||
498 | foreach ($tickets as $ticket) { |
||||
499 | $all_users[$ticket->getVar('uid')] = $ticket->getVar('uid'); |
||||
500 | } |
||||
501 | |||||
502 | $criteria = new \Criteria('uid', '(' . implode(',', array_keys($all_users)) . ')', 'IN'); |
||||
503 | $users = $memberHandler->getUsers($criteria, true); |
||||
504 | |||||
505 | foreach ($users as $user) { |
||||
506 | $all_users[$user->getVar('uid')] = $user->getVar('email'); |
||||
507 | } |
||||
508 | unset($users); |
||||
509 | |||||
510 | foreach ($tickets as $ticket) { |
||||
511 | set_time_limit(60); |
||||
512 | $ticket_uid = $ticket->getVar('uid'); |
||||
513 | if (array_key_exists($ticket_uid, $all_users)) { |
||||
514 | $ticket_email = $all_users[$ticket_uid]; |
||||
515 | $success = $ticket->addSubmitter($ticket_email, $ticket_uid); |
||||
0 ignored issues
–
show
|
|||||
516 | } |
||||
517 | } |
||||
518 | unset($tickets); |
||||
519 | //increment |
||||
520 | $i += $batchsize; |
||||
521 | } |
||||
522 | |||||
523 | set_time_limit(60); |
||||
524 | // Update xhelp_roles Admin record with new value (2047) |
||||
525 | $criteria = new \Criteria('tasks', '511'); |
||||
526 | $adminRoles = $roleHandler->getObjects($criteria); |
||||
527 | |||||
528 | foreach ($adminRoles as $role) { |
||||
529 | $role->setVar('tasks', 2047); |
||||
530 | if ($roleHandler->insert($role)) { |
||||
531 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATE_ROLE, $role->getVar('name')) . '</li>'; |
||||
532 | } else { |
||||
533 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATE_ROLE_ERR, $role->getVar('name')) . '</li>'; |
||||
534 | } |
||||
535 | } |
||||
536 | |||||
537 | set_time_limit(60); |
||||
538 | $ret = $ret |
||||
539 | && runQuery( |
||||
540 | sprintf( |
||||
541 | 'ALTER TABLE %s ADD (active INT(11) NOT NULL DEFAULT 1, |
||||
542 | KEY ACTIVE (ACTIVE))', |
||||
543 | $xoopsDB->prefix('xhelp_department_mailbox') |
||||
544 | ), |
||||
545 | sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_department_mailbox'), |
||||
546 | sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_department_mailbox') |
||||
547 | ); |
||||
548 | |||||
549 | // Add xhelp_saved_searches table |
||||
550 | $ret = $ret |
||||
551 | && runQuery( |
||||
552 | sprintf( |
||||
553 | "CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
554 | uid INT(11) NOT NULL DEFAULT '0', |
||||
555 | name VARCHAR(50) NOT NULL DEFAULT '', |
||||
556 | search MEDIUMTEXT NOT NULL, |
||||
557 | pagenav_vars MEDIUMTEXT NOT NULL, |
||||
558 | PRIMARY KEY(id) |
||||
559 | )ENGINE=MyISAM;", |
||||
560 | $xoopsDB->prefix('xhelp_saved_searches') |
||||
561 | ), |
||||
562 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_saved_searches'), |
||||
563 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_saved_searches') |
||||
564 | ); |
||||
565 | |||||
566 | set_time_limit(60); |
||||
567 | $ret = $ret |
||||
568 | && runQuery( |
||||
569 | sprintf( |
||||
570 | "CREATE TABLE %s (fieldid INT(11) NOT NULL DEFAULT '0', |
||||
571 | deptid INT(11) NOT NULL DEFAULT '0', |
||||
572 | PRIMARY KEY (fieldid, deptid) |
||||
573 | )ENGINE=MyISAM;", |
||||
574 | $xoopsDB->prefix('xhelp_ticket_field_departments') |
||||
575 | ), |
||||
576 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_ticket_field_departments'), |
||||
577 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_ticket_field_departments') |
||||
578 | ); |
||||
579 | |||||
580 | $ret = $ret |
||||
581 | && runQuery( |
||||
582 | sprintf( |
||||
583 | "CREATE TABLE %s (ticketid INT(11) NOT NULL DEFAULT '0', |
||||
584 | PRIMARY KEY (ticketid) |
||||
585 | )ENGINE=MyISAM;", |
||||
586 | $xoopsDB->prefix('xhelp_ticket_values') |
||||
587 | ), |
||||
588 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_ticket_values'), |
||||
589 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_ticket_values') |
||||
590 | ); |
||||
591 | |||||
592 | set_time_limit(60); |
||||
593 | $ret = $ret |
||||
594 | && runQuery( |
||||
595 | sprintf( |
||||
596 | "CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
597 | NAME VARCHAR(64) NOT NULL DEFAULT '', |
||||
598 | description TINYTEXT NOT NULL, |
||||
599 | fieldname VARCHAR(64) NOT NULL DEFAULT '', |
||||
600 | controltype INT(11) NOT NULL DEFAULT '0', |
||||
601 | datatype VARCHAR(64) NOT NULL DEFAULT '', |
||||
602 | required TINYINT(1) NOT NULL DEFAULT '0', |
||||
603 | fieldlength INT(11) NOT NULL DEFAULT '0', |
||||
604 | weight INT(11) NOT NULL DEFAULT '0', |
||||
605 | fieldvalues MEDIUMTEXT NOT NULL, |
||||
606 | defaultvalue VARCHAR(100) NOT NULL DEFAULT '', |
||||
607 | VALIDATION MEDIUMTEXT NOT NULL, |
||||
608 | PRIMARY KEY (id), |
||||
609 | KEY weight (weight) |
||||
610 | )ENGINE=MyISAM;", |
||||
611 | $xoopsDB->prefix('xhelp_ticket_fields') |
||||
612 | ), |
||||
613 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_ticket_fields'), |
||||
614 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_ticket_fields') |
||||
615 | ); |
||||
616 | |||||
617 | set_time_limit(60); |
||||
618 | // Add notifications to new table |
||||
619 | set_time_limit(60); |
||||
620 | $hasNotifications = Xhelp\Utility::createNotifications(); |
||||
0 ignored issues
–
show
|
|||||
621 | |||||
622 | // Make all departments visible to all groups |
||||
623 | $hasDeptVisibility = xhelpCreateDepartmentVisibility(); |
||||
0 ignored issues
–
show
|
|||||
624 | |||||
625 | // Update staff permTimestamp |
||||
626 | $staffHandler->updateAll('permTimestamp', time()); |
||||
627 | |||||
628 | set_time_limit(60); |
||||
629 | //Update xhelp_tickets table |
||||
630 | set_time_limit(60); |
||||
631 | $ret = $ret |
||||
632 | && runQuery(sprintf("ALTER TABLE %s MODIFY SUBJECT VARCHAR(255) NOT NULL DEFAULT ''", $xoopsDB->prefix('xhelp_tickets')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_tickets'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_tickets')); |
||||
633 | |||||
634 | // no break |
||||
635 | case '0.75': |
||||
636 | set_time_limit(60); |
||||
637 | // Set default department |
||||
638 | // $xoopsModuleConfig = Xhelp\Utility::getModuleConfig(); |
||||
639 | if (null !== $helper->getConfig('xhelp_defaultDept') && 0 != $helper->getConfig('xhelp_defaultDept')) { |
||||
0 ignored issues
–
show
|
|||||
640 | $ret = Xhelp\Utility::setMeta('default_department', $helper->getConfig('xhelp_defaultDept')); |
||||
0 ignored issues
–
show
It seems like
$helper->getConfig('xhelp_defaultDept') can also be of type null ; however, parameter $value of XoopsModules\Xhelp\Utility::setMeta() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
641 | } else { |
||||
642 | /** @var \XoopsModules\Xhelp\DepartmentHandler $departmentHandler */ |
||||
643 | $departmentHandler = $helper->getHandler('Department'); |
||||
644 | $depts = $departmentHandler->getObjects(); |
||||
645 | $aDepts = []; |
||||
646 | foreach ($depts as $dpt) { |
||||
647 | $aDepts[] = $dpt->getVar('id'); |
||||
648 | } |
||||
649 | $ret = Xhelp\Utility::setMeta('default_department', $aDepts[0]); |
||||
650 | } |
||||
651 | |||||
652 | $qry = $xoopsDB->query(sprintf('ALTER TABLE %s DROP PRIMARY KEY', $xoopsDB->prefix('xhelp_ticket_submit_emails'))); |
||||
653 | $ret = $ret |
||||
654 | && runQuery(sprintf('ALTER TABLE %s ADD PRIMARY KEY(ticketid, uid, email)', $xoopsDB->prefix('xhelp_ticket_submit_emails')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_ticket_submit_emails'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_ticket_submit_emails')); |
||||
655 | |||||
656 | $ret = $ret |
||||
657 | && runQuery(sprintf("ALTER TABLE %s MODIFY department INT(11) NOT NULL DEFAULT '0'", $xoopsDB->prefix('xhelp_jstaffdept')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_jstaffdept'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_jstaffdept')); |
||||
658 | |||||
659 | echo '<li>' . _AM_XHELP_MSG_CHANGED_DEFAULT_DEPT . '</li>'; |
||||
660 | |||||
661 | // Add field to xhelp_saved_searches to determine if custom fields table is needed |
||||
662 | $ret = $ret |
||||
663 | && runQuery(sprintf("ALTER TABLE %s ADD (hasCustFields INT(11) NOT NULL DEFAULT '0')", $xoopsDB->prefix('xhelp_saved_searches')), sprintf(_AM_XHELP_MSG_MODIFYTABLE, 'xhelp_saved_searches'), sprintf(_AM_XHELP_MSG_MODIFYTABLE_ERR, 'xhelp_saved_searches')); |
||||
664 | |||||
665 | // Take existing saved searches and add 'query' field |
||||
666 | /** @var \XoopsModules\Xhelp\SavedSearchHandler $savedSearchHandler */ |
||||
667 | $savedSearchHandler = $helper->getHandler('SavedSearch'); |
||||
668 | $savedSearches = $savedSearchHandler->getObjects(); |
||||
669 | |||||
670 | foreach ($savedSearches as $savedSearch) { |
||||
671 | set_time_limit(60); |
||||
672 | $criteria = unserialize($savedSearch->getVar('search')); |
||||
673 | if (is_object($criteria)) { |
||||
674 | $savedSearch->setVar('query', $criteria->render()); |
||||
675 | |||||
676 | if ($savedSearchHandler->insert($savedSearch)) { |
||||
677 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATE_SEARCH, $savedSearch->getVar('id')) . '</li>'; |
||||
678 | } else { |
||||
679 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATE_SEARCH_ERR, $savedSearch->getVar('id')) . '</li>'; |
||||
680 | } |
||||
681 | } |
||||
682 | } |
||||
683 | unset($savedSearches); |
||||
684 | |||||
685 | // Add ticket list table |
||||
686 | set_time_limit(60); |
||||
687 | $ret = $ret |
||||
688 | && runQuery( |
||||
689 | sprintf( |
||||
690 | "CREATE TABLE %s (id INT(11) NOT NULL AUTO_INCREMENT, |
||||
691 | uid INT(11) NOT NULL DEFAULT '0', |
||||
692 | searchid INT(11) NOT NULL DEFAULT '0', |
||||
693 | weight INT(11) NOT NULL DEFAULT '0', |
||||
694 | PRIMARY KEY (id), |
||||
695 | KEY ticketList (uid, searchid) |
||||
696 | )ENGINE=MyISAM;", |
||||
697 | $xoopsDB->prefix('xhelp_ticket_lists') |
||||
698 | ), |
||||
699 | sprintf(_AM_XHELP_MSG_ADDTABLE, 'xhelp_ticket_lists'), |
||||
700 | sprintf(_AM_XHELP_MSG_ADDTABLE_ERR, 'xhelp_ticket_lists') |
||||
701 | ); |
||||
702 | |||||
703 | // Add global ticket lists for staff members |
||||
704 | Xhelp\Utility::createDefaultTicketLists(); |
||||
705 | |||||
706 | set_time_limit(60); |
||||
707 | // Update xhelp_roles Admin record with new value (4095) |
||||
708 | $criteria = new \Criteria('tasks', '2047'); |
||||
709 | $adminRoles = $roleHandler->getObjects($criteria); |
||||
710 | |||||
711 | foreach ($adminRoles as $role) { |
||||
712 | $role->setVar('tasks', 4095); |
||||
713 | if ($roleHandler->insert($role)) { |
||||
714 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATE_ROLE, $role->getVar('name')) . '</li>'; |
||||
715 | } else { |
||||
716 | echo '<li>' . sprintf(_AM_XHELP_MSG_UPDATE_ROLE_ERR, $role->getVar('name')) . '</li>'; |
||||
717 | } |
||||
718 | } |
||||
719 | |||||
720 | // no break |
||||
721 | case '0.77': |
||||
722 | // No schema changes for 0.78 |
||||
723 | |||||
724 | case '0.78': |
||||
725 | echo '</ul>'; |
||||
726 | break; |
||||
727 | default: |
||||
728 | throw new \RuntimeException('Unexpected value'); |
||||
729 | } |
||||
730 | |||||
731 | $newversion = round($xoopsModule->getVar('version') / 100, 2); |
||||
732 | //if successful, update xhelp_meta table with new ver |
||||
733 | if ($ret) { |
||||
734 | printf(_AM_XHELP_UPDATE_OK, $newversion); |
||||
735 | $ret = Xhelp\Utility::setMeta('version', (string)$newversion); |
||||
0 ignored issues
–
show
|
|||||
736 | } else { |
||||
737 | printf(_AM_XHELP_UPDATE_ERR, $newversion); |
||||
738 | } |
||||
739 | |||||
740 | require_once __DIR__ . '/admin_footer.php'; |
||||
741 | } |
||||
742 | |||||
743 | if ('upgradeDB' === $op) { |
||||
744 | echo "<script language='JavaScript' type='text/javascript'> |
||||
745 | window.onload=function() { |
||||
746 | var objWindow=window.open('about:blank', 'progress', ''); |
||||
747 | objWindow.close(); |
||||
748 | } |
||||
749 | </script>"; |
||||
750 | } |
||||
751 |