<?php
/**
* User: delboy1978uk
* Date: 01/01/2017
* Time: 19:58
*/
namespace Del\Form\Field;
use Del\Form\Renderer\Field\FileUploadRender;
use InvalidArgumentException;
use LogicException;
class FileUpload extends FieldAbstract implements FieldInterface
{
/** @var string $uploadDirectory */
private $uploadDirectory;
/** @var array $_FILES */
private $files;
/**
* @return string
*/
public function getTag()
{
return 'input';
}
public function init()
{
$this->setAttribute('type', 'file');
$this->setRenderer(new FileUploadRender());
$this->files = $_FILES;
if ($this->hasUploadedFile()) {
$this->setValue($this->files[$this->getName()]['name']);
}
}
/**
* @return bool
*/
private function hasUploadedFile()
{
return $this->isFileArraySet() && $this->isTempNameSet();
}
/**
* @return bool
*/
private function isFileArraySet()
{
return isset($this->files[$this->getName()]);
}
/**
* @return bool
*/
private function isTempNameSet()
{
return isset($this->files[$this->getName()]['tmp_name']);
}
/**
* @param $path
* @return $this
*/
public function setUploadDirectory($path)
{
$path = realpath($path);
if (!is_dir($path) || !is_writable($path)) {
throw new InvalidArgumentException('Directory does not exist or is not writable.');
}
$this->uploadDirectory = $path;
return $this;
}
/**
* @return string
*/
public function getUploadDirectory()
{
return $this->uploadDirectory;
}
/**
* @return bool
*/
public function hasUploadDirectory()
{
return $this->uploadDirectory !== null;
}
/**
* @return bool
*/
public function moveUploadToDestination()
{
if (!$this->hasUploadDirectory()) {
throw new LogicException('No destination directory set using setUploadDirectory($path)');
}
$tmp = $this->files[$this->getName()]['tmp_name'];
$destination = $this->getUploadDirectory().DIRECTORY_SEPARATOR.$this->files[$this->getName()]['name'];
$success = move_uploaded_file($tmp, $destination);
return $success;
}
}
|