aboutsummaryrefslogtreecommitdiffstats
path: root/include/reddav.php
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2014-01-01 16:07:36 -0800
committerfriendica <info@friendica.com>2014-01-01 16:07:36 -0800
commit057d885baf670467443dea0da0797b9289b919b4 (patch)
tree33efb6306a7fefc80b8bd962c33500e41259967f /include/reddav.php
parentca8bf551d1684966d377e9d316c00fd40bd08e6e (diff)
downloadvolse-hubzilla-057d885baf670467443dea0da0797b9289b919b4.tar.gz
volse-hubzilla-057d885baf670467443dea0da0797b9289b919b4.tar.bz2
volse-hubzilla-057d885baf670467443dea0da0797b9289b919b4.zip
return to working on red-dav; This is a bit of a slog at the moment and the basic framework isn't even close to working. This does break the working test we did have (which was never connected to the Red backend). Now we're starting to connect Red and DAV together intimately. There will probably be some twists and turns along the way as we get the information we need into all the class objects that need them. But the important part is that the RedDirectory and RedFile classes are loading without throwing white screens and from here we can use logging to figure out what the DAV front end is trying to do and what it is passing to the backend and hopefully figure out what it expects to do with the results. Unless you're a competent developer with a strong background in OOP and are helping develop this code, you should keep it an arm's length away from any production site and don't even think of enabling it. By default it is turned off.
Diffstat (limited to 'include/reddav.php')
-rw-r--r--include/reddav.php116
1 files changed, 102 insertions, 14 deletions
diff --git a/include/reddav.php b/include/reddav.php
index c24414610..ab127afaa 100644
--- a/include/reddav.php
+++ b/include/reddav.php
@@ -1,7 +1,7 @@
<?php /** @file */
use Sabre\DAV;
- require_once('vendor/autoload.php');
+require_once('vendor/autoload.php');
class RedInode implements DAV\INode {
@@ -70,23 +70,38 @@ class RedInode implements DAV\INode {
}
-abstract class RedDirectory extends DAV\Node implements DAV\ICollection {
+class RedDirectory extends DAV\Node implements DAV\ICollection {
private $red_path;
+ private $root_dir = '';
private $dir_key;
private $auth;
private $channel_id;
- function __construct($red_path,$auth_plugin) {
+
+ function __construct($red_path,&$auth_plugin) {
+ logger('RedDirectory::__construct()');
$this->red_path = $red_path;
$this->auth = $auth_plugin;
+ logger('RedDirectory: ' . print_r($this->auth,true));
+
}
function getChildren() {
- if(! perm_is_allowed($this->channel_id,'','view_storage'))
+ logger('RedDirectory::getChildren : ' . print_r($this->auth,true));
+
+ if(! perm_is_allowed($this->auth->channel_id,$this->auth->observer,'view_storage'))
return array();
+ if($this->red_path === '/' . $this->auth->channel_name) {
+
+ return new RedFile('/' . $this->auth->channel_name . '/' . 'test',$this->auth);
+
+ }
+
+
+
$ret = array();
$r = q("select distinct filename from attach where folder = '%s' and uid = %d group by filename",
dbesc($this->dir_key),
@@ -103,17 +118,39 @@ abstract class RedDirectory extends DAV\Node implements DAV\ICollection {
function getChild($name) {
- if(! perm_is_allowed($this->channel_id,'','view_storage')) {
+
+
+ logger('RedDirectory::getChild : ' . $name);
+ logger('RedDirectory::getChild red_path : ' . $this->red_path);
+
+ logger('RedDirectory::getChild : ' . print_r($this->auth,true));
+
+
+ if(! perm_is_allowed($this->auth->channel_id,$this->auth->observer,'view_storage')) {
throw new DAV\Exception\Forbidden('Permission denied.');
return;
}
-// FIXME check revisions
+
+ // These should be constants
+
+ if($this->red_path == 'store' && $name == 'cloud') {
+ return new RedDirectory('/' . $this->auth->channel_name,$this->auth);
+ }
+
+ if($this->red_path === '/' . $this->auth->channel_name) {
+
+ return new RedFile('/' . $this->auth->channel_name . '/' . 'test',$this->auth);
+
+ }
+
+ // FIXME check file revisions
+
$r = q("select * from attach where folder = '%s' and filename = '%s' and uid = %d limit 1",
dbesc($this->dir_key),
dbesc($name),
- dbesc($this->channel_id)
+ dbesc($this->auth->channel_id)
);
if(! $r) {
throw new DAV\Exception\NotFound('The file with name: ' . $name . ' could not be found');
@@ -122,6 +159,12 @@ abstract class RedDirectory extends DAV\Node implements DAV\ICollection {
}
+ function getName() {
+ logger('RedDirectory::getName : ' . print_r($this->auth,true));
+
+
+ }
+
function createFile($name,$data = null) {
@@ -136,10 +179,13 @@ abstract class RedDirectory extends DAV\Node implements DAV\ICollection {
function childExists($name) {
+
+ logger('RedDirectory::childExists : ' . print_r($this->auth,true));
+
$r = q("select distinct filename from attach where folder = '%s' and filename = '%s' and uid = %d group by filename",
dbesc($this->dir_key),
dbesc($name),
- intval($this->channel_id)
+ intval($this->auth->channel_id)
);
if($r)
return true;
@@ -150,17 +196,27 @@ abstract class RedDirectory extends DAV\Node implements DAV\ICollection {
}
-abstract class RedFile extends DAV\Node implements DAV\IFile {
+class RedFile extends DAV\Node implements DAV\IFile {
private $data;
+ private $auth;
+ private $name;
+ function __construct($name, &$auth) {
+ logger('RedFile::_construct: ' . $name);
+ $this->name = $name;
+ $this->auth = $auth;
+ $this->data = RedFileData($name,$auth);
- function __construct($data) {
- $this->data = $data;
-
+ logger('RedFile::_construct: ' . print_r($this->data,true));
}
+ function getName() {
+ logger('RedFile::getName');
+ return basename($data);
+
+ }
function put($data) {
@@ -180,17 +236,49 @@ abstract class RedFile extends DAV\Node implements DAV\IFile {
function getContentType() {
- return $this->data['filetype'];
+ $type = 'text/plain';
+ return $type;
+
+// return $this->data['filetype'];
}
function getSize() {
- return $this->data['filesize'];
+ return 33122;
+// return $this->data['filesize'];
}
}
+function RedFileData($file, $auth) {
+
+ if(substr($file,0,1) !== '/')
+ return null;
+ $path_arr = explode('/',$file);
+ if(! $path_arr)
+ return null;
+
+ $channel_name = $path_arr[0];
+
+ $folder = '';
+
+ for($x = 1; $x < count($path_arr); $x ++) {
+
+ $r = q("select distinct filename from attach where folder = '%s' and filename = '%s' and uid = %d group by filename",
+ dbesc($folder),
+ dbesc($path_arr[$x]),
+ intval($this->auth->channel_id)
+ );
+
+ if($r && ( $r[0]['flags'] && ATTACH_FLAG_DIR)) {
+ $folder = $r[0]['filename'];
+ }
+ }
+
+ return $r[0];
+
+}