order = $this->link = $this->file = null; } public static function fromModel(Attachment $model, ZipExportFiles $files): self { $instance = new self(); $instance->id = $model->id; $instance->name = $model->name; $instance->order = $model->order; if ($model->external) { $instance->link = $model->path; } else { $instance->file = $files->referenceForAttachment($model); } return $instance; } public static function fromModelArray(array $attachmentArray, ZipExportFiles $files): array { return array_values(array_map(function (Attachment $attachment) use ($files) { return self::fromModel($attachment, $files); }, $attachmentArray)); } public static function validate(ZipValidationHelper $context, array $data): array { $rules = [ 'id' => ['nullable', 'int'], 'name' => ['required', 'string', 'min:1'], 'order' => ['nullable', 'integer'], 'link' => ['required_without:file', 'nullable', 'string'], 'file' => ['required_without:link', 'nullable', 'string', $context->fileReferenceRule()], ]; return $context->validateData($data, $rules); } public static function fromArray(array $data): self { $model = new self(); $model->id = $data['id'] ?? null; $model->name = $data['name']; $model->order = isset($data['order']) ? intval($data['order']) : null; $model->link = $data['link'] ?? null; $model->file = $data['file'] ?? null; return $model; } }