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