ILIAS  release_8 Revision v8.24
class.ilOerHarvester.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
5/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
6
14{
16
18
20
21 protected ilTree $tree;
22
23 public function __construct(ilCronJobResult $result)
24 {
25 global $DIC;
26
27 $this->tree = $DIC->repositoryTree();
28 $this->logger = $DIC->logger()->meta();
29 $this->cronresult = $result;
31 }
32
33 public function run(): ilCronJobResult
34 {
35 try {
36 $obj_ids = $this->collect();
37 $obj_ids = $this->filter($obj_ids);
38 $num = $this->harvest($obj_ids);
39
40 $message = 'Created ' . $num . ' new objects. <br />';
41
42 $deleted = $this->deleteDeprecated();
43
44 $message .= 'Deleted ' . $deleted . ' deprecated objects.';
45
46 if (!$deleted && !$num) {
47 $this->cronresult->setStatus(ilCronJobResult::STATUS_NO_ACTION);
48 } else {
49 $this->cronresult->setStatus(ilCronJobResult::STATUS_OK);
50 }
51 $this->cronresult->setMessage($message);
52 return $this->cronresult;
53 } catch (Exception $e) {
54 $this->cronresult->setStatus(ilCronJobResult::STATUS_FAIL);
55 $this->cronresult->setMessage($e->getMessage());
56 return $this->cronresult;
57 }
58 }
59
64 protected function collect(): array
65 {
66 $collectable_types = $this->settings->getHarvestingTypes();
67 $copyright_ids = $this->settings->getCopyRightTemplatesInLomFormat();
68
69 $collectable_obj_ids = ilMDRights::lookupRightsByTypeAndCopyright(
70 $collectable_types,
71 $copyright_ids
72 );
73
74 $this->logger->debug('Found ' . count($collectable_types) . ' collectable objects.');
75 $this->logger->dump($collectable_obj_ids, ilLogLevel::DEBUG);
76
77 return $collectable_obj_ids;
78 }
79
84 protected function filter(array $a_collectable_obj_ids): array
85 {
86 $filtered = [];
87 foreach ($a_collectable_obj_ids as $obj_id) {
88 $status = new ilOerHarvesterObjectStatus($obj_id);
89 if ($status->isCreated()) {
90 $this->logger->debug('Object already created: ' . $obj_id);
91 continue;
92 }
93 if ($status->isBlocked()) {
94 $this->logger->debug('Object creation is blocked: ' . $obj_id);
95 continue;
96 }
97
98 $exists = false;
99 foreach (ilObject::_getAllReferences($obj_id) as $ref_id => $tmp) {
100 if (!$this->tree->isDeleted($ref_id)) {
101 $exists = true;
102 }
103 }
104 if (!$exists) {
105 $this->logger->notice('Ignoring deleted object: ' . $obj_id);
106 continue;
107 }
108 $filtered[] = $obj_id;
109 }
110
111 $this->logger->debug('Result after filtering.');
112 $this->logger->dump($filtered, ilLogLevel::DEBUG);
113
114 return $filtered;
115 }
116
120 protected function harvest(array $a_collectable_obj_ids): int
121 {
122 $num = 0;
123 foreach ($a_collectable_obj_ids as $obj_id) {
124 $ref_ids = ilObject::_getAllReferences($obj_id);
125 $ref_id = end($ref_ids);
126
128
129 if (!$object instanceof ilObject) {
130 $this->logger->warning('Found invalid reference: ' . $ref_id);
131 }
132 $this->logger->debug('Creating new reference for object: ' . $obj_id);
133 $this->harvestObject($object);
134 $num++;
135 }
136 return $num;
137 }
138
139 protected function harvestObject(ilObject $object): bool
140 {
141 $this->logger->debug('Create new reference');
142 $new_ref_id = $object->createReference();
143 $this->logger->debug('Put in tree');
144 $object->putInTree($this->settings->getTarget());
145 $this->logger->debug('Set pernissions');
146 $object->setPermissions($this->settings->getTarget());
147
148 $this->logger->debug('Set status');
149 $status = new ilOerHarvesterObjectStatus($object->getId());
150 $status->setHarvestRefId($new_ref_id);
151 $status->setBlocked(false);
152 $status->save();
153
154 return true;
155 }
156
157 protected function deleteObject(int $a_ref_id): bool
158 {
159 $object = ilObjectFactory::getInstanceByRefId($a_ref_id, false);
160
161 if (!$object instanceof ilObject) {
162 $this->logger->warning('Found invalid reference: ' . $a_ref_id);
163 return false;
164 }
165 $this->logger->debug('Deleting reference...');
166 $object->delete();
167
168 $status = new ilOerHarvesterObjectStatus(
170 );
171 $status->delete();
172 return true;
173 }
174
175 protected function deleteDeprecated(): int
176 {
177 $num_deleted = 0;
180
181 // blocked items are always deleted
182 $status = new ilOerHarvesterObjectStatus($obj_id);
183 if ($status->isBlocked()) {
184 $this->logger->debug('Deleting blocked object ressource.');
185 $this->deleteObject($ref_id);
186 $num_deleted++;
187 continue;
188 }
189
190 $copyright = ilMDRights::_lookupDescription($obj_id, $obj_id);
191 $is_valid = false;
192 foreach ($this->settings->getCopyRightTemplatesInLomFormat() as $cp) {
193 if (strcmp($copyright, $cp) === 0) {
194 $is_valid = true;
195 }
196 }
197
198 if (!$is_valid) {
199 $this->logger->debug('Deleting deprecated object with ref_id: ' . $ref_id);
200 $this->deleteObject($ref_id);
201 $num_deleted++;
202 }
203 }
204 return $num_deleted;
205 }
206}
Component logger with individual log levels by component id.
static _lookupDescription(int $a_rbac_id, int $a_obj_id)
static lookupRightsByTypeAndCopyright(array $a_types, array $a_copyright)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setPermissions(int $parent_ref_id)
createReference()
creates reference for object
putInTree(int $parent_ref_id)
maybe this method should be in tree object!?
static _getAllReferences(int $id)
get all reference ids for object ID
static _lookupObjId(int $ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Cron job for definition for oer harvesting.
Cron job for definition for oer harvesting.
deleteObject(int $a_ref_id)
ilCronJobResult $cronresult
harvest(array $a_collectable_obj_ids)
harvestObject(ilObject $object)
collect()
Collect all obj_ids with copyright settings which are collectable.
__construct(ilCronJobResult $result)
ilOerHarvesterSettings $settings
filter(array $a_collectable_obj_ids)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
$ref_id
Definition: ltiauth.php:67
$message
Definition: xapiexit.php:32