ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilFileObjectRBACDatabaseSteps.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
27{
28 public const EDIT_FILE = "edit_file";
29 private ?ilDBInterface $database = null;
30
31 public function prepare(ilDBInterface $db): void
32 {
33 $this->database = $db;
34 }
35
36 protected function getOpsID(ilDBInterface $db, string $operation): ?int
37 {
38 $res = $db->queryF(
39 "SELECT ops_id FROM rbac_operations WHERE operation = %s",
40 ["text"],
41 [self::EDIT_FILE]
42 );
43
44 return $db->fetchAssoc($res)['ops_id'] ?? null;
45 }
46
50 public function step_1(): void
51 {
52 $edit_file_ops_id = $this->getOpsID($this->database, self::EDIT_FILE);
53
54 $q = "SELECT
55 rbac_pa.rol_id,
56 rbac_pa.ops_id,
57 rbac_pa.ref_id
58 FROM rbac_pa
59 JOIN object_reference ON rbac_pa.ref_id = object_reference.ref_id
60 JOIN object_data ON object_reference.obj_id = object_data.obj_id
61 WHERE object_data.type = 'file';
62 ";
63
64 $res = $this->database->query($q);
65 while ($row = $this->database->fetchAssoc($res)) {
66 $ops_ids = unserialize($row['ops_id'], ['allowed_classes' => false]);
67 if (in_array(4, $ops_ids, false) && !in_array($edit_file_ops_id, $ops_ids, false)) {
68 $ops_ids[] = $edit_file_ops_id;
69 $ops_ids = array_unique($ops_ids);
70 $new_ops_ids = serialize($ops_ids);
71 $this->database->update(
72 "rbac_pa",
73 [
74 'ops_id' => ['text', $new_ops_ids]
75 ],
76 [
77 'rol_id' => ['integer', $row['rol_id']],
78 'ref_id' => ['integer', $row['ref_id']]
79 ]
80 );
81 }
82 }
83 }
84
88 public function step_2(): void
89 {
90 $edit_file_ops_id = $this->getOpsID($this->database, self::EDIT_FILE);
91
92 $q = "SELECT * from rbac_templates WHERE type = %s AND ops_id = %s";
93 $res = $this->database->queryF(
94 $q,
95 ['text', 'integer'],
96 ['file', 4]
97 );
98 while ($row = $this->database->fetchAssoc($res)) {
99 try {
100 $this->database->insert(
101 "rbac_templates",
102 [
103 'type' => ['text', 'file'],
104 'ops_id' => ['integer', $edit_file_ops_id],
105 'rol_id' => ['integer', $row['rol_id']],
106 'parent' => ['integer', $row['parent']]
107 ]
108 );
109 } catch (Throwable) {
110 };
111 }
112 }
113
114 public function step_3(): void
115 {
116 $read_position = $this->database->fetchAssoc(
117 $this->database->queryF(
118 "SELECT op_order FROM rbac_operations WHERE operation = %s",
119 ['text'],
120 [Permissions::READ->value]
121 )
122 )['op_order'] ?? 2000;
123
124 // update position of view_content operation
125 $this->database->update(
126 "rbac_operations",
127 [
128 'op_order' => ['integer', $read_position + 1]
129 ],
130 [
131 'operation' => ['text', Permissions::VIEW_CONTENT->value]
132 ]
133 );
134 }
135}
step_1()
@description assign to all roles which already have the "edit" operation assigned fo files
step_2()
@description add to all templates which already have the "edit" operation assigned fo files
getOpsID(ilDBInterface $db, string $operation)
Interface ilDBInterface.
fetchAssoc(ilDBStatement $statement)
queryF(string $query, array $types, array $values)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$res
Definition: ltiservices.php:69
$q
Definition: shib_logout.php:23