/** * This function handle file storage regarding user parameters. * * @access: private */ function _storeFile($item) { $fs =& $this->_getFileStorage(); $user =& $this->_controler->getUser(); $request =& $this->_controler->request; $iFactory =& $this->_getItemFactory(); $vFactory =& $this->_getVersionFactory(); $uploadSucceded = false; $newVersion = null; $_label = ''; $_changelog = ''; $nextNb = $vFactory->getNextVersionNumber($item); if ($nextNb === false) { $number = 1; $_action_type = 'initversion'; $_changelog = 'Initial version'; } else { $number = $nextNb; $_action_type = 'newversion'; } // Prepare label and changelog from user input $data_version = $request->get('version'); if ($data_version) { if (isset($data_version['label'])) { $_label = $data_version['label']; } if (isset($data_version['changelog'])) { $_changelog = $data_version['changelog']; } } switch ($iFactory->getItemTypeForItem($item)) { case PLUGIN_DOCMAN_ITEM_TYPE_FILE: if ($request->exist('upload_content')) { if ($request->exist('chunk_offset') && $request->exist('chunk_size')) { $path = $fs->store($request->get('upload_content'), $request->get('group_id'), $item->getId(), $number, $request->get('chunk_offset'), $request->get('chunk_size')); } else { $path = $fs->store($request->get('upload_content'), $request->get('group_id'), $item->getId(), $number); } if ($path) { $uploadSucceded = true; if ($request->exist('file_name')) { $_filename = basename($request->get('file_name')); } else { $_filename = basename($path); } if ($request->exist('file_size')) { $_filesize = $request->get('file_size'); } else { $_filesize = filesize($path); } if ($request->exist('mime_type')) { $_filetype = $request->get('mime_type'); } else { $_filetype = mime_content_type($path); //be careful with false detection } } } else { $path = $fs->upload($_FILES['file'], $item->getGroupId(), $item->getId(), $number); if ($path) { $uploadSucceded = true; $_filename = $_FILES['file']['name']; $_filesize = $_FILES['file']['size']; $_filetype = $_FILES['file']['type']; //TODO detect mime type server side } } $mime_type_detector = new Docman_MIMETypeDetector(); if ($path && $mime_type_detector->isAnOfficeFile($_filename)) { $_filetype = $mime_type_detector->getRightOfficeType($_filename); } break; case PLUGIN_DOCMAN_ITEM_TYPE_EMBEDDEDFILE: if ($path = $fs->store($request->get('content'), $item->getGroupId(), $item->getId(), $number)) { $uploadSucceded = true; //TODO take mimetype once the file has been written ? $_filename = basename($path); $_filesize = filesize($path); $_filetype = 'text/html'; } break; default: break; } if ($uploadSucceded) { $userId = $user->getId(); if ($request->exist('author') && $request->get('author') != $userId) { $versionAuthor = $request->get('author'); $eArray = array('group_id' => $item->getGroupId(), 'item' => &$item, 'new_value' => $this->_getUserManagerInstance()->getUserById($versionAuthor)->getName(), 'user' => &$user); $this->event_manager->processEvent('plugin_docman_event_set_version_author', $eArray); } else { $versionAuthor = $userId; } $date = ''; if ($request->exist('date')) { $date = $request->get('date'); $eArray = array('group_id' => $item->getGroupId(), 'item' => &$item, 'old_value' => null, 'new_value' => $date, 'user' => &$user); $this->event_manager->processEvent('plugin_docman_event_set_version_date', $eArray); } $vArray = array('item_id' => $item->getId(), 'number' => $number, 'user_id' => $versionAuthor, 'label' => $_label, 'changelog' => $_changelog, 'filename' => $_filename, 'filesize' => $_filesize, 'filetype' => $_filetype, 'path' => $path, 'date' => $date); $vId = $vFactory->create($vArray); // Create a new version object $vArray['id'] = $vId; $vArray['date'] = $_SERVER['REQUEST_TIME']; $newVersion = new Docman_Version($vArray); $eArray = array('group_id' => $item->getGroupId(), 'item' => &$item, 'version' => $newVersion, 'user' => &$user); $this->event_manager->processEvent('plugin_docman_event_new_version', $eArray); $this->_controler->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'info_create_' . $_action_type)); // Approval table if ($number > 0) { // Approval table creation needs the item currentVersion to be set. $vArray['id'] = $vId; $vArray['date'] = $_SERVER['REQUEST_TIME']; $newVersion = new Docman_Version($vArray); $item->setCurrentVersion($newVersion); $this->newVersionApprovalTable($request, $item, $user); } } else { //TODO What should we do if upload failed ? //Maybe cancel item ? $this->_controler->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_create_' . $_action_type)); } return $newVersion; }
public function itReturnsNullIfTheFileIsNotAnOfficeOne() { $filename = 'image.jpg'; $detector = new Docman_MIMETypeDetector(); $this->assertEqual($detector->getRightOfficeType($filename), null); }