[system] / trunk / wwmoodle / wwassignment / lib.php Repository:
ViewVC logotype

Diff of /trunk/wwmoodle/wwassignment/lib.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 5057 Revision 5058
1<?php 1<?php
2// $Id: lib.php,v 1.11 2007-06-26 06:46:33 mleventi Exp $ 2// $Id: lib.php,v 1.12 2007-06-28 20:09:32 mleventi Exp $
3 3
4require_once("$CFG->libdir/soap/nusoap.php");
4 5
5define('WWASSIGNMENT_WEBWORK_URL', $CFG->wwassignment_webworkurl); 6define('WWASSIGNMENT_WEBWORK_URL', $CFG->wwassignment_webworkurl);
6define('WWASSIGNMENT_WEBWORK_WSDL', $CFG->wwassignment_rpc_wsdl); 7define('WWASSIGNMENT_WEBWORK_WSDL', $CFG->wwassignment_rpc_wsdl);
7define('WWASSIGNMENT_WEBWORK_KEY',$CFG->wwassignment_rpc_key); 8define('WWASSIGNMENT_WEBWORK_KEY',$CFG->wwassignment_rpc_key);
8 9
12* @return URL to the assignment. 13* @return URL to the assignment.
13*/ 14*/
14function wwassignment_view_link($wwassignmentid) { 15function wwassignment_view_link($wwassignmentid) {
15 global $COURSE,$USER; 16 global $COURSE,$USER;
16 17
17 $webworkclient = webwork_client::get_instance(); 18 $webworkclient =& new webwork_client();
18 $webworkcourse = _wwassignment_mapped_course($COURSE->id,false); 19 $webworkcourse = _wwassignment_mapped_course($COURSE->id,false);
19 $webworkset = _wwassignment_mapped_set($wwassignmentid,false); 20 $webworkset = _wwassignment_mapped_set($wwassignmentid,false);
20 $webworkuser = $webworkclient->mapped_user($webworkcourse,$USER->username); 21 $webworkuser = $webworkclient->mapped_user($webworkcourse,$USER->username);
21 if($webworkuser == -1) { 22 if($webworkuser == -1) {
22 error_log(get_string("user_not_mapped","wwassignment")); 23 error_log(get_string("user_not_mapped","wwassignment"));
44* @param string $wwassignmentid The assignment id. 45* @param string $wwassignmentid The assignment id.
45* @return URL The URL. 46* @return URL The URL.
46*/ 47*/
47function wwassignment_edit_set_link($wwassignmentid) { 48function wwassignment_edit_set_link($wwassignmentid) {
48 global $COURSE,$USER; 49 global $COURSE,$USER;
49 $webworkclient = webwork_client::get_instance(); 50 $webworkclient =& new webwork_client();
50 51
51 //IS THE COURSE MAPPED? 52 //IS THE COURSE MAPPED?
52 $webworkcourse = _wwassignment_mapped_course($COURSE->id,false); 53 $webworkcourse = _wwassignment_mapped_course($COURSE->id,false);
53 //IS THE SET MAPPED? 54 //IS THE SET MAPPED?
54 $webworkset = _wwassignment_mapped_set($wwassignmentid,false); 55 $webworkset = _wwassignment_mapped_set($wwassignmentid,false);
71* @desc Creates an auto_login link to the URL of the instructor page for the webwork course associated with the current course. 72* @desc Creates an auto_login link to the URL of the instructor page for the webwork course associated with the current course.
72* @return URL The URL. 73* @return URL The URL.
73*/ 74*/
74function wwassignment_instructor_page_link() { 75function wwassignment_instructor_page_link() {
75 global $COURSE,$USER; 76 global $COURSE,$USER;
76 $webworkclient = webwork_client::get_instance(); 77 $webworkclient =& new webwork_client();
77 78
78 $webworkcourse = _wwassignment_mapped_course($COURSE->id,false); 79 $webworkcourse = _wwassignment_mapped_course($COURSE->id,false);
79 //IS THE USER MAPPED? 80 //IS THE USER MAPPED?
80 $webworkuser = $webworkclient->mapped_user($webworkcourse,$USER->username); 81 $webworkuser = $webworkclient->mapped_user($webworkcourse,$USER->username);
81 if($webworkuser == -1) { 82 if($webworkuser == -1) {
107 error_log("adding wwassignment_bridge record"); 108 error_log("adding wwassignment_bridge record");
108 $wwassignment->course = $COURSE->id; 109 $wwassignment->course = $COURSE->id;
109 $returnid = insert_record("wwassignment_bridge",$wwassignment); 110 $returnid = insert_record("wwassignment_bridge",$wwassignment);
110 $wwassignment->webwork_set = "undefined"; 111 $wwassignment->webwork_set = "undefined";
111 $returnid = insert_record("wwassignment",$wwassignment); 112 $returnid = insert_record("wwassignment",$wwassignment);
112 $webworkclient = webwork_client::get_instance(); 113 $webworkclient =& new webwork_client();
113 if($webworkclient->mapped_user($wwassignment->webwork_course,$USER->username) == -1) { 114 if($webworkclient->mapped_user($wwassignment->webwork_course,$USER->username) == -1) {
114 $webworkclient->create_user($wwassignment->webwork_course,$USER,"10"); 115 $webworkclient->create_user($wwassignment->webwork_course,$USER,"10");
115 } 116 }
116 return $returnid; 117 return $returnid;
117 } 118 }
118 if(isset($wwassignment->webwork_set)) { 119 if(isset($wwassignment->webwork_set)) {
119 $webworkclient = webwork_client::get_instance(); 120 $webworkclient =& new webwork_client();
120 if($wwassignment->webwork_set =="create") { 121 if($wwassignment->webwork_set =="create") {
121 print_error("Creation is not yet supported."); 122 print_error("Creation is not yet supported.");
122 } 123 }
123 $webworkcourse = _wwassignment_mapped_course($COURSE->id); 124 $webworkcourse = _wwassignment_mapped_course($COURSE->id);
124 $webworksetdata = $webworkclient->get_assignment_data($webworkcourse,$wwassignment->webwork_set,false); 125 $webworksetdata = $webworkclient->get_assignment_data($webworkcourse,$wwassignment->webwork_set,false);
152/** 153/**
153* @desc Updates and resynchronizes all information related to the a moodle assignment <-> webwork problem set tie. 154* @desc Updates and resynchronizes all information related to the a moodle assignment <-> webwork problem set tie.
154*/ 155*/
155function wwassignment_update_instance($wwassignment) { 156function wwassignment_update_instance($wwassignment) {
156 global $COURSE; 157 global $COURSE;
157 $webworkclient = webwork_client::get_instance(); 158 $webworkclient =& new webwork_client();
158 $webworkcourse = _wwassignment_mapped_course($COURSE->id); 159 $webworkcourse = _wwassignment_mapped_course($COURSE->id);
159 $webworkset = _wwassignment_mapped_set($wwassignment->instance,false); 160 $webworkset = _wwassignment_mapped_set($wwassignment->instance,false);
160 $webworksetdata = $webworkclient->get_assignment_data($webworkcourse,$webworkset,false); 161 $webworksetdata = $webworkclient->get_assignment_data($webworkcourse,$webworkset,false);
161 if(isset($webworksetdata)) { 162 if(isset($webworksetdata)) {
162 $wwassignment->name = get_string("set_name","wwassignment") . " " . $webworksetdata['set_id']; 163 $wwassignment->name = get_string("set_name","wwassignment") . " " . $webworksetdata['set_id'];
187 return $returnid; 188 return $returnid;
188} 189}
189 190
190/** 191/**
191* @desc Deletes a tie in Moodle. Deletes nothing in webwork. 192* @desc Deletes a tie in Moodle. Deletes nothing in webwork.
193* @param integer $id The id of the assignment to delete.
192*/ 194*/
193function wwassignment_delete_instance($id) { 195function wwassignment_delete_instance($id) {
194 196
195 $result = true; 197 $result = true;
196 if (! $wwassignment = get_record("wwassignment", "id", "$id")) { 198 if (! $wwassignment = get_record("wwassignment", "id", "$id")) {
282 // again with a max of P 284 // again with a max of P
283 285
284 // redefine it here, 'cause for some reason we can't global it... 286 // redefine it here, 'cause for some reason we can't global it...
285 //debug_log("start grades ".$wwassignmentid); 287 //debug_log("start grades ".$wwassignmentid);
286 global $COURSE; 288 global $COURSE;
287 $webworkclient = webwork_client::get_instance(); 289 $webworkclient =& new webwork_client();
288 $studentgrades->grades = array(); 290 $studentgrades->grades = array();
289 $studentgrades->maxgrade = 0; 291 $studentgrades->maxgrade = 0;
290 //debug_log("record ".print_r($oMod,true)); 292 //debug_log("record ".print_r($oMod,true));
291 $gradeformula = '$finalgrade += ($problem->status > 0) ? 1 : 0;'; 293 $gradeformula = '$finalgrade += ($problem->status > 0) ? 1 : 0;';
292 //debug_log("formula ".print_r($gradeFormula, true)); 294 //debug_log("formula ".print_r($gradeFormula, true));
473 475
474/** 476/**
475* @desc This singleton class acts as the gateway for all communication from the Moodle Client to the WeBWorK SOAP Server. It encapsulates an instance of a SoapClient. 477* @desc This singleton class acts as the gateway for all communication from the Moodle Client to the WeBWorK SOAP Server. It encapsulates an instance of a SoapClient.
476*/ 478*/
477class webwork_client { 479class webwork_client {
478 private $client; 480 var $client;
479 private $defaultparams; 481 var $defaultparams;
480 private $datacache; 482 var $datacache;
481 private $mappingcache; 483 var $mappingcache;
482 static private $instance;
483 484 /**
484 /**
485 * @desc Constructs a webwork_client. 485 * @desc Constructs a singleton webwork_client.
486 */ 486 */
487 private function __construct() { 487 function webwork_client()
488 {
489 // static associative array containing the real objects, key is classname
490 static $instances=array();
491 // get classname
492 $class = get_class($this);
493 if (!array_key_exists($class, $instances)) {
494 // does not yet exist, save in array
488 $this->client = new SoapClient(WWASSIGNMENT_WEBWORK_WSDL); 495 $this->client = new soap_client(WWASSIGNMENT_WEBWORK_WSDL,'wsdl');
496 $err = $this->client->getError();
497 if ($err) {
498 print_error("Constructor Error");
499 }
500 $this->defaultparams = array();
489 $this->defaultparams = array(WWASSIGNMENT_WEBWORK_KEY); 501 $this->defaultparams['authenKey'] = WWASSIGNMENT_WEBWORK_KEY;
490 $this->datacache = array(); 502 $this->datacache = array();
491 $this->mappingcache = array(); 503 $this->mappingcache = array();
492 //Does a mapping exist for this course 504 $instances[$class] = $this;
493 /*$mapping = _wwassignment_course_mapped();
494 if($mapping != 0) {
495 $this->defaultparams = array_push($this->defaultparams,$mapping);
496 }*/ 505
497 } 506 }
498 /** 507 foreach (get_class_vars($class) as $var => $value) {
499 * @desc Retrieves the singleton instance of the webwork_client class. 508 $this->$var =& $instances[$class]->$var;
500 * @return The instance of the class.
501 */
502 public function get_instance() {
503 if(self::$instance == NULL) {
504 self::$instance = new webwork_client();
505 }
506 return self::$instance;
507 } 509 }
508 510 }
509 /** 511 /**
510 *@desc Calls a SOAP function and passes (authenkey,course) automatically in the parameter list. 512 *@desc Calls a SOAP function and passes (authenkey,course) automatically in the parameter list.
511 *@param string $functioncall The function to call 513 *@param string $functioncall The function to call
512 *@param array $params The parameters to the function. 514 *@param array $params The parameters to the function.
513 *@param integer $override=false whether to override the default parameters that are passed to the soap function (authenKey). 515 *@param integer $override=false whether to override the default parameters that are passed to the soap function (authenKey).
514 *@return Result of the soap function. 516 *@return Result of the soap function.
515 */ 517 */
516 private function handler($functioncall,$params=array(),$override=false) { 518 function handler($functioncall,$params=array(),$override=false) {
517 if(!is_array($params)) { 519 if(!is_array($params)) {
518 $params = array($params); 520 $params = array($params);
519 } 521 }
520 if(!$override) { 522 if(!$override) {
521 $params = array_merge($this->defaultparams,$params); 523 $params = array_merge($this->defaultparams,$params);
522 } 524 }
523 try { 525 $result = $this->client->call($functioncall,$params);
524 return call_user_func_array(array(&$this->client,$functioncall),$params); 526 //$result = call_user_func_array(array(&$this->client,$functioncall),$params);
525 527 if($err = $this->client->getError()) {
528 print_error(get_string("rpc_fault","wwassignment") . " " . $functioncall. " ". $err);
526 } 529 }
527 catch (SoapFault $exception) { 530 return $result;
528 print_error(get_string("rpc_fault","wwassignment") . " " . $functioncall. " ". $exception->faultstring);
529 }
530 } 531 }
531 532
532 /** 533 /**
533 * @desc Checks whether a user is in a webwork course. 534 * @desc Checks whether a user is in a webwork course.
534 * @param string $webworkcourse The webwork course name. 535 * @param string $webworkcourse The webwork course name.
535 * @param string $webworkuser The webwork user name. 536 * @param string $webworkuser The webwork user name.
536 * @param integer $silent whether to trigger an error message 537 * @param integer $silent whether to trigger an error message
537 * @return string Returns the webwork user on success and -1 on failure. 538 * @return string Returns the webwork user on success and -1 on failure.
538 */ 539 */
539 public function mapped_user($webworkcourse,$webworkuser,$silent = true) { 540 function mapped_user($webworkcourse,$webworkuser,$silent = true) {
540 if(isset($this->mappingcache[$webworkcourse]['user'][$webworkuser])) { 541 if(isset($this->mappingcache[$webworkcourse]['user'][$webworkuser])) {
541 return $this->mappingcache[$webworkcourse]['user'][$webworkuser]; 542 return $this->mappingcache[$webworkcourse]['user'][$webworkuser];
542 } 543 }
543 $record = $this->handler('get_user',array($webworkcourse,$webworkuser)); 544 $record = $this->handler('get_user',array("courseName" => $webworkcourse,"userID" => $webworkuser));
544 if($record != -1) { 545 if($record != -1) {
545 $this->mappingcache[$webworkcourse]['user'][$webworkuser] = $webworkuser; 546 $this->mappingcache[$webworkcourse]['user'][$webworkuser] = $webworkuser;
546 return $webworkuser; 547 return $webworkuser;
547 } 548 }
548 if(!$silent) { 549 if(!$silent) {
557 * @param string $webworkuser The webwork user name. 558 * @param string $webworkuser The webwork user name.
558 * @param string $webworkset The webwork set name. 559 * @param string $webworkset The webwork set name.
559 * @param integer $silent whether to trigger an error message 560 * @param integer $silent whether to trigger an error message
560 * @return integer Returns 1 on success and -1 on failure. 561 * @return integer Returns 1 on success and -1 on failure.
561 */ 562 */
562 public function mapped_user_set($webworkcourse,$webworkuser,$webworkset,$silent = true) { 563 function mapped_user_set($webworkcourse,$webworkuser,$webworkset,$silent = true) {
563 if(isset($this->mappingcache[$webworkcourse]['user_set'][$webworkuser][$webworkset])) { 564 if(isset($this->mappingcache[$webworkcourse]['user_set'][$webworkuser][$webworkset])) {
564 return $this->mappingcache[$webworkcourse]['user_set'][$webworkuser][$webworkset]; 565 return $this->mappingcache[$webworkcourse]['user_set'][$webworkuser][$webworkset];
565 } 566 }
566 $record = $this->handler("get_user_set",array($webworkcourse,$webworkuser,$webworkset)); 567 $record = $this->handler("get_user_set",array("courseName" => $webworkcourse,"userID" => $webworkuser,"setID" => $webworkset));
567 if($record != -1) { 568 if($record != -1) {
568 $this->mappingcache[$webworkcourse]['user_set'][$webworkuser][$webworkset] = 1; 569 $this->mappingcache[$webworkcourse]['user_set'][$webworkuser][$webworkset] = 1;
569 return 1; 570 return 1;
570 } 571 }
571 572
580 * @param string $webworkcourse The webwork course name. 581 * @param string $webworkcourse The webwork course name.
581 * @param string $webworkset The webwork set name. 582 * @param string $webworkset The webwork set name.
582 * @param integer $silent whether to trigger an error message 583 * @param integer $silent whether to trigger an error message
583 * @return array Returns set information on success or -1 on failure. 584 * @return array Returns set information on success or -1 on failure.
584 */ 585 */
585 public function get_assignment_data($webworkcourse,$webworkset,$silent = true) { 586 function get_assignment_data($webworkcourse,$webworkset,$silent = true) {
586 $record = $this->handler("get_global_set",array($webworkcourse,$webworkset)); 587 $record = $this->handler("get_global_set",array('courseName' => $webworkcourse, 'setID' => $webworkset));
587 if(isset($record)) { 588 if(isset($record)) {
588 $setinfo = array(); 589 $setinfo = array();
589 $setinfo['open_date'] = $record->open_date; 590 $setinfo['open_date'] = $record->open_date;
590 $setinfo['due_date'] = $record->due_date; 591 $setinfo['due_date'] = $record->due_date;
591 $setinfo['set_id'] = $record->set_id; 592 $setinfo['set_id'] = $record->set_id;
605 * @param string $webworkuser The webwork users name. 606 * @param string $webworkuser The webwork users name.
606 * @param string $webworkset The webwork set name. 607 * @param string $webworkset The webwork set name.
607 * @param integer $silent whether to trigger an error message 608 * @param integer $silent whether to trigger an error message
608 * @return array Returns an array of problems on success or -1 on failure. 609 * @return array Returns an array of problems on success or -1 on failure.
609 */ 610 */
610 public function get_user_problems($webworkcourse,$webworkuser,$webworkset,$silent = true) { 611 function get_user_problems($webworkcourse,$webworkuser,$webworkset,$silent = true) {
611 $record = $this->handler("get_all_user_problems",array($webworkcourse,$webworkuser,$webworkset)); 612 $record = $this->handler("get_all_user_problems",array("courseName" => $webworkcourse,"userID" => $webworkuser,"setID" => $webworkset));
612 if(isset($record)) { 613 if(isset($record)) {
613 return $record; 614 return $record;
614 } 615 }
615 if(!$silent) { 616 if(!$silent) {
616 print_error(get_string("webwork_map_failure","wwassignment") . "The user $webworkuser does not have copies of the set $webworkset in webwork course $webworkcourse."); 617 print_error(get_string("webwork_map_failure","wwassignment") . "The user $webworkuser does not have copies of the set $webworkset in webwork course $webworkcourse.");
623 * @param string $webworkcourse The webwork course name. 624 * @param string $webworkcourse The webwork course name.
624 * @param string $webworkset The webwork set name. 625 * @param string $webworkset The webwork set name.
625 * @param integer $silent whether to trigger an error message 626 * @param integer $silent whether to trigger an error message
626 * @return integer The max grade on success or -1 on failure. 627 * @return integer The max grade on success or -1 on failure.
627 */ 628 */
628 public function get_max_grade($webworkcourse,$webworkset,$silent = true) { 629 function get_max_grade($webworkcourse,$webworkset,$silent = true) {
629 $record = $this->handler('list_global_problems',array($webworkcourse,$webworkset)); 630 $record = $this->handler('list_global_problems',array("courseName" => $webworkcourse,"setID" => $webworkset));
630 if(isset($record)) { 631 if(isset($record)) {
631 return count($record); 632 return count($record);
632 } 633 }
633 if(!$silent) { 634 if(!$silent) {
634 print_error(get_string("webwork_map_failure","wwassignment") . "The set $webworkset does not exist in webwork course $webworkcourse."); 635 print_error(get_string("webwork_map_failure","wwassignment") . "The set $webworkset does not exist in webwork course $webworkcourse.");
641 * @param string $webworkcourse The webwork course name. 642 * @param string $webworkcourse The webwork course name.
642 * @param string $webworkuser The webwork users name. 643 * @param string $webworkuser The webwork users name.
643 * @param integer $silent whether to trigger an error message 644 * @param integer $silent whether to trigger an error message
644 * @return string The webwork key for URL on success or -1 on failure. 645 * @return string The webwork key for URL on success or -1 on failure.
645 */ 646 */
646 public function login_user($webworkcourse,$webworkuser,$silent = true) { 647 function login_user($webworkcourse,$webworkuser,$silent = true) {
647 $key = $this->handler("login_user",array($webworkcourse,$webworkuser)); 648 $key = $this->handler("login_user",array("courseName" => $webworkcourse,"userID" => $webworkuser));
648 if(isset($key)) { 649 if(isset($key)) {
649 return $key; 650 return $key;
650 } 651 }
651 if(!$silent) { 652 if(!$silent) {
652 print_error(get_string("webwork_map_failure","wwassignment") . "The user $webworkuser cannot login to $webworkcourse."); 653 print_error(get_string("webwork_map_failure","wwassignment") . "The user $webworkuser cannot login to $webworkcourse.");
658 * @desc Retrieves a list of sets from a webwork course and converts it into form options format. 659 * @desc Retrieves a list of sets from a webwork course and converts it into form options format.
659 * @param string $webworkcourse The webwork course name. 660 * @param string $webworkcourse The webwork course name.
660 * @param integer $silent whether to trigger an error message 661 * @param integer $silent whether to trigger an error message
661 * @return array The form options. 662 * @return array The form options.
662 */ 663 */
663 public function options_set($webworkcourse,$silent = true) { 664 function options_set($webworkcourse,$silent = true) {
664 $setlist = $this->handler('list_global_sets',array($webworkcourse)); 665 $setlist = $this->handler('list_global_sets',array("courseName" => $webworkcourse));
665 if(isset($setlist)) { 666 if(isset($setlist)) {
666 $setoptions = array(); 667 $setoptions = array();
667 foreach($setlist as $setid) { 668 foreach($setlist as $setid) {
668 $setoptions[$setid] = $setid; 669 $setoptions[$setid] = $setid;
669 } 670 }
701 * @param string $webworkcourse The webwork course name. 702 * @param string $webworkcourse The webwork course name.
702 * @param array $userdata The user data to use in creation. 703 * @param array $userdata The user data to use in creation.
703 * @param string $permission The permissions of the new user, defaults to 0. 704 * @param string $permission The permissions of the new user, defaults to 0.
704 * @return Returns 1 on success. 705 * @return Returns 1 on success.
705 */ 706 */
706 public function create_user($webworkcourse,&$userdata,$permission="0") { 707 function create_user($webworkcourse,&$userdata,$permission="0") {
707 //student ID switch
708 if(isset($userdata->student_id)) { 708 if(isset($userdata->student_id)) {
709 $studentid = $userdata->student_id; 709 $studentid = $userdata->student_id;
710 } else { 710 } else {
711 $studentid = $userid; 711 $studentid = $userid;
712 } 712 }
713 //insert user record
714 $this->handler("add_user",array($webworkcourse,array( 713 $this->handler("add_user",array("courseName" => $webworkcourse, "record" => array(
715 "user_id" => $userdata->username, 714 "user_id" => $userdata->username,
716 "first_name" => $userdata->firstname, 715 "first_name" => $userdata->firstname,
717 "last_name" => $userdata->lastname, 716 "last_name" => $userdata->lastname,
718 "email_address" => $userdata->emailaddress, 717 "email_address" => $userdata->emailaddress,
719 "student_id" => $studentid, 718 "student_id" => $studentid,
735 * @param string $webworkcourse The webwork course name. 734 * @param string $webworkcourse The webwork course name.
736 * @param string $webworkuser The webwork user name. 735 * @param string $webworkuser The webwork user name.
737 * @param string $webworkset The webwork set name. 736 * @param string $webworkset The webwork set name.
738 * @return Returns 1 on success. 737 * @return Returns 1 on success.
739 */ 738 */
740 public function create_user_set($webworkcourse,$webworkuser,$webworkset) { 739 function create_user_set($webworkcourse,$webworkuser,$webworkset) {
741 $this->handler("assign_set_to_user",array($webworkcourse,$webworkuser,$webworkset)); 740 $this->handler("assign_set_to_user",array("courseName" => $webworkcourse,"userID" => $webworkuser, "setID" => $webworkset));
742 return 1; 741 return 1;
743 } 742 }
744}; 743};
745 744
746?> 745?>

Legend:
Removed from v.5057  
changed lines
  Added in v.5058

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9