diff --git a/appinfo/update.php b/appinfo/update.php new file mode 100644 index 00000000..dfc50904 --- /dev/null +++ b/appinfo/update.php @@ -0,0 +1,28 @@ +getCollection() as $sessionData){ + $sessionData['genesis_url'] = \OCA\Documents\Genesis::DOCUMENTS_DIRNAME . $sessionData['genesis_url']; + $query->execute(array( + $sessionData['genesis_url'], + $sessionData['es_id'] + )); + + } +} \ No newline at end of file diff --git a/lib/genesis.php b/lib/genesis.php new file mode 100644 index 00000000..19943394 --- /dev/null +++ b/lib/genesis.php @@ -0,0 +1,100 @@ +. + * + */ + +namespace OCA\Documents; + +class Genesis { + + const DOCUMENTS_DIRNAME='/documents'; + + protected $view; + + protected $path; + + protected $hash; + + + /** + * Create new genesis document + * @param OCA\Documents\View $view Filesystem view with root '/user/files' + * @param string $path relative path + * @param string $owner file owner + * */ + public function __construct(\OCA\Documents\View $view, $path, $owner){ + $this->view = new View('/' . $owner); + $this->hash = $this->getDocumentHash($view, $path); + + if (!$this->view->file_exists(self::DOCUMENTS_DIRNAME)){ + $this->view->mkdir(self::DOCUMENTS_DIRNAME ); + } + + $this->path = self::DOCUMENTS_DIRNAME . '/' . $this->hash . '.odt'; + + if (!$this->view->file_exists($this->path)){ + //copy new genesis to /user/documents/{hash}.odt + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; + $this->view->copy('/files' . $path, $this->path); + \OC_FileProxy::$enabled = $proxyStatus; + } + + try { + $this->validate($this->view, $this->path); + } catch (\Exception $e){ + throw new \Exception('Failed to copy genesis'); + } + } + + public function getPath(){ + return $this->path; + } + + public function getHash(){ + return $this->hash; + } + + public static function getHashByPath($path){ + return preg_replace('|([a-zA-Z0-9])*\..*$|', '\1', $path); + } + + protected function getDocumentHash($view, $path){ + $this->validate($view, $path); + return sha1($view->file_get_contents($path)); + } + + /** + * Check if genesis is valid + * @param OCA\Documents\View $view + * @param string $path relative to the view + * @throws \Exception + */ + protected function validate($view, $path){ + if (!$view->file_exists($path)){ + throw new \Exception('Document not found ' . $path); + } + if (!$view->is_file($path)){ + throw new \Exception('Object ' . $path . ' is not a file.'); + } + //TODO check if it is a valid odt + } + +}