mambax7 /
newbb5
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 |
||||
| 2 | /** |
||||
| 3 | * NewBB 5.0x, the forum module for XOOPS project |
||||
| 4 | * |
||||
| 5 | * @copyright XOOPS Project (https://xoops.org) |
||||
| 6 | * @license GNU GPL 2 or later (https://www.gnu.org/licenses/gpl-2.0.html) |
||||
| 7 | * @author Taiwen Jiang (phppp or D.J.) <[email protected]> |
||||
| 8 | * @since 4.00 |
||||
| 9 | * @package module::newbb |
||||
| 10 | */ |
||||
| 11 | |||||
| 12 | use Xmf\Request; |
||||
| 13 | |||||
| 14 | require_once __DIR__ . '/header.php'; |
||||
| 15 | |||||
| 16 | global $xoTheme, $xoopsTpl; |
||||
| 17 | $GLOBALS['xoopsOption']['template_main'] = 'newbb_moderate.tpl'; |
||||
| 18 | require_once $GLOBALS['xoops']->path('header.php'); |
||||
| 19 | |||||
| 20 | $forum_userid = Request::getInt('uid', 0); |
||||
| 21 | $forum_id = Request::getInt('forum', 0); |
||||
| 22 | $isAdmin = newbbIsAdmin($forum_id); |
||||
| 23 | if (!$isAdmin) { |
||||
| 24 | redirect_header(XOOPS_URL . '/index.php', 2, _MD_NEWBB_NORIGHTTOACCESS); |
||||
| 25 | } |
||||
| 26 | $is_administrator = $GLOBALS['xoopsUserIsAdmin']; |
||||
| 27 | ///** @var Newbb\ModerateHandler $moderateHandler */ |
||||
| 28 | //$moderateHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Moderate'); |
||||
| 29 | |||||
| 30 | if (Request::hasVar('submit', 'POST') && Request::getInt('expire', 0, 'POST')) { |
||||
| 31 | $ipWithMask = ''; |
||||
| 32 | if (0 == $forum_userid) { |
||||
| 33 | $ipWithMask = Request::getString('ip', null, 'POST'); |
||||
| 34 | $mask = ''; |
||||
| 35 | $ipParts = explode('/', $ipWithMask); |
||||
| 36 | $ip = new \Xmf\IPAddress($ipParts[0]); |
||||
| 37 | if (false === $ip->asReadable()) { |
||||
|
0 ignored issues
–
show
introduced
by
Loading history...
|
|||||
| 38 | $ipWithMask = ''; |
||||
| 39 | } else { |
||||
| 40 | $ipWithMask = $ip->asReadable(); |
||||
| 41 | $mask = empty($ipParts[1]) ? 0 : (int)$ipParts[1]; |
||||
| 42 | $mask = ($mask > ((4 === $ip->ipVersion()) ? 32 : 128) || $mask < 8) ? '' : $mask; |
||||
| 43 | $ipWithMask .= empty($mask) ? '' : '/' . $mask; |
||||
| 44 | } |
||||
| 45 | } |
||||
| 46 | |||||
| 47 | $mod_end = time() + Request::getInt('expire', 0, 'POST') * 3600 * 24; |
||||
| 48 | $mod_desc = Request::getString('desc', '', 'POST'); |
||||
| 49 | |||||
| 50 | $moderateObject = $moderateHandler->create(); |
||||
| 51 | $moderateObject->setVar('uid', $forum_userid); |
||||
| 52 | $moderateObject->setVar('ip', $ipWithMask); |
||||
| 53 | $moderateObject->setVar('forum_id', $forum_id); |
||||
| 54 | $moderateObject->setVar('mod_start', time()); |
||||
| 55 | $moderateObject->setVar('mod_end', $mod_end); |
||||
| 56 | $moderateObject->setVar('mod_desc', $mod_desc); |
||||
| 57 | $res = $moderateHandler->insert($moderateObject); |
||||
| 58 | |||||
| 59 | redirect_header("moderate.php?forum={$forum_id}", 2, _MD_NEWBB_DBUPDATED); |
||||
| 60 | } elseif (Request::hasVar('del')) { |
||||
| 61 | $moderateObject = $moderateHandler->get(Request::getInt('del', 0, 'GET')); |
||||
| 62 | if ($is_administrator || $moderateObject->getVar('forum_id') == $forum_id) { |
||||
| 63 | $moderateHandler->delete($moderateObject, true); |
||||
| 64 | redirect_header("moderate.php?forum={$forum_id}", 2, _MD_NEWBB_DBUPDATED); |
||||
| 65 | } |
||||
| 66 | } |
||||
| 67 | |||||
| 68 | $start = Request::getInt('start', 0, 'GET'); |
||||
| 69 | $sortname = Request::getString('sort', '', 'GET'); |
||||
| 70 | |||||
| 71 | switch ($sortname) { |
||||
| 72 | case 'uid': |
||||
| 73 | $sort = 'uid ASC, ip'; |
||||
| 74 | $order = 'ASC'; |
||||
| 75 | break; |
||||
| 76 | case 'start': |
||||
| 77 | $sort = 'mod_start'; |
||||
| 78 | $order = 'ASC'; |
||||
| 79 | break; |
||||
| 80 | case 'expire': |
||||
| 81 | $sort = 'mod_end'; |
||||
| 82 | $order = 'DESC'; |
||||
| 83 | break; |
||||
| 84 | default: |
||||
| 85 | $sort = 'forum_id ASC, uid ASC, ip'; |
||||
| 86 | $order = 'ASC'; |
||||
| 87 | break; |
||||
| 88 | } |
||||
| 89 | // show all bans for module admin - for moderator just show its forum_id bans |
||||
| 90 | $criteria = new \CriteriaCompo(); |
||||
| 91 | if (!$is_administrator) { |
||||
| 92 | $criteria->add(new \Criteria('forum_id', $forum_id, '=')); |
||||
| 93 | } |
||||
| 94 | $criteria->setLimit($GLOBALS['xoopsModuleConfig']['topics_per_page']); |
||||
| 95 | $criteria->setStart($start); |
||||
| 96 | $criteria->setSort($sort); |
||||
| 97 | $criteria->setOrder($order); |
||||
| 98 | $moderateObjects = $moderateHandler->getObjects($criteria); |
||||
| 99 | $moderate_count = $moderateHandler->getCount($criteria); |
||||
| 100 | |||||
| 101 | $url = 'moderate.php'; |
||||
| 102 | if ($forum_id) { |
||||
| 103 | $url .= '?forum=' . $forum_id; |
||||
| 104 | } |
||||
| 105 | $xoopsTpl->assign('moderate_url', $url); |
||||
| 106 | |||||
| 107 | if (!empty($moderate_count)) { |
||||
| 108 | $_users = []; |
||||
| 109 | foreach (array_keys($moderateObjects) as $id) { |
||||
| 110 | $_users[$moderateObjects[$id]->getVar('uid')] = 1; |
||||
| 111 | } |
||||
| 112 | $users = newbbGetUnameFromIds(array_keys($_users), $GLOBALS['xoopsModuleConfig']['show_realname'], true); |
||||
| 113 | |||||
| 114 | $columnHeaders ['uid'] = [ |
||||
| 115 | 'url' => 'moderate.php?forum=' . $forum_id . '&start=' . $start . '&sort=uid', |
||||
| 116 | 'header' => _MD_NEWBB_SUSPEND_UID, |
||||
| 117 | 'title' => _MD_NEWBB_SUSPEND_UID, |
||||
| 118 | ]; |
||||
| 119 | $columnHeaders ['start'] = [ |
||||
| 120 | 'url' => 'moderate.php?forum=' . $forum_id . '&start=' . $start . '&sort=start', |
||||
| 121 | 'header' => _MD_NEWBB_SUSPEND_START, |
||||
| 122 | 'title' => _MD_NEWBB_SUSPEND_START, |
||||
| 123 | ]; |
||||
| 124 | $columnHeaders['expire'] = [ |
||||
| 125 | 'url' => 'moderate.php?forum=' . $forum_id . '&start=' . $start . '&sort=expire', |
||||
| 126 | 'header' => _MD_NEWBB_SUSPEND_EXPIRE, |
||||
| 127 | 'title' => _MD_NEWBB_SUSPEND_EXPIRE, |
||||
| 128 | ]; |
||||
| 129 | $columnHeaders['forum'] = [ |
||||
| 130 | 'url' => 'moderate.php?forum=' . $forum_id . '&start=' . $start . '&sort=forum', |
||||
| 131 | 'header' => _MD_NEWBB_SUSPEND_SCOPE, |
||||
| 132 | 'title' => _MD_NEWBB_SUSPEND_SCOPE, |
||||
| 133 | ]; |
||||
| 134 | $columnHeaders['desc'] = [ |
||||
| 135 | 'url' => false, |
||||
| 136 | 'header' => _MD_NEWBB_SUSPEND_DESC, |
||||
| 137 | 'title' => _MD_NEWBB_SUSPEND_DESC, |
||||
| 138 | ]; |
||||
| 139 | $columnHeaders['options'] = [ |
||||
| 140 | 'url' => false, |
||||
| 141 | 'header' => _DELETE, |
||||
| 142 | 'title' => _DELETE, |
||||
| 143 | ]; |
||||
| 144 | $xoopsTpl->assign('columnHeaders', $columnHeaders); |
||||
| 145 | |||||
| 146 | // /** @var Newbb\ForumHandler $forumHandler */ |
||||
| 147 | // $forumHandler = \XoopsModules\Newbb\Helper::getInstance()->getHandler('Forum'); |
||||
| 148 | $forum_list = $forumHandler->getAll(null, ['forum_name'], false); |
||||
| 149 | |||||
| 150 | $columnRows = []; |
||||
| 151 | foreach (array_keys($moderateObjects) as $id) { |
||||
| 152 | // for anon, show ip instead |
||||
| 153 | $row['uid'] = ($moderateObjects[$id]->getVar('uid') ? (isset($users[$moderateObjects[$id]->getVar('uid')]) ? $users[$moderateObjects[$id]->getVar('uid')] : $moderateObjects[$id]->getVar('uid')) : $moderateObjects[$id]->getVar('ip')); |
||||
| 154 | $row['start'] = formatTimestamp($moderateObjects[$id]->getVar('mod_start')); |
||||
| 155 | $row['expire'] = formatTimestamp($moderateObjects[$id]->getVar('mod_end')); |
||||
| 156 | $row['forum'] = ($moderateObjects[$id]->getVar('forum_id') ? $forum_list[$moderateObjects[$id]->getVar('forum_id')]['forum_name'] : _ALL); |
||||
| 157 | $row['desc'] = ($moderateObjects[$id]->getVar('mod_desc') ?: _NONE); |
||||
| 158 | $row['options'] = (($is_administrator |
||||
| 159 | || $moderateObjects[$id]->getVar('forum_id') == $forum_id) ? '<a href="moderate.php?forum=' . $forum_id . '&del=' . $moderateObjects[$id]->getVar('mod_id') . '">' . _DELETE . '</a>' : ''); |
||||
| 160 | $columnRows[] = $row; |
||||
| 161 | } |
||||
| 162 | $xoopsTpl->assign('columnRows', $columnRows); |
||||
| 163 | |||||
| 164 | if ($moderate_count > $GLOBALS['xoopsModuleConfig']['topics_per_page']) { |
||||
| 165 | require_once $GLOBALS['xoops']->path('class/pagenav.php'); |
||||
| 166 | $nav = new \XoopsPageNav($moderate_count, $GLOBALS['xoopsModuleConfig']['topics_per_page'], $start, 'start', 'forum=' . $forum_id . '&sort=' . $sortname); |
||||
| 167 | //if (isset($GLOBALS['xoopsModuleConfig']['do_rewrite'])) { |
||||
| 168 | // $nav->url = formatURL(Request::getString('SERVER_NAME', '', 'SERVER')) . ' /' . $nav->url; |
||||
| 169 | //} |
||||
| 170 | $xoopsTpl->assign('moderate_page_nav', $nav->renderNav()); |
||||
| 171 | } |
||||
| 172 | } |
||||
| 173 | |||||
| 174 | require_once $GLOBALS['xoops']->path('class/xoopsformloader.php'); |
||||
| 175 | $forum_form = new \XoopsThemeForm(_ADD, 'suspend_form', 'moderate.php', 'post', true); |
||||
| 176 | $forum_form->addElement(new \XoopsFormSelectUser(_MD_NEWBB_SUSPEND_UID, 'uid', true, $forum_userid, 1, false)); |
||||
| 177 | $forum_form->addElement(new \XoopsFormText(_MD_NEWBB_SUSPEND_IP, 'ip', 50, 50)); |
||||
| 178 | $forum_form->addElement(new \XoopsFormText(_MD_NEWBB_SUSPEND_DURATION, 'expire', 20, 25, '5'), true); |
||||
| 179 | $forum_form->addElement(new \XoopsFormText(_MD_NEWBB_SUSPEND_DESC, 'desc', 50, 255)); |
||||
| 180 | require_once __DIR__ . '/include/functions.forum.php'; |
||||
| 181 | if (newbbIsAdmin()) { |
||||
| 182 | $forumSel = '<select name="forum">'; // if user doesn't select, default is "0" all forums |
||||
| 183 | $forumSel .= '<option value="0"'; |
||||
| 184 | if (0 == $forum_id) { |
||||
| 185 | $forumSel .= ' selected'; |
||||
| 186 | } |
||||
| 187 | $forumSel .= '>' . _ALL . '</option>'; |
||||
| 188 | $forumSel .= newbbForumSelectBox($forum_id, 'access', false); //$accessForums, $permission = "access", $delimitorCategory = true |
||||
|
0 ignored issues
–
show
$forum_id of type integer is incompatible with the type array|null expected by parameter $value of newbbForumSelectBox().
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 189 | $forumSel .= '</select>'; |
||||
| 190 | $forumEle = new \XoopsFormLabel(_MD_NEWBB_SELFORUM, $forumSel); |
||||
| 191 | $forumEle->customValidationCode[] = 'if (document.suspend.forum.value < 0) {return false;} '; |
||||
| 192 | $forum_form->addElement($forumEle); |
||||
| 193 | } else { |
||||
| 194 | $forum_form->addElement(new \XoopsFormHidden('forum', $forum_id)); |
||||
| 195 | } |
||||
| 196 | $forum_form->addElement(new \XoopsFormButton('', 'submit', _SUBMIT, 'submit')); |
||||
| 197 | $forum_form->assign($xoopsTpl); |
||||
| 198 | |||||
| 199 | require_once __DIR__ . '/footer.php'; |
||||
| 200 | require_once $GLOBALS['xoops']->path('footer.php'); |
||||
| 201 |