00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00033 include_once './webservice/soap/classes/class.ilSoapAdministration.php';
00034
00035 class ilSoapCourseAdministration extends ilSoapAdministration
00036 {
00037 function ilSoapCourseAdministration()
00038 {
00039 parent::ilSoapAdministration();
00040 }
00041
00042
00043
00044 function addCourse($sid,$target_id,$crs_xml)
00045 {
00046 if(!$this->__checkSession($sid))
00047 {
00048 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00049 }
00050
00051 if(!is_numeric($target_id))
00052 {
00053 return $this->__raiseError('No valid target id given. Please choose an existing reference id of an ILIAS category',
00054 'Client');
00055 }
00056
00057
00058 include_once './include/inc.header.php';
00059 global $rbacsystem;
00060
00061 if(!$rbacsystem->checkAccess('create',$target_id,'crs'))
00062 {
00063 return $this->__raiseError('Check access failed. No permission to create courses','Server');
00064 }
00065
00066
00067 include_once("course/classes/class.ilObjCourse.php");
00068
00069 $newObj = new ilObjCourse();
00070 $newObj->setType('crs');
00071 $newObj->setTitle('dummy');
00072 $newObj->setDescription("");
00073 $newObj->create(true);
00074 $newObj->createReference();
00075 $newObj->putInTree($target_id);
00076 $newObj->setPermissions($target_id);
00077 $newObj->initDefaultRoles();
00078
00079 include_once 'course/classes/class.ilCourseXMLParser.php';
00080
00081 $xml_parser = new ilCourseXMLParser($newObj);
00082 $xml_parser->setXMLContent($crs_xml);
00083
00084 $xml_parser->startParsing();
00085
00086 $newObj->MDUpdateListener('General');
00087
00088 return $newObj->getRefId() ? $newObj->getRefId() : "0";
00089
00090 }
00091
00092 function deleteCourse($sid,$course_id)
00093 {
00094 if(!$this->__checkSession($sid))
00095 {
00096 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00097 }
00098
00099 if(!is_numeric($course_id))
00100 {
00101 return $this->__raiseError('No valid course id given. Please choose an existing reference id of an ILIAS course',
00102 'Client');
00103 }
00104
00105
00106 include_once './include/inc.header.php';
00107 include_once './classes/class.ilUtil.php';
00108 global $rbacsystem;
00109
00110 if(($obj_type = ilObject::_lookupType(ilObject::_lookupObjId($course_id))) != 'crs')
00111 {
00112 $course_id = end($ref_ids = ilObject::_getAllReferences($course_id));
00113 if(ilObject::_lookupType(ilObject::_lookupObjId($course_id)) != 'crs')
00114 {
00115 return $this->__raiseError('Invalid course id. Object with id "'. $course_id.'" is not of type "course"','Client');
00116 }
00117 }
00118
00119 if(!$rbacsystem->checkAccess('delete',$course_id))
00120 {
00121 return $this->__raiseError('Check access failed. No permission to delete course','Server');
00122 }
00123
00124
00125 global $tree,$rbacadmin,$log;
00126
00127 $subnodes = $tree->getSubtree($tree->getNodeData($course_id));
00128
00129 foreach ($subnodes as $subnode)
00130 {
00131 $rbacadmin->revokePermission($subnode["child"]);
00132
00133
00134 $affected_users = ilUtil::removeItemFromDesktops($subnode["child"]);
00135
00136 }
00137 $tree->saveSubTree($course_id);
00138 $tree->deleteTree($tree->getNodeData($course_id));
00139
00140
00141 $log->write("SOAP ilObjectGUI::confirmedDeleteObject(), moved ref_id ".$course_id." to trash");
00142
00143
00144 $affected_users = ilUtil::removeItemFromDesktops($course_id);
00145
00146 return true;
00147 }
00148
00149 function assignCourseMember($sid,$course_id,$user_id,$type)
00150 {
00151 if(!$this->__checkSession($sid))
00152 {
00153 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00154 }
00155
00156 if(!is_numeric($course_id))
00157 {
00158 return $this->__raiseError('No valid course id given. Please choose an existing reference id of an ILIAS course',
00159 'Client');
00160 }
00161
00162
00163 include_once './include/inc.header.php';
00164
00165 global $rbacsystem;
00166
00167 if(($obj_type = ilObject::_lookupType(ilObject::_lookupObjId($course_id))) != 'crs')
00168 {
00169 $course_id = end($ref_ids = ilObject::_getAllReferences($course_id));
00170 if(ilObject::_lookupType(ilObject::_lookupObjId($course_id)) != 'crs')
00171 {
00172 return $this->__raiseError('Invalid course id. Object with id "'. $course_id.'" is not of type "course"','Client');
00173 }
00174 }
00175
00176 if(!$rbacsystem->checkAccess('write',$course_id))
00177 {
00178 return $this->__raiseError('Check access failed. No permission to write to course','Server');
00179 }
00180
00181
00182 if(ilObject::_lookupType($user_id) != 'usr')
00183 {
00184 return $this->__raiseError('Invalid user id. User with id "'. $user_id.' does not exist','Client');
00185 }
00186 if($type != 'Admin' and
00187 $type != 'Tutor' and
00188 $type != 'Member')
00189 {
00190 return $this->__raiseError('Invalid type given. Parameter "type" must be "Admin", "Tutor" or "Member"','Client');
00191 }
00192
00193 if(!$tmp_course = ilObjectFactory::getInstanceByRefId($course_id,false))
00194 {
00195 return $this->__raiseError('Cannot create course instance!','Server');
00196 }
00197
00198 if(!$tmp_user = ilObjectFactory::getInstanceByObjId($user_id,false))
00199 {
00200 return $this->__raiseError('Cannot create user instance!','Server');
00201 }
00202
00203 include_once 'course/classes/class.ilCourseMembers.php';
00204
00205 $course_members = new ilCourseMembers($tmp_course);
00206
00207 switch($type)
00208 {
00209 case 'Admin':
00210 $course_members->add($tmp_user,$course_members->ROLE_ADMIN,$course_members->STATUS_NOTIFY,0);
00211 break;
00212
00213 case 'Tutor':
00214 $course_members->add($tmp_user,$course_members->ROLE_TUTOR,$course_members->STATUS_NO_NOTIFY,0);
00215 break;
00216
00217 case 'Member':
00218 $course_members->add($tmp_user,$course_members->ROLE_MEMBER,$course_members->STATUS_UNBLOCKED,0);
00219 break;
00220 }
00221
00222 return true;
00223 }
00224
00225 function excludeCourseMember($sid,$course_id,$user_id)
00226 {
00227 if(!$this->__checkSession($sid))
00228 {
00229 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00230 }
00231 if(!is_numeric($course_id))
00232 {
00233 return $this->__raiseError('No valid course id given. Please choose an existing reference id of an ILIAS course',
00234 'Client');
00235 }
00236
00237
00238 include_once './include/inc.header.php';
00239 global $rbacsystem;
00240
00241 if(($obj_type = ilObject::_lookupType(ilObject::_lookupObjId($course_id))) != 'crs')
00242 {
00243 $course_id = end($ref_ids = ilObject::_getAllReferences($course_id));
00244 if(ilObject::_lookupType(ilObject::_lookupObjId($course_id)) != 'crs')
00245 {
00246 return $this->__raiseError('Invalid course id. Object with id "'. $course_id.'" is not of type "course"','Client');
00247 }
00248 }
00249
00250 if(ilObject::_lookupType($user_id) != 'usr')
00251 {
00252 return $this->__raiseError('Invalid user id. User with id "'. $user_id.' does not exist','Client');
00253 }
00254
00255 if(!$tmp_course = ilObjectFactory::getInstanceByRefId($course_id,false))
00256 {
00257 return $this->__raiseError('Cannot create course instance!','Server');
00258 }
00259
00260 if(!$rbacsystem->checkAccess('write',$course_id))
00261 {
00262 return $this->__raiseError('Check access failed. No permission to write to course','Server');
00263 }
00264
00265 include_once 'course/classes/class.ilCourseMembers.php';
00266
00267 $course_members = new ilCourseMembers($tmp_course);
00268
00269 if(!$course_members->checkLastAdmin(array($user_id)))
00270 {
00271 return $this->__raiseError('Cannot deassign last administrator from course','Server');
00272 }
00273
00274 $course_members->delete($user_id);
00275
00276 return true;
00277 }
00278
00279
00280 function isAssignedToCourse($sid,$course_id,$user_id)
00281 {
00282 if(!$this->__checkSession($sid))
00283 {
00284 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00285 }
00286 if(!is_numeric($course_id))
00287 {
00288 return $this->__raiseError('No valid course id given. Please choose an existing reference id of an ILIAS course',
00289 'Client');
00290 }
00291
00292 include_once './include/inc.header.php';
00293 global $rbacsystem;
00294
00295 if(($obj_type = ilObject::_lookupType(ilObject::_lookupObjId($course_id))) != 'crs')
00296 {
00297 $course_id = end($ref_ids = ilObject::_getAllReferences($course_id));
00298 if(ilObject::_lookupType(ilObject::_lookupObjId($course_id)) != 'crs')
00299 {
00300 return $this->__raiseError('Invalid course id. Object with id "'. $course_id.'" is not of type "course"','Client');
00301 }
00302 }
00303
00304 if(ilObject::_lookupType($user_id) != 'usr')
00305 {
00306 return $this->__raiseError('Invalid user id. User with id "'. $user_id.' does not exist','Client');
00307 }
00308
00309 if(!$tmp_course = ilObjectFactory::getInstanceByRefId($course_id,false))
00310 {
00311 return $this->__raiseError('Cannot create course instance!','Server');
00312 }
00313
00314 if(!$rbacsystem->checkAccess('write',$course_id))
00315 {
00316 return $this->__raiseError('Check access failed. No permission to write to course','Server');
00317 }
00318
00319 include_once './course/classes/class.ilCourseMembers.php';
00320
00321 $crs_members = new ilCourseMembers($tmp_course);
00322
00323 if($crs_members->isAdmin($user_id))
00324 {
00325 return $crs_members->ROLE_ADMIN;
00326 }
00327 if($crs_members->isTutor($user_id))
00328 {
00329 return $crs_members->ROLE_TUTOR;
00330 }
00331 if($crs_members->isMember($user_id))
00332 {
00333 return $crs_members->ROLE_MEMBER;
00334 }
00335
00336 return "0";
00337 }
00338
00339
00340 function getCourseXML($sid,$course_id)
00341 {
00342 if(!$this->__checkSession($sid))
00343 {
00344 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00345 }
00346 if(!is_numeric($course_id))
00347 {
00348 return $this->__raiseError('No valid course id given. Please choose an existing reference id of an ILIAS course',
00349 'Client');
00350 }
00351
00352
00353 include_once './include/inc.header.php';
00354
00355 global $rbacsystem;
00356
00357 if(($obj_type = ilObject::_lookupType(ilObject::_lookupObjId($course_id))) != 'crs')
00358 {
00359 $course_id = end($ref_ids = ilObject::_getAllReferences($course_id));
00360 if(ilObject::_lookupType(ilObject::_lookupObjId($course_id)) != 'crs')
00361 {
00362 return $this->__raiseError('Invalid course id. Object with id "'. $course_id.'" is not of type "course"','Client');
00363 }
00364 }
00365
00366 if(!$tmp_course = ilObjectFactory::getInstanceByRefId($course_id,false))
00367 {
00368 return $this->__raiseError('Cannot create course instance!','Server');
00369 }
00370
00371 if(!$rbacsystem->checkAccess('read',$course_id))
00372 {
00373 return $this->__raiseError('Check access failed. No permission to read course','Server');
00374 }
00375
00376 include_once 'course/classes/class.ilCourseXMLWriter.php';
00377
00378 $xml_writer = new ilCourseXMLWriter($tmp_course);
00379 $xml_writer->start();
00380
00381 return $xml_writer->getXML();
00382 }
00383
00384 function updateCourse($sid,$course_id,$xml)
00385 {
00386 if(!$this->__checkSession($sid))
00387 {
00388 return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00389 }
00390 if(!is_numeric($course_id))
00391 {
00392 return $this->__raiseError('No valid course id given. Please choose an existing reference id of an ILIAS course',
00393 'Client');
00394 }
00395
00396
00397 include_once './include/inc.header.php';
00398
00399 global $rbacsystem;
00400
00401 if(($obj_type = ilObject::_lookupType(ilObject::_lookupObjId($course_id))) != 'crs')
00402 {
00403 $course_id = end($ref_ids = ilObject::_getAllReferences($course_id));
00404 if(ilObject::_lookupType(ilObject::_lookupObjId($course_id)) != 'crs')
00405 {
00406 return $this->__raiseError('Invalid course id. Object with id "'. $course_id.'" is not of type "course"','Client');
00407 }
00408 }
00409
00410 if(!$tmp_course = ilObjectFactory::getInstanceByRefId($course_id,false))
00411 {
00412 return $this->__raiseError('Cannot create course instance!','Server');
00413 }
00414
00415 if(!$rbacsystem->checkAccess('write',$course_id))
00416 {
00417 return $this->__raiseError('Check access failed. No permission to write course','Server');
00418 }
00419
00420
00421
00422 include_once 'Services/MetaData/classes/class.ilMD.php';
00423
00424 $md = new ilMD($tmp_course->getId(),0,'crs');
00425 $md->deleteAll();
00426
00427 include_once 'course/classes/class.ilCourseMembers.php';
00428
00429 $crs_members = new ilCourseMembers($tmp_course);
00430 $crs_members->deleteAllEntries();
00431
00432 include_once 'course/classes/class.ilCourseWaitingList.php';
00433
00434 ilCourseWaitingList::_deleteAll($tmp_course->getId());
00435
00436 include_once 'course/classes/class.ilCourseXMLParser.php';
00437
00438 $xml_parser = new ilCourseXMLParser($tmp_course);
00439 $xml_parser->setXMLContent($xml);
00440
00441 $xml_parser->startParsing();
00442
00443 $tmp_course->MDUpdateListener('General');
00444
00445 return true;
00446 }
00447
00448
00449
00450 }
00451 ?>