public function UserDataGenerator($userid, $evals = array(), $links = array()) { $this->userid = $userid; $evals_filtered = array(); $result = array(); foreach ($evals as $eval) { $toadd = true; $coursecode = $eval->get_course_code(); if (isset($coursecode)) { $result = Result::load(null, $userid, $eval->get_id()); if (count($result) == 0) { $toadd = false; } } if ($toadd) { $evals_filtered_copy = $evals; } } if (count($result) == 0) { $evals_filtered = $evals; } else { $evals_filtered = $evals_filtered_copy; } $this->items = array_merge($evals_filtered, $links); $this->coursecodecache = array(); $this->categorycache = array(); $this->scorecache = null; $this->avgcache = null; }
/** * Calculate the score of this evaluation * @param int $stud_id (default: all students who have results for this eval - then the average is returned) * @param string $type (best, average, ranking) * @return array (score, max) if student is given * array (sum of scores, number of scores) otherwise * or null if no scores available */ public function calc_score($stud_id = null, $type = null) { $useSession = true; if (isset($stud_id) && empty($type)) { $key = 'result_score_student_list_' . api_get_course_int_id() . '_' . api_get_session_id() . '_' . $this->id . '_' . $stud_id; $data = Session::read('calc_score'); $results = isset($data[$key]) ? $data[$key] : null; if ($useSession == false) { $results = null; } if (empty($results)) { $results = Result::load(null, $stud_id, $this->id); Session::write('calc_score', array($key => $results)); } $score = 0; /** @var Result $res */ foreach ($results as $res) { $score = $res->get_score(); } return array($score, $this->get_max()); } else { $count = 0; $sum = 0; $bestResult = 0; $weight = 0; $sumResult = 0; $key = 'result_score_student_list_' . api_get_course_int_id() . '_' . api_get_session_id() . '_' . $this->id; $data = Session::read('calc_score'); $allResults = isset($data[$key]) ? $data[$key] : null; if ($useSession == false) { $allResults = null; } if (empty($allResults)) { $allResults = Result::load(null, null, $this->id); Session::write($key, $allResults); } $students = array(); /** @var Result $res */ foreach ($allResults as $res) { $score = $res->get_score(); if (!empty($score) || $score == '0') { $count++; $sum += $score / $this->get_max(); $sumResult += $score; if ($score > $bestResult) { $bestResult = $score; } $weight = $this->get_max(); } $students[$res->get_user_id()] = $score; } if (empty($count)) { return null; } switch ($type) { case 'best': return array($bestResult, $weight); break; case 'average': return array($sumResult / $count, $weight); break; case 'ranking': $students = array(); /** @var Result $res */ foreach ($allResults as $res) { $score = $res->get_score(); $students[$res->get_user_id()] = $score; } return AbstractLink::getCurrentUserRanking($stud_id, $students); break; default: return array($sum, $count); break; } } }
/** * insert log result */ public function add_result__log($userid, $evaluationid) { if (isset($userid) && isset($evaluationid)) { $tbl_grade_results_log = Database::get_main_table(TABLE_MAIN_GRADEBOOK_RESULT_LOG); $result = new Result(); $arr_result = $result->load(null, $userid, $evaluationid); $arr = get_object_vars($arr_result[0]); $sql = 'INSERT INTO ' . $tbl_grade_results_log . ' (id_result,user_id, evaluation_id,created_at'; if (isset($arr['score'])) { $sql .= ',score'; } $sql .= ') VALUES (' . (int) $arr['id'] . ',' . (int) $arr['user_id'] . ', ' . (int) $arr['evaluation'] . ", '" . api_get_utc_datetime() . "'"; if (isset($arr['score'])) { $sql .= ', ' . $arr['score']; } $sql .= ')'; Database::query($sql); } else { die('Error in Result add: required field empty'); } }
/** * Calculate the score of this evaluation * @param int $stud_id (default: all students who have results for this eval - then the average is returned) * @return array (score, max) if student is given * array (sum of scores, number of scores) otherwise * or null if no scores available */ public function calc_score($stud_id = null) { $results = Result::load(null, $stud_id, $this->id); $rescount = 0; $sum = 0; foreach ($results as $res) { $score = $res->get_score(); if (!empty($score) || $score == '0') { $rescount++; $sum += $score / $this->get_max(); } } if ($rescount == 0) { return null; } else { if (isset($stud_id)) { return array($score, $this->get_max()); } else { return array($sum, $rescount); } } }
if (isset($_GET['resultdelete'])) { $result = Result::load($_GET['resultdelete']); $result[0]->delete(); header('Location: gradebook_view_result.php?deleteresult=&selecteval=' . Security::remove_XSS($_GET['selecteval'])); exit; } if (isset($_POST['action'])) { $number_of_selected_items = count($_POST['id']); if ($number_of_selected_items == '0') { Display::display_warning_message(get_lang('NoItemsSelected'), false); } else { switch ($_POST['action']) { case 'delete': $number_of_deleted_results = 0; foreach ($_POST['id'] as $indexstr) { $result = Result::load($indexstr); $result[0]->delete(); $number_of_deleted_results++; } header('Location: gradebook_view_result.php?massdelete=&selecteval=' . Security::remove_XSS($_GET['selecteval'])); exit; break; } } } // TODO - what if selecteval not set ? $addparams = array('selecteval' => $eval[0]->get_id()); if (isset($_GET['print'])) { $datagen = new ResultsDataGenerator($eval[0], $allresults); if (api_sort_by_first_name()) { $data_array = $datagen->get_data(ResultsDataGenerator::RDG_SORT_FIRSTNAME, 0, null, true);
api_block_anonymous_users(); GradebookUtils::block_students(); $select_eval = Security::remove_XSS($_GET['selecteval']); if (empty($select_eval)) { api_not_allowed(); } $resultedit = Result::load(null, null, $select_eval); $evaluation = Evaluation::load($select_eval); $evaluation[0]->check_lock_permissions(); $edit_result_form = new EvalForm(EvalForm::TYPE_ALL_RESULTS_EDIT, $evaluation[0], $resultedit, 'edit_result_form', null, api_get_self() . '?&selecteval=' . $select_eval); $table = $edit_result_form->toHtml(); if ($edit_result_form->validate()) { $values = $edit_result_form->exportValues(); $scores = $values['score']; foreach ($scores as $row) { $resultedit = Result::load(key($scores)); $row_value = $row; if ($row_value != '') { $resultedit[0]->set_score(floatval(number_format($row_value, api_get_setting('gradebook.gradebook_number_decimals')))); $resultedit[0]->save(); } next($scores); } header('Location: gradebook_view_result.php?selecteval=' . $select_eval . '&editallresults=&' . api_get_cidreq()); exit; } $interbreadcrumb[] = array('url' => $_SESSION['gradebook_dest'], 'name' => get_lang('Gradebook')); $interbreadcrumb[] = array('url' => 'gradebook_view_result.php?selecteval=' . $select_eval . '&' . api_get_cidreq(), 'name' => get_lang('ViewResult')); Display::display_header(get_lang('EditResult')); DisplayGradebook::display_header_result($evaluation[0], null, 0, 0); echo $table;
} $interbreadcrumb[] = array('url' => $_SESSION['gradebook_dest'] . '?selectcat=' . $currentcat[0]->get_id(), 'name' => get_lang('ToolGradebook')); if (api_is_allowed_to_edit()) { $interbreadcrumb[] = array('url' => 'gradebook_view_result.php?selecteval=' . Security::remove_XSS($_GET['selecteval']), 'name' => get_lang('ViewResult')); } $displayscore = ScoreDisplay::instance(); Display::display_header(get_lang('EvaluationStatistics')); DisplayGradebook::display_header_result($eval[0], $currentcat[0]->get_id(), 0, 'statistics'); //Bad, Regular, Good - User definitions $displays = $displayscore->get_custom_score_display_settings(); if (!$displayscore->is_custom() || empty($displays)) { if (api_is_platform_admin() || api_is_course_admin()) { Display::display_error_message(get_lang('PleaseEnableScoringSystem'), false); } } else { $allresults = Result::load(null, null, $eval[0]->get_id()); $nr_items = array(); foreach ($displays as $itemsdisplay) { $nr_items[$itemsdisplay['display']] = 0; } $resultcount = 0; foreach ($allresults as $result) { $score = $result->get_score(); if (isset($score)) { $display = $displayscore->display_score(array($score, $eval[0]->get_max()), SCORE_CUSTOM, SCORE_ONLY_CUSTOM, true); $nr_items[$display]++; $resultcount++; } } $keys = array_keys($nr_items); // find the region with the most scores, this is 100% of the bar
public static function overwritescore($resid, $importscore, $eval_max) { $result = Result::load($resid); if ($importscore > $eval_max) { header('Location: gradebook_view_result.php?selecteval=' . Security::remove_XSS($_GET['selecteval']) . '&overwritemax='); exit; } $result[0]->set_score($importscore); $result[0]->save(); unset($result); }
static function transaction_33($original_data, $web_service_details) { global $data_list; $data = Migration::soap_call($web_service_details, 'notaDetalles', array('uididpersona' => $original_data['item_id'], 'uididprograma' => $original_data['orig_id'], 'intIdSede' => $original_data['branch_id'])); if ($data['error'] == false) { $uidIdPrograma = $original_data['orig_id']; $uidIdPersona = $original_data['item_id']; $score = $data['name']; $session_id = self::get_session_id_by_programa_id($uidIdPrograma, $data_list); $user_id = self::get_user_id_by_persona_id($uidIdPersona, $data_list); if (empty($user_id)) { return array('message' => "User does not exists in DB: {$uidIdPersona}", 'status_id' => self::TRANSACTION_STATUS_FAILED); } if (empty($session_id)) { return array('message' => "Session does not exists in DB: {$uidIdPrograma}", 'status_id' => self::TRANSACTION_STATUS_FAILED); } $course_list = SessionManager::get_course_list_by_session_id($session_id); if (!empty($course_list)) { $course_data = current($course_list); if (isset($course_data['code'])) { $gradebook = new Gradebook(); $gradebook = $gradebook->get_first(array('where' => array('course_code = ? AND session_id = ?' => array($course_data['code'], $session_id)))); error_log("Looking gradebook in course code: {$course_data['code']} - session_id: {$session_id}"); if (!empty($gradebook)) { //Check if gradebook exists $eval = new Evaluation(); $evals_found = $eval->load(null, null, null, $gradebook['id'], null, null); //Try to create a gradebook evaluation if (empty($evals_found)) { error_log("Trying to create a new evaluation in course code: {$course_data['code']} - session_id: {$session_id}"); $params = array('session_id' => $session_id, 'gradebook_description' => 'Evaluación General', 'gradebook_evaluation_type_id' => 0); self::create_gradebook_evaluation($params); $evals_found = $eval->load(null, null, null, $gradebook['id'], null, null); } if (!empty($evals_found)) { $evaluation = current($evals_found); $eval_id = $evaluation->get_id(); error_log("Gradebook exists: {$gradebook['id']} eval_id: {$eval_id}"); //Eval found $res = new Result(); $check_result = Result::load(null, $user_id, $eval_id); if (!empty($check_result) && isset($check_result[0])) { // Gradebook result found. Updating... $res->set_evaluation_id($eval_id); $res->set_user_id($user_id); $res->set_score($score); $res->set_id($check_result[0]->get_id()); $res->save(); $eval_result = Result::load(null, $user_id, $eval_id); return array('entity' => 'gradebook_evaluation_result', 'before' => $check_result, 'after' => $eval_result, 'message' => "Gradebook result edited ", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL); } else { // Gradebook result not found. Creating... // @todo disable when moving to production $res->set_evaluation_id($eval_id); $res->set_user_id($user_id); //if no scores are given, don't set the score $res->set_score($score); $res->add(); $eval_result = Result::load(null, $user_id, $eval_id); //$message = "Gradebook result not modified because gradebook result does not exist for user_id: $user_id - eval_id: $eval_id - gradebook_id: {$gradebook['id']} - course: {$course_data['code']} - session_id: $session_id"; return array('entity' => 'gradebook_evaluation_result', 'before' => null, 'after' => $eval_result, 'message' => "Gradebook result added because it did not exist for update", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL); } } else { $message = "Evaluation not found in gradebook: {$gradebook['id']} : in course: {$course_data['code']} - session_id: {$session_id}"; } } else { $message = "Gradebook does not exists in course: {$course_data['code']} - session_id: {$session_id}"; } } else { $message = "Something is wrong with the course "; } } else { $message = "NO course found for session id: {$session_id}"; } return array('message' => $message, 'status_id' => self::TRANSACTION_STATUS_FAILED); } else { return $data; } }
/** * Calculate the score of this evaluation * @param int $stud_id (default: all students who have results for this eval - then the average is returned) * @param string $type (best, average, ranking) * @return array (score, max) if student is given * array (sum of scores, number of scores) otherwise * or null if no scores available */ public function calc_score($stud_id = null, $type = null) { $results = Result::load(null, $stud_id, $this->id); $rescount = 0; $sum = 0; $bestResult = 0; $weight = 0; $sumResult = 0; $students = []; /** @var Result $res */ foreach ($results as $res) { $score = $res->get_score(); if (!empty($score) || $score == '0') { $rescount++; $sum += $score / $this->get_max(); $sumResult += $score; if ($score > $bestResult) { $bestResult = $score; } $weight = $this->get_max(); } $students[$res->get_user_id()] = $score; } if ($rescount == 0) { return null; } else { if (isset($stud_id)) { return array($score, $this->get_max()); } else { switch ($type) { case 'best': return array($bestResult, $weight); break; case 'average': return array($sumResult / $rescount, $weight); break; case 'ranking': return AbstractLink::getCurrentUserRanking($stud_id, $students); break; default: return array($sum, $rescount); break; } } } }