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

namespace IlluminateConsoleScheduling;

/**
 * @mixin IlluminateConsoleSchedulingSchedule
 */
class PendingEventAttributes
{
    use 
ManagesAttributesManagesFrequencies;

    
/**
     * Event lifecycle and output methods that should be deferred and replayed on each event in the group.
     *
     * @var array<int, string>
     */
    
public const DEFERRED_EVENT_METHODS = [
        
'before',
        
'after',
        
'then',
        
'thenWithOutput',
        
'onSuccess',
        
'onSuccessWithOutput',
        
'onFailure',
        
'onFailureWithOutput',
        
'pingBefore',
        
'pingBeforeIf',
        
'thenPing',
        
'thenPingIf',
        
'pingOnSuccess',
        
'pingOnSuccessIf',
        
'pingOnFailure',
        
'pingOnFailureIf',
        
'sendOutputTo',
        
'appendOutputTo',
        
'emailOutputTo',
        
'emailWrittenOutputTo',
        
'emailOutputOnFailure',
    ];

    
/**
     * The recorded macro and deferred method calls to replay on each event.
     *
     * @var array<int, array{string, array}>
     */
    
protected array $macros = [];

    
/**
     * Create a new pending event attributes instance.
     */
    
public function __construct(
        protected 
Schedule $schedule,
    ) {
    }

    
/**
     * Do not allow the event to overlap each other.
     *
     * The expiration time of the underlying cache lock may be specified in minutes.
     *
     * @param  int  $expiresAt
     * @param  bool  $releaseOnTerminationSignals
     * @return $this
     */
    
public function withoutOverlapping($expiresAt 1440$releaseOnTerminationSignals true)
    {
        
$this->withoutOverlapping true;

        
$this->expiresAt $expiresAt;

        
$this->releaseOnTerminationSignals $releaseOnTerminationSignals;

        return 
$this;
    }

    
/**
     * Merge the current attributes into the given event.
     */
    
public function mergeAttributes(Event $event): void
    
{
        
$event->expression $this->expression;
        
$event->repeatSeconds $this->repeatSeconds;

        if (
$this->description !== null) {
            
$event->name($this->description);
        }

        if (
$this->attributes !== []) {
            
$event->attributes $this->attributes;
        }

        if (
$this->timezone !== null) {
            
$event->timezone($this->timezone);
        }

        if (
$this->user !== null) {
            
$event->user $this->user;
        }

        if (! empty(
$this->environments)) {
            
$event->environments($this->environments);
        }

        if (
$this->evenInMaintenanceMode) {
            
$event->evenInMaintenanceMode();
        }

        if (
$this->evenWhenPaused) {
            
$event->evenWhenPaused();
        }

        if (
$this->withoutOverlapping) {
            
$event->withoutOverlapping($this->expiresAt$this->releaseOnTerminationSignals);
        }

        if (
$this->onOneServer) {
            
$event->onOneServer();
        }

        if (
$this->runInBackground) {
            
$event->runInBackground();
        }

        foreach (
$this->filters as $filter) {
            
$event->when($filter);
        }

        foreach (
$this->rejects as $reject) {
            
$event->skip($reject);
        }

        foreach (
$this->macros as [$method$parameters]) {
            
$event->{$method}(...$parameters);
        }
    }

    
/**
     * Proxy missing methods onto the underlying schedule.
     */
    
public function __call(string $method, array $parameters): mixed
    
{
        if (
Event::hasMacro($method) || in_array($method, static::DEFERRED_EVENT_METHODStrue)) {
            
$this->macros[] = [$method$parameters];

            return 
$this;
        }

        return 
$this->schedule->{$method}(...$parameters);
    }
}
Онлайн: 2
Реклама