Exemple #1
0
 /**
  * update file object with hash file info
  * 
  * @param string $_id
  * @param string $_hash
  * @param string $_hashFile
  * @return Tinebase_Model_Tree_FileObject
  */
 protected function _updateFileObject($_id, $_hash, $_hashFile)
 {
     $currentFileObject = $this->_fileObjectBackend->get($_id);
     $updatedFileObject = clone $currentFileObject;
     $updatedFileObject->hash = $_hash;
     $updatedFileObject->size = filesize($_hashFile);
     if (version_compare(PHP_VERSION, '5.3.0', '>=') && function_exists('finfo_open')) {
         $finfo = finfo_open(FILEINFO_MIME_TYPE);
         $mimeType = finfo_file($finfo, $_hashFile);
         if ($mimeType !== false) {
             $updatedFileObject->contenttype = $mimeType;
         }
         finfo_close($finfo);
     } else {
         if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
             Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' finfo_open() is not available: Could not get file information.');
         }
     }
     $modLog = Tinebase_Timemachine_ModificationLog::getInstance();
     $modLog->setRecordMetaData($updatedFileObject, 'update', $currentFileObject);
     // sanitize file size, somehow filesize() seems to return empty strings on some systems
     if (empty($updatedFileObject->size)) {
         $updatedFileObject->size = 0;
     }
     return $this->_fileObjectBackend->update($updatedFileObject);
 }
 /**
  * update node
  * 
  * @param Tinebase_Model_Tree_Node $_node
  * @return Tinebase_Model_Tree_Node
  */
 public function update(Tinebase_Model_Tree_Node $_node)
 {
     $currentNodeObject = $this->get($_node->getId());
     Tinebase_Timemachine_ModificationLog::setRecordMetaData($_node, 'update', $currentNodeObject);
     // update file object
     $fileObject = $this->_fileObjectBackend->get($currentNodeObject->object_id);
     $fileObject->description = $_node->description;
     $this->_updateFileObject($fileObject, $_node->hash);
     return $this->_treeNodeBackend->update($_node);
 }
 /**
  * update node
  * 
  * @param Tinebase_Model_Tree_Node $_node
  * @return Tinebase_Model_Tree_Node
  */
 public function update(Tinebase_Model_Tree_Node $_node)
 {
     $currentNodeObject = $this->get($_node->getId());
     $fileObject = $this->_fileObjectBackend->get($currentNodeObject->object_id);
     Tinebase_Timemachine_ModificationLog::setRecordMetaData($_node, 'update', $currentNodeObject);
     Tinebase_Timemachine_ModificationLog::setRecordMetaData($fileObject, 'update', $fileObject);
     // quick hack for 2014.11 - will be resolved correctly in 2015.11-develop
     if (isset($_SERVER['HTTP_X_OC_MTIME'])) {
         $fileObject->last_modified_time = new Tinebase_DateTime($_SERVER['HTTP_X_OC_MTIME']);
         Tinebase_Server_WebDAV::getResponse()->setHeader('X-OC-MTime', 'accepted');
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " using X-OC-MTIME: {$fileObject->last_modified_time->format(Tinebase_Record_Abstract::ISO8601LONG)} for {$_node->name}");
         }
     }
     // update file object
     $fileObject->description = $_node->description;
     $this->_updateFileObject($fileObject, $_node->hash);
     return $this->_treeNodeBackend->update($_node);
 }
 /**
  * test cleanup of deleted files (database)
  * 
  * @see 0008062: add cleanup script for deleted files
  */
 public function testDeletedFileCleanupFromDatabase()
 {
     $fileNode = $this->testCreateFileNodeWithTempfile();
     // get "real" filesystem path + unlink
     $fileObjectBackend = new Tinebase_Tree_FileObject();
     $fileObject = $fileObjectBackend->get($fileNode['object_id']);
     unlink($fileObject->getFilesystemPath());
     $result = Tinebase_FileSystem::getInstance()->clearDeletedFilesFromDatabase();
     $this->assertEquals(1, $result, 'should cleanup one file');
     $result = Tinebase_FileSystem::getInstance()->clearDeletedFilesFromDatabase();
     $this->assertEquals(0, $result, 'should cleanup no file');
     // node should no longer be found
     try {
         $this->_json->getNode($fileNode['id']);
         $this->fail('tree node still exists: ' . print_r($fileNode, TRUE));
     } catch (Tinebase_Exception_NotFound $tenf) {
         $this->assertEquals('Tinebase_Model_Tree_Node record with id = ' . $fileNode['id'] . ' not found!', $tenf->getMessage());
     }
 }