XoopsModules25x /
news
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 | * @copyright {@link https://xoops.org/ XOOPS Project} |
||||
| 14 | * @license {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later} |
||||
| 15 | * @author XOOPS Development Team |
||||
| 16 | */ |
||||
| 17 | |||||
| 18 | use Xmf\Request; |
||||
|
0 ignored issues
–
show
|
|||||
| 19 | use XoopsModules\News\{ |
||||
| 20 | Files, |
||||
| 21 | Helper, |
||||
| 22 | NewsStory, |
||||
| 23 | NewsTopic, |
||||
| 24 | Utility |
||||
| 25 | }; |
||||
| 26 | use XoopsModules\Tag\Helper as TagHelper; |
||||
| 27 | |||||
| 28 | if (!defined('XOOPS_ROOT_PATH')) { |
||||
| 29 | require_once \dirname(__DIR__, 2) . '/mainfile.php'; |
||||
| 30 | } |
||||
| 31 | require_once __DIR__ . '/header.php'; |
||||
| 32 | //require_once XOOPS_ROOT_PATH . '/modules/news/class/class.newsstory.php'; |
||||
| 33 | //require_once XOOPS_ROOT_PATH . '/modules/news/class/class.sfiles.php'; |
||||
| 34 | //require_once XOOPS_ROOT_PATH . '/modules/news/class/class.newstopic.php'; |
||||
| 35 | require_once XOOPS_ROOT_PATH . '/class/uploader.php'; |
||||
| 36 | require_once XOOPS_ROOT_PATH . '/header.php'; |
||||
| 37 | |||||
| 38 | require_once __DIR__ . '/include/common.php'; |
||||
| 39 | |||||
| 40 | |||||
| 41 | /** @var Helper $helper */ |
||||
| 42 | $helper = Helper::getInstance(); |
||||
| 43 | $helper->loadLanguage('admin'); |
||||
| 44 | |||||
| 45 | $myts = \MyTextSanitizer::getInstance(); |
||||
| 46 | $module_id = $xoopsModule->getVar('mid'); |
||||
| 47 | $storyid = 0; |
||||
| 48 | |||||
| 49 | if (is_object($xoopsUser)) { |
||||
| 50 | $groups = $xoopsUser->getGroups(); |
||||
| 51 | } else { |
||||
| 52 | $groups = XOOPS_GROUP_ANONYMOUS; |
||||
| 53 | } |
||||
| 54 | |||||
| 55 | /** @var \XoopsGroupPermHandler $grouppermHandler */ |
||||
| 56 | $grouppermHandler = xoops_getHandler('groupperm'); |
||||
| 57 | |||||
| 58 | if (Request::hasVar('topic_id', 'POST')) { |
||||
| 59 | $perm_itemid = Request::getInt('topic_id', 0, 'POST'); |
||||
| 60 | } else { |
||||
| 61 | $perm_itemid = 0; |
||||
| 62 | } |
||||
| 63 | //If no access |
||||
| 64 | if (!$grouppermHandler->checkRight('news_submit', $perm_itemid, $groups, $module_id)) { |
||||
| 65 | redirect_header(XOOPS_URL . '/modules/news/index.php', 3, _NOPERM); |
||||
| 66 | } |
||||
| 67 | $op = 'form'; |
||||
| 68 | |||||
| 69 | //If approve privileges |
||||
| 70 | $approveprivilege = 0; |
||||
| 71 | if (is_object($xoopsUser) && $grouppermHandler->checkRight('news_approve', $perm_itemid, $groups, $module_id)) { |
||||
| 72 | $approveprivilege = 1; |
||||
| 73 | } |
||||
| 74 | |||||
| 75 | if (Request::hasVar('preview', 'POST')) { |
||||
| 76 | $op = 'preview'; |
||||
| 77 | } elseif (Request::hasVar('post', 'POST')) { |
||||
| 78 | $op = 'post'; |
||||
| 79 | } elseif (Request::hasVar('op', 'GET') && Request::hasVar('storyid', 'GET')) { |
||||
| 80 | // Verify that the user can edit or delete an article |
||||
| 81 | if ('edit' === $_GET['op'] || 'delete' === $_GET['op']) { |
||||
| 82 | if (1 == $helper->getConfig('authoredit')) { |
||||
| 83 | $tmpstory = new NewsStory(Request::getInt('storyid', 0, 'GET')); |
||||
| 84 | if (is_object($xoopsUser) && $xoopsUser->getVar('uid') != $tmpstory->uid() && !Utility::isAdminGroup()) { |
||||
| 85 | redirect_header(XOOPS_URL . '/modules/news/index.php', 3, _NOPERM); |
||||
| 86 | } |
||||
| 87 | } elseif (!Utility::isAdminGroup()) { |
||||
| 88 | // Users can't edit their articles |
||||
| 89 | redirect_header(XOOPS_URL . '/modules/news/index.php', 3, _NOPERM); |
||||
| 90 | } |
||||
| 91 | } |
||||
| 92 | |||||
| 93 | if ($approveprivilege && 'edit' === $_GET['op']) { |
||||
| 94 | $op = 'edit'; |
||||
| 95 | $storyid = Request::getInt('storyid', 0, 'GET'); |
||||
| 96 | } elseif ($approveprivilege && 'delete' === $_GET['op']) { |
||||
| 97 | $op = 'delete'; |
||||
| 98 | $storyid = Request::getInt('storyid', 0, 'GET'); |
||||
| 99 | } elseif (Utility::getModuleOption('authoredit') && is_object($xoopsUser) && isset($_GET['storyid']) |
||||
| 100 | && ('edit' === $_GET['op'] |
||||
| 101 | || 'preview' === $_POST['op'] |
||||
| 102 | || 'post' === $_POST['op'])) { |
||||
| 103 | $storyid = 0; |
||||
| 104 | // $storyid = isset($_GET['storyid']) ? \Xmf\Request::getInt('storyid', 0, 'GET') : \Xmf\Request::getInt('storyid', 0, 'POST'); |
||||
| 105 | $storyid = Request::getInt('storyid', 0); |
||||
| 106 | if (!empty($storyid)) { |
||||
| 107 | $tmpstory = new NewsStory($storyid); |
||||
| 108 | if ($tmpstory->uid() == $xoopsUser->getVar('uid')) { |
||||
| 109 | $op = $_GET['op'] ?? $_POST['post']; |
||||
| 110 | unset($tmpstory); |
||||
| 111 | $approveprivilege = 1; |
||||
| 112 | } else { |
||||
| 113 | unset($tmpstory); |
||||
| 114 | if (!Utility::isAdminGroup()) { |
||||
| 115 | redirect_header(XOOPS_URL . '/modules/news/index.php', 3, _NOPERM); |
||||
| 116 | } else { |
||||
| 117 | $approveprivilege = 1; |
||||
| 118 | } |
||||
| 119 | } |
||||
| 120 | } |
||||
| 121 | } elseif (!Utility::isAdminGroup()) { |
||||
| 122 | unset($tmpstory); |
||||
| 123 | redirect_header(XOOPS_URL . '/modules/news/index.php', 3, _NOPERM); |
||||
| 124 | } else { |
||||
| 125 | $approveprivilege = 1; |
||||
| 126 | } |
||||
| 127 | } |
||||
| 128 | |||||
| 129 | switch ($op) { |
||||
| 130 | case 'edit': |
||||
| 131 | if (!$approveprivilege) { |
||||
| 132 | redirect_header(XOOPS_URL . '/modules/news/index.php', 0, _NOPERM); |
||||
| 133 | |||||
| 134 | break; |
||||
| 135 | } |
||||
| 136 | //if ($storyid==0 && isset($_POST['storyid'])) { |
||||
| 137 | //$storyid=(int)($_POST['storyid']); |
||||
| 138 | //} |
||||
| 139 | $story = new NewsStory($storyid); |
||||
| 140 | if (!$grouppermHandler->checkRight('news_view', $story->topicid(), $groups, $module_id)) { |
||||
| 141 | redirect_header(XOOPS_URL . '/modules/news/index.php', 0, _NOPERM); |
||||
| 142 | } |
||||
| 143 | echo "<table width='100%' border='0' cellspacing='1' class='outer'><tr><td class=\"odd\">"; |
||||
| 144 | echo '<h4>' . _AM_EDITARTICLE . '</h4>'; |
||||
| 145 | $title = $story->title('Edit'); |
||||
| 146 | $subtitle = $story->subtitle('Edit'); |
||||
| 147 | $hometext = $story->hometext('Edit'); |
||||
| 148 | $bodytext = $story->bodytext('Edit'); |
||||
| 149 | $nohtml = $story->nohtml(); |
||||
| 150 | $nosmiley = $story->nosmiley(); |
||||
| 151 | $description = $story->description(); |
||||
| 152 | $keywords = $story->keywords(); |
||||
| 153 | $ihome = $story->ihome(); |
||||
| 154 | $newsauthor = $story->uid(); |
||||
| 155 | $topicid = $story->topicid(); |
||||
| 156 | $notifypub = $story->notifypub(); |
||||
| 157 | $picture = $story->picture(); |
||||
| 158 | $pictureinfo = $story->pictureinfo; |
||||
| 159 | $approve = 0; |
||||
| 160 | $published = $story->published(); |
||||
| 161 | if (isset($published) && $published > 0) { |
||||
| 162 | $approve = 1; |
||||
| 163 | } elseif (1 == $helper->getConfig('moduleAdminApproveChecked') && (is_object($xoopsUser) && $xoopsUser->isAdmin($xoopsModule->getVar('mid')))) { |
||||
| 164 | $approve = 1; |
||||
| 165 | } |
||||
| 166 | if (0 != $story->published()) { |
||||
| 167 | $published = $story->published(); |
||||
| 168 | } |
||||
| 169 | if (0 != $story->expired()) { |
||||
| 170 | $expired = $story->expired(); |
||||
| 171 | } else { |
||||
| 172 | $expired = 0; |
||||
| 173 | } |
||||
| 174 | $type = $story->type(); |
||||
| 175 | $topicdisplay = $story->topicdisplay(); |
||||
| 176 | $topicalign = $story->topicalign(false); |
||||
| 177 | if (!Utility::isAdminGroup()) { |
||||
| 178 | require_once XOOPS_ROOT_PATH . '/modules/news/include/storyform.inc.php'; |
||||
| 179 | } else { |
||||
| 180 | require_once XOOPS_ROOT_PATH . '/modules/news/include/storyform.original.php'; |
||||
| 181 | } |
||||
| 182 | echo '</td></tr></table>'; |
||||
| 183 | break; |
||||
| 184 | case 'preview': |
||||
| 185 | $topic_id = Request::getInt('topic_id', 0, 'POST'); |
||||
| 186 | $xt = new NewsTopic($topic_id); |
||||
| 187 | if (Request::hasVar('storyid', 'GET')) { |
||||
| 188 | $storyid = Request::getInt('storyid', 0, 'GET'); |
||||
| 189 | } elseif (Request::hasVar('storyid', 'POST')) { |
||||
| 190 | $storyid = Request::getInt('storyid', 0, 'POST'); |
||||
| 191 | } else { |
||||
| 192 | $storyid = 0; |
||||
| 193 | } |
||||
| 194 | |||||
| 195 | if (!empty($storyid)) { |
||||
| 196 | $story = new NewsStory($storyid); |
||||
| 197 | $published = $story->published(); |
||||
| 198 | $expired = $story->expired(); |
||||
| 199 | } else { |
||||
| 200 | $story = new NewsStory(); |
||||
| 201 | $published = Request::getInt('publish_date', 0, 'POST'); |
||||
| 202 | if (!empty($published) && isset($_POST['autodate']) && (int)(1 == $_POST['autodate'])) { |
||||
| 203 | $published = strtotime($published['date']) + $published['time']; |
||||
| 204 | } else { |
||||
| 205 | $published = 0; |
||||
| 206 | } |
||||
| 207 | $expired = Request::getInt('expiry_date', 0, 'POST'); |
||||
| 208 | if (!empty($expired) && isset($_POST['autoexpdate']) && (int)(1 == $_POST['autoexpdate'])) { |
||||
| 209 | $expired = strtotime($expired['date']) + $expired['time']; |
||||
| 210 | } else { |
||||
| 211 | $expired = 0; |
||||
| 212 | } |
||||
| 213 | } |
||||
| 214 | $topicid = $topic_id; |
||||
| 215 | if (Request::hasVar('topicdisplay', 'POST')) { |
||||
| 216 | $topicdisplay = Request::getInt('topicdisplay', 0, 'POST'); |
||||
| 217 | } else { |
||||
| 218 | $topicdisplay = 1; |
||||
| 219 | } |
||||
| 220 | |||||
| 221 | $approve = Request::getInt('approve', 0, 'POST'); |
||||
| 222 | $topicalign = 'R'; |
||||
| 223 | if (Request::hasVar('topicalign', 'POST')) { |
||||
| 224 | $topicalign = $_POST['topicalign']; |
||||
| 225 | } |
||||
| 226 | $story->setTitle($_POST['title']); |
||||
| 227 | $story->setSubtitle($_POST['subtitle']); |
||||
| 228 | $story->setHometext($_POST['hometext']); |
||||
| 229 | if ($approveprivilege) { |
||||
| 230 | $story->setTopicdisplay($topicdisplay); |
||||
| 231 | $story->setTopicalign($topicalign); |
||||
| 232 | $story->setBodytext($_POST['bodytext']); |
||||
| 233 | if (Utility::getModuleOption('metadata')) { |
||||
| 234 | $story->setKeywords($_POST['keywords']); |
||||
| 235 | $story->setDescription($_POST['description']); |
||||
| 236 | $story->setIhome(Request::getInt('ihome', 0, 'POST')); |
||||
| 237 | } |
||||
| 238 | } else { |
||||
| 239 | $noname = Request::getInt('noname', 0, 'POST'); |
||||
| 240 | } |
||||
| 241 | |||||
| 242 | if ($approveprivilege || (is_object($xoopsUser) && $xoopsUser->isAdmin($xoopsModule->mid()))) { |
||||
| 243 | if (Request::hasVar('author', 'POST')) { |
||||
| 244 | $story->setUid(Request::getInt('author', 0, 'POST')); |
||||
| 245 | } |
||||
| 246 | } |
||||
| 247 | |||||
| 248 | $notifypub = Request::getInt('notifypub', 0, 'POST'); |
||||
| 249 | $nosmiley = Request::getInt('nosmiley', 0, 'POST'); |
||||
| 250 | if (isset($nosmiley) && (0 == $nosmiley || 1 == $nosmiley)) { |
||||
| 251 | $story->setNosmiley($nosmiley); |
||||
| 252 | } else { |
||||
| 253 | $nosmiley = 0; |
||||
| 254 | } |
||||
| 255 | if ($approveprivilege) { |
||||
| 256 | $nohtml = Request::getInt('nohtml', 0, 'POST'); |
||||
| 257 | $story->setNohtml($nohtml); |
||||
| 258 | } else { |
||||
| 259 | $story->setNohtml = 1; |
||||
|
0 ignored issues
–
show
|
|||||
| 260 | } |
||||
| 261 | |||||
| 262 | $title = $story->title('InForm'); |
||||
| 263 | $subtitle = $story->subtitle('InForm'); |
||||
| 264 | $hometext = $story->hometext('InForm'); |
||||
| 265 | if ($approveprivilege) { |
||||
| 266 | $bodytext = $story->bodytext('InForm'); |
||||
| 267 | $ihome = $story->ihome(); |
||||
| 268 | $description = $story->description('E'); |
||||
| 269 | $keywords = $story->keywords('E'); |
||||
| 270 | } |
||||
| 271 | $pictureinfo = $story->pictureinfo('InForm'); |
||||
| 272 | |||||
| 273 | //Display post preview |
||||
| 274 | $newsauthor = $story->uid(); |
||||
| 275 | $p_title = $story->title('Preview'); |
||||
| 276 | $p_hometext = $story->hometext('Preview'); |
||||
| 277 | if ($approveprivilege) { |
||||
| 278 | $p_bodytext = $story->bodytext('Preview'); |
||||
| 279 | $p_hometext .= '<br><br>' . $p_bodytext; |
||||
| 280 | } |
||||
| 281 | $topicalign2 = isset($story->topicalign) ? 'align="' . $story->topicalign() . '"' : ''; |
||||
| 282 | $p_hometext = (('' !== $xt->topic_imgurl()) && $topicdisplay) ? '<img src="assets/images/topics/' . $xt->topic_imgurl() . '" ' . $topicalign2 . ' alt="">' . $p_hometext : $p_hometext; |
||||
| 283 | themecenterposts($p_title, $p_hometext); |
||||
| 284 | |||||
| 285 | //Display post edit form |
||||
| 286 | $returnside = Request::getInt('returnside', 0, 'POST'); |
||||
| 287 | require_once XOOPS_ROOT_PATH . '/modules/news/include/storyform.inc.php'; |
||||
| 288 | break; |
||||
| 289 | case 'post': |
||||
| 290 | $nohtml_db = Request::getInt('nohtml', 1, 'POST'); |
||||
| 291 | if (is_object($xoopsUser)) { |
||||
| 292 | $uid = $xoopsUser->getVar('uid'); |
||||
| 293 | if ($approveprivilege) { |
||||
| 294 | $nohtml_db = empty($_POST['nohtml']) ? 0 : 1; |
||||
| 295 | } |
||||
| 296 | if (Request::hasVar('author', 'POST') && ($approveprivilege || $xoopsUser->isAdmin($xoopsModule->mid()))) { |
||||
| 297 | $uid = Request::getInt('author', 0, 'POST'); |
||||
| 298 | } |
||||
| 299 | } else { |
||||
| 300 | $uid = 0; |
||||
| 301 | } |
||||
| 302 | |||||
| 303 | if (Request::hasVar('storyid', 'GET')) { |
||||
| 304 | $storyid = Request::getInt('storyid', 0, 'GET'); |
||||
| 305 | } elseif (Request::hasVar('storyid', 'POST')) { |
||||
| 306 | $storyid = Request::getInt('storyid', 0, 'POST'); |
||||
| 307 | } else { |
||||
| 308 | $storyid = 0; |
||||
| 309 | } |
||||
| 310 | |||||
| 311 | if (empty($storyid)) { |
||||
| 312 | $story = new NewsStory(); |
||||
| 313 | $editmode = false; |
||||
| 314 | } else { |
||||
| 315 | $story = new NewsStory($storyid); |
||||
| 316 | $editmode = true; |
||||
| 317 | } |
||||
| 318 | $story->setUid($uid); |
||||
| 319 | $story->setTitle($_POST['title']); |
||||
| 320 | $story->setSubtitle($_POST['subtitle']); |
||||
| 321 | $story->setHometext($_POST['hometext']); |
||||
| 322 | $story->setTopicId(Request::getInt('topic_id', 0, 'POST')); |
||||
| 323 | $story->setHostname(xoops_getenv('REMOTE_ADDR')); |
||||
| 324 | $story->setNohtml($nohtml_db); |
||||
| 325 | $nosmiley = Request::getInt('nosmiley', 0, 'POST'); |
||||
| 326 | $story->setNosmiley($nosmiley); |
||||
| 327 | $notifypub = Request::getInt('notifypub', 0, 'POST'); |
||||
| 328 | $story->setNotifyPub($notifypub); |
||||
| 329 | $story->setType($_POST['type']); |
||||
| 330 | |||||
| 331 | if (!empty($_POST['autodate']) && $approveprivilege) { |
||||
| 332 | $publish_date = $_POST['publish_date']; |
||||
| 333 | $pubdate = strtotime($publish_date['date']) + $publish_date['time']; |
||||
| 334 | //$offset = $xoopsUser -> timezone() - $xoopsConfig['server_TZ']; |
||||
| 335 | //$pubdate = $pubdate - ( $offset * 3600 ); |
||||
| 336 | $story->setPublished($pubdate); |
||||
| 337 | } |
||||
| 338 | if (!empty($_POST['autoexpdate']) && $approveprivilege) { |
||||
| 339 | $expiry_date = $_POST['expiry_date']; |
||||
| 340 | $expiry_date = strtotime($expiry_date['date']) + $expiry_date['time']; |
||||
| 341 | $offset = $xoopsUser->timezone() - $xoopsConfig['server_TZ']; |
||||
| 342 | $expiry_date -= ($offset * 3600); |
||||
| 343 | $story->setExpired($expiry_date); |
||||
| 344 | } else { |
||||
| 345 | $story->setExpired(0); |
||||
| 346 | } |
||||
| 347 | |||||
| 348 | if ($approveprivilege) { |
||||
| 349 | if (Utility::getModuleOption('metadata')) { |
||||
| 350 | $story->setDescription($_POST['description']); |
||||
| 351 | $story->setKeywords($_POST['keywords']); |
||||
| 352 | } |
||||
| 353 | $story->setTopicdisplay($_POST['topicdisplay']); // Display Topic Image ? (Yes or No) |
||||
| 354 | $story->setTopicalign($_POST['topicalign']); // Topic Align, 'Right' or 'Left' |
||||
| 355 | $story->setIhome($_POST['ihome']); // Publish in home ? (Yes or No) |
||||
| 356 | if (Request::hasVar('bodytext', 'POST')) { |
||||
| 357 | $story->setBodytext($_POST['bodytext']); |
||||
| 358 | } else { |
||||
| 359 | $story->setBodytext(' '); |
||||
| 360 | } |
||||
| 361 | $approve = Request::getInt('approve', 0, 'POST'); |
||||
| 362 | |||||
| 363 | if (!$story->published() && $approve) { |
||||
| 364 | $story->setPublished(time()); |
||||
| 365 | } |
||||
| 366 | if (!$story->expired()) { |
||||
| 367 | $story->setExpired(0); |
||||
| 368 | } |
||||
| 369 | |||||
| 370 | if (!$approve) { |
||||
| 371 | $story->setPublished(0); |
||||
| 372 | } |
||||
| 373 | } elseif (1 == $helper->getConfig('autoapprove')) { |
||||
| 374 | if (empty($storyid)) { |
||||
| 375 | $approve = 1; |
||||
| 376 | } else { |
||||
| 377 | $approve = Request::getInt('approve', 0, 'POST'); |
||||
| 378 | } |
||||
| 379 | if ($approve) { |
||||
| 380 | $story->setPublished(time()); |
||||
| 381 | } else { |
||||
| 382 | $story->setPublished(0); |
||||
| 383 | } |
||||
| 384 | $story->setExpired(0); |
||||
| 385 | $story->setTopicalign('R'); |
||||
| 386 | } else { |
||||
| 387 | $approve = 0; |
||||
| 388 | } |
||||
| 389 | $story->setApproved($approve); |
||||
| 390 | |||||
| 391 | if ($approve) { |
||||
| 392 | Utility::updateCache(); |
||||
| 393 | } |
||||
| 394 | |||||
| 395 | // Increment author's posts count (only if it's a new article) |
||||
| 396 | // First case, it's not an anonyous, the story is approved and it's a new story |
||||
| 397 | if ($uid && $approve && empty($storyid)) { |
||||
| 398 | $tmpuser = new xoopsUser($uid); |
||||
| 399 | /** @var \XoopsMemberHandler $memberHandler */ |
||||
| 400 | $memberHandler = xoops_getHandler('member'); |
||||
| 401 | $memberHandler->updateUserByField($tmpuser, 'posts', $tmpuser->getVar('posts') + 1); |
||||
| 402 | } |
||||
| 403 | |||||
| 404 | // Second case, it's not an anonymous, the story is NOT approved and it's NOT a new story (typical when someone is approving a submited story) |
||||
| 405 | if (is_object($xoopsUser) && $approve && !empty($storyid)) { |
||||
| 406 | $storytemp = new NewsStory($storyid); |
||||
| 407 | if (!$storytemp->published() && $storytemp->uid() > 0) { // the article has been submited but not approved |
||||
| 408 | $tmpuser = new xoopsUser($storytemp->uid()); |
||||
| 409 | /** @var \XoopsMemberHandler $memberHandler */ |
||||
| 410 | $memberHandler = xoops_getHandler('member'); |
||||
| 411 | $memberHandler->updateUserByField($tmpuser, 'posts', $tmpuser->getVar('posts') + 1); |
||||
| 412 | } |
||||
| 413 | unset($storytemp); |
||||
| 414 | } |
||||
| 415 | |||||
| 416 | $allowupload = false; |
||||
| 417 | switch ($helper->getConfig('uploadgroups')) { |
||||
| 418 | case 1: //Submitters and Approvers |
||||
| 419 | $allowupload = true; |
||||
| 420 | break; |
||||
| 421 | case 2: //Approvers only |
||||
| 422 | $allowupload = $approveprivilege; |
||||
| 423 | break; |
||||
| 424 | case 3: //Upload Disabled |
||||
| 425 | $allowupload = false; |
||||
| 426 | break; |
||||
| 427 | } |
||||
| 428 | |||||
| 429 | if ($allowupload && isset($_POST['deleteimage']) && 1 == Request::getInt('deleteimage', 0, 'POST')) { |
||||
| 430 | $currentPicture = $story->picture(); |
||||
| 431 | if ('' !== xoops_trim($currentPicture)) { |
||||
| 432 | $currentPicture = XOOPS_ROOT_PATH . '/uploads/news/image/' . xoops_trim($story->picture()); |
||||
| 433 | if (is_file($currentPicture) && file_exists($currentPicture)) { |
||||
| 434 | if (!unlink($currentPicture)) { |
||||
| 435 | trigger_error('Error, impossible to delete the picture attached to this article'); |
||||
| 436 | } |
||||
| 437 | } |
||||
| 438 | } |
||||
| 439 | $story->setPicture(''); |
||||
| 440 | $story->setPictureinfo(''); |
||||
| 441 | } |
||||
| 442 | |||||
| 443 | if ($allowupload) { // L'image |
||||
| 444 | if (Request::hasVar('xoops_upload_file', 'POST')) { |
||||
| 445 | $fldname = $_FILES[$_POST['xoops_upload_file'][1]]; |
||||
| 446 | $fldname = $fldname['name']; |
||||
| 447 | if (xoops_trim('' !== $fldname)) { |
||||
| 448 | $sfiles = new Files(); |
||||
| 449 | $destname = $sfiles->createUploadName(XOOPS_ROOT_PATH . '/uploads/news/image', $fldname); |
||||
| 450 | $permittedtypes = ['image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png', 'image/png']; |
||||
| 451 | $uploader = new \XoopsMediaUploader(XOOPS_ROOT_PATH . '/uploads/news/image', $permittedtypes, $helper->getConfig('maxuploadsize')); |
||||
| 452 | $uploader->setTargetFileName($destname); |
||||
| 453 | if ($uploader->fetchMedia($_POST['xoops_upload_file'][1])) { |
||||
| 454 | if ($uploader->upload()) { |
||||
| 455 | $fullPictureName = XOOPS_ROOT_PATH . '/uploads/news/image/' . basename($destname); |
||||
| 456 | $newName = XOOPS_ROOT_PATH . '/uploads/news/image/redim_' . basename($destname); |
||||
| 457 | Utility::resizePicture($fullPictureName, $newName, $helper->getConfig('maxwidth'), $helper->getConfig('maxheight')); |
||||
| 458 | if (file_exists($newName)) { |
||||
| 459 | @unlink($fullPictureName); |
||||
|
0 ignored issues
–
show
It seems like you do not handle an error condition for
unlink(). This can introduce security issues, and is generally not recommended.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
If you suppress an error, we recommend checking for the error condition explicitly: // For example instead of
@mkdir($dir);
// Better use
if (@mkdir($dir) === false) {
throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
|
|||||
| 460 | rename($newName, $fullPictureName); |
||||
| 461 | } |
||||
| 462 | $story->setPicture(basename($destname)); |
||||
| 463 | } else { |
||||
| 464 | echo _AM_UPLOAD_ERROR . ' ' . $uploader->getErrors(); |
||||
| 465 | } |
||||
| 466 | } else { |
||||
| 467 | echo $uploader->getErrors(); |
||||
| 468 | } |
||||
| 469 | } |
||||
| 470 | $story->setPictureinfo($_POST['pictureinfo']); |
||||
| 471 | } |
||||
| 472 | } |
||||
| 473 | $destname = ''; |
||||
| 474 | |||||
| 475 | $result = $story->store(); |
||||
| 476 | if ($result) { |
||||
| 477 | $helper = Helper::getInstance(); |
||||
| 478 | if (1 == $helper->getConfig('tags') && \class_exists(\XoopsModules\Tag\TagHandler::class) && xoops_isActiveModule('tag')) { |
||||
| 479 | /** @var \XoopsModules\Tag\TagHandler $tagHandler */ |
||||
| 480 | $tagHandler = \XoopsModules\Tag\Helper::getInstance()->getHandler('Tag'); |
||||
| 481 | $tagHandler->updateByItem($_POST['item_tag'], $story->storyid(), $helper->getDirname(), 0); |
||||
| 482 | } |
||||
| 483 | |||||
| 484 | if (!$editmode) { |
||||
| 485 | // Notification |
||||
| 486 | // TODO: modify so that in case of pre-publication, the notification is not made |
||||
| 487 | /** @var \XoopsNotificationHandler $notificationHandler */ |
||||
| 488 | $notificationHandler = xoops_getHandler('notification'); |
||||
| 489 | $tags = []; |
||||
| 490 | $tags['STORY_NAME'] = $story->title(); |
||||
| 491 | $tags['STORY_URL'] = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/article.php?storyid=' . $story->storyid(); |
||||
| 492 | // If notify checkbox is set, add subscription for approve |
||||
| 493 | if ($notifypub && $approve) { |
||||
| 494 | require_once XOOPS_ROOT_PATH . '/include/notification_constants.php'; |
||||
| 495 | $notificationHandler->subscribe('story', $story->storyid(), 'approve', XOOPS_NOTIFICATION_MODE_SENDONCETHENDELETE, $xoopsModule->getVar('mid'), $story->uid()); |
||||
| 496 | } |
||||
| 497 | |||||
| 498 | if (1 == $approve) { |
||||
| 499 | $notificationHandler->triggerEvent('global', 0, 'new_story', $tags); |
||||
| 500 | $notificationHandler->triggerEvent('story', $story->storyid(), 'approve', $tags); |
||||
| 501 | // Added by Lankford on 2007/3/23 |
||||
| 502 | $notificationHandler->triggerEvent('category', $story->topicid(), 'new_story', $tags); |
||||
| 503 | } else { |
||||
| 504 | $tags['WAITINGSTORIES_URL'] = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/admin/index.php?op=newarticle'; |
||||
| 505 | $notificationHandler->triggerEvent('global', 0, 'story_submit', $tags); |
||||
| 506 | } |
||||
| 507 | } |
||||
| 508 | |||||
| 509 | if ($allowupload) { |
||||
| 510 | // Manage upload(s) |
||||
| 511 | if (Request::hasVar('delupload', 'POST') && count($_POST['delupload']) > 0) { |
||||
| 512 | foreach ($_POST['delupload'] as $onefile) { |
||||
| 513 | $sfiles = new Files($onefile); |
||||
| 514 | $sfiles->delete(); |
||||
| 515 | } |
||||
| 516 | } |
||||
| 517 | |||||
| 518 | if (Request::hasVar('xoops_upload_file', 'POST')) { |
||||
| 519 | $fldname = $_FILES[$_POST['xoops_upload_file'][0]]; |
||||
| 520 | $fldname = $fldname['name']; |
||||
| 521 | if (xoops_trim('' !== $fldname)) { |
||||
| 522 | $sfiles = new Files(); |
||||
| 523 | $destname = $sfiles->createUploadName(XOOPS_UPLOAD_PATH, $fldname); |
||||
| 524 | /** |
||||
| 525 | * You can attach files to your news |
||||
| 526 | */ |
||||
| 527 | $permittedtypes = explode("\n", str_replace("\r", '', Utility::getModuleOption('mimetypes'))); |
||||
| 528 | array_walk($permittedtypes, '\trim'); |
||||
| 529 | $uploader = new \XoopsMediaUploader(XOOPS_UPLOAD_PATH, $permittedtypes, $helper->getConfig('maxuploadsize')); |
||||
| 530 | $uploader->setTargetFileName($destname); |
||||
| 531 | if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) { |
||||
| 532 | if ($uploader->upload()) { |
||||
| 533 | $sfiles->setFileRealName($uploader->getMediaName()); |
||||
| 534 | $sfiles->setStoryid($story->storyid()); |
||||
| 535 | $sfiles->setMimetype($sfiles->giveMimetype(XOOPS_UPLOAD_PATH . '/' . $uploader->getMediaName())); |
||||
| 536 | $sfiles->setDownloadname($destname); |
||||
| 537 | if (!$sfiles->store()) { |
||||
| 538 | echo _AM_UPLOAD_DBERROR_SAVE; |
||||
| 539 | } |
||||
| 540 | } else { |
||||
| 541 | echo _AM_UPLOAD_ERROR . ' ' . $uploader->getErrors(); |
||||
| 542 | } |
||||
| 543 | } else { |
||||
| 544 | echo $uploader->getErrors(); |
||||
| 545 | } |
||||
| 546 | } |
||||
| 547 | } |
||||
| 548 | } |
||||
| 549 | } else { |
||||
| 550 | echo _ERRORS; |
||||
| 551 | } |
||||
| 552 | $returnside = Request::getInt('returnside', 0, 'POST'); |
||||
| 553 | if (!$returnside) { |
||||
| 554 | redirect_header(XOOPS_URL . '/modules/news/index.php', 2, _NW_THANKS); |
||||
| 555 | } else { |
||||
| 556 | redirect_header(XOOPS_URL . '/modules/news/admin/index.php?op=newarticle', 2, _NW_THANKS); |
||||
| 557 | } |
||||
| 558 | break; |
||||
| 559 | case 'form': |
||||
| 560 | $xt = new NewsTopic(); |
||||
| 561 | $title = ''; |
||||
| 562 | $subtitle = ''; |
||||
| 563 | $hometext = ''; |
||||
| 564 | $noname = 0; |
||||
| 565 | $nohtml = 0; |
||||
| 566 | $nosmiley = 0; |
||||
| 567 | $notifypub = 1; |
||||
| 568 | $topicid = 0; |
||||
| 569 | if ($approveprivilege) { |
||||
| 570 | $description = ''; |
||||
| 571 | $keywords = ''; |
||||
| 572 | $topicdisplay = 0; |
||||
| 573 | $topicalign = 'R'; |
||||
| 574 | $ihome = 0; |
||||
| 575 | $bodytext = ''; |
||||
| 576 | $approve = 0; |
||||
| 577 | $autodate = ''; |
||||
| 578 | $expired = 0; |
||||
| 579 | $published = 0; |
||||
| 580 | } |
||||
| 581 | if (1 == $helper->getConfig('autoapprove')) { |
||||
| 582 | $approve = 1; |
||||
| 583 | } elseif (1 == $helper->getConfig('moduleAdminApproveChecked') && (is_object($xoopsUser) && $xoopsUser->isAdmin($xoopsModule->getVar('mid')))) { |
||||
| 584 | $approve = 1; |
||||
| 585 | } |
||||
| 586 | require_once XOOPS_ROOT_PATH . '/modules/news/include/storyform.inc.php'; |
||||
| 587 | break; |
||||
| 588 | } |
||||
| 589 | require_once XOOPS_ROOT_PATH . '/footer.php'; |
||||
| 590 |
Let?s assume that you have a directory layout like this:
. |-- OtherDir | |-- Bar.php | `-- Foo.php `-- SomeDir `-- Foo.phpand let?s assume the following content of
Bar.php:If both files
OtherDir/Foo.phpandSomeDir/Foo.phpare loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.phpHowever, as
OtherDir/Foo.phpdoes not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: