%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/commands/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/commands/CronController.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\commands;
use DateTime;
use Yii;
use yii\console\Controller;
use yii\console\ExitCode;
use yii\helpers\Console;
/**
* Cronjobs
*
* @author Luke
*/
class CronController extends Controller
{
/**
* @event Event an event that is triggered when the hourly cron is started.
*/
const EVENT_ON_HOURLY_RUN = "hourly";
/**
* @event Event an event that is triggered when the daily cron is started.
*/
const EVENT_ON_DAILY_RUN = "daily";
/**
* @var string mutex to acquire
*/
const MUTEX_ID = 'cron-mutex';
/**
* Runs the cron jobs
*
* @return int status code
*/
public function actionRun()
{
if (!Yii::$app->mutex->acquire(static::MUTEX_ID)) {
$this->stdout("Cron execution skipped - already running!\n");
return ExitCode::OK;
}
$this->runHourly();
$this->runDaily();
Yii::$app->settings->set('cronLastRun', time());
Yii::$app->mutex->release(static::MUTEX_ID);
return ExitCode::OK;
}
/**
* Force run of the hourly cron jobs (Test Only)
*/
public function actionHourly()
{
$this->stdout("Executing hourly tasks:\n\n", Console::FG_YELLOW);
$this->runHourly(true);
return ExitCode::OK;
}
/**
* Force run of the daily cron jobs (Test Only)
*/
public function actionDaily()
{
$this->stdout("Executing daily tasks:\n\n", Console::FG_YELLOW);
$this->runDaily(true);
return ExitCode::OK;
}
/**
* Runs the hourly cron jobs
*
* @param bool $force
*/
protected function runHourly($force = false)
{
$lastRun = (int)Yii::$app->settings->getUncached('cronLastHourlyRun');
if (!empty($lastRun) && $force !== true) {
// Execute only once a hour
if (time() < $lastRun + 3600) {
return;
}
}
$this->trigger(self::EVENT_ON_HOURLY_RUN);
Yii::$app->settings->set('cronLastHourlyRun', time());
}
/**
* Runs the daily cron jobs
*
* @param bool $force
* @throws \Exception
*/
protected function runDaily($force = false)
{
$lastRun = (int)Yii::$app->settings->getUncached('cronLastDailyRun');
if (!empty($lastRun) && $force !== true) {
$lastTime = new DateTime('@' . $lastRun);
$todayTime = DateTime::createFromFormat(
'Y-m-d H:i',
date('Y-m-d') . ' ' . Yii::$app->params['dailyCronExecutionTime']
);
$nowTime = new DateTime();
// Already executed today time OR before today execution
if ($lastTime >= $todayTime || $nowTime < $todayTime) {
return;
}
}
$this->trigger(self::EVENT_ON_DAILY_RUN);
Yii::$app->settings->set('cronLastDailyRun', time());
}
}