diff --git a/components/ILIAS/BackgroundTasks/classes/class.ilBackgroundTaskGarbageCollection.php b/components/ILIAS/BackgroundTasks/classes/class.ilBackgroundTaskGarbageCollection.php
new file mode 100644
index 000000000000..a1d5e540c63f
--- /dev/null
+++ b/components/ILIAS/BackgroundTasks/classes/class.ilBackgroundTaskGarbageCollection.php
@@ -0,0 +1,96 @@
+logger = $DIC->logger()->bgtk();
+ $this->lng = $DIC->language();
+ $this->lng->loadLanguageModule('background_tasks');
+ $this->persistence = $DIC->backgroundTasks()->persistence();
+
+ $this->result = new ilCronJobResult();
+ }
+
+ public function getTitle(): string
+ {
+ return $this->lng->txt('background_task_garbage_collection');
+ }
+
+ public function getDescription(): string
+ {
+ return $this->lng->txt('background_task_garbage_collection_info');
+ }
+
+ public function getId(): string
+ {
+ return 'background_task_garbage_collection';
+ }
+
+ public function hasAutoActivation(): bool
+ {
+ return false;
+ }
+
+ public function hasFlexibleSchedule(): bool
+ {
+ return true;
+ }
+
+ public function getDefaultScheduleType(): CronJobScheduleType
+ {
+ return CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS;
+ }
+
+ public function getDefaultScheduleValue(): ?int
+ {
+ return 1;
+ }
+
+ public function run(): ilCronJobResult
+ {
+ $this->logger->debug('Starting background task garbage collector..');
+
+ try {
+ $this->persistence->garbageCollection();
+ } catch (Exception $e) {
+ $this->result->setStatus(ilCronJobResult::STATUS_CRASHED);
+ $this->result->setMessage(mb_substr("Exc.: {$e->getMessage()} / {$e->getTraceAsString()}", 0, 400));
+ $this->logger->error("Background-Task Garbage Collection execution failed with message: {$e->getMessage()}");
+ $this->logger->error($e->getTraceAsString());
+ return $this->result;
+ }
+
+ $this->result->setStatus(ilCronJobResult::STATUS_OK);
+ return $this->result;
+ }
+}
diff --git a/components/ILIAS/BackgroundTasks_/service.xml b/components/ILIAS/BackgroundTasks/service.xml
old mode 100755
new mode 100644
similarity index 73%
rename from components/ILIAS/BackgroundTasks_/service.xml
rename to components/ILIAS/BackgroundTasks/service.xml
index 060904e8178a..7b1d010dddd7
--- a/components/ILIAS/BackgroundTasks_/service.xml
+++ b/components/ILIAS/BackgroundTasks/service.xml
@@ -8,5 +8,8 @@
+
+
+
diff --git a/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php b/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php
index 0bc809cb82b1..a8441b33dc37 100755
--- a/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php
+++ b/components/ILIAS/BackgroundTasks/src/Implementation/Persistence/BasicPersistence.php
@@ -55,7 +55,7 @@ public function __construct(protected \ilDBInterface $db)
$this->taskHashToTaskContainerId = new \SplObjectStorage();
}
- protected function gc(): void
+ public function garbageCollection(): void
{
$atom = $this->db->buildAtomQuery();
@@ -155,11 +155,8 @@ public function updateBucket(Bucket $bucket): void
*/
public function getBucketIdsOfUser(int $user_id, string $order_by = "id", string $order_direction = "ASC"): array
{
- // Garbage Collection
- $random = new \Random\Randomizer();
-
- if ($random->getInt(1, 100) === 1) {
- $this->gc();
+ if ((new \Random\Randomizer())->getInt(0, 100) === 1) {
+ $this->garbageCollection();
}
return BucketContainer::where(['user_id' => $user_id])
@@ -192,9 +189,10 @@ public function getBucketMetaOfUser(int $user_id): array
*/
public function getBucketIdsByState(int $state): array
{
- $buckets = BucketContainer::where(['state' => $state])->get();
-
- return array_map(fn(BucketContainer $bucket_container): int => $bucket_container->getId(), $buckets);
+ return array_map(
+ static fn(BucketContainer $bucket_container): int => $bucket_container->getId(),
+ BucketContainer::where(['state' => $state])->get()
+ );
}
/**
diff --git a/components/ILIAS/BackgroundTasks/src/Persistence.php b/components/ILIAS/BackgroundTasks/src/Persistence.php
index 43095254e13c..9c0fb8256dec 100755
--- a/components/ILIAS/BackgroundTasks/src/Persistence.php
+++ b/components/ILIAS/BackgroundTasks/src/Persistence.php
@@ -16,12 +16,7 @@
*
*********************************************************************/
-/**
- * Created by PhpStorm.
- * User: otruffer
- * Date: 05.05.17
- * Time: 10:14
- */
+declare(strict_types=1);
namespace ILIAS\BackgroundTasks;
@@ -33,9 +28,9 @@ interface Persistence
public function saveBucketAndItsTasks(Bucket $bucket): void;
/**
- * @return \int[] Returns an array of bucket ids for the given user Id.
+ * @return int[] Returns an array of bucket ids for the given user Id.
*/
- public function getBucketIdsOfUser(int $user_id, string $order_by = "id", string $order_direction = "ASC"): array;
+ public function getBucketIdsOfUser(int $user_id, string $order_by = 'id', string $order_direction = 'ASC'): array;
/**
* @return int[] Returns a list of bucket ids for the given Observer State
@@ -73,4 +68,6 @@ public function getBucketContainerId(Bucket $bucket): int;
* @return BucketMeta[]
*/
public function getBucketMetaOfUser(int $user_id): array;
+
+ public function garbageCollection(): void;
}
diff --git a/lang/ilias_de.lang b/lang/ilias_de.lang
index 1c9fd068a903..2d2565470092 100644
--- a/lang/ilias_de.lang
+++ b/lang/ilias_de.lang
@@ -2207,6 +2207,8 @@ awrn#:#user_awrn_default#:#Standard
awrn#:#user_awrn_hide#:#Nicht anzeigen
awrn#:#user_awrn_show#:#Anzeigen
background_tasks#:#abort#:#Abbrechen
+background_tasks#:#background_task_garbage_collection#:#Background Tasks GC
+background_tasks#:#background_task_garbage_collection_info#:#Dieser Job bereinigt veraltete Background Tasks und zugehörige Datenbanktabellen.
background_tasks#:#background_tasks#:#Background Tasks
background_tasks#:#background_tasks_running#:#Background Tasks
background_tasks#:#completed#:#Abgeschlossen
diff --git a/lang/ilias_en.lang b/lang/ilias_en.lang
index 1641cff2bc99..5a71b7fe66df 100644
--- a/lang/ilias_en.lang
+++ b/lang/ilias_en.lang
@@ -2207,6 +2207,8 @@ awrn#:#user_awrn_default#:#Default
awrn#:#user_awrn_hide#:#Hide my status
awrn#:#user_awrn_show#:#Show my status
background_tasks#:#abort#:#Abort
+background_tasks#:#background_task_garbage_collection#:#Background Tasks GC
+background_tasks#:#background_task_garbage_collection_info#:#This job cleans up stale tasks and related database tables.
background_tasks#:#background_tasks#:#Background Tasks
background_tasks#:#background_tasks_running#:#Background Tasks
background_tasks#:#completed#:#Completed