private function sendToStatusInternal($status, $delayed)
{
$this->_pendingEvents = [];
list($newStatus, , $events) = $this->createTransitionItems($status, false, true);
$delayedStop = false;
if (!empty($events['before'])) {
foreach ($events['before'] as $eventBefore) {
$this->owner->trigger($eventBefore->name, $eventBefore);
if ($eventBefore->isValid === false) {
if ($this->propagateErrorsToModel === true && count($eventBefore->getErrors()) != 0) {
$this->owner->addErrors([$this->statusAttribute => $eventBefore->getErrors()]);
}
if ($this->stopOnFirstInvalidEvent === true) {
return false;
} else {
$delayedStop = true;
}
}
}
}
if ($delayedStop) {
return false;
}
$this->setStatusInternal($newStatus);
if (!empty($events['after'])) {
if ($delayed) {
$this->_pendingEvents = $events['after'];
} else {
foreach ($events['after'] as $eventAfter) {
$this->owner->trigger($eventAfter->name, $eventAfter);
}
}
}
if ($this->getStatusAccessor() != null) {
$this->_statusAccessor->updateStatus($this->owner, $newStatus);
}
return true;
}