36     protected \ilDBInterface 
$db;
    45         if (!isset(self::$instance)) {
    49         return self::$instance;
    55         $this->valueHashToValueContainerId = new \SplObjectStorage();
    56         $this->bucketHashToObserverContainerId = new \SplObjectStorage();
    57         $this->taskHashToTaskContainerId = new \SplObjectStorage();
    60     protected function gc(): void
    62         $atom = $this->db->buildAtomQuery();
    64         $atom->addTableLock(
'il_bt_bucket');
    65         $atom->addTableLock(
'il_bt_task');
    66         $atom->addTableLock(
'il_bt_value');
    67         $atom->addTableLock(
'il_bt_value_to_task');
    69             $this->db->manipulateF(
    70                 "DELETE FROM il_bt_bucket WHERE user_id = %s AND (state = %s OR state = %s) AND last_heartbeat < %s AND last_heartbeat > 0",
    71                 [
'integer', 
'integer', 
'integer', 
'integer'],
    76                     time() - 1 * 60 * 24 * 30
    81             $this->db->manipulateF(
    82                 "DELETE FROM il_bt_bucket WHERE state = %s AND last_heartbeat < %s AND last_heartbeat > 0",
    83                 [
'integer', 
'integer'],
    88             $this->db->manipulateF(
    89                 "DELETE FROM il_bt_bucket WHERE state != %s AND last_heartbeat < %s AND last_heartbeat > 0",
    90                 [
'integer', 
'integer'],
    95             $this->db->manipulate(
    96                 "DELETE il_bt_task FROM il_bt_task LEFT JOIN il_bt_bucket ON il_bt_bucket.id = il_bt_task.bucket_id WHERE il_bt_bucket.id IS NULL;"   100             $this->db->manipulate(
   101                 "DELETE il_bt_value_to_task FROM il_bt_value_to_task LEFT JOIN il_bt_bucket ON il_bt_bucket.id = il_bt_value_to_task.bucket_id WHERE il_bt_bucket.id IS NULL;"   105             $this->db->manipulate(
   106                 "DELETE il_bt_value_to_task FROM il_bt_value_to_task LEFT JOIN il_bt_task ON il_bt_task.id = il_bt_value_to_task.task_id WHERE il_bt_task.id IS NULL;"   110             $this->db->manipulate(
   111                 "DELETE il_bt_value FROM il_bt_value LEFT JOIN il_bt_value_to_task ON il_bt_value_to_task.value_id = il_bt_value.id WHERE il_bt_value_to_task.id IS NULL;"   119         $this->connector = 
$c;
   141         $bucketContainer->setUserId($bucket->
getUserId());
   142         $bucketContainer->setState($bucket->
getState());
   143         $bucketContainer->setTotalNumberoftasks(count($bucket->
getTask()->unfoldTask()));
   145         $bucketContainer->setTitle($bucket->
getTitle());
   152         $bucketContainer->update();
   161         $random = new \Random\Randomizer();
   163         if($random->getInt(1, 100) === 1) {
   168                               ->orderBy($order_by, $order_direction)
   169                               ->getArray(null, 
'id');
   182             $bucketMeta->setUserId($bucketContainer->
getUserId());
   183             $bucketMeta->setState($bucketContainer->
getState());
   184             $bucketMeta->setTitle($bucketContainer->
getTitle());
   186             $bucketMeta->setOverallPercentage($bucketContainer->
getPercentage());
   209         if ($this->bucketHashToObserverContainerId->contains($bucket)) {
   210             $bucketContainer = 
new BucketContainer($this->bucketHashToObserverContainerId[$bucket], $this->connector);
   216         $bucketContainer->setUserId($bucket->
getUserId());
   217         $bucketContainer->setState($bucket->
getState());
   218         $bucketContainer->setTitle($bucket->
getTitle());
   220         $bucketContainer->setTotalNumberoftasks(count($bucket->
getTask()->unfoldTask()));
   224         if (!$bucketContainer->getId()) {
   225             $bucketContainer->create();
   237         $bucketContainer->save();
   238         $this->bucketHashToObserverContainerId[$bucket] = $bucketContainer->getId();
   250         if ($this->taskHashToTaskContainerId->contains($task)) {
   251             $taskContainer = 
new TaskContainer($this->taskHashToTaskContainerId[$task]);
   257         $taskContainer->setType($task->
getType());
   258         $taskContainer->setBucketId($bucketId);
   259         $reflection = new \ReflectionClass(get_class($task));
   260         $taskContainer->setClassName(get_class($task));
   263         foreach ($task->
getInput() as $k => $input) {
   266         $this->saveValueToTask($task, $taskContainer, $bucketId);
   269         $taskContainer->save();
   270         $this->taskHashToTaskContainerId[$task] = $taskContainer->getId();
   279     protected function saveValueToTask(
Task $task, 
TaskContainer $taskContainer, 
int $bucketId): 
void   282         if ($taskContainer->
getId() !== 0) {
   285             foreach ($olds as $old) {
   290             $taskContainer->
save();
   294         foreach ($task->
getInput() as $k => $inputValue) {
   296             $v->setTaskId($taskContainer->
getId());
   298             $v->setBucketId($bucketId);
   313         if ($this->valueHashToValueContainerId->contains($value)) {
   314             $valueContainer = 
new ValueContainer($this->valueHashToValueContainerId[$value], $this->connector);
   318         $valueContainer->setClassName(get_class($value));
   323         $valueContainer->setType($value->
getType());
   325         $valueContainer->setBucketId($bucketId);
   326         $valueContainer->setPosition($position);
   327         $valueContainer->setHash($value->
getHash());
   328         $valueContainer->setSerialized($value->serialize());
   337         $valueContainer->save();
   338         $this->valueHashToValueContainerId[$value] = $valueContainer->getId();
   346         if (!$this->bucketHashToObserverContainerId->contains($bucket)) {
   348                 . print_r($bucket, 
true));
   351         return (
int) $this->bucketHashToObserverContainerId[$bucket];
   360         if (!$this->taskHashToTaskContainerId->contains($task)) {
   362                 . print_r($task, 
true));
   365         return (
int) $this->taskHashToTaskContainerId[$task];
   373         if (!$this->valueHashToValueContainerId->contains($value)) {
   375                 . print_r($value, 
true));
   378         return (
int )$this->valueHashToValueContainerId[$value];
   386         if (isset(self::$buckets[$bucket_container_id])) {
   387             return self::$buckets[$bucket_container_id];
   390         $bucketContainer = BucketContainer::find($bucket_container_id);
   391         if (!$bucketContainer) {
   392             throw new BucketNotFoundException(
"The requested bucket with container id $bucket_container_id could not be found in the database.");
   396         $bucket->setUserId($bucketContainer->getUserId());
   397         $bucket->setState($bucketContainer->getState());
   398         $bucket->setTitle($bucketContainer->getTitle());
   399         $bucket->setDescription($bucketContainer->getDescription());
   400         $bucket->setOverallPercentage($bucketContainer->getPercentage());
   401         $bucket->setLastHeartbeat($bucketContainer->getLastHeartbeat());
   402         $bucket->setTask($this->loadTask($bucketContainer->getRootTaskid(), $bucket, $bucketContainer));
   404         $this->bucketHashToObserverContainerId[$bucket] = $bucket_container_id;
   420         $factory = $DIC->backgroundTasks()->taskFactory();
   422         $taskContainer = TaskContainer::find($taskContainerId);
   425         $task = $factory->createTask($taskContainer->
getClassName());
   430                                             ->orderBy(
'position')
   434         foreach ($valueToTasks as $valueToTask) {
   435             $inputs[] = $this->loadValue($valueToTask->getValueId(), $bucket, $bucketContainer);
   443         $this->taskHashToTaskContainerId[$task] = $taskContainerId;
   451         $factory = $DIC->backgroundTasks()->injector();
   454         $valueContainer = ValueContainer::find($valueContainerId);
   458         $value = $factory->createInstance($valueContainer->getClassName());
   460         $value->unserialize($valueContainer->getSerialized());
   461         if ($valueContainer->getHasParenttask() !== 0) {
   462             $value->setParentTask($this->loadTask($valueContainer->getParentTaskid(), $bucket, $bucketContainer));
   465         $this->valueHashToValueContainerId[$value] = $valueContainerId;
   503         $this->bucketHashToObserverContainerId->detach($bucket);
   512         foreach ($bucket_container_ids as $bucket_id) {
 
saveObserver(Bucket $bucket)
 
saveValue(Value $value, int $bucketId, int $position)
 
static instance(\ilDBInterface $db)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
loadBucket(int $bucket_container_id)
 
SplObjectStorage $bucketHashToObserverContainerId
 
Interface Observer  Contains several chained tasks and infos about them. 
 
SplObjectStorage $taskHashToTaskContainerId
 
setConnector(\arConnector $c)
 
getBucketIdsOfUser(int $user_id, string $order_by="id", string $order_direction="ASC")
[] Returns an array of bucket ids for the given user Id. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static BasicPersistence $instance
 
static where($where, $operator=null)
 
setCurrentTask(Task $task)
 
getBucketMetaOfUser(int $user_id)
 
getBucketContainerId(Bucket $bucket)
 
loadBuckets(array $bucket_container_ids)
 
getValueContainerId(Value $value)
 
updateBucket(Bucket $bucket)
Updates only the bucket! Use this if e.g. 
 
getLastHeartbeat()
When was the last time that something happened on this bucket? 
 
getBucketIdsByState(int $state)
int[] Returns a list of bucket ids for the given Observer State 
 
SplObjectStorage $valueHashToValueContainerId
 
saveBucketAndItsTasks(Bucket $bucket)
Fully updates or creates an Observer and all its tasks into the database. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
deleteBucket(Bucket $bucket)
Delete the bucket and all its stuff. 
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
getTaskContainerId(Task $task)
 
saveTask(Task $task, int $bucketId)
 
__construct(\ilDBInterface $db)
 
deleteBucketById(int $bucket_id)
Deletes the Observer AND all its tasks and values.