aboutsummaryrefslogtreecommitdiff
path: root/lib/elearning/Ilias4ConnectedPermissions.class.php
blob: af70ba75d7fba70712ae2444baae55d28735eb70 (plain)
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;
    }
}
?>