36 protected \ilDBInterface
$db;
45 if (!isset(self::$instance)) {
55 $this->valueHashToValueContainerId = new \SplObjectStorage();
56 $this->bucketHashToObserverContainerId = new \SplObjectStorage();
57 $this->taskHashToTaskContainerId = new \SplObjectStorage();
60 protected function gc(): void
62 $this->db->manipulateF(
63 "DELETE FROM il_bt_bucket WHERE user_id = %s AND (state = %s OR state = %s)",
64 [
'integer',
'integer',
'integer'],
71 $this->connector =
$c;
93 $bucketContainer->setUserId($bucket->
getUserId());
94 $bucketContainer->setState($bucket->
getState());
95 $bucketContainer->setTotalNumberoftasks(count($bucket->
getTask()->unfoldTask()));
97 $bucketContainer->setTitle($bucket->
getTitle());
104 $bucketContainer->update();
110 public function getBucketIdsOfUser(
int $user_id,
string $order_by =
"id",
string $order_direction =
"ASC"): array
116 ->orderBy($order_by, $order_direction)
117 ->getArray(
null,
'id');
130 $bucketMeta->setUserId($bucketContainer->
getUserId());
131 $bucketMeta->setState($bucketContainer->
getState());
132 $bucketMeta->setTitle($bucketContainer->
getTitle());
134 $bucketMeta->setOverallPercentage($bucketContainer->
getPercentage());
157 if ($this->bucketHashToObserverContainerId->contains($bucket)) {
158 $bucketContainer =
new BucketContainer($this->bucketHashToObserverContainerId[$bucket], $this->connector);
164 $bucketContainer->setUserId($bucket->
getUserId());
165 $bucketContainer->setState($bucket->
getState());
166 $bucketContainer->setTitle($bucket->
getTitle());
168 $bucketContainer->setTotalNumberoftasks(count($bucket->
getTask()->unfoldTask()));
172 if (!$bucketContainer->getId()) {
173 $bucketContainer->create();
185 $bucketContainer->save();
186 $this->bucketHashToObserverContainerId[$bucket] = $bucketContainer->getId();
198 if ($this->taskHashToTaskContainerId->contains($task)) {
199 $taskContainer =
new TaskContainer($this->taskHashToTaskContainerId[$task]);
205 $taskContainer->setType($task->
getType());
206 $taskContainer->setBucketId($bucketId);
207 $reflection = new \ReflectionClass(get_class($task));
208 $taskContainer->setClassName(get_class($task));
211 foreach ($task->
getInput() as $k => $input) {
214 $this->saveValueToTask($task, $taskContainer, $bucketId);
217 $taskContainer->save();
218 $this->taskHashToTaskContainerId[$task] = $taskContainer->getId();
227 protected function saveValueToTask(
Task $task,
TaskContainer $taskContainer,
int $bucketId): void
230 if ($taskContainer->
getId() !== 0) {
233 foreach ($olds as $old) {
238 $taskContainer->
save();
242 foreach ($task->
getInput() as $k => $inputValue) {
243 $v =
new ValueToTaskContainer(0, $this->connector);
244 $v->setTaskId($taskContainer->
getId());
246 $v->setBucketId($bucketId);
261 if ($this->valueHashToValueContainerId->contains($value)) {
262 $valueContainer =
new ValueContainer($this->valueHashToValueContainerId[$value], $this->connector);
266 $valueContainer->setClassName(get_class($value));
271 $valueContainer->setType($value->
getType());
273 $valueContainer->setBucketId($bucketId);
274 $valueContainer->setPosition($position);
275 $valueContainer->setHash($value->
getHash());
276 $valueContainer->setSerialized($value->serialize());
285 $valueContainer->save();
286 $this->valueHashToValueContainerId[$value] = $valueContainer->getId();
294 if (!$this->bucketHashToObserverContainerId->contains($bucket)) {
296 . print_r($bucket,
true));
299 return (
int) $this->bucketHashToObserverContainerId[$bucket];
308 if (!$this->taskHashToTaskContainerId->contains($task)) {
310 . print_r($task,
true));
313 return (
int) $this->taskHashToTaskContainerId[$task];
321 if (!$this->valueHashToValueContainerId->contains($value)) {
323 . print_r($value,
true));
326 return (
int )$this->valueHashToValueContainerId[$value];
334 if (isset(self::$buckets[$bucket_container_id])) {
335 return self::$buckets[$bucket_container_id];
338 $bucketContainer = BucketContainer::find($bucket_container_id);
339 if (!$bucketContainer) {
340 throw new BucketNotFoundException(
"The requested bucket with container id $bucket_container_id could not be found in the database.");
342 $bucket =
new BasicBucket();
344 $bucket->setUserId($bucketContainer->getUserId());
345 $bucket->setState($bucketContainer->getState());
346 $bucket->setTitle($bucketContainer->getTitle());
347 $bucket->setDescription($bucketContainer->getDescription());
348 $bucket->setOverallPercentage($bucketContainer->getPercentage());
349 $bucket->setLastHeartbeat($bucketContainer->getLastHeartbeat());
350 $bucket->setTask($this->loadTask($bucketContainer->getRootTaskid(), $bucket, $bucketContainer));
352 $this->bucketHashToObserverContainerId[$bucket] = $bucket_container_id;
365 private function loadTask(
int $taskContainerId, Bucket $bucket, BucketContainer $bucketContainer): \
ILIAS\BackgroundTasks\Task
370 $taskContainer = TaskContainer::find($taskContainerId);
378 ->orderBy(
'position')
382 foreach ($valueToTasks as $valueToTask) {
383 $inputs[] = $this->loadValue($valueToTask->getValueId(), $bucket, $bucketContainer);
387 if ($taskContainerId === $bucketContainer->getCurrentTaskid()) {
388 $bucket->setCurrentTask($task);
391 $this->taskHashToTaskContainerId[$task] = $taskContainerId;
396 private function loadValue($valueContainerId, Bucket $bucket, BucketContainer $bucketContainer): \
ILIAS\BackgroundTasks\Value
402 $valueContainer = ValueContainer::find($valueContainerId);
406 $value =
$factory->createInstance($valueContainer->getClassName());
408 $value->unserialize($valueContainer->getSerialized());
409 if ($valueContainer->getHasParenttask() !== 0) {
410 $value->setParentTask($this->loadTask($valueContainer->getParentTaskid(), $bucket, $bucketContainer));
413 $this->valueHashToValueContainerId[$value] = $valueContainerId;
421 array_map(
function (BucketContainer $item):
void {
427 array_map(
function (TaskContainer $item):
void {
433 array_map(
function (ValueContainer $item):
void {
439 array_map(
function (ValueToTaskContainer $item):
void {
451 $this->bucketHashToObserverContainerId->detach($bucket);
460 foreach ($bucket_container_ids as $bucket_id) {
463 }
catch (\Throwable $t) {
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
static where($where, $operator=null)
static BasicPersistence $instance
saveBucketAndItsTasks(Bucket $bucket)
Fully updates or creates an Observer and all its tasks into the database.
saveValue(Value $value, int $bucketId, int $position)
getBucketIdsOfUser(int $user_id, string $order_by="id", string $order_direction="ASC")
\int[] Returns an array of bucket ids for the given user Id.
updateBucket(Bucket $bucket)
Updates only the bucket! Use this if e.g.
__construct(\ilDBInterface $db)
setConnector(\arConnector $c)
deleteBucket(Bucket $bucket)
Delete the bucket and all its stuff.
loadBuckets(array $bucket_container_ids)
getValueContainerId(Value $value)
SplObjectStorage $valueHashToValueContainerId
static instance(\ilDBInterface $db)
SplObjectStorage $taskHashToTaskContainerId
getTaskContainerId(Task $task)
saveTask(Task $task, int $bucketId)
saveObserver(Bucket $bucket)
getBucketMetaOfUser(int $user_id)
SplObjectStorage $bucketHashToObserverContainerId
getBucketIdsByState(int $state)
int[] Returns a list of bucket ids for the given Observer State
getBucketContainerId(Bucket $bucket)
setCurrentTask(Task $task)
getLastHeartbeat()
When was the last time that something happened on this bucket?
loadBucket(int $bucket_container_id)
deleteBucketById(int $bucket_id)
Deletes the Observer AND all its tasks and values.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ChatMainBarProvider \MainMenu\Provider.