Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Console/Scheduling/ManagesFrequencies.php
Строк: 602
<?php

namespace IlluminateConsoleScheduling;

use 
IlluminateSupportCarbon;

trait 
ManagesFrequencies
{
    
/**
     * The Cron expression representing the event's frequency.
     *
     * @param  string  $expression
     * @return $this
     */
    
public function cron($expression)
    {
        
$this->expression $expression;

        return 
$this;
    }

    
/**
     * Schedule the event to run between start and end time.
     *
     * @param  string  $startTime
     * @param  string  $endTime
     * @return $this
     */
    
public function between($startTime$endTime)
    {
        return 
$this->when($this->inTimeInterval($startTime$endTime));
    }

    
/**
     * Schedule the event to not run between start and end time.
     *
     * @param  string  $startTime
     * @param  string  $endTime
     * @return $this
     */
    
public function unlessBetween($startTime$endTime)
    {
        return 
$this->skip($this->inTimeInterval($startTime$endTime));
    }

    
/**
     * Schedule the event to run between start and end time.
     *
     * @param  string  $startTime
     * @param  string  $endTime
     * @return Closure
     */
    
private function inTimeInterval($startTime$endTime)
    {
        [
$now$startTime$endTime] = [
            
Carbon::now($this->timezone),
            
Carbon::parse($startTime$this->timezone),
            
Carbon::parse($endTime$this->timezone),
        ];

        if (
$endTime->lessThan($startTime)) {
            if (
$startTime->greaterThan($now)) {
                
$startTime $startTime->subDay(1);
            } else {
                
$endTime $endTime->addDay(1);
            }
        }

        return function () use (
$now$startTime$endTime) {
            return 
$now->between($startTime$endTime);
        };
    }

    
/**
     * Schedule the event to run every minute.
     *
     * @return $this
     */
    
public function everyMinute()
    {
        return 
$this->spliceIntoPosition(1'*');
    }

    
/**
     * Schedule the event to run every two minutes.
     *
     * @return $this
     */
    
public function everyTwoMinutes()
    {
        return 
$this->spliceIntoPosition(1'*/2');
    }

    
/**
     * Schedule the event to run every three minutes.
     *
     * @return $this
     */
    
public function everyThreeMinutes()
    {
        return 
$this->spliceIntoPosition(1'*/3');
    }

    
/**
     * Schedule the event to run every four minutes.
     *
     * @return $this
     */
    
public function everyFourMinutes()
    {
        return 
$this->spliceIntoPosition(1'*/4');
    }

    
/**
     * Schedule the event to run every five minutes.
     *
     * @return $this
     */
    
public function everyFiveMinutes()
    {
        return 
$this->spliceIntoPosition(1'*/5');
    }

    
/**
     * Schedule the event to run every ten minutes.
     *
     * @return $this
     */
    
public function everyTenMinutes()
    {
        return 
$this->spliceIntoPosition(1'*/10');
    }

    
/**
     * Schedule the event to run every fifteen minutes.
     *
     * @return $this
     */
    
public function everyFifteenMinutes()
    {
        return 
$this->spliceIntoPosition(1'*/15');
    }

    
/**
     * Schedule the event to run every thirty minutes.
     *
     * @return $this
     */
    
public function everyThirtyMinutes()
    {
        return 
$this->spliceIntoPosition(1'0,30');
    }

    
/**
     * Schedule the event to run hourly.
     *
     * @return $this
     */
    
public function hourly()
    {
        return 
$this->spliceIntoPosition(10);
    }

    
/**
     * Schedule the event to run hourly at a given offset in the hour.
     *
     * @param  array|int  $offset
     * @return $this
     */
    
public function hourlyAt($offset)
    {
        
$offset is_array($offset) ? implode(','$offset) : $offset;

        return 
$this->spliceIntoPosition(1$offset);
    }

    
/**
     * Schedule the event to run every odd hour.
     *
     * @return $this
     */
    
public function everyOddHour()
    {
        return 
$this->spliceIntoPosition(10)->spliceIntoPosition(2'1-23/2');
    }

    
/**
     * Schedule the event to run every two hours.
     *
     * @return $this
     */
    
public function everyTwoHours()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(2'*/2');
    }

    
