32], [['event_type'], 'in', 'range' => [ self::EVENT_REQUESTED, self::EVENT_ACCEPTED, self::EVENT_DECLINED, self::EVENT_COMPLETED, self::EVENT_CANCELLED, ]], ]; } public function beforeSave($insert) { if (!$insert) { return false; } if (!parent::beforeSave($insert)) { return false; } if (empty($this->created_at)) { $this->created_at = date('Y-m-d H:i:s'); } return true; } public static function log( AnimalTransfer $transfer, string $eventType, ?string $fromStatus, ?string $toStatus, string $message = '', array $metadata = [] ): bool { $event = new self(); $event->transfer_id = (int)$transfer->id; $event->animal_id = (int)$transfer->animal_id; $event->event_type = $eventType; $event->from_status = $fromStatus; $event->to_status = $toStatus; $event->message = $message; $event->metadata_json = empty($metadata) ? null : Json::encode($metadata); $event->created_by = Yii::$app->user->isGuest ? null : (int)Yii::$app->user->id; return $event->save(false); } public function getCreatedByUser() { return $this->hasOne(User::class, ['id' => 'created_by']); } }