start implementing a solution to fix broken etags for shared files
This commit is contained in:
parent
4619c662cc
commit
166edb2cc1
|
@ -148,25 +148,38 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
* @return bool|array
|
||||
*/
|
||||
public function updateProperties($properties) {
|
||||
// get source path of shared files
|
||||
if (!strncmp($this->path, '/Shared/', 8)) {
|
||||
$source = OC_Filestorage_Shared::getSourcePath(str_replace('/Shared/', '', $this->path));
|
||||
$parts = explode('/', $source, 4);
|
||||
$user = $parts[1];
|
||||
$path = '/'.$parts[3];
|
||||
} else {
|
||||
$user = OC_User::getUser();
|
||||
$path = $this->path;
|
||||
}
|
||||
|
||||
$existing = $this->getProperties(array());
|
||||
foreach($properties as $propertyName => $propertyValue) {
|
||||
// If it was null, we need to delete the property
|
||||
if (is_null($propertyValue)) {
|
||||
if(array_key_exists( $propertyName, $existing )) {
|
||||
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
|
||||
$query->execute( array( OC_User::getUser(), $this->path, $propertyName ));
|
||||
$query->execute( array( $user, $path, $propertyName ));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if( strcmp( $propertyName, self::LASTMODIFIED_PROPERTYNAME) === 0 ) {
|
||||
error_log("propertyName: " . $propertyName);
|
||||
$this->touch($propertyValue);
|
||||
} else {
|
||||
error_log("update/insert property: user: $user; path: $path");
|
||||
if(!array_key_exists( $propertyName, $existing )) {
|
||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
|
||||
$query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue ));
|
||||
$query->execute( array( $user, $path, $propertyName, $propertyValue ));
|
||||
} else {
|
||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
|
||||
$query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName ));
|
||||
$query->execute( array( $propertyValue, $user, $path, $propertyName ));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -188,6 +201,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
* @return array
|
||||
*/
|
||||
public function getProperties($properties) {
|
||||
//TODO: Shared files?!?
|
||||
if (is_null($this->property_cache)) {
|
||||
$query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?' );
|
||||
$result = $query->execute( array( OC_User::getUser(), $this->path ));
|
||||
|
@ -234,9 +248,19 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
if (empty($tag)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!strncmp($path, '/Shared/', 8)) {
|
||||
$source = OC_Filestorage_Shared::getSourcePath(str_replace('/Shared/', '', $path));
|
||||
$parts = explode('/', $source, 4);
|
||||
$user = $parts[1];
|
||||
$path = '/'.$parts[3];
|
||||
} else {
|
||||
$user = OC_User::getUser();
|
||||
}
|
||||
|
||||
$etag = '"'.$tag.'"';
|
||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
|
||||
$query->execute( array( OC_User::getUser(), $path, self::GETETAG_PROPERTYNAME, $etag ));
|
||||
$query->execute( array( $user, $path, self::GETETAG_PROPERTYNAME, $etag ));
|
||||
return $etag;
|
||||
}
|
||||
|
||||
|
@ -246,6 +270,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
*/
|
||||
static public function removeETagPropertyForPath($path) {
|
||||
// remove tags from this and parent paths
|
||||
//TODO Shared Files?!?
|
||||
$paths = array();
|
||||
while ($path != '/' && $path != '.' && $path != '' && $path != '\\') {
|
||||
$paths[] = $path;
|
||||
|
|
Loading…
Reference in New Issue