/**
     * Schedule the event to run every three hours.
     *
     * @return $this
     */
    
public function everyThreeHours()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(2'*/3');
    }

    
/**
     * Schedule the event to run every four hours.
     *
     * @return $this
     */
    
public function everyFourHours()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(2'*/4');
    }

    
/**
     * Schedule the event to run every six hours.
     *
     * @return $this
     */
    
public function everySixHours()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(2'*/6');
    }

    
/**
     * Schedule the event to run daily.
     *
     * @return $this
     */
    
public function daily()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(20);
    }

    
/**
     * Schedule the command at a given time.
     *
     * @param  string  $time
     * @return $this
     */
    
public function at($time)
    {
        return 
$this->dailyAt($time);
    }

    
/**
     * Schedule the event to run daily at a given time (10:00, 19:30, etc).
     *
     * @param  string  $time
     * @return $this
     */
    
public function dailyAt($time)
    {
        
$segments explode(':'$time);

        return 
$this->spliceIntoPosition(2, (int) $segments[0])
                    ->
spliceIntoPosition(1count($segments) === ? (int) $segments[1] : '0');
    }

    
/**
     * Schedule the event to run twice daily.
     *
     * @param  int  $first
     * @param  int  $second
     * @return $this
     */
    
public function twiceDaily($first 1$second 13)
    {
        return 
$this->twiceDailyAt($first$second0);
    }

    
/**
     * Schedule the event to run twice daily at a given offset.
     *
     * @param  int  $first
     * @param  int  $second
     * @param  int  $offset
     * @return $this
     */
    
public function twiceDailyAt($first 1$second 13$offset 0)
    {
        
$hours $first.','.$second;

        return 
$this->spliceIntoPosition(1$offset)
                    ->
spliceIntoPosition(2$hours);
    }

    
/**
     * Schedule the event to run only on weekdays.
     *
     * @return $this
     */
    
public function weekdays()
    {
        return 
$this->days(Schedule::MONDAY.'-'.Schedule::FRIDAY);
    }

    
/**
     * Schedule the event to run only on weekends.
     *
     * @return $this
     */
    
public function weekends()
    {
        return 
$this->days(Schedule::SATURDAY.','.Schedule::SUNDAY);
    }

    
/**
     * Schedule the event to run only on Mondays.
     *
     * @return $this
     */
    
public function mondays()
    {
        return 
$this->days(Schedule::MONDAY);
    }

    
/**
     * Schedule the event to run only on Tuesdays.
     *
     * @return $this
     */
    
public function tuesdays()
    {
        return 
$this->days(Schedule::TUESDAY);
    }

    
/**
     * Schedule the event to run only on Wednesdays.
     *
     * @return $this
     */
    
public function wednesdays()
    {
        return 
$this->days(Schedule::WEDNESDAY);
    }

    
/**
     * Schedule the event to run only on Thursdays.
     *
     * @return $this
     */
    
public function thursdays()
    {
        return 
$this->days(Schedule::THURSDAY);
    }

    
/**
     * Schedule the event to run only on Fridays.
     *
     * @return $this
     */
    
public function fridays()
    {
        return 
$this->days(Schedule::FRIDAY);
    }

    
/**
     * Schedule the event to run only on Saturdays.
     *
     * @return $this
     */
    
public function saturdays()
    {
        return 
$this->days(Schedule::SATURDAY);
    }

    
/**
     * Schedule the event to run only on Sundays.
     *
     * @return $this
     */
    
public function sundays()
    {
        return 
$this->days(Schedule::SUNDAY);
    }

    
/**
     * Schedule the event to run weekly.
     *
     * @return $this
     */
    
public function weekly()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(20)
                    ->
