ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjContentObjectAccess.php
Go to the documentation of this file.
1<?php
2
23{
24 protected ilObjUser $user;
25 protected ilLanguage $lng;
28
29 public function __construct()
30 {
31 global $DIC;
32
33 $this->user = $DIC->user();
34 $this->lng = $DIC->language();
35 $this->rbacsystem = $DIC->rbac()->system();
36 $this->access = $DIC->access();
37 }
38
39 public static array $lo_access;
40
41 public function _checkAccess(string $cmd, string $permission, int $ref_id, int $obj_id, ?int $user_id = null): bool
42 {
43 $ilUser = $this->user;
45 $ilAccess = $this->access;
46
47 switch ($cmd) {
48 case "continue":
49
50 // continue is now default and works all the time
51 // see ilLMPresentationGUI::resume()
52 /*
53 if ($ilUser->getId() == ANONYMOUS_USER_ID)
54 {
55 $ilAccess->addInfoItem(ilAccessInfo::IL_NO_OBJECT_ACCESS, $lng->txt("lm_no_continue_for_anonym"));
56 return false;
57 }
58 if (ilObjContentObjectAccess::_getLastAccessedPage($ref_id,$user_id) <= 0)
59 {
60 $ilAccess->addInfoItem(ilAccessInfo::IL_NO_OBJECT_ACCESS, $lng->txt("not_accessed_yet"));
61 return false;
62 }
63 */
64 break;
65
66 // for permission query feature
67 case "info":
68 if (!ilObject::lookupOfflineStatus($obj_id)) {
70 }
71 break;
72 }
73
74 return true;
75 }
76
77 //
78 // access relevant methods
79 //
80
81 public static function _getLastAccessedPage(
82 int $a_ref_id,
83 int $a_user_id = 0
84 ): int {
85 global $DIC;
86
87 $ilDB = $DIC->database();
88 $ilUser = $DIC->user();
89
90 if ($a_user_id == 0) {
91 $a_user_id = $ilUser->getId();
92 }
93
94 if (isset(self::$lo_access[$a_ref_id])) {
95 $acc_rec["obj_id"] = self::$lo_access[$a_ref_id];
96 } else {
97 $q = "SELECT * FROM lo_access WHERE " .
98 "usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND " .
99 "lm_id = " . $ilDB->quote($a_ref_id, "integer");
100
101 $acc_set = $ilDB->query($q);
102 $acc_rec = $ilDB->fetchAssoc($acc_set);
103 }
104
105 if (($acc_rec["obj_id"] ?? 0) > 0) {
106 $lm_id = ilObject::_lookupObjId($a_ref_id);
107 $mtree = new ilTree($lm_id);
108 $mtree->setTableNames('lm_tree', 'lm_data');
109 $mtree->setTreeTablePK("lm_id");
110 if ($mtree->isInTree($acc_rec["obj_id"])) {
111 return $acc_rec["obj_id"];
112 }
113 }
114
115 return 0;
116 }
117
118 public static function _checkGoto(string $target): bool
119 {
120 global $DIC;
121
122 $ilAccess = $DIC->access();
123
124 $t_arr = explode("_", $target);
125
126 if (($t_arr[0] != "lm" && $t_arr[0] != "st"
127 && $t_arr[0] != "pg")
128 || ((int) $t_arr[1]) <= 0) {
129 return false;
130 }
131
132 if ($t_arr[0] == "lm") {
133 if ($ilAccess->checkAccess("read", "", $t_arr[1]) ||
134 $ilAccess->checkAccess("visible", "", $t_arr[1])) {
135 return true;
136 }
137 } else {
138 if (($t_arr[2] ?? 0) > 0) {
139 $ref_ids = array($t_arr[2]);
140 } else {
141 // determine learning object
142 $lm_id = ilLMObject::_lookupContObjID($t_arr[1]);
143 $ref_ids = ilObject::_getAllReferences($lm_id);
144 }
145 // check read permissions
146 foreach ($ref_ids as $ref_id) {
147 // Permission check
148 if ($ilAccess->checkAccess("read", "", $ref_id)) {
149 return true;
150 }
151 }
152 }
153 return false;
154 }
155
156 public static function _preloadData(array $obj_ids, array $ref_ids): void
157 {
158 global $DIC;
159
160 $reading_time_manager = new \ILIAS\LearningModule\ReadingTime\ReadingTimeManager();
161 $reading_time_manager->loadData($obj_ids);
162
163 $ilDB = $DIC->database();
164 $ilUser = $DIC->user();
165
166 $q = "SELECT obj_id, lm_id FROM lo_access WHERE " .
167 "usr_id = " . $ilDB->quote($ilUser->getId(), "integer") . " AND " .
168 $ilDB->in("lm_id", $ref_ids, false, "integer");
169 $set = $ilDB->query($q);
170 foreach ($ref_ids as $r) {
171 self::$lo_access[$r] = 0;
172 }
173 while ($rec = $ilDB->fetchAssoc($set)) {
174 self::$lo_access[$rec["lm_id"]] = $rec["obj_id"];
175 }
176 }
177
178 public static function isInfoEnabled(int $obj_id): bool
179 {
181 $obj_id,
183 true
184 );
185 }
186}
static _lookupContainerSetting(int $a_id, string $a_keyword, ?string $a_default_value=null)
static _lookupContObjID(int $a_id)
get learning module id for lm object
language handling
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _checkGoto(string $target)
check whether goto script will succeed
_checkAccess(string $cmd, string $permission, int $ref_id, int $obj_id, ?int $user_id=null)
Checks whether a user may invoke a command or not (this method is called by ilAccessHandler::checkAcc...
static _getLastAccessedPage(int $a_ref_id, int $a_user_id=0)
static _preloadData(array $obj_ids, array $ref_ids)
Preload data.
User class.
Class ilObjectAccess.
static _getAllReferences(int $id)
get all reference ids for object ID
static _lookupObjId(int $ref_id)
static lookupOfflineStatus(int $obj_id)
Lookup offline status using objectDataCache.
class ilRbacSystem system function like checkAccess, addActiveRole ... Supporting system functions ar...
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
addInfoItem(string $a_type, string $a_text, string $a_data="")
add an info item to current info object
$ref_id
Definition: ltiauth.php:66
global $DIC
Definition: shib_login.php:26
$q
Definition: shib_logout.php:23