27 include_once
"Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
29 if($settings->enabledRbacLog())
36 static public function gatherFaPa($a_ref_id, array $a_role_ids, $a_add_action =
false)
46 foreach($a_role_ids as $role_id)
48 if ($role_id != SYSTEM_ROLE_ID)
52 $result[
"ops"][$role_id][
"add"] = $rbacreview->getRoleOperationsOnObject($role_id, $a_ref_id);
56 $result[
"ops"][$role_id] = $rbacreview->getRoleOperationsOnObject($role_id, $a_ref_id);
62 if($a_ref_id && $a_ref_id != ROLE_FOLDER_ID)
66 $result[
"inht"][
"add"] = $rbacreview->getRolesOfRoleFolder($a_ref_id);
70 $result[
"inht"] = $rbacreview->getRolesOfRoleFolder($a_ref_id);
77 static public function diffFaPa(array $a_old, array $a_new)
82 foreach((array) $a_old[
"ops"] as $role_id => $ops)
84 $diff = array_diff($ops, $a_new[
"ops"][$role_id]);
87 $result[
"ops"][$role_id][
"rmv"] = array_values($diff);
89 $diff = array_diff($a_new[
"ops"][$role_id], $ops);
92 $result[
"ops"][$role_id][
"add"] = array_values($diff);
96 if(isset($a_old[
"inht"]) || isset($a_new[
"inht"]))
98 if(isset($a_old[
"inht"]) && !isset($a_new[
"inht"]))
100 $result[
"inht"][
"rmv"] = $a_old[
"inht"];
102 else if(!isset($a_old[
"inht"]) && isset($a_new[
"inht"]))
104 $result[
"inht"][
"add"] = $a_new[
"inht"];
108 $diff = array_diff($a_old[
"inht"], $a_new[
"inht"]);
111 $result[
"inht"][
"rmv"] = array_values($diff);
113 $diff = array_diff($a_new[
"inht"], $a_old[
"inht"]);
116 $result[
"inht"][
"add"] = array_values($diff);
128 return $rbacreview->getAllOperationsOfRole($a_role_id, $a_role_ref_id);
134 $types = array_unique(array_merge(array_keys($a_old), array_keys($a_new)));
135 foreach($types as $type)
137 if(!isset($a_old[$type]))
139 $result[$type][
"add"] = $a_new[$type];
141 else if(!isset($a_new[$type]))
143 $result[$type][
"rmv"] = $a_old[$type];
147 $diff = array_diff($a_old[$type], $a_new[$type]);
150 $result[$type][
"rmv"] = array_values($diff);
152 $diff = array_diff($a_new[$type], $a_old[$type]);
155 $result[$type][
"add"] = array_values($diff);
162 static public function add($a_action, $a_ref_id, array $a_diff, $a_source_ref_id =
false)
166 if(self::isValidAction($a_action) &&
sizeof($a_diff))
170 $a_diff[
"src"] = $a_source_ref_id;
173 $ilDB->query(
"INSERT INTO rbac_log (user_id, created, ref_id, action, data)".
174 " VALUES (".$ilDB->quote($ilUser->getId(),
"integer").
",".$ilDB->quote(time(),
"integer").
175 ",".$ilDB->quote($a_ref_id,
"integer").
",".$ilDB->quote($a_action,
"integer").
176 ",".$ilDB->quote(serialize($a_diff),
"text").
")");
184 if(in_array($a_action, array(self::EDIT_PERMISSIONS, self::MOVE_OBJECT, self::LINK_OBJECT,
185 self::COPY_OBJECT, self::CREATE_OBJECT, self::EDIT_TEMPLATE, self::EDIT_TEMPLATE_EXISTING,
186 self::CHANGE_OWNER)))
193 static public function getLogItems($a_ref_id, $a_limit, $a_offset, array $a_filter = NULL)
195 global
$ilDB, $rbacreview;
200 if($a_filter[
"action"])
202 $where[] =
"action = ".$ilDB->quote($a_filter[
"action"],
"integer");
204 if($a_filter[
"date"][
"from"])
206 $from = $a_filter[
"date"][
"from"]->get(
IL_CAL_UNIX);
207 $from = strtotime(
"00:00:00", $from);
208 $where[] =
"created >= ".$ilDB->quote($from,
"integer");
210 if($a_filter[
"date"][
"to"])
213 $to = strtotime(
"23:59:59", $to);
214 $where[] =
"created <= ".$ilDB->quote($to,
"integer");
218 $where =
" AND ".implode(
" AND ", $where);
222 $set = $ilDB->query(
"SELECT COUNT(*) FROM rbac_log WHERE ref_id = ".$ilDB->quote($a_ref_id,
"integer").$where);
223 $count = array_pop($ilDB->fetchAssoc($set));
225 $ilDB->setLimit($a_limit, $a_offset);
226 $set = $ilDB->query(
"SELECT * FROM rbac_log WHERE ref_id = ".$ilDB->quote($a_ref_id,
"integer").
227 $where.
" ORDER BY created DESC");
229 while(
$row = $ilDB->fetchAssoc($set))
231 $row[
"data"] = unserialize(
$row[
"data"]);
234 return array(
"cnt"=>$count,
"set"=>
$result);
237 static function delete($a_ref_id)
241 $ilDB->query(
"DELETE FROM rbac_log WHERE ref_id = ".$ilDB->quote($a_ref_id,
"integer"));
250 include_once
"Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
252 $max = $settings->getRbacLogAge();
254 $ilDB->query(
"DELETE FROM rbac_log WHERE created < ".$ilDB->quote(strtotime(
"-".$max.
"months"),
"integer"));