Skip to content
Commits auf Quelle (2)
  • Henning Leutz's avatar
    feat: add required attribute to cron.xml · 311f2c3a
    verfasst von Henning Leutz
    In this commit, we have improved the handling of cron tasks and introduced the 'required'
    attribute. Changes made include:
    
    - Added 'required' attribute to three cron exec in `cron.xml` to enforce their creation.
    - Updated `EventHandler` to only create `required` crons, and to stop creating non-required crons
    when the `$onlyRequired` argument is set to `true`.
    - Improved how crons are created with different scopes by replacing the switch statement with a
    `match` expression in `EventHandler`.
    - Added the handling of the 'required' attribute in `Manager` to ensure all cron objects are aware
    of if they are required or not. This attribute is set to `true` for required crons and `false` if
    not specified or not required.
    - Simplified the array replacement in `EventHandler`.
    
    This improvement in how cron tasks are managed will result in more efficient and robust operation
    of the system.
    311f2c3a
  • Henning Leutz's avatar
    Merge branch 'next-2.x' into 'main' · cf820864
    verfasst von Henning Leutz
    feat: add required attribute to cron.xml
    
    See merge request !27
    cf820864
......@@ -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>
......
......@@ -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
);
}
......
......@@ -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
......