function definition() { global $COURSE; $mform =& $this->_form; //Is this particular course mapped to a course in WeBWorK $webworkclient = new webwork_client(); $coursemapped = _wwassignment_mapped_course($COURSE->id); if ($coursemapped == -1) { $mform->addElement('link', 'mainpage', get_string('mainpage_link_desc', 'wwassignment'), "view.php?id={$COURSE->id}", get_string('mainpage_link_name', 'wwassignment')); return; } //links $mform->addElement('link', 'instructor_page_link', get_string('instructor_page_link_desc', 'wwassignment'), wwassignment_instructor_page_link(), get_string('instructor_page_link_name', 'wwassignment')); if ($this->instance != "") { $mform->addElement('link', 'edit_set', get_string('edit_set_link_desc', 'wwassignment'), wwassignment_edit_set_link($this->_instance), get_string('edit_set_link_name', 'wwassignment')); } //define the mapping $mform->addElement('header', 'set_initialization', get_string('set_initialization', 'wwassignment')); //name $mform->addElement('text', 'name', get_string('wwassignmentname', 'wwassignment'), array('size' => '64')); $mform->setType('name', PARAM_TEXT); $mform->addRule('name', null, 'required', null, 'client'); //set select $options = $webworkclient->options_set($coursemapped, false); $mform->addElement('select', 'webwork_set', get_string('webwork_set', 'wwassignment'), $options); $mform->setHelpButton('webwork_set', array('webwork_set', get_string('webwork_set', 'wwassignment'), 'wwassignment')); //description $mform->addElement('htmleditor', 'description', get_string('description', 'assignment')); $mform->setType('description', PARAM_RAW); $mform->setHelpButton('description', array('writing', 'questions', 'richtext'), false, 'editorhelpbutton'); $this->add_action_buttons(); $this->standard_hidden_coursemodule_elements(); return; }
function definition() { global $COURSE, $USER, $OUTPUT; $mform =& $this->_form; //Is this particular course mapped to a course in WeBWorK $wwclient = new wwassignment_client(); $wwcoursename = _wwassignment_mapped_course($COURSE->id, false); $wwsetname = _wwassignment_mapped_set($this->_instance); $wwusername = $USER->username; //create the instructor if necessary $wwusername = _wwassignment_mapcreate_user($wwcoursename, $wwusername, '10'); //login the instructor $wwkey = _wwassignment_login_user($wwcoursename, $wwusername); $wwinstructorlink = _wwassignment_link_to_instructor_auto_login($wwcoursename, $wwusername, $wwkey); $mform->addElement('link', 'instructor_page_link', get_string('instructor_page_link_desc', 'wwassignment'), $wwinstructorlink, get_string('instructor_page_link_name', 'wwassignment')); if ($wwsetname != -1) { //we are doing an update, since an id exists in moodle db $wwsetlink = _wwassignment_link_to_edit_set_auto_login($wwcoursename, $wwsetname, $wwusername, $wwkey); $mform->addElement('link', 'edit_set', get_string('edit_set_link_desc', 'wwassignment'), $wwsetlink, get_string('edit_set_link_name', 'wwassignment')); $wwsetdata = $wwclient->get_assignment_data($wwcoursename, $wwsetname, false); $opendate = strftime("%c", $wwsetdata['open_date']); $duedate = strftime("%c", $wwsetdata['due_date']); $mform->addElement('static', 'opendate', 'WeBWorK Set Open Date', $opendate); $mform->addElement('static', 'duedate', 'WeBWorK Set Due Date', $duedate); } //define the mapping $mform->addElement('header', 'set_initialization', get_string('set_initialization', 'wwassignment')); //name $mform->addElement('text', 'name', get_string('wwassignmentname', 'wwassignment'), array('size' => '64')); $mform->setType('name', PARAM_TEXT); $mform->addRule('name', null, 'required', null, 'client'); //set select $options = $wwclient->options_set($wwcoursename, false); $mform->addElement('select', 'webwork_set', get_string('webwork_set', 'wwassignment'), $options); // $OUTPUT->help_icon('enablenotification','assignment'); $mform->addHelpButton('webwork_set', 'webwork_set', 'wwassignment'); //description $mform->addElement('htmleditor', 'description', get_string('description', 'assignment')); $mform->setType('description', PARAM_RAW); $mform->addHelpButton('description', 'writing', 'wwassignment'); $features = new stdClass(); $features->gradecat = true; $features->groups = false; $this->standard_coursemodule_elements($features); $this->add_action_buttons(); //$this->standard_hidden_coursemodule_elements(); return; }
function definition() { global $COURSE; $mform =& $this->_form; //Is this particular course mapped to a course in WeBWorK $webworkclient = webwork_client::get_instance(); $coursemapped = _wwassignment_mapped_course($COURSE->id); if ($coursemapped == -1) { //define the mapping $mform->addElement('header', 'course_initialization', get_string('course_initialization', 'wwassignment')); $options = $webworkclient->options_course(); $mform->addElement('select', 'webwork_course', get_string('webwork_course', 'wwassignment'), $options); $mform->setHelpButton('webwork_course', array('webwork_course', get_string('webwork_course', 'wwassignment'), 'wwassignment')); $mform->addElement('checkbox', 'auto_enroll_course', get_string('auto_enroll_course', 'wwassignment'), get_string('auto_enroll_course_desc', 'wwassignment')); $this->add_action_buttons(); $this->standard_hidden_coursemodule_elements(); return; } $mform->addElement('link', 'instructor_page_link', get_string('instructor_page_link_desc', 'wwassignment'), wwassignment_instructor_page_link(), get_string('instructor_page_link_name', 'wwassignment')); if ($this->_instance == "") { //doing an addition $mform->addElement("header", 'set_initialization', get_string('set_initialization', 'wwassignment')); $options = $webworkclient->options_set($coursemapped); $mform->addElement('select', 'webwork_set', get_string('webwork_set', 'wwassignment'), $options); $mform->setHelpButton('webwork_set', array('webwork_set', get_string('webwork_set', 'wwassignment'), 'wwassignment')); $mform->addElement('checkbox', 'auto_enroll_set', get_string('auto_enroll_set', 'wwassignment'), get_string('auto_enroll_set_desc', 'wwassignment')); $this->add_action_buttons(); $this->standard_hidden_coursemodule_elements(); return; } else { //doing an update //$this->standard_hidden_coursemodule_elements(); $mform->addElement('link', 'edit_set', get_string('edit_set_link_desc', 'wwassignment'), wwassignment_edit_set_link($this->_instance), get_string('edit_set_link_name', 'wwassignment')); //$this->add_action_buttons(false); } return; }
error("Course Module ID was incorrect"); } } //catch the guests global $USER; if ($USER->username == 'guest') { # this allows guests to view webwork (signed in as user guest) #FIXME -- replace this with a method that uses the automatic guest sign in on webwork. // print_error('Guests cannot view WeBWorK Problem Sets'); } //force login $courseid = $course->id; $wwassignmentid = $wwassignment->id; require_login($courseid); //webwork code $wwcoursename = _wwassignment_mapped_course($courseid, false); $wwusername = $USER->username; $wwsetname = $wwassignment->webwork_set; _wwassignment_mapcreate_user($wwcoursename, $wwusername); _wwassignment_mapcreate_user_set($wwcoursename, $wwusername, $wwsetname); $wwkey = _wwassignment_login_user($wwcoursename, $wwusername); $wwsetlink = _wwassignment_link_to_set_auto_login($wwcoursename, $wwsetname, $wwusername, $wwkey); add_to_log($course->id, "wwassignment", "view", "view.php?id={$cm->id}", "{$wwassignmentid}", _wwassignment_cmid()); /// Print the page header if ($course->category) { $navigation = "<a href=\"../../course/view.php?id={$course->id}\">{$course->shortname}</a> ->"; } $strwwassignments = get_string("modulenameplural", "wwassignment"); $strwwassignment = get_string("modulename", "wwassignment"); print_header("{$course->shortname}: {$wwassignment->name}", "{$course->fullname}", "{$navigation} <a href='index.php?id={$course->id}'>{$strwwassignments}</a> -> {$wwassignment->name}", "", "", true, update_module_button($cm->id, $course->id, $strwwassignment), navmenu($course, $cm)); /// Print the main part of the page
$strOpenDate = get_string("open_date", "wwassignment"); $strDueDate = get_string("due_date", "wwassignment"); if ($course->format == "weeks") { $table->head = array($strweek, $strname, $strdescription, $strOpenDate, $strDueDate); $table->align = array("center", "left", "left", "left", "left"); } else { if ($course->format == "topics") { $table->head = array($strtopic, $strname, $strdescription, $strOpenDate, $strDueDate); $table->align = array("center", "left", "left", "left", "left", "left", "left"); } else { $table->head = array($strname, $strdescription, $strOpenDate, $strDueDate); $table->align = array("left", "left", "left", "left", "left", "left"); } } $webworkclient =& new webwork_client(); $webworkcourse = _wwassignment_mapped_course($COURSE->id, false); foreach ($wwassignments as $wwassignment) { // grab specific info for this set: if (isset($wwassignment)) { //var_dump($wwassignment); $wwassignmentsetinfo = $webworkclient->get_assignment_data($webworkcourse, $wwassignment->webwork_set, false); $description = $wwassignment->description; if (!$wwassignment->visible) { //Show dimmed if the mod is hidden $link = "<a class=\"dimmed\" href=\"view.php?id={$wwassignment->coursemodule}\">{$wwassignment->name}</a>"; } else { //Show normal if the mod is visible $link = "<a href=\"view.php?id={$wwassignment->coursemodule}\">{$wwassignment->name}</a>"; } if ($course->format == "weeks" or $course->format == "topics") { $table->data[] = array($wwassignment->section, $link, $description, strftime("%c", $wwassignmentsetinfo['open_date']), strftime("%c", $wwassignmentsetinfo['due_date']));
/** * @desc Contacts webwork to find out the completion status of a problem set for all users in a course. * @param integer $wwassignmentid The problem set */ function wwassignment_grades($wwassignmentid) { global $COURSE; $webworkclient = new webwork_client(); $studentgrades->grades = array(); $studentgrades->maxgrade = 0; //debug_log("record ".print_r($oMod,true)); $gradeformula = '$finalgrade += ($problem->status > 0) ? 1 : 0;'; //debug_log("formula ".print_r($gradeFormula, true)); $webworkcourse = _wwassignment_mapped_course($COURSE->id, false); $webworkset = _wwassignment_mapped_set($wwassignmentid, false); // enumerate over the students in the course: $students = get_course_students($COURSE->id); $usernamearray = array(); foreach ($students as $student) { array_push($usernamearray, $student->username); } $gradearray = $webworkclient->grade_users_sets($webworkcourse, $usernamearray, $webworkset); $i = 0; foreach ($students as $student) { $studentgrades->grades[$student->id] = $gradearray[$i]; $i++; } $studentgrades->maxgrade = $webworkclient->get_max_grade($webworkcourse, $webworkset); return $studentgrades; }
function wwassignment_refresh_events($courseid = 0) { // error_log('wwassignment_refresh_events called --not yet defined'); global $DB; // This standard function will check all instances of this module // and make sure there are up-to-date events created for each of them. // If courseid = 0, then every wwassignment event in the site is checked, else // only wwassignment events belonging to the course specified are checked. // This function is used, in its new format, by restore_refresh_events() and by the cron function // // find wwassignment instances associated with this course or all wwassignment modules $courses = array(); # create array of courses if ($courseid) { if (!($wwassignments = $DB->get_records("wwassignment", array("course" => $courseid)))) { return true; } else { $courses[$courseid] = array(); // collect wwassignments for this course array_push($courses[$courseid], $wwassignments); } } else { if (!($wwassignments = $DB->get_records("wwassignment"))) { return true; } else { foreach ($wwassignments as $ww) { // collect wwassignments for each course // error_log("course id ".$ww->course); if (!$courses[$ww->course]) { $courses[$ww->course] = array(); } array_push($courses[$ww->course], $ww); // push wwassignment onto an exisiting one } } } // $courses now holds a list of courses with wwassignment modules $moduleid = _wwassignment_cmid(); $cids = array_keys($courses); # collect course ids // error_log("cids".print_r($cids, true)); $wwclient = new wwassignment_client(); foreach ($cids as $cid) { // connect to WeBWorK $wwcoursename = _wwassignment_mapped_course($cid, false); $wwassignment->webwork_course = $wwcoursename; if ($wwcoursename == -1) { // error_log("Can't connect course $cid to webwork"); break; } // retrieve wwassignments associated with this course foreach ($courses[$cid] as $wwassignment) { //checking mappings $wwsetname = $wwassignment->webwork_set; // error_log("updating events for $wwcoursename $wwsetname"); //get data from WeBWorK $wwsetdata = $wwclient->get_assignment_data($wwcoursename, $wwsetname, false); $wwassignment->grade = $wwclient->get_max_grade($wwcoursename, $wwsetname, false); $wwassignment->timemodified = time(); $returnid = $DB->update_record('wwassignment', $wwassignment); // update event //this part won't work because these items implicitly require the course. _wwassignment_delete_events($wwassignment->id); _wwassignment_create_events($wwassignment, $wwsetdata); } } return true; }
function _wwassignment_refresh_event($wwassignment) { global $DB; $cid = $wwassignment->course; $wwcoursename = _wwassignment_mapped_course($cid, false); if ($wwcoursename == -1) { error_log("Can't connect course {$cid} to webwork"); return false; } $wwclient = new wwassignment_client(); $wwsetname = $wwassignment->webwork_set; error_log("updating events for {$wwcoursename} {$wwsetname}"); //get data from WeBWorK $wwsetdata = $wwclient->get_assignment_data($wwcoursename, $wwsetname, false); $wwassignment->grade = $wwclient->get_max_grade($wwcoursename, $wwsetname, false); $wwassignment->timemodified = time(); $returnid = $DB->update_record('wwassignment', $wwassignment); // update event _wwassignment_delete_events($wwassignment->id); _wwassignment_create_events($wwassignment, $wwsetdata); return true; }
$strduedate = get_string("due_date", "wwassignment"); $strtotalpoints = get_string("total_points", "wwassignment"); if ($course->format == "weeks") { $table->head = array($strweek, $strname, $strdescription, $stropendate, $strduedate, $strtotalpoints); $table->align = array("center", "left", "left", "left", "left"); } else { if ($course->format == "topics") { $table->head = array($strtopic, $strname, $strdescription, $stropendate, $strduedate); $table->align = array("center", "left", "left", "left", "left", "left", "left"); } else { $table->head = array($strname, $strdescription, $stropendate, $strduedate); $table->align = array("left", "left", "left", "left", "left", "left"); } } $wwclient = new wwassignment_client(); $wwcoursename = _wwassignment_mapped_course($COURSE->id, false); foreach ($wwassignments as $wwassignment) { // grab specific info for this set: if (isset($wwassignment)) { $wwsetname = $wwassignment->webwork_set; $wwsetinfo = $wwclient->get_assignment_data($wwcoursename, $wwsetname, false); if (!$wwassignment->visible) { //Show dimmed if the mod is hidden $link = "<a class=\"dimmed\" href=\"view.php?id={$wwassignment->coursemodule}\">{$wwassignment->name}</a>"; } else { //Show normal if the mod is visible $link = "<a href=\"view.php?id={$wwassignment->coursemodule}\">{$wwassignment->name}</a>"; } if ($course->format == "weeks" or $course->format == "topics") { $totalpoints = $wwclient->get_max_grade($wwcoursename, $wwsetname, false); $table->data[] = array($wwassignment->section, $link, $wwassignment->description, strftime("%c", $wwsetinfo['open_date']), strftime("%c", $wwsetinfo['due_date']), $totalpoints);
/** * @desc Contacts webwork to find out the completion status of a problem set for all users in a course. * @param integer $wwassignmentid The problem set * @return object The student grades indexed by student ID. */ function wwassignment_grades($wwassignmentid) { global $COURSE; $wwclient = new wwassignment_client(); $studentgrades = new stdClass(); $studentgrades->grades = array(); $studentgrades->maxgrade = 0; $gradeformula = '$finalgrade += ($problem->status > 0) ? 1 : 0;'; $wwcoursename = _wwassignment_mapped_course($COURSE->id, false); $wwsetname = _wwassignment_mapped_set($wwassignmentid, false); // enumerate over the students in the course: $students = get_course_students($COURSE->id); $usernamearray = array(); foreach ($students as $student) { array_push($usernamearray, $student->username); } $gradearray = $wwclient->grade_users_sets($wwcoursename, $usernamearray, $wwsetname); $i = 0; foreach ($students as $student) { $studentgrades->grades[$student->id] = $gradearray[$i]; $i++; } $studentgrades->maxgrade = $wwclient->get_max_grade($wwcoursename, $wwsetname); return $studentgrades; }
function wwassignment_grades($wwassignmentid) { /// Must return an array of grades for a given instance of this module, /// indexed by user. It also returns a maximum allowed grade. /// /// $return->grades = array of grades; /// $return->maxgrade = maximum allowed grade; /// /// return $return; // here's how we compute the grade: // NOTE: each set has P problems in it. // NOTE: each problem may be attempted M times. // NOTE: each problem has been attempted A times (by a given user). // NOTE: each problem was gotten correct C times (by a given user). // NOTE: each problem was gotten incorrect I times (by a given user). // Thus, a users grade is: sigma(over P) C/A // And the max score is P // Alternately, code is provided for: // sigma(over P) { if( C > 0) 1 else 0 } // again with a max of P // redefine it here, 'cause for some reason we can't global it... //debug_log("start grades ".$wwassignmentid); global $COURSE; $webworkclient = webwork_client::get_instance(); $studentgrades->grades = array(); $studentgrades->maxgrade = 0; //debug_log("record ".print_r($oMod,true)); $gradeformula = '$finalgrade += ($problem->status > 0) ? 1 : 0;'; //debug_log("formula ".print_r($gradeFormula, true)); $webworkcourse = _wwassignment_mapped_course($COURSE->id, false); $webworkset = _wwassignment_mapped_set($wwassignmentid, false); // enumerate over the students in the course: $students = get_course_students($COURSE->id); foreach ($students as $student) { $webworkuser = $webworkclient->mapped_user($webworkcourse, $student->username, false); $webworkuserset = $webworkclient->mapped_user_set($webworkcourse, $webworkuser, $webworkset, false); $studentproblems = $webworkclient->get_user_problems($webworkcourse, $webworkuser, $webworkset); $finalgrade = 0.0; foreach ($studentproblems as $problem) { $finalgrade += $problem->status; } $studentgrades->grades[$student->id] = $finalgrade; } $studentgrades->maxgrade = $webworkclient->get_max_grade($webworkcourse, $webworkset); //error_log("all grades".print_r($studentgrades, true)); return $studentgrades; }