diff --git a/cron.xml b/cron.xml index b200f3aa66d90baf4748afb47d441598ee263603..c8429ecd9244cc2ef4bbdaa94c43b00b596c83a3 100644 --- a/cron.xml +++ b/cron.xml @@ -12,7 +12,7 @@ </cron> <!-- region Cleanup Temp-Folder --> - <cron exec="\QUI\Cron\QuiqqerCrons::cleanupCronHistory"> + <cron exec="\QUI\Cron\QuiqqerCrons::cleanupCronHistory" required="1"> <title> <locale group="quiqqer/cron" var="cron.cleanup.history.title"/> </title> @@ -31,7 +31,7 @@ <!-- endregion --> <!-- region Cleanup Temp-Folder --> - <cron exec="\QUI\Cron\QuiqqerCrons::clearTempFolder"> + <cron exec="\QUI\Cron\QuiqqerCrons::clearTempFolder" required="1"> <title> <locale group="quiqqer/cron" var="cron.cleanup.temp.title"/> </title> @@ -47,7 +47,7 @@ <!-- endregion --> <!-- region Cleanup Sessions --> - <cron exec="\QUI\Cron\QuiqqerCrons::clearSessions"> + <cron exec="\QUI\Cron\QuiqqerCrons::clearSessions" required="1"> <title> <locale group="quiqqer/cron" var="cron.cleanup.sessions.title"/> </title> diff --git a/src/QUI/Cron/EventHandler.php b/src/QUI/Cron/EventHandler.php index 7c71fb21f3bbd29290d60605c6f1bb9766531cd8..8510674db31f6bee37b109d18ff84b4cdd54e99c 100644 --- a/src/QUI/Cron/EventHandler.php +++ b/src/QUI/Cron/EventHandler.php @@ -33,6 +33,8 @@ class EventHandler if ($Package->getName() === 'quiqqer/cron') { self::checkCronTable(); } + + self::createAutoCreateCrons(null, true); } /** @@ -191,15 +193,27 @@ class EventHandler * Create all crons with a <autocreate> items. * * @param string|null $scope (optional) - Only create crons for given scope (see Manager::AUTOCREATE_SCOPE_*) + * @param bool $onlyRequired - Only create required crons * @return void */ - public static function createAutoCreateCrons(?string $scope = null): void - { + public static function createAutoCreateCrons( + ?string $scope = null, + bool $onlyRequired = false + ): void { $CronManager = new Manager(); foreach ($CronManager->getAvailableCrons() as $cron) { $title = $cron['title']; $exec = $cron['exec']; + $required = $cron['required']; + + if ($onlyRequired && $required === false) { + continue; + } + + if (empty($cron['autocreate'])) { + continue; + } foreach ($cron['autocreate'] as $autocreate) { // Check if cron already exists @@ -211,18 +225,11 @@ class EventHandler continue; } - switch ($autocreate['scope']) { - case Manager::AUTOCREATE_SCOPE_PROJECTS: - $createWithParams = self::getCronsToCreateForProjectsScope($params); - break; - - case Manager::AUTOCREATE_SCOPE_LANGUAGES: - $createWithParams = self::getCronsToCreateForLanguagesScope($params); - break; - - default: - $createWithParams = [$params]; - } + $createWithParams = match ($autocreate['scope']) { + Manager::AUTOCREATE_SCOPE_PROJECTS => self::getCronsToCreateForProjectsScope($params), + Manager::AUTOCREATE_SCOPE_LANGUAGES => self::getCronsToCreateForLanguagesScope($params), + default => [$params], + }; // Create crons foreach ($createWithParams as $createParams) { @@ -283,14 +290,8 @@ class EventHandler foreach ($projectCronParams as $k => $v) { $projectCronParams[$k] = str_replace( - [ - '[projectName]', - '[projectLang]' - ], - [ - $projectName, - $language - ], + ['[projectName]', '[projectLang]'], + [$projectName, $language], $v ); } diff --git a/src/QUI/Cron/Manager.php b/src/QUI/Cron/Manager.php index 2a091e6d98ce7d1bce80ddc10fed065705defcf6..176292187640f87b70ed2332cb57cfc844698f0b 100644 --- a/src/QUI/Cron/Manager.php +++ b/src/QUI/Cron/Manager.php @@ -798,6 +798,7 @@ class Manager $title = ''; $desc = ''; + $required = false; $params = []; /* @var $Cron DOMElement */ @@ -805,6 +806,13 @@ class Manager $Desc = $Cron->getElementsByTagName('description'); $Params = $Cron->getElementsByTagName('params'); + if ( + $Cron->getAttribute('required') + && ($Cron->getAttribute('required') === '1' || $Cron->getAttribute('required') === 'true') + ) { + $required = true; + } + if ($Title->length) { $title = QUI\Utils\DOM::getTextFromNode($Title->item(0)); } @@ -920,6 +928,7 @@ class Manager $result[] = [ 'title' => $title, 'description' => $desc, + 'required' => $required, 'exec' => $Cron->getAttribute('exec'), 'params' => $params, 'autocreate' => $autocreate