Merge branch 'master' of https://github.com/redmatrix/redmatrix
several dav fixes Conflicts: include/items.php
This commit is contained in:
		| @@ -414,14 +414,13 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { | ||||
| 		$os_path = ''; | ||||
|  | ||||
| 		for ($x = 1; $x < count($path_arr); $x++) { | ||||
| 			$r = q("select id, hash, filename, flags from attach where folder = '%s' and filename = '%s' and uid = %d and (flags & %d)>0", | ||||
| 			$r = q("select id, hash, filename, flags, is_dir from attach where folder = '%s' and filename = '%s' and uid = %d and is_dir != 0", | ||||
| 				dbesc($folder), | ||||
| 				dbesc($path_arr[$x]), | ||||
| 				intval($channel_id), | ||||
| 				intval(ATTACH_FLAG_DIR) | ||||
| 				intval($channel_id) | ||||
| 			); | ||||
|  | ||||
| 			if ($r && ( $r[0]['flags'] & ATTACH_FLAG_DIR)) { | ||||
| 			if ($r && intval($r[0]['is_dir'])) { | ||||
| 				$folder = $r[0]['hash']; | ||||
| 				if (strlen($os_path)) | ||||
| 					$os_path .= '/'; | ||||
|   | ||||
| @@ -300,7 +300,7 @@ class RedFile extends DAV\Node implements DAV\IFile { | ||||
| 		} | ||||
|  | ||||
| 		if ($this->auth->owner_id !== $this->auth->channel_id) { | ||||
| 			if (($this->auth->observer !== $this->data['creator']) || ($this->data['flags'] & ATTACH_FLAG_DIR)) { | ||||
| 			if (($this->auth->observer !== $this->data['creator']) || intval($this->data['is_dir'])) { | ||||
| 				throw new DAV\Exception\Forbidden('Permission denied.'); | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -733,10 +733,9 @@ function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') { | ||||
| 		if(count($paths) > 1) { | ||||
| 			$curpath = array_shift($paths); | ||||
|  | ||||
| 			$r = q("select hash, id from attach where uid = %d and filename = '%s' and (flags & %d )>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) . " limit 1", | ||||
| 				intval($channel_id), | ||||
| 				dbesc($curpath), | ||||
| 				intval(ATTACH_FLAG_DIR) | ||||
| 				dbesc($curpath) | ||||
| 			); | ||||
| 			if(! $r) { | ||||
| 				$ret['message'] = t('Path not available.'); | ||||
| @@ -749,11 +748,10 @@ function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') { | ||||
| 	else | ||||
| 		$paths = array($pathname); | ||||
|  | ||||
| 	$r = q("select id, aid, uid, hash, creator, filename, filetype, filesize, revision, folder, is_photo, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where id = %d and folder = '%s' and filename = '%s' and (flags & %d )>0 " . permissions_sql($channel_id), | ||||
| 	$r = q("select id, aid, uid, hash, creator, filename, filetype, filesize, revision, folder, is_photo, is_dir, os_storage, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where id = %d and folder = '%s' and filename = '%s' and is_dir != 0 " . permissions_sql($channel_id), | ||||
| 		intval($channel_id), | ||||
| 		dbesc($parent_hash), | ||||
| 		dbesc($paths[0]), | ||||
| 		intval(ATTACH_FLAG_DIR) | ||||
| 		dbesc($paths[0]) | ||||
| 	); | ||||
| 	if(! $r) { | ||||
| 		$ret['message'] = t('Path not available.'); | ||||
| @@ -839,11 +837,10 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { | ||||
| 		$sql_options = permissions_sql($channel['channel_id']); | ||||
|  | ||||
| 		do { | ||||
| 			$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )>0 | ||||
| 			$r = q("select filename, hash, flags, is_dir, folder from attach where uid = %d and hash = '%s' and is_dir != 0 | ||||
| 				$sql_options limit 1", | ||||
| 				intval($channel['channel_id']), | ||||
| 				dbesc($lfile), | ||||
| 				intval(ATTACH_FLAG_DIR) | ||||
| 				dbesc($lfile) | ||||
| 			); | ||||
|  | ||||
| 			if(! $r) { | ||||
| @@ -854,7 +851,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { | ||||
| 			if($lfile) | ||||
| 				$lpath = $r[0]['hash'] . '/' . $lpath; | ||||
| 			$lfile = $r[0]['folder']; | ||||
| 		} while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)) ; | ||||
| 		} while ( ($r[0]['folder']) && intval($r[0]['is_dir'])) ; | ||||
| 		$path = $basepath . '/' . $lpath; | ||||
| 	} | ||||
| 	else | ||||
| @@ -864,7 +861,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { | ||||
|  | ||||
| 	$created = datetime_convert(); | ||||
|  | ||||
| 	$r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, folder, os_storage, flags, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) | ||||
| 	$r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, folder, os_storage, is_dir, data, created, edited, 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' ) ", | ||||
| 		intval($channel['channel_account_id']), | ||||
| 		intval($channel_id), | ||||
| @@ -876,7 +873,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { | ||||
| 		intval(0), | ||||
| 		dbesc($arr['folder']), | ||||
| 		intval(1), | ||||
| 		intval(ATTACH_FLAG_DIR), | ||||
| 		intval(1), | ||||
| 		dbesc($path), | ||||
| 		dbesc($created), | ||||
| 		dbesc($created), | ||||
| @@ -1012,7 +1009,7 @@ function attach_mkdirp($channel, $observer_hash, $arr = null) { | ||||
|  */ | ||||
| function attach_change_permissions($channel_id, $resource, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $recurse = false) { | ||||
|  | ||||
| 	$r = q("select hash, flags from attach where hash = '%s' and uid = %d limit 1", | ||||
| 	$r = q("select hash, flags, is_dir from attach where hash = '%s' and uid = %d limit 1", | ||||
| 		dbesc($resource), | ||||
| 		intval($channel_id) | ||||
| 	); | ||||
| @@ -1020,9 +1017,9 @@ function attach_change_permissions($channel_id, $resource, $allow_cid, $allow_gi | ||||
| 	if(! $r) | ||||
| 		return; | ||||
|  | ||||
| 	if($r[0]['flags'] & ATTACH_FLAG_DIR) { | ||||
| 	if(intval($r[0]['is_dir'])) { | ||||
| 		if($recurse) { | ||||
| 			$r = q("select hash, flags from attach where folder = '%s' and uid = %d", | ||||
| 			$r = q("select hash, flags, is_dir from attach where folder = '%s' and uid = %d", | ||||
| 				dbesc($resource), | ||||
| 				intval($channel_id) | ||||
| 			); | ||||
| @@ -1065,7 +1062,7 @@ function attach_delete($channel_id, $resource, $is_photo = 0) { | ||||
| 	$channel_address = (($c) ? $c[0]['channel_address'] : 'notfound'); | ||||
| 	$photo_sql = (($is_photo) ? " and is_photo = 1 " : ''); | ||||
|  | ||||
| 	$r = q("SELECT hash, flags, folder FROM attach WHERE hash = '%s' AND uid = %d $photo_sql limit 1", | ||||
| 	$r = q("SELECT hash, flags, is_dir, folder FROM attach WHERE hash = '%s' AND uid = %d $photo_sql limit 1", | ||||
| 		dbesc($resource), | ||||
| 		intval($channel_id) | ||||
| 	); | ||||
| @@ -1077,8 +1074,8 @@ function attach_delete($channel_id, $resource, $is_photo = 0) { | ||||
| 	$object = get_file_activity_object($channel_id, $resource, $cloudpath); | ||||
|  | ||||
| 	// If resource is a directory delete everything in the directory recursive | ||||
| 	if($r[0]['flags'] & ATTACH_FLAG_DIR) { | ||||
| 		$x = q("SELECT hash, os_storage, flags FROM attach WHERE folder = '%s' AND uid = %d", | ||||
| 	if(intval($r[0]['is_dir'])) { | ||||
| 		$x = q("SELECT hash, os_storage, is_dir, flags FROM attach WHERE folder = '%s' AND uid = %d", | ||||
| 			dbesc($resource), | ||||
| 			intval($channel_id) | ||||
| 		); | ||||
| @@ -1152,11 +1149,10 @@ function get_cloudpath($arr) { | ||||
| 		$lfile = $arr['folder']; | ||||
|  | ||||
| 		do { | ||||
| 			$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )>0 | ||||
| 			$r = q("select filename, hash, flags, is_dir, folder from attach where uid = %d and hash = '%s' and is_dir != 0 | ||||
| 				limit 1", | ||||
| 				intval($arr['uid']), | ||||
| 				dbesc($lfile), | ||||
| 				intval(ATTACH_FLAG_DIR) | ||||
| 				dbesc($lfile) | ||||
| 			); | ||||
|  | ||||
| 			if(! $r) | ||||
| @@ -1166,7 +1162,7 @@ function get_cloudpath($arr) { | ||||
| 				$lpath = $r[0]['filename'] . '/' . $lpath; | ||||
| 			$lfile = $r[0]['folder']; | ||||
|  | ||||
| 		} while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)); | ||||
| 		} while ( ($r[0]['folder']) && intval($r[0]['is_dir'])); | ||||
|  | ||||
| 		$path .= $lpath; | ||||
| 	} | ||||
| @@ -1295,7 +1291,7 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, | ||||
| 	//filter out receivers which do not have permission to view filestorage | ||||
| 	$arr_allow_cid = check_list_permissions($channel_id, $arr_allow_cid, 'view_storage'); | ||||
|  | ||||
| 	$is_dir = (($object['flags'] & ATTACH_FLAG_DIR) ? true : false); | ||||
| 	$is_dir = (intval($object['is_dir']) ? true : false); | ||||
|  | ||||
| 	//do not send activity for folders for now | ||||
| 	if($is_dir) | ||||
| @@ -1451,7 +1447,7 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, | ||||
|  */ | ||||
| function get_file_activity_object($channel_id, $hash, $cloudpath) { | ||||
|  | ||||
| 	$x = q("SELECT creator, filename, filetype, filesize, revision, folder, os_storage, is_photo, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid FROM attach WHERE uid = %d AND hash = '%s' LIMIT 1", | ||||
| 	$x = q("SELECT creator, filename, filetype, filesize, revision, folder, os_storage, is_photo, is_dir, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid FROM attach WHERE uid = %d AND hash = '%s' LIMIT 1", | ||||
| 		intval($channel_id), | ||||
| 		dbesc($hash) | ||||
| 	); | ||||
| @@ -1479,8 +1475,9 @@ function get_file_activity_object($channel_id, $hash, $cloudpath) { | ||||
| 		'revision'	=> $x[0]['revision'], | ||||
| 		'folder'	=> $x[0]['folder'], | ||||
| 		'flags'		=> $x[0]['flags'], | ||||
| 		'flags'		=> $x[0]['os_storage'], | ||||
| 		'os_storage' => $x[0]['os_storage'], | ||||
| 		'is_photo'  => $x[0]['is_photo'], | ||||
| 		'is_dir'    => $x[0]['is_dir'], | ||||
| 		'created'	=> $x[0]['created'], | ||||
| 		'edited'	=> $x[0]['edited'], | ||||
| 		'allow_cid'	=> $x[0]['allow_cid'], | ||||
|   | ||||
| @@ -588,7 +588,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $ | ||||
| 				if($arr_blocked) { | ||||
| 					$blocked = false; | ||||
| 					foreach($arr_blocked as $b) { | ||||
| 						if(($b) && ($item['author_xchan'] == $b)) { | ||||
| 						if(($b) && (($item['author_xchan'] == $b) || ($item['owner_xchan'] == $b))) {  | ||||
| 							$blocked = true; | ||||
| 							break; | ||||
| 						} | ||||
|   | ||||
| @@ -1,4 +1,6 @@ | ||||
| <?php | ||||
| use Sabre\VObject; | ||||
|  | ||||
| /** | ||||
|  * @file include/event.php | ||||
|  */ | ||||
| @@ -281,7 +283,7 @@ function event_store_event($arr) { | ||||
| 		if(array_key_exists('external_id',$arr)) | ||||
| 			$hash = $arr['external_id']; | ||||
| 		else | ||||
| 			$hash = random_string(); | ||||
| 			$hash = random_string() . '@' . get_app()->get_hostname(); | ||||
|  | ||||
| 		$r = q("INSERT INTO event ( uid,aid,event_xchan,event_hash,created,edited,start,finish,summary,description,location,type, | ||||
| 			adjust,nofinish,allow_cid,allow_gid,deny_cid,deny_gid) | ||||
| @@ -371,18 +373,30 @@ function event_addtocal($item_id, $uid) { | ||||
|  | ||||
|  | ||||
| function parse_ical_file($f,$uid) { | ||||
| 	require_once('library/ical.php'); | ||||
| 	$ical = new ICal($f); | ||||
| require_once('vendor/autoload.php'); | ||||
|  | ||||
| 	$s = @file_get_contents($f); | ||||
|  | ||||
| 	// Change the current timezone to something besides UTC. | ||||
| 	// Doesn't matter what it is, as long as it isn't UTC. | ||||
| 	// Save the current timezone so we can reset it when we're done processing. | ||||
|  | ||||
| 	$saved_timezone = date_default_timezone_get(); | ||||
| 	date_default_timezone_set('Australia/Sydney'); | ||||
|  | ||||
| 	$ical = VObject\Reader::read($s); | ||||
|  | ||||
| 	if($ical) { | ||||
| 		$events = $ical->events(); | ||||
| 		if($events) { | ||||
| 			foreach($events as $ev) { | ||||
| 				logger('event parsed: ' . print_r($ev,true), LOGGER_ALL); | ||||
| 				event_import_ical($ev,$uid); | ||||
| 			} | ||||
| 		foreach($ical->VEVENT as $event) { | ||||
| 			event_import_ical($event,$uid); | ||||
|  | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	date_default_timezone_set($saved_timezone); | ||||
|  | ||||
| 	if($ical) | ||||
| 		return true; | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| @@ -400,42 +414,76 @@ function event_import_ical($ical, $uid) { | ||||
| 	$channel = $c[0]; | ||||
| 	$ev = array(); | ||||
|  | ||||
| 	if($ical['CREATED']) | ||||
| 		$ev['created'] = datetime_convert('UTC','UTC',$ical['CREATED']); | ||||
| 	if($ical['LAST-MODIFIED']) | ||||
| 		$ev['edited'] = datetime_convert('UTC','UTC',$ical['LAST-MODIFIED']); | ||||
| 	if($ical['LOCATION']) | ||||
| 		$ev['location'] = $ical['LOCATION']; | ||||
| 	if($ical['DESCRIPTION']) | ||||
| 		$ev['description'] = $ical['DESCRIPTION']; | ||||
| 	if($ical['SUMMARY']) | ||||
| 		$ev['summary'] = $ical['SUMMARY']; | ||||
| 	if($ical['DTEND']) | ||||
| 		$ev['finish'] = datetime_convert('UTC','UTC', $ical['DTEND']); | ||||
|  | ||||
| 	if(! isset($ical->DTSTART)) { | ||||
| 		logger('no event start'); | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| 	$dtstart = $ical->DTSTART->getDateTime(); | ||||
|  | ||||
| //	logger('dtstart: ' . var_export($dtstart,true)); | ||||
|  | ||||
| 	if(($dtstart->timezone_type == 2) || (($dtstart->timezone_type == 3) && ($dtstart->timezone === 'UTC'))) { | ||||
| 		$ev['adjust'] = 1; | ||||
| 	} | ||||
| 	else { | ||||
| 		$ev['adjust'] = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	$ev['start'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', | ||||
| 		$dtstart->format(\DateTime::W3C)); | ||||
|  | ||||
|  | ||||
| 	if(isset($ical->DTEND)) { | ||||
| 		$dtend = $ical->DTEND->getDateTime(); | ||||
| 		$ev['finish'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', | ||||
| 			$dtend->format(\DateTime::W3C)); | ||||
| 	} | ||||
| 	else | ||||
| 		$ev['nofinish'] = 1; | ||||
| 	$ev['start'] = datetime_convert('UTC','UTC',$ical['DTSTART']); | ||||
| 	if(substr($ical['DTSTART'],-1) === 'Z') | ||||
| 		$ev['adjust'] = 1; | ||||
|  | ||||
| 	if($ical['UID']) { | ||||
|  | ||||
| 	if($ev['start'] === $ev['finish']) | ||||
| 		$ev['nofinish'] = 1; | ||||
|  | ||||
| 	if(isset($ical->CREATED)) { | ||||
| 		$created = $ical->CREATED->getDateTime(); | ||||
| 		$ev['created'] = datetime_convert('UTC','UTC',$created->format(\DateTime::W3C)); | ||||
| 	} | ||||
|  | ||||
| 	if(isset($ical->{'LAST-MODIFIED'})) { | ||||
| 		$edited = $ical->{'LAST-MODIFIED'}->getDateTime(); | ||||
| 		$ev['edited'] = datetime_convert('UTC','UTC',$edited->format(\DateTime::W3C)); | ||||
| 	} | ||||
|  | ||||
| 	if(isset($ical->LOCATION)) | ||||
| 		$ev['location'] = (string) $ical->LOCATION; | ||||
| 	if(isset($ical->DESCRIPTION)) | ||||
| 		$ev['description'] = (string) $ical->DESCRIPTION; | ||||
| 	if(isset($ical->SUMMARY)) | ||||
| 		$ev['summary'] = (string) $ical->SUMMARY; | ||||
|  | ||||
| 	if(isset($ical->UID)) { | ||||
| 		$evuid = (string) $ical->UID; | ||||
| 		$r = q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", | ||||
| 			dbesc($ical['UID']), | ||||
| 			intval($arr['uid']) | ||||
| 			dbesc($evuid), | ||||
| 			intval($uid) | ||||
| 		); | ||||
| 		if($r) | ||||
| 			$ev['event_hash'] = $ical['UID'];	 | ||||
| 			$ev['event_hash'] = $evuid; | ||||
| 		else | ||||
| 			$ev['external_id'] = $ical['UID']; | ||||
| 			$ev['external_id'] = $evuid; | ||||
| 	} | ||||
| 		 | ||||
| 	if($ical['SUMMARY'] && $ical['DTSTART']) { | ||||
| 	if($ev['summary'] && $ev['start']) { | ||||
| 		$ev['event_xchan'] = $channel['channel_hash']; | ||||
| 		$ev['uid']         = $channel['channel_id']; | ||||
| 		$ev['account']     = $channel['channel_account_id']; | ||||
| 		$ev['private']     = 1; | ||||
| 		$ev['allow_cid']   = '<' . $channel['channel_hash'] . '>'; | ||||
|  | ||||
| 		logger('storing event: ' . print_r($ev,true), LOGGER_ALL);		 | ||||
| //		logger('storing event: ' . print_r($ev,true), LOGGER_ALL);		 | ||||
| 		$event = event_store_event($ev); | ||||
| 		if($event) { | ||||
| 			$item_id = event_store_item($ev,$event); | ||||
|   | ||||
| @@ -3768,7 +3768,6 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { | ||||
| 				if(! post_is_importable($datarray,$contact)) | ||||
| 					continue; | ||||
|  | ||||
|  | ||||
| 				logger('consume_feed: author ' . print_r($author,true),LOGGER_DEBUG); | ||||
|  | ||||
| 				logger('consume_feed: ' . print_r($datarray,true),LOGGER_DATA); | ||||
|   | ||||
| @@ -114,20 +114,18 @@ function RedCollectionData($file, &$auth) { | ||||
| 	$permission_error = false; | ||||
|  | ||||
| 	for ($x = 1; $x < count($path_arr); $x++) { | ||||
| 		$r = q("SELECT id, hash, filename, flags FROM attach WHERE folder = '%s' AND filename = '%s' AND uid = %d AND (flags & %d)>0 $perms LIMIT 1", | ||||
| 		$r = q("SELECT id, hash, filename, flags, is_dir FROM attach WHERE folder = '%s' AND filename = '%s' AND uid = %d AND is_dir != 0 $perms LIMIT 1", | ||||
| 			dbesc($folder), | ||||
| 			dbesc($path_arr[$x]), | ||||
| 			intval($channel_id), | ||||
| 			intval(ATTACH_FLAG_DIR) | ||||
| 			intval($channel_id) | ||||
| 		); | ||||
| 		if (! $r) { | ||||
| 			// path wasn't found. Try without permissions to see if it was the result of permissions. | ||||
| 			$errors = true; | ||||
| 			$r = q("select id, hash, filename, flags from attach where folder = '%s' and filename = '%s' and uid = %d and (flags & %d)>0 limit 1", | ||||
| 			$r = q("select id, hash, filename, flags, is_dir from attach where folder = '%s' and filename = '%s' and uid = %d and is_dir != 0 limit 1", | ||||
| 				dbesc($folder), | ||||
| 				basename($path_arr[$x]), | ||||
| 				intval($channel_id), | ||||
| 				intval(ATTACH_FLAG_DIR) | ||||
| 				intval($channel_id) | ||||
| 			); | ||||
| 			if ($r) { | ||||
| 				$permission_error = true; | ||||
| @@ -135,7 +133,7 @@ function RedCollectionData($file, &$auth) { | ||||
| 			break; | ||||
| 		} | ||||
|  | ||||
| 		if ($r && ($r[0]['flags'] & ATTACH_FLAG_DIR)) { | ||||
| 		if ($r && intval($r[0]['is_dir'])) { | ||||
| 			$folder = $r[0]['hash']; | ||||
| 			$path = $path . '/' . $r[0]['filename']; | ||||
| 		} | ||||
| @@ -161,18 +159,17 @@ function RedCollectionData($file, &$auth) { | ||||
| 		$prefix = ''; | ||||
| 		$suffix = 'GROUP BY filename'; | ||||
| 	} | ||||
| 	$r = q("select $prefix id, uid, hash, filename, filetype, filesize, revision, folder, flags, created, edited from attach where folder = '%s' and uid = %d $perms $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) { | ||||
| 		//logger('filename: ' . $rr['filename'], LOGGER_DEBUG); | ||||
| 		if ($rr['flags'] & ATTACH_FLAG_DIR) { | ||||
| 			// @todo can't we drop '/cloud'? it gets stripped off anyway in RedDirectory | ||||
| 			$ret[] = new RedDAV\RedDirectory('/cloud' . $path . '/' . $rr['filename'], $auth); | ||||
| 		if (intval($rr['is_dir'])) { | ||||
| 			$ret[] = new RedDAV\RedDirectory($path . '/' . $rr['filename'], $auth); | ||||
| 		} else { | ||||
| 			$ret[] = new RedDAV\RedFile('/cloud' . $path . '/' . $rr['filename'], $rr, $auth); | ||||
| 			$ret[] = new RedDAV\RedFile($path . '/' . $rr['filename'], $rr, $auth); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -236,19 +233,18 @@ function RedFileData($file, &$auth, $test = false) { | ||||
| 	$errors = false; | ||||
|  | ||||
| 	for ($x = 1; $x < count($path_arr); $x++) {		 | ||||
| 		$r = q("select id, hash, filename, flags from attach where folder = '%s' and filename = '%s' and uid = %d and (flags & %d)>0 $perms", | ||||
| 		$r = q("select id, hash, filename, flags, is_dir from attach where folder = '%s' and filename = '%s' and uid = %d and is_dir != 0 $perms", | ||||
| 			dbesc($folder), | ||||
| 			dbesc($path_arr[$x]), | ||||
| 			intval($channel_id), | ||||
| 			intval(ATTACH_FLAG_DIR) | ||||
| 			intval($channel_id) | ||||
| 		); | ||||
|  | ||||
| 		if ($r && ( $r[0]['flags'] & ATTACH_FLAG_DIR)) { | ||||
| 		if ($r && intval($r[0]['is_dir'])) { | ||||
| 			$folder = $r[0]['hash']; | ||||
| 			$path = $path . '/' . $r[0]['filename']; | ||||
| 		} | ||||
| 		if (! $r) { | ||||
| 			$r = q("select id, uid, hash, filename, filetype, filesize, revision, folder, flags, created, edited from attach  | ||||
| 			$r = q("select id, uid, hash, filename, filetype, filesize, revision, folder, flags, is_dir, created, edited from attach  | ||||
| 				where folder = '%s' and filename = '%s' and uid = %d $perms order by filename limit 1", | ||||
| 				dbesc($folder), | ||||
| 				dbesc(basename($file)), | ||||
| @@ -257,7 +253,7 @@ function RedFileData($file, &$auth, $test = false) { | ||||
| 		} | ||||
| 		if (! $r) { | ||||
| 			$errors = true; | ||||
| 			$r = q("select id, uid, hash, filename, filetype, filesize, revision, folder, flags, created, edited from attach  | ||||
| 			$r = q("select id, uid, hash, filename, filetype, filesize, revision, folder, flags, is_dir, created, edited from attach  | ||||
| 				where folder = '%s' and filename = '%s' and uid = %d order by filename limit 1", | ||||
| 				dbesc($folder), | ||||
| 				dbesc(basename($file)), | ||||
| @@ -272,7 +268,7 @@ function RedFileData($file, &$auth, $test = false) { | ||||
| 		if ($test) | ||||
| 			return true; | ||||
| 		// final component was a directory. | ||||
| 		return new RedDAV\RedDirectory('/cloud/' . $file, $auth); | ||||
| 		return new RedDAV\RedDirectory($file, $auth); | ||||
| 	} | ||||
|  | ||||
| 	if ($errors) { | ||||
| @@ -290,11 +286,10 @@ function RedFileData($file, &$auth, $test = false) { | ||||
| 		if ($test) | ||||
| 			return true; | ||||
|  | ||||
| 		if ($r[0]['flags'] & ATTACH_FLAG_DIR) { | ||||
| 			// @todo can't we drop '/cloud'? it gets stripped off anyway in RedDirectory | ||||
| 			return new RedDAV\RedDirectory('/cloud' . $path . '/' . $r[0]['filename'], $auth); | ||||
| 		if (intval($r[0]['is_dir'])) { | ||||
| 			return new RedDAV\RedDirectory($path . '/' . $r[0]['filename'], $auth); | ||||
| 		} else { | ||||
| 			return new RedDAV\RedFile('/cloud' . $path . '/' . $r[0]['filename'], $r[0], $auth); | ||||
| 			return new RedDAV\RedFile($path . '/' . $r[0]['filename'], $r[0], $auth); | ||||
| 		} | ||||
| 	} | ||||
| 	return false; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user