156 {
157 $client_ini = $environment->
getResource(Setup\Environment::RESOURCE_CLIENT_INI);
158 $db = $environment->
getResource(Environment::RESOURCE_DATABASE);
159
160 $role_folder_id = (
int) $client_ini->readVariable(
"system",
"ROLE_FOLDER_ID");
161
162 $learning_progress_permissions = [];
163 if ($this->has_learning_progress) {
164 $learning_progress_permissions = array_filter([
167
168 ]);
169 }
170
171 foreach ($this->initial_permission_definition as $role_type => $roles) {
172 foreach ($roles as $role_title => $definition) {
173 if (
174 $this->used_for_authoring &&
175 array_key_exists('ignore_for_authoring_objects', $definition) &&
176 $definition['ignore_for_authoring_objects']
177 ) {
178 continue;
179 }
180
181 if (array_key_exists('id', $definition) && is_numeric($definition['id'])) {
182
183 $query =
"SELECT obj_id FROM object_data WHERE type = %s AND obj_id = %s";
184 $query_types = ['text', 'integer'];
185 $query_values = [$role_type, $definition['id']];
186 } else {
187 $query =
"SELECT obj_id FROM object_data WHERE type = %s AND title = %s";
188 $query_types = ['text', 'text'];
189 $query_values = [$role_type, $role_title];
190 }
191
192 $res = $db->queryF(
$query, $query_types, $query_values);
193 if (1 == $db->numRows(
$res)) {
194 $row = $db->fetchAssoc(
$res);
195 $role_id = (
int) $row[
'obj_id'];
196
197 $operation_ids = [];
198
199 if (array_key_exists('object', $definition) && is_array($definition['object'])) {
200 $operation_ids = array_merge($operation_ids, $definition['object']);
201 }
202
203 if (array_key_exists('lp', $definition) && $definition['lp']) {
204 $operation_ids = array_merge($operation_ids, $learning_progress_permissions);
205 }
206
207 foreach (array_filter(array_map('intval', $operation_ids)) as $ops_id) {
208 if ($ops_id == self::RBAC_OP_COPY) {
210 }
211
212 $db->replace(
213 'rbac_templates',
214 [
215 'rol_id' => ['integer', $role_id],
216 'type' => ['text', $this->object_type],
217 'ops_id' => ['integer', $ops_id],
218 'parent' => ['integer', $role_folder_id]
219 ],
220 []
221 );
222 }
223
224 if (array_key_exists('create', $definition) && is_array($definition['create'])) {
225 foreach ($definition['create'] as $container_object_type) {
227 if ($ops_id == self::RBAC_OP_COPY) {
229 }
230
231 $db->replace(
232 'rbac_templates',
233 [
234 'rol_id' => ['integer', $role_id],
235 'type' => ['text', $container_object_type],
236 'ops_id' => ['integer', $ops_id],
237 'parent' => ['integer', $role_folder_id]
238 ],
239 []
240 );
241 }
242 }
243 }
244 }
245 }
246 }
247
248
249 return $environment;
250 }
static _getCustomRBACOperationId(string $operation, \ilDBInterface $ilDB=null)
An environment holds resources to be used in the setup process.
getResource(string $id)
Consumers of this method should check if the result is what they expect, e.g.