Newer
Older
<?php
/**
* This file contains QUI\Cron\Events
*/
namespace QUI\Cron;
use QUI;
/**
* Cron Main Events
*

Patrick Müller
committed
/**
* event: onPackageSetup
*
* @param QUI\Package\Package $Package

Patrick Müller
committed
*/
public static function onPackageSetup(QUI\Package\Package $Package)

Patrick Müller
committed
{
if ($Package->getName() === 'quiqqer/cron') {
self::checkCronTable();
}

Patrick Müller
committed
}
/**
* Checks if the table cron is correct
*
* @return void
*/
protected static function checkCronTable()
{
$categoryColumn = QUI::getDataBase()->table()->getColumn('cron', 'title');
if ($categoryColumn['Type'] === 'varchar(1000)') {
return;
}
$Stmnt = QUI::getDataBase()->getPDO()->prepare("ALTER TABLE cron MODIFY `title` VARCHAR(1000)");
$Stmnt->execute();
}
/**
* event : on admin header loaded
*/
return;
}
$User = QUI::getUserBySession();
$Package = QUI::getPackageManager()->getInstalledPackage('quiqqer/cron');
$Config = $Package->getConfig();
// send admin info
// check last cron execution
$CronManager = new Manager();
$result = $CronManager->getHistoryList(array(

Florian Bogner
committed
self::sendAdminInfoCronError();
}
}
/**
* event : on admin loaded -> footer output
*/
$Package = QUI::getPackageManager()->getInstalledPackage('quiqqer/cron');
$Config = $Package->getConfig();
// execute cron ?
echo '
<script>window.addEvent("load", function()
{
require(["Ajax"], function(QUIAjax)
{
QUIAjax.post("package_quiqqer_cron_ajax_execute", function()
{
}, {
"package" : "quiqqer/cron"
});
});
});
</script>';
}
}
/**
* send a message to the user, maybe an error in the crons exist
* last 24h was no cron sended
*/
{
QUI::getMessagesHandler()->sendAttention(
QUI::getUserBySession(),
QUI::getUserBySession()->getLocale()->get('quiqqer/cron', 'message.cron.admin.info.24h')

Florian Bogner
committed
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
/**
* 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
));
}
}