1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
<?php
# Lifter002: TODO
# Lifter007: TODO
# Lifter003: TODO
# Lifter010: TODO
DEFINE ("OPERATION_COPY", "copy");
/**
* class to handle ILIAS 4 access controls
*
* This class contains methods to handle permissions on connected objects.
*
* @author Arne Schröder <schroeder@data-quest.de>
* @access public
* @modulegroup elearning_interface_modules
* @module Ilias4ConnectedPermission
* @package ELearning-Interface
*/
class Ilias4ConnectedPermissions extends Ilias3ConnectedPermissions
{
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)
{
parent::__construct($cms);
}
/**
* 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[$GLOBALS["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"];
}
}
}
}
// 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";
}
}
// 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.";
}
}
if (! $this->getContentModulePerms( $course_id )) {
$messages["info"] .= _("Für den zugeordneten ILIAS-Kurs konnten keine Berechtigungen ermittelt werden.") . "<br>";
}
return true;
}
}
?>
|