chamilo /
chamilo-lms
| 1 | <?php |
||||||
| 2 | |||||||
| 3 | /* For licensing terms, see /license.txt */ |
||||||
| 4 | |||||||
| 5 | use Chamilo\CourseBundle\Entity\CForumPost; |
||||||
| 6 | use ChamiloSession as Session; |
||||||
| 7 | |||||||
| 8 | /** |
||||||
| 9 | * @author Julio Montoya <[email protected]> UI Improvements + lots of bugfixes |
||||||
| 10 | */ |
||||||
| 11 | require_once __DIR__.'/../inc/global.inc.php'; |
||||||
| 12 | $current_course_tool = TOOL_FORUM; |
||||||
| 13 | |||||||
| 14 | $this_section = SECTION_COURSES; |
||||||
| 15 | |||||||
| 16 | // Notification for unauthorized people. |
||||||
| 17 | api_protect_course_script(true); |
||||||
| 18 | |||||||
| 19 | require_once 'forumfunction.inc.php'; |
||||||
| 20 | |||||||
| 21 | $nameTools = get_lang('Forum'); |
||||||
| 22 | $forumUrl = api_get_path(WEB_CODE_PATH).'forum/'; |
||||||
| 23 | |||||||
| 24 | // Are we in a lp ? |
||||||
| 25 | $origin = api_get_origin(); |
||||||
| 26 | $_user = api_get_user_info(); |
||||||
| 27 | $my_search = null; |
||||||
| 28 | |||||||
| 29 | $forumId = isset($_GET['forum']) ? (int) $_GET['forum'] : 0; |
||||||
| 30 | $threadId = isset($_GET['thread']) ? (int) $_GET['thread'] : 0; |
||||||
| 31 | |||||||
| 32 | $current_thread = get_thread_information($forumId, $threadId); |
||||||
| 33 | $current_forum = get_forum_information($current_thread['forum_id']); |
||||||
|
0 ignored issues
–
show
|
|||||||
| 34 | $current_forum_category = get_forumcategory_information($current_forum['forum_category']); |
||||||
| 35 | $whatsnew_post_info = isset($_SESSION['whatsnew_post_info']) ? $_SESSION['whatsnew_post_info'] : null; |
||||||
| 36 | |||||||
| 37 | if (api_is_in_gradebook()) { |
||||||
| 38 | $interbreadcrumb[] = [ |
||||||
| 39 | 'url' => Category::getUrl(), |
||||||
| 40 | 'name' => get_lang('ToolGradebook'), |
||||||
| 41 | ]; |
||||||
| 42 | } |
||||||
| 43 | |||||||
| 44 | $groupId = api_get_group_id(); |
||||||
| 45 | $group_properties = GroupManager::get_group_properties($groupId); |
||||||
| 46 | $sessionId = api_get_session_id(); |
||||||
| 47 | |||||||
| 48 | $ajaxURL = api_get_path(WEB_AJAX_PATH).'forum.ajax.php?'.api_get_cidreq().'&a=change_post_status'; |
||||||
| 49 | $htmlHeadXtra[] = '<script> |
||||||
| 50 | $(function() { |
||||||
| 51 | $("span").on("click", ".change_post_status", function() { |
||||||
| 52 | var updateDiv = $(this).parent(); |
||||||
| 53 | var postId = updateDiv.attr("id"); |
||||||
| 54 | |||||||
| 55 | $.ajax({ |
||||||
| 56 | url: "'.$ajaxURL.'&post_id="+postId, |
||||||
| 57 | type: "GET", |
||||||
| 58 | success: function(data) { |
||||||
| 59 | updateDiv.html(data); |
||||||
| 60 | } |
||||||
| 61 | }); |
||||||
| 62 | }); |
||||||
| 63 | }); |
||||||
| 64 | |||||||
| 65 | </script>'; |
||||||
| 66 | |||||||
| 67 | $action = isset($_GET['action']) ? $_GET['action'] : ''; |
||||||
| 68 | $logInfo = [ |
||||||
| 69 | 'tool' => TOOL_FORUM, |
||||||
| 70 | 'tool_id' => $forumId, |
||||||
| 71 | 'tool_id_detail' => $threadId, |
||||||
| 72 | 'action' => !empty($action) ? $action : 'view-thread', |
||||||
| 73 | 'action_details' => isset($_GET['content']) ? $_GET['content'] : '', |
||||||
| 74 | ]; |
||||||
| 75 | Event::registerLog($logInfo); |
||||||
|
0 ignored issues
–
show
The method
registerLog() does not exist on Event.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. Loading history...
|
|||||||
| 76 | |||||||
| 77 | $currentUrl = api_get_path(WEB_CODE_PATH).'forum/viewthread.php?forum='.$forumId.'&'.api_get_cidreq().'&thread='.$threadId; |
||||||
| 78 | |||||||
| 79 | switch ($action) { |
||||||
| 80 | case 'change_view': |
||||||
| 81 | $view = isset($_REQUEST['view']) && in_array($_REQUEST['view'], ['nested', 'flat']) ? $_REQUEST['view'] : ''; |
||||||
| 82 | if (!empty($view)) { |
||||||
| 83 | Session::write('thread_view', $view); |
||||||
| 84 | } |
||||||
| 85 | header('Location: '.$currentUrl); |
||||||
| 86 | exit; |
||||||
| 87 | break; |
||||||
| 88 | case 'delete': |
||||||
| 89 | if ( |
||||||
| 90 | isset($_GET['content']) && |
||||||
| 91 | isset($_GET['id']) && |
||||||
| 92 | (api_is_allowed_to_edit(false, true) || |
||||||
| 93 | (isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties))) |
||||||
| 94 | ) { |
||||||
| 95 | $message = delete_post($_GET['id']); |
||||||
| 96 | Display::addFlash(Display::return_message(get_lang($message))); |
||||||
| 97 | } |
||||||
| 98 | header('Location: '.$currentUrl); |
||||||
| 99 | exit; |
||||||
| 100 | break; |
||||||
| 101 | case 'invisible': |
||||||
| 102 | case 'visible': |
||||||
| 103 | if (isset($_GET['id']) && |
||||||
| 104 | (api_is_allowed_to_edit(false, true) || |
||||||
| 105 | (isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties))) |
||||||
| 106 | ) { |
||||||
| 107 | $message = approve_post($_GET['id'], $action); |
||||||
| 108 | Display::addFlash(Display::return_message(get_lang($message))); |
||||||
| 109 | } |
||||||
| 110 | header('Location: '.$currentUrl); |
||||||
| 111 | exit; |
||||||
| 112 | break; |
||||||
| 113 | case 'move': |
||||||
| 114 | if (isset($_GET['post'])) { |
||||||
| 115 | $message = move_post_form(); |
||||||
| 116 | Display::addFlash(Display::return_message(get_lang($message), 'normal', false)); |
||||||
| 117 | } |
||||||
| 118 | header('Location: '.$currentUrl); |
||||||
| 119 | exit; |
||||||
| 120 | break; |
||||||
| 121 | case 'report': |
||||||
| 122 | $postId = isset($_GET['post_id']) ? $_GET['post_id'] : 0; |
||||||
| 123 | |||||||
| 124 | $result = reportPost($postId, $current_forum, $current_thread); |
||||||
| 125 | Display::addFlash(Display::return_message(get_lang('Reported'))); |
||||||
| 126 | header('Location: '.$currentUrl); |
||||||
| 127 | exit; |
||||||
| 128 | break; |
||||||
| 129 | case 'ask_revision': |
||||||
| 130 | if (api_get_configuration_value('allow_forum_post_revisions')) { |
||||||
| 131 | $postId = isset($_GET['post_id']) ? $_GET['post_id'] : 0; |
||||||
| 132 | $result = savePostRevision($postId); |
||||||
| 133 | Display::addFlash(Display::return_message(get_lang('Saved'))); |
||||||
| 134 | } |
||||||
| 135 | header('Location: '.$currentUrl); |
||||||
| 136 | exit; |
||||||
| 137 | break; |
||||||
| 138 | } |
||||||
| 139 | |||||||
| 140 | if (!empty($groupId)) { |
||||||
| 141 | $interbreadcrumb[] = [ |
||||||
| 142 | 'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(), |
||||||
| 143 | 'name' => get_lang('Groups'), |
||||||
| 144 | ]; |
||||||
| 145 | $interbreadcrumb[] = [ |
||||||
| 146 | 'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(), |
||||||
| 147 | 'name' => get_lang('GroupSpace').' '.$group_properties['name'], |
||||||
| 148 | ]; |
||||||
| 149 | $interbreadcrumb[] = [ |
||||||
| 150 | 'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?forum='.$forumId.'&'.api_get_cidreq()."&search=".Security::remove_XSS(urlencode($my_search)), |
||||||
| 151 | 'name' => Security::remove_XSS($current_forum['forum_title']), |
||||||
| 152 | ]; |
||||||
| 153 | $interbreadcrumb[] = [ |
||||||
| 154 | 'url' => api_get_path(WEB_CODE_PATH).'forum/viewthread.php?forum='.$forumId.'&'.api_get_cidreq().'&thread='.$threadId, |
||||||
| 155 | 'name' => Security::remove_XSS($current_thread['thread_title']), |
||||||
| 156 | ]; |
||||||
| 157 | } else { |
||||||
| 158 | $my_search = isset($_GET['search']) ? $_GET['search'] : ''; |
||||||
| 159 | if ($origin !== 'learnpath') { |
||||||
| 160 | $interbreadcrumb[] = [ |
||||||
| 161 | 'url' => api_get_path(WEB_CODE_PATH).'forum/index.php?'.api_get_cidreq().'&search='.Security::remove_XSS( |
||||||
| 162 | urlencode($my_search) |
||||||
| 163 | ), |
||||||
| 164 | 'name' => $nameTools, |
||||||
| 165 | ]; |
||||||
| 166 | $interbreadcrumb[] = [ |
||||||
| 167 | 'url' => api_get_path( |
||||||
| 168 | WEB_CODE_PATH |
||||||
| 169 | ).'forum/viewforumcategory.php?forumcategory='.$current_forum_category['cat_id']."&search=".Security::remove_XSS( |
||||||
| 170 | urlencode($my_search) |
||||||
| 171 | ), |
||||||
| 172 | 'name' => Security::remove_XSS($current_forum_category['cat_title']), |
||||||
| 173 | ]; |
||||||
| 174 | $interbreadcrumb[] = [ |
||||||
| 175 | 'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?'.api_get_cidreq().'&forum='.$forumId."&search=".Security::remove_XSS(urlencode($my_search)), |
||||||
| 176 | 'name' => Security::remove_XSS($current_forum['forum_title']), |
||||||
| 177 | ]; |
||||||
| 178 | $interbreadcrumb[] = [ |
||||||
| 179 | 'url' => '#', |
||||||
| 180 | 'name' => Security::remove_XSS($current_thread['thread_title']), |
||||||
| 181 | ]; |
||||||
| 182 | } |
||||||
| 183 | } |
||||||
| 184 | |||||||
| 185 | // If the user is not a course administrator and the forum is hidden |
||||||
| 186 | // then the user is not allowed here. |
||||||
| 187 | if (!api_is_allowed_to_edit(false, true) && |
||||||
| 188 | ($current_forum['visibility'] == 0 || $current_thread['visibility'] == 0) |
||||||
| 189 | ) { |
||||||
| 190 | api_not_allowed(); |
||||||
| 191 | } |
||||||
| 192 | // this increases the number of times the thread has been viewed |
||||||
| 193 | increase_thread_view($threadId); |
||||||
| 194 | |||||||
| 195 | if ($origin === 'learnpath') { |
||||||
| 196 | $template = new Template('', false, false, true, true, false); |
||||||
| 197 | } else { |
||||||
| 198 | $template = new Template(); |
||||||
| 199 | } |
||||||
| 200 | |||||||
| 201 | $actions = '<span style="float:right;">'.search_link().'</span>'; |
||||||
| 202 | if ($origin !== 'learnpath') { |
||||||
| 203 | $actions .= '<a href="'.$forumUrl.'viewforum.php?forum='.$forumId.'&'.api_get_cidreq().'">' |
||||||
| 204 | .Display::return_icon('back.png', get_lang('BackToForum'), '', ICON_SIZE_MEDIUM).'</a>'; |
||||||
| 205 | } |
||||||
| 206 | |||||||
| 207 | // The reply to thread link should only appear when the forum_category is |
||||||
| 208 | // not locked AND the forum is not locked AND the thread is not locked. |
||||||
| 209 | // If one of the three levels is locked then the link should not be displayed. |
||||||
| 210 | if (($current_forum_category && |
||||||
|
0 ignored issues
–
show
The expression
$current_forum_category 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 Loading history...
|
|||||||
| 211 | $current_forum_category['locked'] == 0) && |
||||||
| 212 | $current_forum['locked'] == 0 && |
||||||
| 213 | $current_thread['locked'] == 0 || |
||||||
| 214 | api_is_allowed_to_edit(false, true) |
||||||
| 215 | ) { |
||||||
| 216 | // The link should only appear when the user is logged in or when anonymous posts are allowed. |
||||||
| 217 | if ($_user['user_id'] || ($current_forum['allow_anonymous'] == 1 && !$_user['user_id'])) { |
||||||
| 218 | // reply link |
||||||
| 219 | if (!api_is_anonymous() && api_is_allowed_to_session_edit(false, true)) { |
||||||
| 220 | $actions .= '<a href="'.$forumUrl.'reply.php?'.api_get_cidreq().'&forum='.$forumId.'&thread=' |
||||||
| 221 | .$threadId.'&action=replythread">' |
||||||
| 222 | .Display::return_icon('reply_thread.png', get_lang('ReplyToThread'), '', ICON_SIZE_MEDIUM) |
||||||
| 223 | .'</a>'; |
||||||
| 224 | } |
||||||
| 225 | // new thread link |
||||||
| 226 | if (( |
||||||
| 227 | api_is_allowed_to_edit(false, true) && |
||||||
| 228 | !(api_is_session_general_coach() && $current_forum['session_id'] != $sessionId)) || |
||||||
| 229 | ($current_forum['allow_new_threads'] == 1 && isset($_user['user_id'])) || |
||||||
| 230 | ($current_forum['allow_new_threads'] == 1 && !isset($_user['user_id']) && $current_forum['allow_anonymous'] == 1) |
||||||
| 231 | ) { |
||||||
| 232 | if ($current_forum['locked'] != 1 && $current_forum['locked'] != 1) { |
||||||
| 233 | $actions .= ' '; |
||||||
| 234 | } else { |
||||||
| 235 | $actions .= get_lang('ForumLocked'); |
||||||
| 236 | } |
||||||
| 237 | } |
||||||
| 238 | } |
||||||
| 239 | } |
||||||
| 240 | |||||||
| 241 | $actions .= Display::url( |
||||||
| 242 | Display::return_icon('forum_nestedview.png', get_lang('NestedView'), [], ICON_SIZE_MEDIUM), |
||||||
| 243 | $currentUrl.'&action=change_view&view=nested' |
||||||
| 244 | ); |
||||||
| 245 | |||||||
| 246 | $actions .= Display::url( |
||||||
| 247 | Display::return_icon('forum_listview.png', get_lang('FlatView'), [], ICON_SIZE_MEDIUM), |
||||||
| 248 | $currentUrl.'&action=change_view&view=flat' |
||||||
| 249 | ); |
||||||
| 250 | |||||||
| 251 | $template->assign('forum_actions', $actions); |
||||||
| 252 | $template->assign('origin', api_get_origin()); |
||||||
| 253 | |||||||
| 254 | $viewMode = $current_forum['default_view']; |
||||||
| 255 | |||||||
| 256 | //$whiteList = ['flat', 'threaded', 'nested']; |
||||||
| 257 | if ($viewMode !== 'flat') { |
||||||
| 258 | $viewMode = 'nested'; |
||||||
| 259 | } |
||||||
| 260 | |||||||
| 261 | $userView = Session::read('thread_view'); |
||||||
| 262 | if (!empty($userView)) { |
||||||
| 263 | $viewMode = $userView; |
||||||
| 264 | } |
||||||
| 265 | |||||||
| 266 | if ($current_thread['thread_peer_qualify'] == 1) { |
||||||
| 267 | Display::addFlash(Display::return_message(get_lang('ForumThreadPeerScoringStudentComment'), 'info')); |
||||||
| 268 | } |
||||||
| 269 | |||||||
| 270 | $allowReport = reportAvailable(); |
||||||
| 271 | |||||||
| 272 | // Are we in a lp ? |
||||||
| 273 | $origin = api_get_origin(); |
||||||
| 274 | //delete attachment file |
||||||
| 275 | if ($action === 'delete_attach' && isset($_GET['id_attach']) |
||||||
| 276 | ) { |
||||||
| 277 | delete_attachment(0, $_GET['id_attach']); |
||||||
| 278 | } |
||||||
| 279 | |||||||
| 280 | $origin = api_get_origin(); |
||||||
| 281 | $sessionId = api_get_session_id(); |
||||||
| 282 | $_user = api_get_user_info(); |
||||||
| 283 | $userId = api_get_user_id(); |
||||||
| 284 | $groupId = api_get_group_id(); |
||||||
| 285 | |||||||
| 286 | // Decide whether we show the latest post first |
||||||
| 287 | $sortDirection = isset($_GET['posts_order']) && $_GET['posts_order'] === 'desc' ? 'DESC' : ($origin !== 'learnpath' ? 'ASC' : 'DESC'); |
||||||
| 288 | $posts = getPosts($current_forum, $threadId, $sortDirection, true); |
||||||
| 289 | $count = 0; |
||||||
| 290 | $group_id = api_get_group_id(); |
||||||
| 291 | $locked = api_resource_is_locked_by_gradebook($threadId, LINK_FORUM_THREAD); |
||||||
| 292 | $sessionId = api_get_session_id(); |
||||||
| 293 | $currentThread = get_thread_information($forumId, $threadId); |
||||||
| 294 | $userId = api_get_user_id(); |
||||||
| 295 | $groupInfo = GroupManager::get_group_properties($group_id); |
||||||
| 296 | $postCount = 1; |
||||||
| 297 | $allowUserImageForum = api_get_course_setting('allow_user_image_forum'); |
||||||
| 298 | |||||||
| 299 | // The user who posted it can edit his thread only if the course admin allowed this in the properties |
||||||
| 300 | // of the forum |
||||||
| 301 | // The course admin him/herself can do this off course always |
||||||
| 302 | $tutorGroup = GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo); |
||||||
| 303 | |||||||
| 304 | $postList = []; |
||||||
| 305 | foreach ($posts as $post) { |
||||||
| 306 | $posterId = isset($post['user_id']) ? $post['user_id'] : 0; |
||||||
| 307 | $username = ''; |
||||||
| 308 | if (isset($post['username'])) { |
||||||
| 309 | $username = sprintf(get_lang('LoginX'), $post['username']); |
||||||
| 310 | } |
||||||
| 311 | |||||||
| 312 | $name = $post['complete_name']; |
||||||
| 313 | if (empty($posterId)) { |
||||||
| 314 | $name = $post['poster_name']; |
||||||
| 315 | } |
||||||
| 316 | |||||||
| 317 | $post['user_data'] = ''; |
||||||
| 318 | if ($origin !== 'learnpath') { |
||||||
| 319 | if ($allowUserImageForum) { |
||||||
| 320 | $post['user_data'] = '<div class="thumbnail">'. |
||||||
| 321 | display_user_image($posterId, $name, $origin).'</div>'; |
||||||
| 322 | } |
||||||
| 323 | |||||||
| 324 | $post['user_data'] .= Display::tag( |
||||||
| 325 | 'h4', |
||||||
| 326 | display_user_link($posterId, $name, $origin, $username), |
||||||
| 327 | ['class' => 'title-username'] |
||||||
| 328 | ); |
||||||
| 329 | |||||||
| 330 | $_user = api_get_user_info($posterId); |
||||||
| 331 | $iconStatus = $_user['icon_status']; |
||||||
| 332 | $post['user_data'] .= '<div class="user-type text-center">'.$iconStatus.'</div>'; |
||||||
| 333 | } else { |
||||||
| 334 | if ($allowUserImageForum) { |
||||||
| 335 | $post['user_data'] .= '<div class="thumbnail">'. |
||||||
| 336 | display_user_image($posterId, $name, $origin).'</div>'; |
||||||
| 337 | } |
||||||
| 338 | |||||||
| 339 | $post['user_data'] .= Display::tag( |
||||||
| 340 | 'p', |
||||||
| 341 | $name, |
||||||
| 342 | [ |
||||||
| 343 | 'title' => api_htmlentities($username, ENT_QUOTES), |
||||||
| 344 | 'class' => 'lead', |
||||||
| 345 | ] |
||||||
| 346 | ); |
||||||
| 347 | } |
||||||
| 348 | |||||||
| 349 | if ($origin !== 'learnpath') { |
||||||
| 350 | $post['user_data'] .= Display::tag( |
||||||
| 351 | 'p', |
||||||
| 352 | Display::dateToStringAgoAndLongDate($post['post_date']), |
||||||
| 353 | ['class' => 'post-date'] |
||||||
| 354 | ); |
||||||
| 355 | } else { |
||||||
| 356 | $post['user_data'] .= Display::tag( |
||||||
| 357 | 'p', |
||||||
| 358 | Display::dateToStringAgoAndLongDate($post['post_date']), |
||||||
| 359 | ['class' => 'text-muted'] |
||||||
| 360 | ); |
||||||
| 361 | } |
||||||
| 362 | |||||||
| 363 | // get attach id |
||||||
| 364 | $attachment_list = get_attachment($post['post_id']); |
||||||
| 365 | $id_attach = !empty($attachment_list) ? $attachment_list['iid'] : ''; |
||||||
| 366 | |||||||
| 367 | $iconEdit = ''; |
||||||
| 368 | $editButton = ''; |
||||||
| 369 | $askForRevision = ''; |
||||||
| 370 | if ((isset($groupInfo['iid']) && $tutorGroup) || |
||||||
| 371 | ($current_forum['allow_edit'] == 1 && $posterId == $userId) || |
||||||
| 372 | (api_is_allowed_to_edit(false, true) && |
||||||
| 373 | !(api_is_session_general_coach() && $current_forum['session_id'] != $sessionId)) |
||||||
| 374 | ) { |
||||||
| 375 | if ($locked == false && postIsEditableByStudent($current_forum, $post)) { |
||||||
|
0 ignored issues
–
show
|
|||||||
| 376 | $editUrl = api_get_path(WEB_CODE_PATH).'forum/editpost.php?'.api_get_cidreq(); |
||||||
| 377 | $editUrl .= "&forum=$forumId&thread=$threadId&post={$post['post_id']}&id_attach=$id_attach"; |
||||||
| 378 | $iconEdit .= "<a href='".$editUrl."'>" |
||||||
| 379 | .Display::return_icon('edit.png', get_lang('Edit'), [], ICON_SIZE_SMALL) |
||||||
| 380 | ."</a>"; |
||||||
| 381 | |||||||
| 382 | $editButton = Display::toolbarButton( |
||||||
| 383 | get_lang('Edit'), |
||||||
| 384 | $editUrl, |
||||||
| 385 | 'pencil', |
||||||
| 386 | 'default' |
||||||
| 387 | ); |
||||||
| 388 | } |
||||||
| 389 | } |
||||||
| 390 | |||||||
| 391 | if ((isset($groupInfo['iid']) && $tutorGroup) || |
||||||
| 392 | api_is_allowed_to_edit(false, true) && |
||||||
| 393 | !(api_is_session_general_coach() && $current_forum['session_id'] != $sessionId) |
||||||
| 394 | ) { |
||||||
| 395 | if ($locked == false) { |
||||||
|
0 ignored issues
–
show
|
|||||||
| 396 | $deleteUrl = api_get_self().'?'.api_get_cidreq().'&'.http_build_query( |
||||||
| 397 | [ |
||||||
| 398 | 'forum' => $forumId, |
||||||
| 399 | 'thread' => $threadId, |
||||||
| 400 | 'action' => 'delete', |
||||||
| 401 | 'content' => 'post', |
||||||
| 402 | 'id' => $post['post_id'], |
||||||
| 403 | ] |
||||||
| 404 | ); |
||||||
| 405 | $iconEdit .= Display::url( |
||||||
| 406 | Display::return_icon('delete.png', get_lang('Delete'), [], ICON_SIZE_SMALL), |
||||||
| 407 | $deleteUrl, |
||||||
| 408 | [ |
||||||
| 409 | 'onclick' => "javascript:if(!confirm('" |
||||||
| 410 | .addslashes(api_htmlentities(get_lang('DeletePost'), ENT_QUOTES)) |
||||||
| 411 | ."')) return false;", |
||||||
| 412 | 'id' => "delete-post-{$post['post_id']}", |
||||||
| 413 | ] |
||||||
| 414 | ); |
||||||
| 415 | } |
||||||
| 416 | } |
||||||
| 417 | |||||||
| 418 | if (api_is_allowed_to_edit(false, true) && |
||||||
| 419 | !( |
||||||
| 420 | api_is_session_general_coach() && |
||||||
| 421 | $current_forum['session_id'] != $sessionId |
||||||
| 422 | ) |
||||||
| 423 | ) { |
||||||
| 424 | $iconEdit .= return_visible_invisible_icon( |
||||||
| 425 | 'post', |
||||||
| 426 | $post['post_id'], |
||||||
| 427 | $post['visible'], |
||||||
| 428 | [ |
||||||
| 429 | 'forum' => $forumId, |
||||||
| 430 | 'thread' => $threadId, |
||||||
| 431 | ] |
||||||
| 432 | ); |
||||||
| 433 | |||||||
| 434 | if ($count > 0) { |
||||||
| 435 | $iconEdit .= "<a href=\"viewthread.php?".api_get_cidreq() |
||||||
| 436 | ."&forum=$forumId&thread=$threadId&action=move&post={$post['post_id']}" |
||||||
| 437 | ."\">".Display::return_icon('move.png', get_lang('MovePost'), [], ICON_SIZE_SMALL)."</a>"; |
||||||
| 438 | } |
||||||
| 439 | } |
||||||
| 440 | |||||||
| 441 | $userCanQualify = $currentThread['thread_peer_qualify'] == 1 && $post['poster_id'] != $userId; |
||||||
| 442 | if (api_is_allowed_to_edit(null, true)) { |
||||||
| 443 | $userCanQualify = true; |
||||||
| 444 | } |
||||||
| 445 | |||||||
| 446 | $postIsARevision = false; |
||||||
| 447 | $flagRevision = ''; |
||||||
| 448 | |||||||
| 449 | if ($post['poster_id'] == $userId) { |
||||||
| 450 | $revision = getPostRevision($post['post_id']); |
||||||
| 451 | if (empty($revision)) { |
||||||
| 452 | $askForRevision = getAskRevisionButton($post['post_id'], $current_thread); |
||||||
| 453 | } else { |
||||||
| 454 | $postIsARevision = true; |
||||||
| 455 | $languageId = api_get_language_id(strtolower($revision)); |
||||||
| 456 | $languageInfo = api_get_language_info($languageId); |
||||||
| 457 | if ($languageInfo) { |
||||||
| 458 | $languages = api_get_language_list_for_flag(); |
||||||
| 459 | $flagRevision = '<span class="flag-icon flag-icon-'.$languages[$languageInfo['english_name']].'"></span> '; |
||||||
| 460 | } |
||||||
| 461 | } |
||||||
| 462 | } else { |
||||||
| 463 | if (postNeedsRevision($post['post_id'])) { |
||||||
| 464 | $askForRevision = giveRevisionButton($post['post_id'], $current_thread); |
||||||
| 465 | } else { |
||||||
| 466 | $revision = getPostRevision($post['post_id']); |
||||||
| 467 | if (!empty($revision)) { |
||||||
| 468 | $postIsARevision = true; |
||||||
| 469 | $languageId = api_get_language_id(strtolower($revision)); |
||||||
| 470 | $languageInfo = api_get_language_info($languageId); |
||||||
| 471 | if ($languageInfo) { |
||||||
| 472 | $languages = api_get_language_list_for_flag(); |
||||||
| 473 | $flagRevision = '<span |
||||||
| 474 | class="flag-icon flag-icon-'.$languages[$languageInfo['english_name']].'"></span> '; |
||||||
| 475 | } |
||||||
| 476 | } |
||||||
| 477 | } |
||||||
| 478 | } |
||||||
| 479 | |||||||
| 480 | $post['is_a_revision'] = $postIsARevision; |
||||||
| 481 | $post['flag_revision'] = $flagRevision; |
||||||
| 482 | |||||||
| 483 | if (empty($currentThread['thread_qualify_max'])) { |
||||||
| 484 | $userCanQualify = false; |
||||||
| 485 | } |
||||||
| 486 | |||||||
| 487 | if ($userCanQualify) { |
||||||
| 488 | if ($count > 0) { |
||||||
| 489 | $current_qualify_thread = showQualify( |
||||||
| 490 | '1', |
||||||
| 491 | $posterId, |
||||||
| 492 | $threadId |
||||||
| 493 | ); |
||||||
| 494 | if ($locked == false) { |
||||||
|
0 ignored issues
–
show
|
|||||||
| 495 | $iconEdit .= "<a href=\"forumqualify.php?".api_get_cidreq() |
||||||
| 496 | ."&forum=$forumId&thread=$threadId&action=list&post={$post['post_id']}" |
||||||
| 497 | ."&user={$post['user_id']}&user_id={$post['user_id']}" |
||||||
| 498 | ."&idtextqualify=$current_qualify_thread" |
||||||
| 499 | ."\" >".Display::return_icon('quiz.png', get_lang('Qualify'))."</a>"; |
||||||
| 500 | } |
||||||
| 501 | } |
||||||
| 502 | } |
||||||
| 503 | |||||||
| 504 | $reportButton = ''; |
||||||
| 505 | if ($allowReport) { |
||||||
| 506 | $reportButton = getReportButton($post['post_id'], $current_thread); |
||||||
| 507 | } |
||||||
| 508 | |||||||
| 509 | $statusIcon = getPostStatus($current_forum, $post); |
||||||
| 510 | if (!empty($iconEdit)) { |
||||||
| 511 | $post['user_data'] .= "<div class='tools-icons'> $iconEdit $statusIcon </div>"; |
||||||
| 512 | } else { |
||||||
| 513 | if (!empty(strip_tags($statusIcon))) { |
||||||
| 514 | $post['user_data'] .= "<div class='tools-icons'> $statusIcon </div>"; |
||||||
| 515 | } |
||||||
| 516 | } |
||||||
| 517 | |||||||
| 518 | $buttonReply = ''; |
||||||
| 519 | $buttonQuote = ''; |
||||||
| 520 | $waitingValidation = ''; |
||||||
| 521 | |||||||
| 522 | if (($current_forum_category && $current_forum_category['locked'] == 0) && |
||||||
|
0 ignored issues
–
show
The expression
$current_forum_category 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 Loading history...
|
|||||||
| 523 | $current_forum['locked'] == 0 && $current_thread['locked'] == 0 || api_is_allowed_to_edit(false, true) |
||||||
| 524 | ) { |
||||||
| 525 | if ($userId || ($current_forum['allow_anonymous'] == 1 && !$userId)) { |
||||||
| 526 | if (!api_is_anonymous() && api_is_allowed_to_session_edit(false, true)) { |
||||||
| 527 | $buttonReply = Display::toolbarButton( |
||||||
| 528 | get_lang('ReplyToMessage'), |
||||||
| 529 | 'reply.php?'.api_get_cidreq().'&'.http_build_query([ |
||||||
| 530 | 'forum' => $forumId, |
||||||
| 531 | 'thread' => $threadId, |
||||||
| 532 | 'post' => $post['post_id'], |
||||||
| 533 | 'action' => 'replymessage', |
||||||
| 534 | ]), |
||||||
| 535 | 'reply', |
||||||
| 536 | 'primary', |
||||||
| 537 | ['id' => "reply-to-post-{$post['post_id']}"] |
||||||
| 538 | ); |
||||||
| 539 | |||||||
| 540 | $buttonQuote = Display::toolbarButton( |
||||||
| 541 | get_lang('QuoteMessage'), |
||||||
| 542 | 'reply.php?'.api_get_cidreq().'&'.http_build_query([ |
||||||
| 543 | 'forum' => $forumId, |
||||||
| 544 | 'thread' => $threadId, |
||||||
| 545 | 'post' => $post['post_id'], |
||||||
| 546 | 'action' => 'quote', |
||||||
| 547 | ]), |
||||||
| 548 | 'quote-left', |
||||||
| 549 | 'success', |
||||||
| 550 | ['id' => "quote-post-{$post['post_id']}"] |
||||||
| 551 | ); |
||||||
| 552 | |||||||
| 553 | if ($current_forum['moderated'] && !api_is_allowed_to_edit(false, true)) { |
||||||
| 554 | if (empty($post['status']) || $post['status'] == CForumPost::STATUS_WAITING_MODERATION) { |
||||||
| 555 | $buttonReply = ''; |
||||||
| 556 | $buttonQuote = ''; |
||||||
| 557 | } |
||||||
| 558 | } |
||||||
| 559 | } |
||||||
| 560 | } |
||||||
| 561 | } else { |
||||||
| 562 | $closedPost = ''; |
||||||
| 563 | if ($current_forum_category && $current_forum_category['locked'] == 1) { |
||||||
|
0 ignored issues
–
show
The expression
$current_forum_category 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 Loading history...
|
|||||||
| 564 | $closedPost = Display::tag( |
||||||
| 565 | 'div', |
||||||
| 566 | '<em class="fa fa-exclamation-triangle"></em> '.get_lang('ForumcategoryLocked'), |
||||||
| 567 | ['class' => 'alert alert-warning post-closed'] |
||||||
| 568 | ); |
||||||
| 569 | } |
||||||
| 570 | if ($current_forum['locked'] == 1) { |
||||||
| 571 | $closedPost = Display::tag( |
||||||
| 572 | 'div', |
||||||
| 573 | '<em class="fa fa-exclamation-triangle"></em> '.get_lang('ForumLocked'), |
||||||
| 574 | ['class' => 'alert alert-warning post-closed'] |
||||||
| 575 | ); |
||||||
| 576 | } |
||||||
| 577 | if ($current_thread['locked'] == 1) { |
||||||
| 578 | $closedPost = Display::tag( |
||||||
| 579 | 'div', |
||||||
| 580 | '<em class="fa fa-exclamation-triangle"></em> '.get_lang('ThreadLocked'), |
||||||
| 581 | ['class' => 'alert alert-warning post-closed'] |
||||||
| 582 | ); |
||||||
| 583 | } |
||||||
| 584 | |||||||
| 585 | $post['user_data'] .= $closedPost; |
||||||
| 586 | } |
||||||
| 587 | |||||||
| 588 | // note: this can be removed here because it will be displayed in the tree |
||||||
| 589 | if (isset($whatsnew_post_info[$current_forum['forum_id']][$current_thread['thread_id']][$post['post_id']]) && |
||||||
| 590 | !empty($whatsnew_post_info[$current_forum['forum_id']][$current_thread['thread_id']][$post['post_id']]) && |
||||||
| 591 | !empty($whatsnew_post_info[$forumId][$post['thread_id']]) |
||||||
| 592 | ) { |
||||||
| 593 | $post_image = Display::return_icon('forumpostnew.gif'); |
||||||
| 594 | } else { |
||||||
| 595 | $post_image = Display::return_icon('forumpost.gif'); |
||||||
| 596 | } |
||||||
| 597 | |||||||
| 598 | if ($post['post_notification'] == '1' && $post['poster_id'] == $userId) { |
||||||
| 599 | $post_image .= Display::return_icon( |
||||||
| 600 | 'forumnotification.gif', |
||||||
| 601 | get_lang('YouWillBeNotified') |
||||||
| 602 | ); |
||||||
| 603 | } |
||||||
| 604 | |||||||
| 605 | $post['current'] = false; |
||||||
| 606 | if (isset($_GET['post_id']) && $_GET['post_id'] == $post['post_id']) { |
||||||
| 607 | $post['current'] = true; |
||||||
| 608 | } |
||||||
| 609 | |||||||
| 610 | // Replace Re: with an icon |
||||||
| 611 | $search = [ |
||||||
| 612 | get_lang('ReplyShort'), |
||||||
| 613 | 'Re:', |
||||||
| 614 | 'RE:', |
||||||
| 615 | 'AW:', |
||||||
| 616 | 'Aw:', |
||||||
| 617 | ]; |
||||||
| 618 | $replace = '<span>'.Display::returnFontAwesomeIcon('mail-reply').'</span>'; |
||||||
| 619 | $post['post_title'] = str_replace($search, $replace, Security::remove_XSS($post['post_title'])); |
||||||
| 620 | |||||||
| 621 | // The post title |
||||||
| 622 | $titlePost = Display::tag('h3', $post['post_title'], ['class' => 'forum_post_title']); |
||||||
| 623 | $post['post_title'] = '<a name="post_id_'.$post['post_id'].'"></a>'; |
||||||
| 624 | $post['post_title'] .= Display::tag('div', $titlePost, ['class' => 'post-header']); |
||||||
| 625 | |||||||
| 626 | // the post body |
||||||
| 627 | $post['post_text'] = Security::remove_XSS($post['post_text']); |
||||||
| 628 | $post['post_data'] = Display::tag('div', $post['post_text'], ['class' => 'post-body']); |
||||||
| 629 | |||||||
| 630 | // The check if there is an attachment |
||||||
| 631 | $post['post_attachments'] = ''; |
||||||
| 632 | $attachment_list = getAllAttachment($post['post_id']); |
||||||
| 633 | if (!empty($attachment_list) && is_array($attachment_list)) { |
||||||
| 634 | foreach ($attachment_list as $attachment) { |
||||||
| 635 | $user_filename = $attachment['filename']; |
||||||
| 636 | $post['post_attachments'] .= Display::return_icon('attachment.gif', get_lang('Attachment')); |
||||||
| 637 | $post['post_attachments'] .= '<a href="download.php?file='; |
||||||
| 638 | $post['post_attachments'] .= $attachment['path']; |
||||||
| 639 | $post['post_attachments'] .= ' "> '.$user_filename.' </a>'; |
||||||
| 640 | $post['post_attachments'] .= '<span class="forum_attach_comment" >'.$attachment['comment'].'</span>'; |
||||||
| 641 | if (($current_forum['allow_edit'] == 1 && $post['user_id'] == $userId) || |
||||||
| 642 | (api_is_allowed_to_edit(false, true) && !(api_is_session_general_coach() && $current_forum['session_id'] != $sessionId)) |
||||||
| 643 | ) { |
||||||
| 644 | $post['post_attachments'] .= ' <a href="'.api_get_self().'?'.api_get_cidreq().'&action=delete_attach&id_attach=' |
||||||
| 645 | .$attachment['iid'].'&forum='.$forumId.'&thread='.$threadId |
||||||
| 646 | .'" onclick="javascript:if(!confirm(\'' |
||||||
| 647 | .addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES)).'\')) return false;">' |
||||||
| 648 | .Display::return_icon('delete.png', get_lang('Delete')).'</a><br />'; |
||||||
| 649 | } |
||||||
| 650 | } |
||||||
| 651 | } |
||||||
| 652 | |||||||
| 653 | $post['post_buttons'] = "$askForRevision $editButton $reportButton $buttonReply $buttonQuote $waitingValidation"; |
||||||
| 654 | $postList[] = $post; |
||||||
| 655 | |||||||
| 656 | // The post has been displayed => it can be removed from the what's new array |
||||||
| 657 | unset($whatsnew_post_info[$current_forum['forum_id']][$current_thread['thread_id']][$post['post_id']]); |
||||||
| 658 | unset($_SESSION['whatsnew_post_info'][$current_forum['forum_id']][$current_thread['thread_id']][$post['post_id']]); |
||||||
| 659 | $count++; |
||||||
| 660 | } |
||||||
| 661 | |||||||
| 662 | $template->assign('posts', $postList); |
||||||
| 663 | |||||||
| 664 | $formToString = ''; |
||||||
| 665 | $showForm = true; |
||||||
| 666 | if (!api_is_allowed_to_edit(false, true) && |
||||||
| 667 | (($current_forum_category && $current_forum_category['visibility'] == 0) || $current_forum['visibility'] == 0) |
||||||
| 668 | ) { |
||||||
| 669 | $showForm = false; |
||||||
| 670 | } |
||||||
| 671 | |||||||
| 672 | if (!api_is_allowed_to_session_edit(false, true) || |
||||||
| 673 | ( |
||||||
| 674 | ($current_forum_category && $current_forum_category['locked'] != 0) || |
||||||
| 675 | $current_forum['locked'] != 0 || $current_thread['locked'] != 0 |
||||||
| 676 | ) |
||||||
| 677 | ) { |
||||||
| 678 | $showForm = false; |
||||||
| 679 | } |
||||||
| 680 | |||||||
| 681 | if (!$_user['user_id'] && $current_forum['allow_anonymous'] == 0) { |
||||||
| 682 | $showForm = false; |
||||||
| 683 | } |
||||||
| 684 | |||||||
| 685 | if ($current_forum['forum_of_group'] != 0) { |
||||||
| 686 | $show_forum = GroupManager::user_has_access( |
||||||
| 687 | api_get_user_id(), |
||||||
| 688 | $current_forum['forum_of_group'], |
||||||
| 689 | GroupManager::GROUP_TOOL_FORUM |
||||||
| 690 | ); |
||||||
| 691 | if (!$show_forum) { |
||||||
| 692 | $showForm = false; |
||||||
| 693 | } |
||||||
| 694 | } |
||||||
| 695 | |||||||
| 696 | if ($showForm) { |
||||||
| 697 | $values = [ |
||||||
| 698 | 'post_title' => Security::remove_XSS($current_thread['thread_title']), |
||||||
| 699 | 'post_text' => '', |
||||||
| 700 | 'post_notification' => '', |
||||||
| 701 | 'thread_sticky' => '', |
||||||
| 702 | 'thread_peer_qualify' => '', |
||||||
| 703 | ]; |
||||||
| 704 | $form = show_add_post_form( |
||||||
| 705 | $current_forum, |
||||||
| 706 | 'replythread', |
||||||
| 707 | $values, |
||||||
| 708 | false |
||||||
| 709 | ); |
||||||
| 710 | $formToString = $form->returnForm(); |
||||||
| 711 | } |
||||||
| 712 | |||||||
| 713 | $template->assign('form', $formToString); |
||||||
| 714 | $template->assign('view_mode', $viewMode); |
||||||
| 715 | $template->display($template->get_template('forum/posts.tpl')); |
||||||
| 716 |
This function has been deprecated. The supplier of the function has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.