Вход Регистрация
Файл: protected/commands/SchedulerCommand.php
Строк: 62
<?php

class SchedulerCommand extends CConsoleCommand
{
    public function 
actionIndex(array $task = array(), $manual = false)
    {
        foreach (
Scheduler::model()->findAll(array('order' => '`order` ASC', 'condition' => 't.active=1' . (count($task) ? ' AND t.id IN (' . implode(',', $task) . ')' : ''))) as $schedule) {
            echo 
$schedule->module . "::" . $schedule->task . "Task()n";
            if (
$manual == false) {
                
$data_value = array();
                
preg_match('/^([0-9]+)([a-zA-Z]+)$/is', $schedule->period, $data_value);
                if (
count($data_value) < 3 || empty($data_value[0]) || empty($data_value[1]) || empty($data_value[2]))
                    continue;
                switch (
$data_value[2]) {
                    case 
's':
                        
$date_type = 'SECOND';
                        break;

                    case 
'i':
                        
$date_type = 'MINUTE';
                        break;

                    case 
'h':
                        
$date_type = 'HOUR';
                        break;

                    case 
'd':
                        
$date_type = 'DAY';
                        break;

                    case 
'm':
                        
$date_type = 'MONTH';
                        break;

                    case 
'y':
                        
$date_type = 'YEAR';
                        break;

                    default:
                        
$date_type = 'HOUR';
                }
                
$sql = "SELECT IF(DATE_ADD(last_run, INTERVAL " . intval($data_value[1]) . " " . $date_type . ")<=UTC_TIMESTAMP(), 'yes', 'no') as need_start FROM " . Scheduler::model()->tableName() . " WHERE id=" . $schedule->id;
                
$need_start = Yii::app()->db->createCommand($sql)->queryScalar();
                if (
$need_start == 'no') {
                    echo 
"no need start tasknn";
                    continue;
                }
            }

            echo 
"start taskn";
            
$module = $schedule->module . 'Scheduler';
            
$task = $schedule->task . 'Task';
            
$error = '';
            try {
                
Yii::app()->$module->$task($schedule->data);
            } catch (
CException $e) {
                
$error = $e->getMessage();
            }
            if (!empty(
$error)) {
                echo 
"error with start tasknerror text: " . $error . "nncontinuednn";
                continue;
            }

            if (
$manual)
                echo 
"task finishednn";
            else {
                if (
$schedule->task == 'exchangeRates' && $schedule->last_run == '1970-01-01 00:00:00') {
                    
$utc_run = Yii::app()->db->createCommand("SELECT DATE_ADD(DATE_SUB(UTC_DATE(), INTERVAL 4 HOUR), INTERVAL 2 MINUTE)")->queryScalar();
                    
$schedule->last_run = $utc_run;
                } else
                    
$schedule->last_run = new CDbExpression('UTC_TIMESTAMP()');
                if (
$schedule->save())
                    echo 
"task finished, last start date updatednn";
                else
                    echo 
"error with update tasknn";
            }
        }
    }
}
Онлайн: 2
Реклама