aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/files/node/file.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/files/node/file.php')
-rw-r--r--lib/private/files/node/file.php155
1 files changed, 155 insertions, 0 deletions
diff --git a/lib/private/files/node/file.php b/lib/private/files/node/file.php
new file mode 100644
index 00000000000..75d5e0166b6
--- /dev/null
+++ b/lib/private/files/node/file.php
@@ -0,0 +1,155 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Node;
+
+use OCP\Files\NotPermittedException;
+
+class File extends Node implements \OCP\Files\File {
+ /**
+ * @return string
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function getContent() {
+ if ($this->checkPermissions(\OCP\PERMISSION_READ)) {
+ /**
+ * @var \OC\Files\Storage\Storage $storage;
+ */
+ return $this->view->file_get_contents($this->path);
+ } else {
+ throw new NotPermittedException();
+ }
+ }
+
+ /**
+ * @param string $data
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function putContent($data) {
+ if ($this->checkPermissions(\OCP\PERMISSION_UPDATE)) {
+ $this->sendHooks(array('preWrite'));
+ $this->view->file_put_contents($this->path, $data);
+ $this->sendHooks(array('postWrite'));
+ } else {
+ throw new NotPermittedException();
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getMimeType() {
+ return $this->view->getMimeType($this->path);
+ }
+
+ /**
+ * @param string $mode
+ * @return resource
+ * @throws \OCP\Files\NotPermittedException
+ */
+ public function fopen($mode) {
+ $preHooks = array();
+ $postHooks = array();
+ $requiredPermissions = \OCP\PERMISSION_READ;
+ switch ($mode) {
+ case 'r+':
+ case 'rb+':
+ case 'w+':
+ case 'wb+':
+ case 'x+':
+ case 'xb+':
+ case 'a+':
+ case 'ab+':
+ case 'w':
+ case 'wb':
+ case 'x':
+ case 'xb':
+ case 'a':
+ case 'ab':
+ $preHooks[] = 'preWrite';
+ $postHooks[] = 'postWrite';
+ $requiredPermissions |= \OCP\PERMISSION_UPDATE;
+ break;
+ }
+
+ if ($this->checkPermissions($requiredPermissions)) {
+ $this->sendHooks($preHooks);
+ $result = $this->view->fopen($this->path, $mode);
+ $this->sendHooks($postHooks);
+ return $result;
+ } else {
+ throw new NotPermittedException();
+ }
+ }
+
+ public function delete() {
+ if ($this->checkPermissions(\OCP\PERMISSION_DELETE)) {
+ $this->sendHooks(array('preDelete'));
+ $this->view->unlink($this->path);
+ $nonExisting = new NonExistingFile($this->root, $this->view, $this->path);
+ $this->root->emit('\OC\Files', 'postDelete', array($nonExisting));
+ $this->exists = false;
+ } else {
+ throw new NotPermittedException();
+ }
+ }
+
+ /**
+ * @param string $targetPath
+ * @throws \OCP\Files\NotPermittedException
+ * @return \OC\Files\Node\Node
+ */
+ public function copy($targetPath) {
+ $targetPath = $this->normalizePath($targetPath);
+ $parent = $this->root->get(dirname($targetPath));
+ if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
+ $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath);
+ $this->root->emit('\OC\Files', 'preCopy', array($this, $nonExisting));
+ $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
+ $this->view->copy($this->path, $targetPath);
+ $targetNode = $this->root->get($targetPath);
+ $this->root->emit('\OC\Files', 'postCopy', array($this, $targetNode));
+ $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
+ return $targetNode;
+ } else {
+ throw new NotPermittedException();
+ }
+ }
+
+ /**
+ * @param string $targetPath
+ * @throws \OCP\Files\NotPermittedException
+ * @return \OC\Files\Node\Node
+ */
+ public function move($targetPath) {
+ $targetPath = $this->normalizePath($targetPath);
+ $parent = $this->root->get(dirname($targetPath));
+ if ($parent instanceof Folder and $this->isValidPath($targetPath) and $parent->isCreatable()) {
+ $nonExisting = new NonExistingFile($this->root, $this->view, $targetPath);
+ $this->root->emit('\OC\Files', 'preRename', array($this, $nonExisting));
+ $this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
+ $this->view->rename($this->path, $targetPath);
+ $targetNode = $this->root->get($targetPath);
+ $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode));
+ $this->root->emit('\OC\Files', 'postWrite', array($targetNode));
+ $this->path = $targetPath;
+ return $targetNode;
+ } else {
+ throw new NotPermittedException();
+ }
+ }
+
+ /**
+ * @param string $type
+ * @param bool $raw
+ * @return string
+ */
+ public function hash($type, $raw = false) {
+ return $this->view->hash($type, $this->path, $raw);
+ }
+}