spliceIntoPosition(50);
    }

    
/**
     * Schedule the event to run weekly on a given day and time.
     *
     * @param  array|mixed  $dayOfWeek
     * @param  string  $time
     * @return $this
     */
    
public function weeklyOn($dayOfWeek$time '0:0')
    {
        
$this->dailyAt($time);

        return 
$this->days($dayOfWeek);
    }

    
/**
     * Schedule the event to run monthly.
     *
     * @return $this
     */
    
public function monthly()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(20)
                    ->
spliceIntoPosition(31);
    }

    
/**
     * Schedule the event to run monthly on a given day and time.
     *
     * @param  int  $dayOfMonth
     * @param  string  $time
     * @return $this
     */
    
public function monthlyOn($dayOfMonth 1$time '0:0')
    {
        
$this->dailyAt($time);

        return 
$this->spliceIntoPosition(3$dayOfMonth);
    }

    
/**
     * Schedule the event to run twice monthly at a given time.
     *
     * @param  int  $first
     * @param  int  $second
     * @param  string  $time
     * @return $this
     */
    
public function twiceMonthly($first 1$second 16$time '0:0')
    {
        
$daysOfMonth $first.','.$second;

        
$this->dailyAt($time);

        return 
$this->spliceIntoPosition(3$daysOfMonth);
    }

    
/**
     * Schedule the event to run on the last day of the month.
     *
     * @param  string  $time
     * @return $this
     */
    
public function lastDayOfMonth($time '0:0')
    {
        
$this->dailyAt($time);

        return 
$this->spliceIntoPosition(3Carbon::now()->endOfMonth()->day);
    }

    
/**
     * Schedule the event to run quarterly.
     *
     * @return $this
     */
    
public function quarterly()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(20)
                    ->
spliceIntoPosition(31)
                    ->
spliceIntoPosition(4'1-12/3');
    }

    
/**
     * Schedule the event to run quarterly on a given day and time.
     *
     * @param  int  $dayOfQuarter
     * @param  int  $time
     * @return $this
     */
    
public function quarterlyOn($dayOfQuarter 1$time '0:0')
    {
        
$this->dailyAt($time);

        return 
$this->spliceIntoPosition(3$dayOfQuarter)
                    ->
spliceIntoPosition(4'1-12/3');
    }

    
/**
     * Schedule the event to run yearly.
     *
     * @return $this
     */
    
public function yearly()
    {
        return 
$this->spliceIntoPosition(10)
                    ->
spliceIntoPosition(20)
                    ->
spliceIntoPosition(31)
                    ->
spliceIntoPosition(41);
    }

    
/**
     * Schedule the event to run yearly on a given month, day, and time.
     *
     * @param  int  $month
     * @param  int|string  $dayOfMonth
     * @param  string  $time
     * @return $this
     */
    
public function yearlyOn($month 1$dayOfMonth 1$time '0:0')
    {
        
$this->dailyAt($time);

        return 
$this->spliceIntoPosition(3$dayOfMonth)
                    ->
spliceIntoPosition(4$month);
    }

    
/**
     * Set the days of the week the command should run on.
     *
     * @param  array|mixed  $days
     * @return $this
     */
    
public function days($days)
    {
        
$days is_array($days) ? $days func_get_args();

        return 
$this->spliceIntoPosition(5implode(','$days));
    }

    
/**
     * Set the timezone the date should be evaluated on.
     *
     * @param  DateTimeZone|string  $timezone
     * @return $this
     */
    
public function timezone($timezone)
    {
        
$this->timezone $timezone;

        return 
$this;
    }

    
/**
     * Splice the given value into the given position of the expression.
     *
     * @param  int  $position
     * @param  string  $value
     * @return $this
     */
    
protected function spliceIntoPosition($position$value)
    {
        
$segments preg_split("/s+/"$this->expression);

        
$segments[$position 1] = $value;

        return 
$this->cron(implode(' '$segments));
    }
}
Онлайн: 0
Реклама