mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-20 01:35:12 +00:00
more cloud updates - upgrade the DAV structures as well.
This commit is contained in:
parent
0fb0241901
commit
0499deea69
3 changed files with 79 additions and 41 deletions
|
@ -49,7 +49,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||
* @param BasicAuth &$auth_plugin
|
||||
*/
|
||||
public function __construct($ext_path, &$auth_plugin) {
|
||||
// $ext_path = urldecode($ext_path);
|
||||
// $ext_path = urldecode($ext_path);
|
||||
logger('directory ' . $ext_path, LOGGER_DATA);
|
||||
$this->ext_path = $ext_path;
|
||||
// remove "/cloud" from the beginning of the path
|
||||
|
@ -167,6 +167,14 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||
intval($this->auth->owner_id)
|
||||
);
|
||||
|
||||
$x = attach_syspaths($this->auth->owner_id,$this->folder_hash);
|
||||
|
||||
$y = q("update attach set display_path = '%s where hash = '%s' and uid = %d",
|
||||
dbesc($x['path']),
|
||||
dbesc($this->folder_hash),
|
||||
intval($this->auth->owner_id)
|
||||
);
|
||||
|
||||
$ch = channelx_by_n($this->auth->owner_id);
|
||||
if ($ch) {
|
||||
$sync = attach_export_data($ch, $this->folder_hash);
|
||||
|
@ -260,14 +268,18 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||
dbesc($f),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
'', //TODO: use os_path
|
||||
'', //TODO: use display_path
|
||||
'',
|
||||
'',
|
||||
dbesc($allow_cid),
|
||||
dbesc($allow_gid),
|
||||
dbesc($deny_cid),
|
||||
dbesc($deny_gid)
|
||||
);
|
||||
|
||||
// fetch the actual storage paths
|
||||
|
||||
$xpath = attach_syspaths($this->auth->owner_id, $hash);
|
||||
|
||||
// returns the number of bytes that were written to the file, or FALSE on failure
|
||||
$size = file_put_contents($f, $data);
|
||||
// delete attach entry if file_put_contents() failed
|
||||
|
@ -281,15 +293,17 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||
$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)) {
|
||||
$gis = @getimagesize($f);
|
||||
logger('getimagesize: ' . print_r($gis,true), LOGGER_DATA);
|
||||
if (($gis) && ($gis[2] === IMAGETYPE_GIF || $gis[2] === IMAGETYPE_JPEG || $gis[2] === IMAGETYPE_PNG)) {
|
||||
$is_photo = 1;
|
||||
}
|
||||
|
||||
// updates entry with filesize and timestamp
|
||||
$d = q("UPDATE attach SET filesize = '%s', is_photo = %d, edited = '%s' WHERE hash = '%s' AND uid = %d",
|
||||
$d = q("UPDATE attach SET filesize = '%s', os_path = '%s', display_path = '%s', is_photo = %d, edited = '%s' WHERE hash = '%s' AND uid = %d",
|
||||
dbesc($size),
|
||||
dbesc($xpath['os_path']),
|
||||
dbesc($xpath['display_path']),
|
||||
intval($is_photo),
|
||||
dbesc($edited),
|
||||
dbesc($hash),
|
||||
|
@ -312,29 +326,29 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||
// check against service class quota
|
||||
$limit = engr_units_to_bytes(service_class_fetch($c[0]['channel_id'], 'attach_upload_limit'));
|
||||
if ($limit !== false) {
|
||||
$x = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d ",
|
||||
$z = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d ",
|
||||
intval($c[0]['channel_account_id'])
|
||||
);
|
||||
if (($x) && ($x[0]['total'] + $size > $limit)) {
|
||||
logger('service class limit exceeded for ' . $c[0]['channel_name'] . ' total usage is ' . $x[0]['total'] . ' limit is ' . userReadableSize($limit));
|
||||
if (($z) && ($z[0]['total'] + $size > $limit)) {
|
||||
logger('service class limit exceeded for ' . $c[0]['channel_name'] . ' total usage is ' . $z[0]['total'] . ' limit is ' . userReadableSize($limit));
|
||||
attach_delete($c[0]['channel_id'], $hash);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ($is_photo) {
|
||||
if($is_photo) {
|
||||
$album = '';
|
||||
if ($this->folder_hash) {
|
||||
$f1 = q("select filename from attach WHERE hash = '%s' AND uid = %d",
|
||||
$f1 = q("select filename, display_path from attach WHERE hash = '%s' AND uid = %d",
|
||||
dbesc($this->folder_hash),
|
||||
intval($c[0]['channel_id'])
|
||||
);
|
||||
if ($f1)
|
||||
$album = $f1[0]['filename'];
|
||||
$album = (($f1[0]['display_path']) ? $f1[0]['display_path'] : $f1[0]['filename']);
|
||||
}
|
||||
|
||||
require_once('include/photos.php');
|
||||
$args = array( 'resource_id' => $hash, 'album' => $album, 'os_path' => $f, 'filename' => $name, 'getimagesize' => $x, 'directory' => $direct);
|
||||
$args = array( 'resource_id' => $hash, 'album' => $album, 'os_syspath' => $f, 'os_path' => $xpath['os_path'], 'display_path' => $xpath['path'], 'filename' => $name, 'getimagesize' => $gis, 'directory' => $direct);
|
||||
$p = photo_upload($c[0], \App::get_observer(), $args);
|
||||
}
|
||||
|
||||
|
@ -646,20 +660,24 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||
logger("Path mismatch: $path !== /$file");
|
||||
return NULL;
|
||||
}
|
||||
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
|
||||
$prefix = 'DISTINCT ON (filename)';
|
||||
$suffix = 'ORDER BY filename';
|
||||
}
|
||||
else {
|
||||
$prefix = '';
|
||||
$suffix = 'GROUP BY filename';
|
||||
}
|
||||
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
|
||||
$r = q("select $prefix id, uid, hash, filename, filetype, filesize, revision, folder, flags, is_dir, created, edited from attach where folder = '%s' and uid = %d $perms $suffix",
|
||||
dbesc($folder),
|
||||
intval($channel_id)
|
||||
);
|
||||
|
||||
foreach ($r as $rr) {
|
||||
|
||||
// @FIXME I don't think we use revisions currently in attach structures.
|
||||
// In case we see any in the wild provide a unique filename. This
|
||||
// name may or may not be accessible
|
||||
|
||||
if($rr['revision'])
|
||||
$rr['filename'] .= '-' . $rr['revision'];
|
||||
|
||||
//logger('filename: ' . $rr['filename'], LOGGER_DEBUG);
|
||||
if (intval($rr['is_dir'])) {
|
||||
$ret[] = new Directory($path . '/' . $rr['filename'], $auth);
|
||||
|
|
|
@ -85,13 +85,23 @@ class File extends DAV\Node implements DAV\IFile {
|
|||
intval($this->data['id'])
|
||||
);
|
||||
|
||||
$x = attach_syspaths($this->auth->owner_id,$this->data['hash']);
|
||||
|
||||
$y = q("update attach set display_path = '%s where hash = '%s' and uid = %d",
|
||||
dbesc($x['path']),
|
||||
dbesc($this->data['hash']),
|
||||
intval($this->auth->owner_id)
|
||||
);
|
||||
|
||||
if($this->data->is_photo) {
|
||||
$r = q("update photo set filename = '%s' where resource_id = '%s' and uid = %d",
|
||||
$r = q("update photo set filename = '%s', display_path = '%s' where resource_id = '%s' and uid = %d",
|
||||
dbesc($newName),
|
||||
dbesc($x['path']),
|
||||
dbesc($this->data['hash']),
|
||||
intval($this->auth->owner_id)
|
||||
);
|
||||
}
|
||||
|
||||
$ch = channelx_by_n($this->auth->owner_id);
|
||||
if($ch) {
|
||||
$sync = attach_export_data($ch,$this->data['hash']);
|
||||
|
|
|
@ -811,7 +811,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
|
|||
|
||||
if($is_photo) {
|
||||
|
||||
$args = array( 'source' => $source, 'visible' => $visible, 'resource_id' => $hash, 'album' => basename($pathname), 'os_syspath' => $os_basepath . $os_relpath, 'os_path' => $os_path, 'display_path' => $display_path, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct, 'options' => $options );
|
||||
$args = array( 'source' => $source, 'visible' => $visible, 'resource_id' => $hash, 'album' => $pathname, 'os_syspath' => $os_basepath . $os_relpath, 'os_path' => $os_path, 'display_path' => $display_path, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct, 'options' => $options );
|
||||
if($arr['contact_allow'])
|
||||
$args['contact_allow'] = $arr['contact_allow'];
|
||||
if($arr['group_allow'])
|
||||
|
@ -915,7 +915,7 @@ function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') {
|
|||
if(count($paths) > 1) {
|
||||
$curpath = array_shift($paths);
|
||||
|
||||
$r = q("select hash, id, is_dir from attach where uid = %d and filename = '%s' and is_dir != 0 " . permissions_sql($channel_id) . " limit 1",
|
||||
$r = q("select hash, id, is_dir from attach where uid = %d and filename = '%s' and is_dir != 0 " . permissions_sql($channel_id,$observer_hash) . " limit 1",
|
||||
intval($channel_id),
|
||||
dbesc($curpath)
|
||||
);
|
||||
|
@ -969,12 +969,15 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
|
|||
|
||||
$sql_options = '';
|
||||
|
||||
$basepath = 'store/' . $channel['channel_address'];
|
||||
$os_basepath = 'store/' . $channel['channel_address'];
|
||||
|
||||
logger('attach_mkdir: basepath: ' . $basepath);
|
||||
logger('attach_mkdir: basepath: ' . $os_basepath);
|
||||
|
||||
if(! is_dir($basepath))
|
||||
os_mkdir($basepath,STORAGE_DEFAULT_PERMISSIONS, true);
|
||||
if(! is_dir($os_basepath))
|
||||
os_mkdir($os_basepath,STORAGE_DEFAULT_PERMISSIONS, true);
|
||||
|
||||
|
||||
$os_basepath .= '/';
|
||||
|
||||
if(! perm_is_allowed($channel_id, $observer_hash, 'write_storage')) {
|
||||
$ret['message'] = t('Permission denied.');
|
||||
|
@ -1020,10 +1023,13 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
|
|||
|
||||
$lpath = '';
|
||||
$lfile = $arr['folder'];
|
||||
$dpath = '';
|
||||
|
||||
$sql_options = permissions_sql($channel['channel_id']);
|
||||
|
||||
|
||||
do {
|
||||
$r = q("select filename, hash, flags, is_dir, folder from attach where uid = %d and hash = '%s' and is_dir != 0
|
||||
$r = q("select filename, hash, flags, is_dir, folder, display_path from attach where uid = %d and hash = '%s' and is_dir = 1
|
||||
$sql_options limit 1",
|
||||
intval($channel['channel_id']),
|
||||
dbesc($lfile)
|
||||
|
@ -1033,22 +1039,26 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
|
|||
$ret['message'] = t('Path not found.');
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$dpath = $r[0]['filename'] . (($dpath) ? '/' . $dpath : '');
|
||||
|
||||
if($lfile)
|
||||
$lpath = $r[0]['hash'] . '/' . $lpath;
|
||||
$lpath = $r[0]['hash'] . (($lpath) ? '/' . $lpath : '');
|
||||
|
||||
$lfile = $r[0]['folder'];
|
||||
|
||||
} while ( ($r[0]['folder']) && intval($r[0]['is_dir'])) ;
|
||||
$path = $basepath . '/' . $lpath;
|
||||
|
||||
$path = $lpath;
|
||||
}
|
||||
else
|
||||
$path = $basepath . '/';
|
||||
|
||||
$path .= $arr['hash'];
|
||||
$path = '';
|
||||
|
||||
$created = datetime_convert();
|
||||
|
||||
// not yet used
|
||||
$os_path = '';
|
||||
$display_path = '';
|
||||
$os_path = ltrim($path . '/' . $arr['hash'],'/');
|
||||
$display_path = ltrim($dpath . '/' . $arr['filename'],'/');
|
||||
|
||||
|
||||
$r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, folder, os_storage, is_dir, content, created, edited, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid )
|
||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
|
||||
|
@ -1063,7 +1073,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
|
|||
dbesc($arr['folder']),
|
||||
intval(1),
|
||||
intval(1),
|
||||
dbescbin($path),
|
||||
dbescbin($os_basepath . $os_path),
|
||||
dbesc($created),
|
||||
dbesc($created),
|
||||
dbesc($os_path),
|
||||
|
@ -1075,7 +1085,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
|
|||
);
|
||||
|
||||
if($r) {
|
||||
if(os_mkdir($path, STORAGE_DEFAULT_PERMISSIONS, true)) {
|
||||
if(os_mkdir($os_basepath . $os_path, STORAGE_DEFAULT_PERMISSIONS, true)) {
|
||||
$ret['success'] = true;
|
||||
|
||||
// update the parent folder's lastmodified timestamp
|
||||
|
@ -1093,7 +1103,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
|
|||
$ret['data'] = $z[0];
|
||||
}
|
||||
else {
|
||||
logger('attach_mkdir: ' . mkdir . ' ' . $path . ' failed.');
|
||||
logger('attach_mkdir: ' . mkdir . ' ' . $os_basepath . $os_path . ' failed.');
|
||||
$ret['message'] = t('mkdir failed.');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue