ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
ilAccessInitialPermissionGuidelineAppliedObjective Class Reference
+ Inheritance diagram for ilAccessInitialPermissionGuidelineAppliedObjective:
+ Collaboration diagram for ilAccessInitialPermissionGuidelineAppliedObjective:

Public Member Functions

 __construct (string $object_type, bool $has_learning_progress=false, bool $used_for_authoring=false)
 
 getHash ()
 
 getLabel ()
 
 isNotable ()
 
 getPreconditions (Environment $environment)
 
 achieve (Environment $environment)
 
 isApplicable (Environment $environment)
 

Protected Attributes

const RBAC_OP_EDIT_PERMISSIONS = 1
 
const RBAC_OP_VISIBLE = 2
 
const RBAC_OP_READ = 3
 
const RBAC_OP_WRITE = 4
 
const RBAC_OP_DELETE = 6
 
const RBAC_OP_COPY = 99
 
array $initial_permission_definition
 
array string $object_type
 
bool $has_learning_progress
 
bool $used_for_authoring
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilAccessInitialPermissionGuidelineAppliedObjective::__construct ( string  $object_type,
bool  $has_learning_progress = false,
bool  $used_for_authoring = false 
)

Member Function Documentation

◆ achieve()

ilAccessInitialPermissionGuidelineAppliedObjective::achieve ( Environment  $environment)

Definition at line 155 of file class.ilAccessInitialPermissionGuidelineAppliedObjective.php.

References $query, $res, ilRbacReview\_getCustomRBACOperationId(), ILIAS\Setup\Environment\getResource(), and ILIAS\Repository\int().

155  : Environment
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([
165  ilRbacReview::_getCustomRBACOperationId("read_learning_progress"),
166  ilRbacReview::_getCustomRBACOperationId("edit_learning_progress")
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  // According to JF (2018-07-02), some roles have to be selected by if, not by title
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) {
209  $ops_id = ilRbacReview::_getCustomRBACOperationId('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) {
226  foreach (ilRbacReview::_getCustomRBACOperationId("create_" . $this->object_type) as $ops_id) {
227  if ($ops_id == self::RBAC_OP_COPY) {
228  $ops_id = ilRbacReview::_getCustomRBACOperationId('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  }
$res
Definition: ltiservices.php:69
$query
getResource(string $id)
Consumers of this method should check if the result is what they expect, e.g.
static _getCustomRBACOperationId(string $operation, \ilDBInterface $ilDB=null)
An environment holds resources to be used in the setup process.
Definition: Environment.php:27
+ Here is the call graph for this function:

◆ getHash()

ilAccessInitialPermissionGuidelineAppliedObjective::getHash ( )

Definition at line 132 of file class.ilAccessInitialPermissionGuidelineAppliedObjective.php.

132  : string
133  {
134  return hash("sha256", self::class);
135  }

◆ getLabel()

ilAccessInitialPermissionGuidelineAppliedObjective::getLabel ( )

Definition at line 137 of file class.ilAccessInitialPermissionGuidelineAppliedObjective.php.

137  : string
138  {
139  return "Apply initial permission guideline";
140  }

◆ getPreconditions()

ilAccessInitialPermissionGuidelineAppliedObjective::getPreconditions ( Environment  $environment)

◆ isApplicable()

ilAccessInitialPermissionGuidelineAppliedObjective::isApplicable ( Environment  $environment)

Definition at line 252 of file class.ilAccessInitialPermissionGuidelineAppliedObjective.php.

References ilRbacReview\_getCustomRBACOperationId(), and ilObject\_getObjectTypeIdByTitle().

252  : bool
253  {
254  if (!ilObject::_getObjectTypeIdByTitle($this->object_type)) {
255  throw new Exception("Something went wrong, there MUST be valid id for object_type " . $this->object_type);
256  }
257 
258  if (!ilRbacReview::_getCustomRBACOperationId("create_" . $this->object_type)) {
259  throw new Exception(
260  "Something went wrong, missing CREATE operation id for object type " . $this->object_type
261  );
262  }
263 
264  return true;
265  }
static _getCustomRBACOperationId(string $operation, \ilDBInterface $ilDB=null)
static _getObjectTypeIdByTitle(string $type, \ilDBInterface $ilDB=null)
+ Here is the call graph for this function:

◆ isNotable()

ilAccessInitialPermissionGuidelineAppliedObjective::isNotable ( )

Definition at line 142 of file class.ilAccessInitialPermissionGuidelineAppliedObjective.php.

142  : bool
143  {
144  return true;
145  }

Field Documentation

◆ $has_learning_progress

bool ilAccessInitialPermissionGuidelineAppliedObjective::$has_learning_progress
protected

◆ $initial_permission_definition

array ilAccessInitialPermissionGuidelineAppliedObjective::$initial_permission_definition
protected
Initial value:
= [
'role' => [
'User' => [
'id' => 4

Definition at line 19 of file class.ilAccessInitialPermissionGuidelineAppliedObjective.php.

◆ $object_type

array string ilAccessInitialPermissionGuidelineAppliedObjective::$object_type
protected

◆ $used_for_authoring

bool ilAccessInitialPermissionGuidelineAppliedObjective::$used_for_authoring
protected

◆ RBAC_OP_COPY

const ilAccessInitialPermissionGuidelineAppliedObjective::RBAC_OP_COPY = 99
protected

◆ RBAC_OP_DELETE

const ilAccessInitialPermissionGuidelineAppliedObjective::RBAC_OP_DELETE = 6
protected

◆ RBAC_OP_EDIT_PERMISSIONS

const ilAccessInitialPermissionGuidelineAppliedObjective::RBAC_OP_EDIT_PERMISSIONS = 1
protected

◆ RBAC_OP_READ

const ilAccessInitialPermissionGuidelineAppliedObjective::RBAC_OP_READ = 3
protected

◆ RBAC_OP_VISIBLE

const ilAccessInitialPermissionGuidelineAppliedObjective::RBAC_OP_VISIBLE = 2
protected

◆ RBAC_OP_WRITE

const ilAccessInitialPermissionGuidelineAppliedObjective::RBAC_OP_WRITE = 4
protected

The documentation for this class was generated from the following file: