</SELECT> </form> <script language=javascript>document.formulario.select.options['.$selection.'].selected = true;</script> '; }*/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// Comprobamos si existen instrumentos modificados con evaluaciones asociadas ///////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if ($toollist = evalcomix_tool::fetch_all(array('evxid' => $environment->id))) { $newgrades = webservice_evalcomix_client::get_assessments_modified(array('tools' => $toollist)); if (!empty($newgrades)) { include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_assessments.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_grades.php'; $toolids = array(); foreach ($tasks as $task) { if ($assessments = evalcomix_assessments::fetch_all(array('taskid' => $task->id))) { foreach ($assessments as $assessment) { $activity = $task->instanceid; $module = evalcomix_tasks::get_type_task($activity); $mode = grade_report_evalcomix::get_type_evaluation($assessment->studentid, $courseid, $assessment->assessorid); $str = $courseid . '_' . $module . '_' . $activity . '_' . $assessment->studentid . '_' . $assessment->assessorid . '_' . $mode . '_' . MOODLE_NAME; $assessmentid = md5($str); if (isset($newgrades[$assessmentid])) { $grade = $newgrades[$assessmentid]->grade; $toolids[] = $newgrades[$assessmentid]->toolid; $assessment->grade = $grade; $assessment->update(); if ($evalcomix_grade = evalcomix_grades::fetch(array('courseid' => $courseid, 'cmid' => $task->instanceid, 'userid' => $assessment->studentid))) { $params = array('cmid' => $task->instanceid, 'userid' => $assessment->studentid, 'courseid' => $courseid); $finalgrade = evalcomix_grades::get_finalgrade_user_task($params); if ($finalgrade !== null) {
$idusers = array('2', '4'); $idcourse = 22; $result = evalcomix_assessments::get_final_grade($idcourse, $idusers); $zero = sizeof($result); $this->assertEqual($zero, '0'); unset($idusers, $idcourse, $result, $zero); } /**
} /** * @param int $taskid * @param int $userid * @return object with evalcomix_assessment objects by modality and their weighings */ public static function get_assessments_by_modality($taskid, $userid) { global $CFG, $DB; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_modes.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_tasks.php'; $assessments = evalcomix_assessments::fetch_all(array('studentid' => $userid, 'taskid' => $taskid)); if ($assessments) { if (!($task = evalcomix_tasks::fetch(array('id' => $taskid)))) {
/** * @param array tasks * @return array of course assessments by [taskid][assessor][student] */ function load_assessments($tasks) { $result = array(); if (is_array($tasks)) { foreach ($tasks as $task) { if (isset($task->id)) { if ($assessments = evalcomix_assessments::fetch_all(array('taskid' => $task->id))) { $taskid = $task->id; foreach ($assessments as $assessment) { $assessorid = $assessment->assessorid; $studentid = $assessment->studentid; $result[$taskid][$assessorid][$studentid] = $assessment; } } } } } return $result; }
require_once $CFG->dirroot . '/blocks/evalcomix/assessment/lib.php'; require_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_tasks.php'; require_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_modes.php'; $context = get_context_instance(CONTEXT_COURSE, $courseid); $report_evalcomix = new grade_report_evalcomix($courseid, null, $context); $users = $report_evalcomix->load_users(); $assessed_users = array(); if ($task = evalcomix_tasks::fetch(array('instanceid' => $cmid))) { if ($mode = evalcomix_modes::fetch(array('taskid' => $task->id, 'modality' => $modality))) { foreach ($users as $user) { if (!$assessorid) { $assessorid = $user->id; } //It obtains assignments for each task and user $params2 = array('taskid' => $task->id, 'studentid' => $user->id, 'assessorid' => $assessorid); $assessments = evalcomix_assessments::fetch_all($params2); if ($assessments) { $assessed_users[] = $user; } } } } if (empty($assessed_users)) { $output = html_writer::start_tag('div', array('style' => 'font-style:italic')); $output .= get_string('nostudentselfassessed', 'block_evalcomix'); $output .= html_writer::end_tag('div'); } else { $num_users = 0; $output = html_writer::start_tag('table'); foreach ($assessed_users as $user) { $output .= html_writer::start_tag('tr');
/** * Calculates finalgrade for a student in a activity * @param int $params[cmid] course module id * @param int $params[userid] student id * @return the finalgrade or -1 if there is only peer-assessment but assessment period hasn't finished or -2 if there is not any assessment */ public static function get_finalgrade_user_task($params) { if (!isset($params['cmid']) || !isset($params['userid']) || !isset($params['courseid'])) { return null; } $cmid = $params['cmid']; $userid = $params['userid']; $courseid = $params['courseid']; //$coursecontext = get_context_instance(CONTEXT_COURSE, $courseid); $coursecontext = context_course::instance($courseid); $now = time(); global $CFG, $DB; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_tasks.php'; if (!($task = evalcomix_tasks::fetch(array('instanceid' => $cmid)))) { return null; } $result = null; $teacherweight = -1; $selfweight = -1; $peerweight = -1; $params_modes = array('taskid' => $task->id); $modes = evalcomix_modes::fetch_all($params_modes); if ($modes) { //Obtains activity´s weights foreach ($modes as $mode) { switch ($mode->modality) { case 'teacher': $teacherweight = $mode->weighing; break; case 'self': $selfweight = $mode->weighing; break; case 'peer': $peerweight = $mode->weighing; break; default: } } //echo $task->id . ': teacherweight-' . $teacherweight . ' selfweight-' .$selfweight . ' peerweight-' .$peerweight.'<br/>'; $params2 = array('taskid' => $task->id, 'studentid' => $userid); $assessments = evalcomix_assessments::fetch_all($params2); $inperiod = false; if ($assessments) { //$selfgrade = 0; $selfgrade = -1; $teachergrade = 0; $numteachers = 0; $peergrade = 0; $numpeers = 0; $grade = 0; foreach ($assessments as $assessment) { //If it is a self assessment if ($assessment->studentid == $assessment->assessorid && $selfweight != -1) { $selfgrade = $assessment->grade; } elseif (has_capability('moodle/grade:viewhidden', $coursecontext, $assessment->assessorid)) { if ($teacherweight != -1) { $teachergrade += $assessment->grade; $numteachers++; } } elseif ($assessment->studentid != $assessment->assessorid) { //If it is a peer assessment //Only gets grades when the assessment period in the task is finished if ($modeEI = evalcomix_modes::fetch(array('taskid' => $assessment->taskid, 'modality' => 'peer'))) { $modeEItime = evalcomix_modes_time::fetch(array('modeid' => $modeEI->id)); if ($modeEItime && $now > $modeEItime->timedue) { $peergrade += $assessment->grade; $numpeers++; } elseif ($now >= $modeEItime->timeavailable && $now <= $modeEItime->timedue) { $inperiod = true; } } } } //Calculates peergrade if ($numpeers > 0) { $peergrade = round($peergrade / $numpeers, 2); } //Calculates teachergrade if ($numteachers > 0) { $teachergrade = round($teachergrade / $numteachers, 2); } //Calcultes the total grade //if($teachergrade != 0 || $selfgrade != 0 || $peergrade != 0){ if ($numteachers > 0 || $numpeers > 0 || $selfgrade != -1) { if ($selfgrade == -1) { $selfgrade = 0; } $result = $selfgrade * ($selfweight / 100) + $teachergrade * ($teacherweight / 100) + $peergrade * ($peerweight / 100); } elseif ($inperiod == true) { //There is peer assessments but assessment period hasn't finished $result = -1; } else { $result = -2; } return $result; } else { return null; } } else { return -3; } }
if ($assessdelete) { $stringmode = 'peer'; if ($assessdelete->assessorid == $assessdelete->studentid) { $stringmode = 'self'; } $response = webservice_evalcomix_client::delete_ws_assessment($course->id, $module->name, $task->instanceid, $user->id, $assessdelete->assessorid, $stringmode, MOODLE_NAME); $assessdelete->delete(); $params = array('cmid' => $task->instanceid, 'userid' => $user->id, 'courseid' => $course->id); $finalgrade = evalcomix_grades::get_finalgrade_user_task($params); if ($finalgrade !== null) { if ($gradeObject = evalcomix_grades::fetch($params)) { $gradeObject->finalgrade = $finalgrade; $gradeObject->update(); } } else { if ($gradeObject = evalcomix_grades::fetch($params)) { $gradeObject->delete(); } } } } if (!($assessments = evalcomix_assessments::fetch_all(array('studentid' => $user->id, 'taskid' => $itemid)))) { // print_error('Wrong parameters'); } $selfassessment = null; $teacherassessments = array(); $peerassessments = array(); $totalpeergrade = 0; $num_peer_grades = 0; $totalteachergrade = 0; $num_teacher_grades = 0;
/** * @param int $oldversion */ function xmldb_block_evalcomix_upgrade($oldversion = 201111802) { global $DB; $dbman = $DB->get_manager(); $result = true; /// Add a new column newcol to the mdl_question_myqtype if ($oldversion < 2012013005) { // Define table block_evalcomix to be created $table = new xmldb_table('block_evalcomix'); // Adding fields to table block_evalcomix $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); $table->add_field('viewmode', XMLDB_TYPE_CHAR, '10', null, XMLDB_NOTNULL, null, 'evx'); $table->add_field('sendgradebook', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, '0'); // Adding keys to table block_evalcomix $table->add_key('id', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // evalcomix savepoint reached upgrade_block_savepoint(true, 2012013005, 'evalcomix'); } if ($oldversion < 2012013004) { // Define table block_evalcomix_tasks to be created $table = new xmldb_table('block_evalcomix_tasks'); // Adding fields to table block_evalcomix_tasks $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('instanceid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); $table->add_field('maxgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, '0'); $table->add_field('weighing', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); // Adding keys to table block_evalcomix_tasks $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_tasks if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // evalcomix savepoint reached upgrade_block_savepoint(true, 2012013004, 'evalcomix'); } if ($oldversion < 2012013004) { // Define table block_evalcomix_modes to be created $table = new xmldb_table('block_evalcomix_modes'); // Adding fields to table block_evalcomix_modes $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('taskid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); $table->add_field('toolid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); $table->add_field('modality', XMLDB_TYPE_CHAR, '7', null, XMLDB_NOTNULL, null, 'teacher'); $table->add_field('weighing', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); // Adding keys to table block_evalcomix_modes $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_modes if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // evalcomix savepoint reached upgrade_block_savepoint(true, 2012013004, 'evalcomix'); } if ($oldversion < 2012013004) { // Define table block_evalcomix_modes_time to be created $table = new xmldb_table('block_evalcomix_modes_time'); // Adding fields to table block_evalcomix_modes_time $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('modeid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); $table->add_field('timeavailable', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, '0'); $table->add_field('timedue', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, '0'); // Adding keys to table block_evalcomix_modes_time $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_modes_time if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // evalcomix savepoint reached upgrade_block_savepoint(true, 2012013004, 'evalcomix'); } //if ($oldversion < 2013110600) { if ($oldversion < 2012013004) { // Define table block_evalcomix_modes_extra to be created. $table = new xmldb_table('block_evalcomix_modes_extra'); // Adding fields to table block_evalcomix_modes_extra. $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('anonymous', XMLDB_TYPE_INTEGER, '1', null, null, null, '0'); $table->add_field('modeid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0'); // Adding keys to table block_evalcomix_modes_extra. $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_modes_extra. if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // Evalcomix savepoint reached. //upgrade_block_savepoint(true, 2013110600, 'evalcomix'); upgrade_block_savepoint(true, 2012013004, 'evalcomix'); } else { } //if ($oldversion < 2013090502) { if ($oldversion < 2012013004) { // Define table block_evalcomix_tools to be created $table = new xmldb_table('block_evalcomix_tools'); // Adding fields to table block_evalcomix_tools $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('evxid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0'); $table->add_field('title', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null); $table->add_field('type', XMLDB_TYPE_CHAR, '12', null, XMLDB_NOTNULL, null, 'scale'); $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, null, null, '0'); $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, null, null, '0'); $table->add_field('idtool', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, '0'); // Adding keys to table block_evalcomix_tools $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_tools if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // evalcomix savepoint reached //upgrade_block_savepoint(true, 2013090502, 'evalcomix'); upgrade_block_savepoint(true, 2012013004, 'evalcomix'); } if ($oldversion < 2013102505) { // Define table block_evalcomix_grades to be created. $table = new xmldb_table('block_evalcomix_grades'); // Adding fields to table block_evalcomix_grades. $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); $table->add_field('cmid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); $table->add_field('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null); $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); // Adding keys to table block_evalcomix_grades. $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_grades. if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // Evalcomix savepoint reached. upgrade_block_savepoint(true, 2013102505, 'evalcomix'); global $CFG; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_grades.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_tasks.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_assessments.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_modes_extra.php'; include_once $CFG->dirroot . '/blocks/evalcomix/classes/evalcomix_modes_time.php'; if ($tasks = evalcomix_tasks::fetch_all(array())) { foreach ($tasks as $task) { echo '<br><br><br>Procesando task: ' . $task->id . '<br>'; echo 'Finalgrades asociados: <br>'; if ($cm = $DB->get_record('course_modules', array('id' => $task->instanceid))) { $courseid = $cm->course; if ($assessments = evalcomix_assessments::fetch_all(array('taskid' => $task->id))) { foreach ($assessments as $assessment) { $params = array(); //cmid -- userid -- courseid $params['cmid'] = $task->instanceid; $params['userid'] = $assessment->studentid; $params['courseid'] = $courseid; $finalgrade = evalcomix_grades::get_finalgrade_user_task($params); echo "finalgrade: {$finalgrade} <br>"; if ($finalgrade !== null) { if ($gradeObject = evalcomix_grades::fetch($params)) { $gradeObject->finalgrade = $finalgrade; $gradeObject->update(); } else { $params['finalgrade'] = $finalgrade; $gradeObject = new evalcomix_grades($params); $gradeObject->insert(); } } else { if ($gradeObject = evalcomix_grades::fetch($params)) { $gradeObject->delete(); } } } } } } } } if ($oldversion < 2013111801) { // Define table block_evalcomix_allowedusers to be created. $table = new xmldb_table('block_evalcomix_allowedusers'); // Adding fields to table block_evalcomix_allowedusers. $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); $table->add_field('cmid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); $table->add_field('assessorid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); $table->add_field('studentid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null); // Adding keys to table block_evalcomix_allowedusers. $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); // Conditionally launch create table for block_evalcomix_allowedusers. if (!$dbman->table_exists($table)) { $dbman->create_table($table); } // Evalcomix savepoint reached. upgrade_block_savepoint(true, 2013111801, 'evalcomix'); } if ($oldversion < 2013111801) { // Define field whoassesses to be added to block_evalcomix_modes_extra. $table = new xmldb_table('block_evalcomix_modes_extra'); $field1 = new xmldb_field('visible', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0'); if (!$dbman->field_exists($table, $field1)) { $dbman->add_field($table, $field1); } $field2 = new xmldb_field('whoassesses', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'visible'); // Conditionally launch add field whoassesses. if (!$dbman->field_exists($table, $field2)) { $dbman->add_field($table, $field2); } // Evalcomix savepoint reached. upgrade_block_savepoint(true, 2013111802, 'evalcomix'); } if ($oldversion < 2013121700) { // Define field visible to be added to block_evalcomix_tasks. $table = new xmldb_table('block_evalcomix_tasks'); $field = new xmldb_field('visible', XMLDB_TYPE_INTEGER, '1', null, null, null, '1', 'timemodified'); // Conditionally launch add field visible. if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Evalcomix savepoint reached. upgrade_block_savepoint(true, 2013121700, 'evalcomix'); } if ($oldversion < 2014040716) { // Define field idtool to be added to block_evalcomix_tools. $table = new xmldb_table('block_evalcomix_tools'); $field = new xmldb_field('idtool', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, '0', 'timemodified'); // Conditionally launch add field idtool. if ($dbman->field_exists($table, $field)) { $dbman->change_field_type($table, $field); } // Evalcomix savepoint reached. upgrade_block_savepoint(true, 2014040716, 'evalcomix'); } return $result; }