/** * Determine if it is a URL upload or file upload. * Upload the file and set file name * * @param $key * @param $value */ public function setAttribute($key, $value) { if (in_array($key, array_keys($this->fileFields)) && $value) { // If valid URL and file exists, download it if (filter_var($value, FILTER_VALIDATE_URL)) { $headers = @get_headers($value); if (strpos($headers[0], '200') || strpos($headers[0], '301') || strpos($headers[0], '302')) { $fileName = pathinfo($value, PATHINFO_FILENAME); $extension = pathinfo($value, PATHINFO_EXTENSION); $fullFileName = join('.', [$fileName, $extension]); $fileField = new FileField($this, $key, $fullFileName); $this->attributes[$key] = $fileField->uploadRemoteFile($value); } } elseif ($value instanceof UploadedFile) { $fileName = str_slug(pathinfo($value->getClientOriginalName(), PATHINFO_FILENAME)); $extension = $value->getClientOriginalExtension(); $fullFileName = join('.', [$fileName, $extension]); $fileField = new FileField($this, $key, $fullFileName); $this->attributes[$key] = $fileField->uploadFile($value); } elseif (is_string($value)) { $fileName = pathinfo($value, PATHINFO_FILENAME); $extension = pathinfo($value, PATHINFO_EXTENSION); $fullFileName = join('.', [$fileName, $extension]); $fileField = new FileField($this, $key, $fullFileName); $this->attributes[$key] = $fileField->copyLocal($value); } } else { parent::setAttribute($key, $value); } }