/** * Processes a single uploaded file * - sanitize the name * - validates the file * - if valid, moves the file to the container * * @param array $file * @return array */ protected function processSingleFile(array $file) { // store it for future reference $file['original_name'] = $file['name']; // sanitize the file name $file['name'] = $this->sanitizeFileName($file['name']); $file = $this->validateFile($file); // if there are messages the file is not valid if (isset($file['messages']) && $file['messages']) { return $file; } // add the prefix $prefix = ''; if (is_callable($this->prefix)) { $prefix = (string) call_user_func($this->prefix, $file['name']); } elseif (is_string($this->prefix)) { $prefix = (string) $this->prefix; } // if overwrite is not allowed, check if the file is already in the container if (!$this->overwrite) { if ($this->container->has($prefix . $file['name'])) { // add the timestamp to ensure the file is unique // method is not bulletproof but it's pretty safe $file['name'] = time() . '_' . $file['name']; } } // attempt to move the uploaded file into the container if (!$this->container->moveUploadedFile($file['tmp_name'], $prefix . $file['name'])) { $file['name'] = false; return $file; } $file['name'] = $prefix . $file['name']; // create the lock file if autoconfirm is disabled if (!$this->autoconfirm) { $this->container->save($file['name'] . '.lock', time()); } return $file; }
/** * Remove the .lock file attached to the file that was saved during process() * This should happen if the form fails validation/processing */ public function confirm() { $this->container->delete($this->name . '.lock'); }