/** * Hook for node save - if type is Filemanager Node, save extra fields * * @param Zend_Form $form * @param array $arguments */ public function nodeSave(&$form, &$arguments) { $item = array_shift($arguments); $arguments = array_shift($arguments); if ($item->type == "filemanager_file" && $form->filemanager_file) { $factory = new Filemanager_File_Factory(); // Save Filemanager fields if ($item->id > 0) { // Fetch Filemanager object $file = $factory->find($item->id)->current(); if (!$file) { $file = $factory->createRow(); } } else { $file = $factory->createRow(); } if ($form->filemanager_file->isUploaded()) { if ($form->filemanager_file->receive()) { $file->nid = $item->id; // Update physical file $location = $form->filemanager_file->getFileName(); $existing = $file->getPath(); if (file_exists($existing)) { unlink($existing); } rename($location, $existing); // Update database $file->mimetype = $factory->getMimetype($_FILES['filemanager_file']['name']); $file->size = filesize($file->getPath()); // if (substr($file->mimetype, 0, 5) == "image") { // $file->exif = ""; /** * @todo: Implement exif data read */ // } $file->save(); } else { print "Error receiving the file"; /** * @todo: Change this to exception/debug message */ } } } }
/** * Perform upload of a file */ public function performuploadAction() { Zend_Controller_Front::getInstance()->getResponse()->clearHeaders(); $this->getHelper('layout')->disableLayout(); $this->getHelper('viewRenderer')->setNoRender(); /* $writer = new Zend_Log_Writer_Stream ( ZfApplication::$_data_path.DIRECTORY_SEPARATOR."upload.txt" ); $logger = new Zend_Log ( $writer ); $logger->log ( serialize($_REQUEST), Zend_Log::INFO ); */ $image = Zoo::getService('content')->createRow(); $image->type = 'filemanager_file'; $image->title = substr($this->getRequest()->getParam('Filename'), 0, strrpos($this->getRequest()->getParam('Filename'), '.')); $image->status = 1; $image->published = time(); $image->pid = $this->getRequest()->getParam('parent'); $image->save(); /** * A little bit of hard-coding, since the normal file uploading through Zend_Form_Element_File is not used with flash/AJAX uploader */ $factory = new Filemanager_File_Factory(); $file = $factory->createRow(); $file->nid = $image->id; $file->mimetype = $factory->getMimetype($_FILES['Filedata']['name']); $file->size = $_FILES['Filedata']['size']; $file->save(); rename($_FILES['Filedata']['tmp_name'], $file->getPath()); // Clear listing cache Zoo::getService('cache')->remove("Filemanager_FileController_listAction" . $image->pid); try { // Trigger node save hooks $form = $image->getForm($this->_helper->getHelper('url')->direct('save', 'node', 'Content')); Zoo::getService("hook")->trigger("Node", "Save", $form, $image); } catch (Zoo_Exception_Service $e) { // Hook service not available - log? Better not, some people may live happily without a hook service } // Report back the URL for the file $factory = new Filemanager_File_Factory(); $file = $factory->find($image->id)->current(); if ($file) { echo $file->getUrl(200, 200); } else { // Error during upload, delete the file object $image->delete(); echo Zoo::_("An error occurred during file upload, please try again"); } }