From f0b255b1a9053e3983047354f0147225f2b29cd9 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Sun, 14 Jun 2015 17:28:51 -0700 Subject: more file/photo merge work --- include/RedDAV/RedDirectory.php | 30 ++++++++++++++++++++++-------- include/RedDAV/RedFile.php | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/include/RedDAV/RedDirectory.php b/include/RedDAV/RedDirectory.php index 2f2df54ab..88a4647a4 100644 --- a/include/RedDAV/RedDirectory.php +++ b/include/RedDAV/RedDirectory.php @@ -213,12 +213,8 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { $filesize = 0; $hash = random_string(); - $is_photo = 0; - $x = @getimagesize($src); - logger('getimagesize: ' . print_r($x,true), LOGGER_DATA); - if(($x) && ($x[2] === IMAGETYPE_GIF || $x[2] === IMAGETYPE_JPEG || $x[2] === IMAGETYPE_PNG)) { - $is_photo = 1; - } + $f = 'store/' . $this->auth->owner_nick . '/' . (($this->os_path) ? $this->os_path . '/' : '') . $hash; + $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, folder, os_storage, filetype, filesize, revision, is_photo, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", @@ -242,7 +238,7 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { dbesc($c[0]['channel_deny_gid']) ); - $f = 'store/' . $this->auth->owner_nick . '/' . (($this->os_path) ? $this->os_path . '/' : '') . $hash; + // returns the number of bytes that were written to the file, or FALSE on failure $size = file_put_contents($f, $data); @@ -256,9 +252,20 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { // returns now $edited = datetime_convert(); + + + $is_photo = 0; + $x = @getimagesize($f); + logger('getimagesize: ' . print_r($x,true), LOGGER_DATA); + if(($x) && ($x[2] === IMAGETYPE_GIF || $x[2] === IMAGETYPE_JPEG || $x[2] === IMAGETYPE_PNG)) { + $is_photo = 1; + } + + // updates entry with filesize and timestamp - $d = q("UPDATE attach SET filesize = '%s', edited = '%s' WHERE hash = '%s' AND uid = %d", + $d = q("UPDATE attach SET filesize = '%s', is_photo = %d, edited = '%s' WHERE hash = '%s' AND uid = %d", dbesc($size), + intval($is_photo), dbesc($edited), dbesc($hash), intval($c[0]['channel_id']) @@ -289,6 +296,13 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { return; } } + + if($is_photo) { + require_once('include/photos.php'); + $args = array( 'data' => @file_get_contents($f)); + $p = photo_upload($c[0],get_app()->get_observer(),$args); + } + } /** diff --git a/include/RedDAV/RedFile.php b/include/RedDAV/RedFile.php index 3a3cb2347..164498676 100644 --- a/include/RedDAV/RedFile.php +++ b/include/RedDAV/RedFile.php @@ -102,19 +102,33 @@ class RedFile extends DAV\Node implements DAV\IFile { intval(PAGE_REMOVED) ); - $r = q("SELECT flags, folder, os_storage, data FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", + $is_photo = false; + + $r = q("SELECT flags, folder, os_storage, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", dbesc($this->data['hash']), intval($c[0]['channel_id']) ); if ($r) { if (intval($r[0]['os_storage'])) { - $fname = dbunescbin($r[0]['data']); - $f = 'store/' . $this->auth->owner_nick . '/' . (($fname) ? $fname : ''); - // @todo check return value and set $size directly - @file_put_contents($f, $data); - $size = @filesize($f); - logger('filename: ' . $f . ' size: ' . $size, LOGGER_DEBUG); - } else { + $d = q("select data from attach where hash = '%s' and uid = %d limit 1", + dbesc($this->data['hash']), + intval($c[0]['channel_id']) + ); + if($d) { + $fname = dbunescbin($d[0]['data']); + $f = 'store/' . $this->auth->owner_nick . '/' . (($fname) ? $fname : ''); + // @todo check return value and set $size directly + @file_put_contents($f, $data); + $size = @filesize($f); + logger('filename: ' . $f . ' size: ' . $size, LOGGER_DEBUG); + } + $x = @getimagesize($f); + logger('getimagesize: ' . print_r($x,true), LOGGER_DATA); + if(($x) && ($x[2] === IMAGETYPE_GIF || $x[2] === IMAGETYPE_JPEG || $x[2] === IMAGETYPE_PNG)) { + $is_photo = 1; + } + } + else { $r = q("UPDATE attach SET data = '%s' WHERE hash = '%s' AND uid = %d", dbescbin(stream_get_contents($data)), dbesc($this->data['hash']), @@ -133,13 +147,19 @@ class RedFile extends DAV\Node implements DAV\IFile { // returns now() $edited = datetime_convert(); - $d = q("UPDATE attach SET filesize = '%s', edited = '%s' WHERE hash = '%s' AND uid = %d", + $d = q("UPDATE attach SET filesize = '%s', is_photo = %d, edited = '%s' WHERE hash = '%s' AND uid = %d", dbesc($size), + intval($is_photo), dbesc($edited), dbesc($this->data['hash']), intval($c[0]['channel_id']) ); + if($is_photo) { + $args = array( 'data' => @file_get_contents($fname)); + $p = photo_upload($c[0],$this->auth->observer,$args); + } + // update the folder's lastmodified timestamp $e = q("UPDATE attach SET edited = '%s' WHERE hash = '%s' AND uid = %d", dbesc($edited), -- cgit v1.2.3