* @access public * @modulegroup elearning_interface_modules * @module Ilias3ConnectedPermission * @package ELearning-Interface */ class Ilias3ConnectedPermissions extends ConnectedPermissions { var $operations; var $allowed_operations; var $tree_allowed_operations; var $USER_OPERATIONS; var $AUTHOR_OPERATIONS; /** * constructor * * init class. * @access * @param string $cms system-type */ function __construct($cms) { global $connected_cms; parent::__construct($cms); $this->readData(); if ($connected_cms[$this->cms_type]->user->isConnected()) { $roles = $this->getUserRoles(); $connected_cms[$this->cms_type]->user->setRoles( $roles ); } $this->USER_OPERATIONS = [OPERATION_VISIBLE, OPERATION_READ]; // $this->AUTHOR_OPERATIONS = array(OPERATION_VISIBLE, OPERATION_READ, OPERATION_CREATE_LM, OPERATION_CREATE_TEST, OPERATION_CREATE_QUESTIONS, OPERATION_CREATE_FILE); $this->permissions_changed = false; } /** * read data * * reads acces control data from database * @access public */ function readData() { global $connected_cms; // $this->operations = $this->db_class->getOperations($connected_cms[$this->cms_type]->db); $this->operations = $connected_cms[$this->cms_type]->soap_client->getOperations(); } /** * check user permissions * * checks user permissions for connected course and changes setting if necessary * @access public * @param string $course_id course-id * @return boolean returns false on error */ function checkUserPermissions($course_id = "") { global $connected_cms, $messages; if ($course_id == "") return false; if ($connected_cms[$this->cms_type]->user->getId() == "") return false; // get course role folder and local roles $local_roles = $connected_cms[$this->cms_type]->soap_client->getLocalRoles($course_id); $active_role = ""; $proper_role = ""; $user_crs_role = $connected_cms[$this->cms_type]->crs_roles[$perm->get_studip_perm(Context::getId())]; if (is_array($local_roles)) foreach ($local_roles as $key => $role_data) // check only if local role is il_crs_member, -tutor or -admin if (! (mb_strpos($role_data["title"], "_crs_") === false)) { if ( in_array( $role_data["obj_id"], $connected_cms[$this->cms_type]->user->getRoles() ) ) $active_role = $role_data["obj_id"]; if ( mb_strpos( $role_data["title"], $user_crs_role) > 0 ) $proper_role = $role_data["obj_id"]; } // if ($GLOBALS["debug"] == true) // echo "P$proper_role A$active_role U" . $user_crs_role . " R" . implode($connected_cms[$this->cms_type]->user->getRoles(), ".")."
"; // is user already course-member? otherwise add member with proper role $is_member = $connected_cms[$this->cms_type]->soap_client->isMember( $connected_cms[$this->cms_type]->user->getId(), $course_id); if (! $is_member) { $member_data["usr_id"] = $connected_cms[$this->cms_type]->user->getId(); $member_data["ref_id"] = $course_id; $member_data["status"] = CRS_NO_NOTIFICATION; $type = ""; switch ($user_crs_role) { case "admin": $member_data["role"] = CRS_ADMIN_ROLE; $type = "Admin"; break; case "tutor": $member_data["role"] = CRS_TUTOR_ROLE; $type = "Tutor"; break; case "member": $member_data["role"] = CRS_MEMBER_ROLE; $type = "Member"; break; default: } $member_data["passed"] = CRS_PASSED_VALUE; if ($type != "") { $connected_cms[$this->cms_type]->soap_client->addMember( $connected_cms[$this->cms_type]->user->getId(), $type, $course_id ); if ($GLOBALS["debug"] == true) echo "addMember"; $this->permissions_changed = true; } } // check if user has proper local role // if not, change it if ($active_role != $proper_role) { if ($active_role != "") { $connected_cms[$this->cms_type]->soap_client->deleteUserRoleEntry( $connected_cms[$this->cms_type]->user->getId(), $active_role); if ($GLOBALS["debug"] == true) echo "Role $active_role deleted."; } if ($proper_role != "") { $connected_cms[$this->cms_type]->soap_client->addUserRoleEntry( $connected_cms[$this->cms_type]->user->getId(), $proper_role); if ($GLOBALS["debug"] == true) echo "Role $proper_role added."; } $this->permissions_changed = true; } if (!$this->getContentModulePerms($course_id)) { $messages["info"] .= _("Für den zugeordneten ILIAS-Kurs konnten keine Berechtigungen ermittelt werden.") . "
"; } } /** * get user roles * * returns roles for current user * @access public * @return array role-ids */ function getUserRoles() { global $connected_cms; return $connected_cms[$this->cms_type]->soap_client->getUserRoles($connected_cms[$this->cms_type]->user->getId()); } /** * get permissions for content module * * returns allowed operations for given user and module * @access public * @param string $module_id module-id * @return boolean returns false on error */ function getContentModulePerms($module_id) { global $connected_cms, $current_module; if (is_array($connected_cms[$this->cms_type]->content_module[$current_module]->allowed_operations)) return true; $this->allowed_operations = []; $this->tree_allowed_operations = $connected_cms[$this->cms_type]->soap_client->getObjectTreeOperations( $module_id, $connected_cms[$this->cms_type]->user->getId() ); // echo "MID".$module_id."UID".$connected_cms[$this->cms_type]->user->getId()."OPS".implode($this->tree_allowed_operations,"-") ; if (! is_array($this->tree_allowed_operations)) return false; $no_permission = false; if (isset($current_module)) { //TODO: fixes Warning:Creating default object from empty value - possible side effects if ((! in_array($this->operations[OPERATION_READ], $this->tree_allowed_operations)) OR (! in_array($this->operations[OPERATION_VISIBLE], $this->tree_allowed_operations))) $no_permission = true; if ($no_permission == false) $connected_cms[$this->cms_type]->content_module[$current_module]->allowed_operations = $this->tree_allowed_operations; else $connected_cms[$this->cms_type]->content_module[$current_module]->allowed_operations = false; } return true; } /** * get operation * * returns id for given operation-string * @access public * @param string $operation operation * @return integer operation-id */ function getOperation($operation) { return $this->operations[$operation]; } /** * get operation-ids * * returns an array of operation-ids * @access public * @param string $operation operation * @return array operation-ids */ function getOperationArray($operation) { if (is_array($operation)) { foreach ($operation as $key => $operation_name) { $ops_array[] = $this->operations[$operation_name]; } } else return false; return $ops_array; } } ?>