/**
  * 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);
 }