public function upload()
{
$dir = $this->getPath() . $this->getDirectory();
if (!is_dir($dir)) {
mkdir($dir, self::FILE_PERMISSION, true);
$tmpDir = $dir;
while ($tmpDir != GC_MEDIA_PATH . '/files') {
chmod($tmpDir, self::FILE_PERMISSION);
$tmpDir = realpath(dirname($tmpDir));
}
}
$this->getFileTransfer()->setDestination($dir);
$filename = $this->getFileName();
$filenames = empty($filename) ? null : $filename;
$filenames = $this->getFileTransfer()->getFileName($filenames, false);
if (!is_array($filenames)) {
$filenames = array();
$files = $this->getFileTransfer()->getFileInfo($filename);
foreach ($files as $key => $file) {
if (!empty($file['name'])) {
$filenames[$key] = $file['name'];
break;
}
}
}
$data = array();
foreach ($filenames as $key => $fileName) {
$info = pathinfo($fileName);
$this->getFileTransfer()->addFilter('Rename', array('target' => $this->getFileTransfer()->getDestination($fileName) . '/' . uniqid() . (empty($info['extension']) ? '' : '.' . $info['extension']), 'overwrite' => true));
$validator = $this->getFileTransfer()->getValidator('Upload');
if (!empty($validator)) {
$validator->setFiles($this->getFileTransfer()->getFileInfo($fileName))->getFiles();
}
if ($this->getFileTransfer()->receive($key)) {
$files = $this->getFileTransfer()->getFileInfo($key);
foreach ($files as $fileData) {
$fileObject = array();
$fileObject['name'] = 'New Image Upload Complete: ' . $fileData['name'];
$fileObject['filename'] = $this->getDirectory() . '/' . $fileData['name'];
$fileObject['size'] = $fileData['size'];
$fileObject['type'] = $fileData['type'];
$fileObject['thumbnail_url'] = $this->getDirectory() . '/' . $fileData['name'];
$router = Registry::get('Application')->getMvcEvent()->getRouter();
$fileObject['delete_url'] = $router->assemble(array('document_id' => $this->getDocument()->getId(), 'property_id' => $this->getProperty()->getId(), 'file' => base64_encode($fileData['name'])), array('name' => 'content/media/remove'));
$fileObject['delete_type'] = 'DELETE';
$data[] = $fileObject;
}
}
}
if (!empty($data)) {
$this->setFiles($data);
return true;
}
return false;
}