%PDF- %PDF-
Direktori : /home/silvzytp/crm-ind-code/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ |
Current File : //home/silvzytp/crm-ind-code/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ManagesFrequencies.php |
<?php namespace Illuminate\Console\Scheduling; use Illuminate\Support\Carbon; 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(1, 0); } /** * 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(1, 0)->spliceIntoPosition(2, '1-23/2'); } /** * Schedule the event to run every two hours. * * @return $this */ public function everyTwoHours() { return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, '*/2'); } /** * Schedule the event to run every three hours. * * @return $this */ public function everyThreeHours() { return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, '*/3'); } /** * Schedule the event to run every four hours. * * @return $this */ public function everyFourHours() { return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, '*/4'); } /** * Schedule the event to run every six hours. * * @return $this */ public function everySixHours() { return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, '*/6'); } /** * Schedule the event to run daily. * * @return $this */ public function daily() { return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, 0); } /** * 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(1, count($segments) === 2 ? (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, $second, 0); } /** * 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(1, 0) ->spliceIntoPosition(2, 0) ->spliceIntoPosition(5, 0); } /** * 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(1, 0) ->spliceIntoPosition(2, 0) ->spliceIntoPosition(3, 1); } /** * 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(3, Carbon::now()->endOfMonth()->day); } /** * Schedule the event to run quarterly. * * @return $this */ public function quarterly() { return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, 0) ->spliceIntoPosition(3, 1) ->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(1, 0) ->spliceIntoPosition(2, 0) ->spliceIntoPosition(3, 1) ->spliceIntoPosition(4, 1); } /** * 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(5, implode(',', $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)); } }