Skip to content
Code-Schnipsel Gruppen Projekte
Commit 6119c2f0 erstellt von Henning Leutz's avatar Henning Leutz :martial_arts_uniform:
Dateien durchsuchen

Merge branch 'dev'

Übergeordnete df612065 1ccdeb93
No related branches found
No related tags found
Keine zugehörigen Merge Requests gefunden
......@@ -3,4 +3,6 @@
<event on="onAdminLoad" fire="\QUI\Cron\EventHandler::onAdminLoad"/>
<event on="onAdminLoadFooter" fire="\QUI\Cron\EventHandler::adminLoadFooter"/>
<event on="onPackageSetup" fire="\QUI\Cron\EventHandler::onPackageSetup"/>
<event on="onPackageInstall" fire="\QUI\Cron\EventHandler::onPackageInstall"/>
<event on="onCreateProject" fire="\QUI\Cron\EventHandler::onCreateProject"/>
</events>
\ No newline at end of file
......@@ -80,6 +80,7 @@ class EventHandler
if (!isset($result[0])) {
self::sendAdminInfoCronError();
return;
}
......@@ -129,4 +130,115 @@ class EventHandler
QUI::getUserBySession()->getLocale()->get('quiqqer/cron', 'message.cron.admin.info.24h')
);
}
/**
* Event: onPackageInstall => Add default crons
*/
public static function onPackageInstall()
{
self::createDefaultCrons();
}
/**
* Creates the default crons, if they do not exist yet
*
*/
public static function createDefaultCrons()
{
$CronManager = new Manager();
$defaultCrons = array(
// Clear temp folder
"quiqqer/cron:0" => array(
"min" => "0",
"hour" => "0",
"day" => "*",
"month" => "*",
"dow" => "*"
),
// Clear sessions
"quiqqer/cron:1" => array(
"min" => "0",
"hour" => "*",
"day" => "*",
"month" => "*",
"dow" => "*"
),
// Process mail queue
"quiqqer/cron:6" => array(
"min" => "*/5",
"hour" => "0",
"day" => "*",
"month" => "*",
"dow" => "*"
)
);
// Parse the installed crons
$installedCrons = array();
foreach ($CronManager->getList() as $row) {
$installedCrons[] = strtolower(trim($row['exec']));
}
// add the simple default crons, if they dont exist yet
foreach ($defaultCrons as $identifier => $time) {
$data = $CronManager->getCronData($identifier);
$exec = trim($data['exec']);
$title = trim($data['title']);
if (in_array(strtolower($exec), $installedCrons)) {
continue;
}
$CronManager->add($title, $time['min'], $time['hour'], $time['day'], $time['month'], $time['dow']);
}
}
/**
* Event: onCreateProject => Add the publish cron for this project
* @param QUI\Projects\Project $Project
*/
public static function onCreateProject(QUI\Projects\Project $Project)
{
$CronManager = new Manager();
$publishCronData = $CronManager->getCronData("quiqqer/cron:5");
$languages = $Project->getLanguages();
$installedCrons = $CronManager->getList();
foreach ($languages as $lang) {
// Check that no cron with the same parameters exists yet
foreach ($installedCrons as $installedCronData) {
$installedParams = json_decode($installedCronData['params'], true);
$installedProject = "";
$installedLang = "";
foreach ($installedParams as $name => $value) {
if ($name == "project") {
$installedProject = strtolower(trim($value));
}
if ($name == "lang") {
$installedLang = strtolower(trim($value));
}
}
// Cron for this project & lang combination exists => skip
if ($installedProject == strtolower(trim($Project->getName())) &&
$installedLang == strtolower(trim($lang))
) {
continue 2;
}
}
// Add the cron
$CronManager->add($publishCronData['title'], "0", "*", "*", "*", "*", array(
"project" => $Project->getName(),
"lang" => $lang
));
}
}
}
......@@ -362,15 +362,36 @@ class Manager
* Return the data of a specific cron from the available cron list
* This cron is not in the cron list
*
* @param string $cron - Name of the Cron
*
* @param string $cron - Cron-Identifier (package/package:NO) or name of the Cron
* @return array|false - Cron Data
*/
public function getCronData($cron)
{
$availableCrons = $this->getAvailableCrons();
// check if cron is available
// cron by package Identifier package/package:NO
$cronParts = explode(':', $cron);
try {
$Package = QUI::getPackage($cronParts[0]);
$cronFile = $Package->getXMLFile('cron.xml');
if ($Package->isQuiqqerPackage()
&& $cronFile
&& isset($cronParts[1])
&& is_numeric($cronParts[1])
) {
$cronNo = (int)$cronParts[1];
$cronList = $this->getCronsFromFile($cronFile);
if (isset($cronList[$cronNo])) {
return $cronList[$cronNo];
}
}
} catch (QUI\Exception $Exception) {
}
// search cron via title
foreach ($availableCrons as $entry) {
if ($entry['title'] == $cron) {
return $entry;
......
0% oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren