if(document.getElementById(\'id_qualify\').style.display == \'none\') { document.getElementById(\'id_qualify\').style.display = \'block\'; document.getElementById(\'img_plus_and_minus\').innerHTML=\' ' . Display::return_icon('div_hide.gif', get_lang('Hide'), array('style' => 'vertical-align:middle')) . ' ' . get_lang('AdvancedParameters') . '\'; } else { document.getElementById(\'id_qualify\').style.display = \'none\'; document.getElementById(\'img_plus_and_minus\').innerHTML=\' ' . Display::return_icon('div_show.gif', get_lang('Show'), array('style' => 'vertical-align:middle')) . ' ' . get_lang('AdvancedParameters') . '\'; } } </script>'; /* MAIN DISPLAY SECTION */ /* Retrieving forum and forum categorie information */ // We are getting all the information about the current forum and forum category. // Note pcool: I tried to use only one sql statement (and function) for this, // but the problem is that the visibility of the forum AND forum cateogory are stored in the item_property table. $current_thread = get_thread_information($_GET['thread']); // Note: This has to be validated that it is an existing thread. $current_forum = get_forum_information($_GET['forum']); // Note: This has to be validated that it is an existing forum. $current_forum_category = get_forumcategory_information($current_forum['forum_category']); $current_post = get_post_information($_GET['post']); api_block_course_item_locked_by_gradebook($_GET['thread'], LINK_FORUM_THREAD); /* Header and Breadcrumbs */ if (isset($_SESSION['gradebook'])) { $gradebook = $_SESSION['gradebook']; } if (!empty($gradebook) && $gradebook == 'view') { $interbreadcrumb[] = array('url' => '../gradebook/' . $_SESSION['gradebook_dest'], 'name' => get_lang('ToolGradebook')); } if ($origin == 'group') { $_clean['toolgroup'] = (int) $_SESSION['toolgroup'];
/** * @param int $stud_id * @param string $type * * @return array|null */ public function calc_score($stud_id = null, $type = null) { require_once api_get_path(SYS_CODE_PATH) . 'forum/forumfunction.inc.php'; $threadInfo = get_thread_information($this->get_ref_id()); $thread_qualify = Database::get_course_table(TABLE_FORUM_THREAD_QUALIFY); $sql = 'SELECT thread_qualify_max FROM ' . Database::get_course_table(TABLE_FORUM_THREAD) . "\n \t\t\t\tWHERE c_id = " . $this->course_id . " AND thread_id = '" . $this->get_ref_id() . "'"; $query = Database::query($sql); $assignment = Database::fetch_array($query); $sql = "SELECT * FROM {$thread_qualify}\n\t\t\t\tWHERE c_id = " . $this->course_id . " AND thread_id = " . $this->get_ref_id(); if (isset($stud_id)) { $sql .= ' AND user_id = ' . intval($stud_id); } // order by id, that way the student's first attempt is accessed first $sql .= ' ORDER BY qualify_time DESC'; $scores = Database::query($sql); // for 1 student if (isset($stud_id)) { if ($threadInfo['thread_peer_qualify'] == 0) { // Classic way of calculate score if ($data = Database::fetch_array($scores)) { return array($data['qualify'], $assignment['thread_qualify_max']); } else { // We sent the 0/thread_qualify_max instead of null for correct calculations return array(0, $assignment['thread_qualify_max']); } } else { // Take average $score = 0; $counter = 0; if (Database::num_rows($scores)) { while ($data = Database::fetch_array($scores, 'ASSOC')) { $score += $data['qualify']; $counter++; } } // If no result if (empty($counter) || $counter <= 2) { return array(0, $assignment['thread_qualify_max']); } return [$score / $counter, $assignment['thread_qualify_max']]; } } else { // All students -> get average $students = array(); // user list, needed to make sure we only // take first attempts into account $counter = 0; $sum = 0; $bestResult = 0; $weight = 0; $sumResult = 0; while ($data = Database::fetch_array($scores)) { if (!array_key_exists($data['user_id'], $students)) { if ($assignment['thread_qualify_max'] != 0) { $students[$data['user_id']] = $data['qualify']; $counter++; $sum += $data['qualify'] / $assignment['thread_qualify_max']; $sumResult += $data['qualify']; if ($data['qualify'] > $bestResult) { $bestResult = $data['qualify']; } $weight = $assignment['thread_qualify_max']; } } } if ($counter == 0) { return null; } else { switch ($type) { case 'best': return array($bestResult, $weight); break; case 'average': return array($sumResult / $counter, $weight); break; case 'ranking': return AbstractLink::getCurrentUserRanking($stud_id, $students); break; default: return array($sum, $counter); break; } } } }
* @package chamilo/forum * @author Daniel Barreto Alva <*****@*****.**> */ require_once '../global.inc.php'; require_once api_get_path(SYS_CODE_PATH) . 'forum/forumfunction.inc.php'; // First, protect this script api_protect_course_script(false); /** * Main code */ // Create a default error response $json = array('error' => true, 'errorMessage' => 'ERROR'); $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null; $current_forum = get_forum_information($_REQUEST['forum']); $current_forum_category = get_forumcategory_information($current_forum['forum_category']); $current_thread = get_thread_information($_REQUEST['thread']); // Check if exist action if (!empty($action)) { switch ($action) { case 'upload_file': if (!empty($_FILES) && !empty($_REQUEST['forum'])) { // The user is not allowed here if // 1. the forum category, forum or thread is invisible (visibility==0) // 2. the forum category, forum or thread is locked (locked <>0) // 3. if anonymous posts are not allowed // The only exception is the course manager // They are several pieces for clarity. if (!api_is_allowed_to_edit(null, true) and ($current_forum_category && $current_forum_category['visibility'] == 0 or $current_forum['visibility'] == 0)) { $json['errorMessage'] = '1. the forum category, forum or thread is invisible (visibility==0)'; break; }
/** * Get all the users who need to receive a notification of a new post (those subscribed to * the forum or the thread) * * @param integer $forum_id the id of the forum * @param integer $thread_id the id of the thread * @param integer $post_id the id of the post * @return bool * * @author Patrick Cool <*****@*****.**>, Ghent University, Belgium * @version May 2008, dokeos 1.8.5 * @since May 2008, dokeos 1.8.5 */ function send_notifications($forum_id = 0, $thread_id = 0, $post_id = 0) { $_course = api_get_course_info(); // The content of the mail $thread_link = api_get_path(WEB_CODE_PATH) . 'forum/viewthread.php?' . api_get_cidreq() . '&forum=' . $forum_id . '&thread=' . $thread_id; // Users who subscribed to the forum if ($forum_id != 0) { $users_to_be_notified_by_forum = get_notifications('forum', $forum_id); } else { return false; } $current_thread = get_thread_information($thread_id); $current_forum = get_forum_information($current_thread['forum_id']); $subject = get_lang('NewForumPost') . ' - ' . $_course['official_code'] . ' - ' . $current_forum['forum_title'] . ' - ' . $current_thread['thread_title']; // User who subscribed to the thread if ($thread_id != 0) { $users_to_be_notified_by_thread = get_notifications('thread', $thread_id); } // Merging the two $users_to_be_notified = array_merge($users_to_be_notified_by_forum, $users_to_be_notified_by_thread); $sender_id = api_get_user_id(); if (is_array($users_to_be_notified)) { foreach ($users_to_be_notified as $value) { $user_info = api_get_user_info($value['user_id']); $email_body = get_lang('Dear') . ' ' . api_get_person_name($user_info['firstname'], $user_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS) . ", <br />\n\r"; $email_body .= get_lang('NewForumPost') . ": " . $current_forum['forum_title'] . ' - ' . $current_thread['thread_title'] . " <br />\n"; $email_body .= get_lang('Course') . ': ' . $_course['name'] . ' - [' . $_course['official_code'] . "] <br />\n"; $email_body .= get_lang('YouWantedToStayInformed') . "<br />\n"; $email_body .= get_lang('ThreadCanBeFoundHere') . ': <br /> <a href="' . $thread_link . '">' . $thread_link . "</a>\n"; MessageManager::send_message_simple($value['user_id'], $subject, $email_body, $sender_id); } } }
} } if (api_is_allowed_to_edit(false, true) && !(api_is_course_coach() && $current_forum['session_id'] != $sessionId)) { $iconEdit .= return_visible_invisible_icon('post', $row['post_id'], $row['visible'], array('forum' => $clean_forum_id, 'thread' => $clean_thread_id, 'origin' => $origin)); $iconEdit .= ""; if ($increment > 0) { $iconEdit .= "<a href=\"viewthread.php?" . api_get_cidreq() . "&forum=" . $clean_forum_id . "&thread=" . $clean_thread_id . "&action=move&post=" . $row['post_id'] . "&origin=" . $origin . "\">" . Display::return_icon('move.png', get_lang('MovePost'), array(), ICON_SIZE_SMALL) . "</a>"; } } } $user_status = api_get_status_of_user_in_course($row['user_id'], api_get_course_int_id()); $current_qualify_thread = showQualify('1', $row['poster_id'], $_GET['thread']); if (($current_thread['thread_peer_qualify'] == 1 || api_is_allowed_to_edit(null, true)) && $current_thread['thread_qualify_max'] > 0 && $origin != 'learnpath') { $my_forum_id = $clean_forum_id; if (isset($_GET['gradebook'])) { $info_thread = get_thread_information($clean_thread_id); $my_forum_id = $info_thread['forum_id']; } $userCanEdit = $current_thread['thread_peer_qualify'] == 1 && $row['poster_id'] != $userId; if (api_is_allowed_to_edit(null, true)) { $userCanEdit = true; } if ($increment > 0 && $locked == false && $userCanEdit) { $iconEdit .= "<a href=\"forumqualify.php?" . api_get_cidreq() . "&forum=" . $my_forum_id . "&thread=" . $clean_thread_id . "&action=list&post=" . $row['post_id'] . "&user="******"&user_id=" . $row['poster_id'] . "&origin=" . $origin . "&idtextqualify=" . $current_qualify_thread . "\" >" . Display::return_icon('quiz.gif', get_lang('Qualify')) . "</a> "; } } if ($iconEdit != '') { $html .= '<div class="tools-icons">' . $iconEdit . '</div>'; } $html .= $closedPost; $html .= '</div>';