aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/attach.php10
-rw-r--r--include/reddav.php9
-rw-r--r--mod/attach.php9
-rw-r--r--mod/filestorage.php4
-rw-r--r--view/tpl/filestorage.tpl8
5 files changed, 29 insertions, 11 deletions
diff --git a/include/attach.php b/include/attach.php
index e602af984..b48dd211a 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -188,13 +188,13 @@ function attach_by_hash($hash,$rev = 0) {
$sql_extra = permissions_sql($r[0]['uid']);
// Now we'll see if we can access the attachment
-dbg(1);
+
$r = q("SELECT * FROM attach WHERE hash = '%s' and uid = %d $sql_extra LIMIT 1",
dbesc($hash),
intval($r[0]['uid'])
);
-dbg(0);
+
if(! $r) {
$ret['message'] = t('Permission denied.');
return $ret;
@@ -672,3 +672,9 @@ function attach_change_permissions($channel_id,$resource,$allow_cid,$allow_gid,$
}
+function pipe_streams($in, $out) {
+ $size = 0;
+ while (!feof($in))
+ $size += fwrite($out,fread($in,8192));
+ return $size;
+} \ No newline at end of file
diff --git a/include/reddav.php b/include/reddav.php
index 543cdfeac..05a93b9f8 100644
--- a/include/reddav.php
+++ b/include/reddav.php
@@ -376,11 +376,16 @@ class RedFile extends DAV\Node implements DAV\IFile {
function get() {
logger('RedFile::get: ' . basename($this->name));
- $r = q("select data from attach where hash = '%s' and uid = %d limit 1",
+ $r = q("select data, flags from attach where hash = '%s' and uid = %d limit 1",
dbesc($this->data['hash']),
intval($this->data['uid'])
);
- if($r) return $r[0]['data'];
+ if($r) {
+ if($r[0]['flags'] & ATTACH_FLAG_OS ) {
+ return fopen($r[0]['data'],'rb');
+ }
+ return $r[0]['data'];
+ }
}
diff --git a/mod/attach.php b/mod/attach.php
index a5f9d1a6b..8676baa58 100644
--- a/mod/attach.php
+++ b/mod/attach.php
@@ -19,8 +19,13 @@ function attach_init(&$a) {
header('Content-type: ' . $r['data']['filetype']);
header('Content-disposition: attachment; filename=' . $r['data']['filename']);
- if($r['data']['flags'] & ATTACH_FLAG_OS )
- echo @file_get_contents($r['data']['data']);
+ if($r['data']['flags'] & ATTACH_FLAG_OS ) {
+ $stream = fopen($r['data']['data'],'rb');
+ if($stream) {
+ pipe_stream($stream,STDOUT);
+ fclose($stream);
+ }
+ }
else
echo $r['data']['data'];
killme();
diff --git a/mod/filestorage.php b/mod/filestorage.php
index 152b449c2..1063de256 100644
--- a/mod/filestorage.php
+++ b/mod/filestorage.php
@@ -137,7 +137,9 @@ function filestorage_content(&$a) {
'id' => $rr['id'],
'download' => $rr['hash'],
'title' => $rr['filename'],
- 'size' => $rr['filesize']
+ 'size' => $rr['filesize'],
+ 'rev' => $rr['revision']
+
);
}
}
diff --git a/view/tpl/filestorage.tpl b/view/tpl/filestorage.tpl
index a3eab83d5..7decd5ea6 100644
--- a/view/tpl/filestorage.tpl
+++ b/view/tpl/filestorage.tpl
@@ -7,10 +7,10 @@
{{foreach $files as $key => $items}}
{{foreach $items as $item}}
<div class="files-list-item">
- <a href="attach/{{$item.download}}">{{$download}}</a> |
- <a href="{{$baseurl}}/{{$item.id}}/edit">{{$edit}} |
- <a href="{{$baseurl}}/{{$item.id}}/delete">{{$delete}}
- <a href="page/{{$channel}}/{{$item.title}}">{{$title}}</a> {{$item.title}} |
+ <a href="{{$baseurl}}/{{$item.id}}/edit">{{$edit}}</a> |
+ <a href="{{$baseurl}}/{{$item.id}}/delete">{{$delete}}</a> |
+ [attachment]{{$item.download}},{{$item.rev}}[/attachment] |
+ <a href="attach/{{$item.download}}">{{$item.title}}</a> |
{{$item.size}} bytes
</div>