diff options
Diffstat (limited to 'lib/private')
36 files changed, 290 insertions, 559 deletions
diff --git a/lib/private/app.php b/lib/private/app.php index 52f77535a52..2650ad98bc6 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -875,6 +875,18 @@ class OC_App { } } + public static function shouldUpgrade($app) { + $versions = self::getAppVersions(); + $currentVersion = OC_App::getAppVersion($app); + if ($currentVersion) { + $installedVersion = $versions[$app]; + if (version_compare($currentVersion, $installedVersion, '>')) { + return true; + } + } + return false; + } + /** * check if the app needs updating and update when needed * @@ -885,26 +897,27 @@ class OC_App { return; } self::$checkedApps[] = $app; + if (!self::shouldUpgrade($app)) { + return; + } $versions = self::getAppVersions(); + $installedVersion = $versions[$app]; $currentVersion = OC_App::getAppVersion($app); - if ($currentVersion) { - $installedVersion = $versions[$app]; - if (version_compare($currentVersion, $installedVersion, '>')) { - $info = self::getAppInfo($app); - OC_Log::write($app, - 'starting app upgrade from ' . $installedVersion . ' to ' . $currentVersion, - OC_Log::DEBUG); - try { - OC_App::updateApp($app); - OC_Hook::emit('update', 'success', 'Updated ' . $info['name'] . ' app'); - } catch (Exception $e) { - OC_Hook::emit('update', 'failure', 'Failed to update ' . $info['name'] . ' app: ' . $e->getMessage()); - $l = OC_L10N::get('lib'); - throw new RuntimeException($l->t('Failed to upgrade "%s".', array($app)), 0, $e); - } - OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app)); - } + OC_Log::write( + $app, + 'starting app upgrade from ' . $installedVersion . ' to ' . $currentVersion, + OC_Log::DEBUG + ); + $info = self::getAppInfo($app); + try { + OC_App::updateApp($app); + OC_Hook::emit('update', 'success', 'Updated ' . $info['name'] . ' app'); + } catch (Exception $e) { + OC_Hook::emit('update', 'failure', 'Failed to update ' . $info['name'] . ' app: ' . $e->getMessage()); + $l = OC_L10N::get('lib'); + throw new RuntimeException($l->t('Failed to upgrade "%s".', array($app)), 0, $e); } + OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app)); } /** diff --git a/lib/private/connector/sabre/ServiceUnavailable.php b/lib/private/connector/sabre/ServiceUnavailable.php deleted file mode 100644 index c1cc815c989..00000000000 --- a/lib/private/connector/sabre/ServiceUnavailable.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * ownCloud - * - * @author Thomas Müller - * @copyright 2013 Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL3 - */ - -class Sabre_DAV_Exception_ServiceUnavailable extends Sabre_DAV_Exception { - - /** - * Returns the HTTP statuscode for this exception - * - * @return int - */ - public function getHTTPCode() { - - return 503; - } -} diff --git a/lib/private/connector/sabre/aborteduploaddetectionplugin.php b/lib/private/connector/sabre/aborteduploaddetectionplugin.php index 1a092a59a82..b569f9a83c3 100644 --- a/lib/private/connector/sabre/aborteduploaddetectionplugin.php +++ b/lib/private/connector/sabre/aborteduploaddetectionplugin.php @@ -12,12 +12,12 @@ * This plugin will verify if the uploaded data has been stored completely. * This is done by comparing the content length of the request with the file size on storage. */ -class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPlugin { +class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends \Sabre\DAV\ServerPlugin { /** * Reference to main server object * - * @var Sabre_DAV_Server + * @var \Sabre\DAV\Server */ private $server; @@ -36,14 +36,14 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl /** * This initializes the plugin. * - * This function is called by Sabre_DAV_Server, after + * This function is called by \Sabre\DAV\Server, after * addPlugin is called. * * This method should set up the requires event subscriptions. * - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server */ - public function initialize(Sabre_DAV_Server $server) { + public function initialize(\Sabre\DAV\Server $server) { $this->server = $server; @@ -53,10 +53,10 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl /** * @param string $filePath - * @param Sabre_DAV_INode $node - * @throws Sabre_DAV_Exception_BadRequest + * @param \Sabre\DAV\INode $node + * @throws \Sabre\DAV\Exception\BadRequest */ - public function verifyContentLength($filePath, Sabre_DAV_INode $node = null) { + public function verifyContentLength($filePath, \Sabre\DAV\INode $node = null) { // we should only react on PUT which is used for upload // e.g. with LOCK this will not work, but LOCK uses createFile() as well @@ -78,7 +78,7 @@ class OC_Connector_Sabre_AbortedUploadDetectionPlugin extends Sabre_DAV_ServerPl $actual = $this->fileView->filesize($filePath); if ($actual != $expected) { $this->fileView->unlink($filePath); - throw new Sabre_DAV_Exception_BadRequest('expected filesize ' . $expected . ' got ' . $actual); + throw new \Sabre\DAV\Exception\BadRequest('expected filesize ' . $expected . ' got ' . $actual); } } diff --git a/lib/private/connector/sabre/auth.php b/lib/private/connector/sabre/auth.php index 9ebf5fc05cf..b1ef698583d 100644 --- a/lib/private/connector/sabre/auth.php +++ b/lib/private/connector/sabre/auth.php @@ -21,7 +21,7 @@ * */ -class OC_Connector_Sabre_Auth extends Sabre_DAV_Auth_Backend_AbstractBasic { +class OC_Connector_Sabre_Auth extends \Sabre\DAV\Auth\Backend\AbstractBasic { /** * Validates a username and password * @@ -69,11 +69,11 @@ class OC_Connector_Sabre_Auth extends Sabre_DAV_Auth_Backend_AbstractBasic { * even if there are no HTTP Basic Auth headers. * In other case, just fallback to the parent implementation. * - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server * @param $realm * @return bool */ - public function authenticate(Sabre_DAV_Server $server, $realm) { + public function authenticate(\Sabre\DAV\Server $server, $realm) { $result = $this->auth($server, $realm); @@ -84,11 +84,11 @@ class OC_Connector_Sabre_Auth extends Sabre_DAV_Auth_Backend_AbstractBasic { } /** - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server * @param $realm * @return bool */ - private function auth(Sabre_DAV_Server $server, $realm) { + private function auth(\Sabre\DAV\Server $server, $realm) { if (OC_User::handleApacheAuth() || OC_User::isLoggedIn()) { $user = OC_User::getUser(); OC_Util::setupFS($user); diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php index 1bb526e451e..aa467cec535 100644 --- a/lib/private/connector/sabre/directory.php +++ b/lib/private/connector/sabre/directory.php @@ -21,7 +21,8 @@ * */ -class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sabre_DAV_ICollection, Sabre_DAV_IQuota { +class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node + implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota { /** * Creates a new file in the directory @@ -45,7 +46,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa * * @param string $name Name of the file * @param resource|string $data Initial payload - * @throws Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\Forbidden * @return null|string */ public function createFile($name, $data = null) { @@ -58,13 +59,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa $info = OC_FileChunking::decodeName($name); if (!$this->fileView->isCreatable($this->path) && !$this->fileView->isUpdatable($this->path . '/' . $info['name'])) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } } else { // For non-chunked upload it is enough to check if we can create a new file if (!$this->fileView->isCreatable($this->path)) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } } @@ -79,17 +80,17 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa * Creates a new subdirectory * * @param string $name - * @throws Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\Forbidden * @return void */ public function createDirectory($name) { if (!$this->fileView->isCreatable($this->path)) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } $newPath = $this->path . '/' . $name; if(!$this->fileView->mkdir($newPath)) { - throw new Sabre_DAV_Exception_Forbidden('Could not create directory '.$newPath); + throw new \Sabre\DAV\Exception\Forbidden('Could not create directory '.$newPath); } } @@ -99,8 +100,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa * * @param string $name * @param \OCP\Files\FileInfo $info - * @throws Sabre_DAV_Exception_NotFound - * @return Sabre_DAV_INode + * @throws \Sabre\DAV\Exception\FileNotFound + * @return \Sabre\DAV\INode */ public function getChild($name, $info = null) { @@ -110,7 +111,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa } if (!$info) { - throw new Sabre_DAV_Exception_NotFound('File with name ' . $path . ' could not be located'); + throw new \Sabre\DAV\Exception\NotFound('File with name ' . $path . ' could not be located'); } if ($info['mimetype'] == 'httpd/unix-directory') { @@ -124,7 +125,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa /** * Returns an array with all the child nodes * - * @return Sabre_DAV_INode[] + * @return \Sabre\DAV\INode[] */ public function getChildren() { @@ -183,12 +184,12 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa * Deletes all files in this directory, and then itself * * @return void - * @throws Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\Forbidden */ public function delete() { if (!$this->info->isDeletable()) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } $this->fileView->rmdir($this->path); diff --git a/lib/private/connector/sabre/exception/entitytoolarge.php b/lib/private/connector/sabre/exception/entitytoolarge.php index 2bda51f2f3e..2524fbaa74c 100644 --- a/lib/private/connector/sabre/exception/entitytoolarge.php +++ b/lib/private/connector/sabre/exception/entitytoolarge.php @@ -6,7 +6,7 @@ * This exception is thrown whenever a user tries to upload a file which exceeds hard limitations * */ -class OC_Connector_Sabre_Exception_EntityTooLarge extends Sabre_DAV_Exception { +class OC_Connector_Sabre_Exception_EntityTooLarge extends \Sabre\DAV\Exception { /** * Returns the HTTP status code for this exception diff --git a/lib/private/connector/sabre/exception/filelocked.php b/lib/private/connector/sabre/exception/filelocked.php index ec200f847e3..59d932d22de 100644 --- a/lib/private/connector/sabre/exception/filelocked.php +++ b/lib/private/connector/sabre/exception/filelocked.php @@ -7,7 +7,7 @@ * */ -class OC_Connector_Sabre_Exception_FileLocked extends Sabre_DAV_Exception { +class OC_Connector_Sabre_Exception_FileLocked extends \Sabre\DAV\Exception { public function __construct($message = "", $code = 0, Exception $previous = null) { if($previous instanceof \OCP\Files\LockNotAcquiredException) { diff --git a/lib/private/connector/sabre/exception/unsupportedmediatype.php b/lib/private/connector/sabre/exception/unsupportedmediatype.php index 95d6a8cc651..9b285196ebd 100644 --- a/lib/private/connector/sabre/exception/unsupportedmediatype.php +++ b/lib/private/connector/sabre/exception/unsupportedmediatype.php @@ -6,7 +6,7 @@ * This exception is thrown whenever a user tries to upload a file which holds content which is not allowed * */ -class OC_Connector_Sabre_Exception_UnsupportedMediaType extends Sabre_DAV_Exception { +class OC_Connector_Sabre_Exception_UnsupportedMediaType extends \Sabre\DAV\Exception { /** * Returns the HTTP status code for this exception diff --git a/lib/private/connector/sabre/exceptionloggerplugin.php b/lib/private/connector/sabre/exceptionloggerplugin.php index 5eaf1e87621..5963123709b 100644 --- a/lib/private/connector/sabre/exceptionloggerplugin.php +++ b/lib/private/connector/sabre/exceptionloggerplugin.php @@ -9,17 +9,17 @@ * @license AGPL3 */ -class OC_Connector_Sabre_ExceptionLoggerPlugin extends Sabre_DAV_ServerPlugin +class OC_Connector_Sabre_ExceptionLoggerPlugin extends \Sabre\DAV\ServerPlugin { private $nonFatalExceptions = array( - 'Sabre_DAV_Exception_NotAuthenticated' => true, + 'Sabre\DAV\Exception\NotAuthenticated' => true, // the sync client uses this to find out whether files exist, // so it is not always an error, log it as debug - 'Sabre_DAV_Exception_NotFound' => true, + 'Sabre\DAV\Exception\NotFound' => true, // this one mostly happens when the same file is uploaded at // exactly the same time from two clients, only one client // wins, the second one gets "Precondition failed" - 'Sabre_DAV_Exception_PreconditionFailed' => true, + 'Sabre\DAV\Exception\PreconditionFailed' => true, ); private $appName; @@ -34,15 +34,15 @@ class OC_Connector_Sabre_ExceptionLoggerPlugin extends Sabre_DAV_ServerPlugin /** * This initializes the plugin. * - * This function is called by Sabre_DAV_Server, after + * This function is called by \Sabre\DAV\Server, after * addPlugin is called. * * This method should set up the required event subscriptions. * - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server * @return void */ - public function initialize(Sabre_DAV_Server $server) { + public function initialize(\Sabre\DAV\Server $server) { $server->subscribeEvent('exception', array($this, 'logException'), 10); } diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index 48287b1e503..4e90d46ad41 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -21,7 +21,7 @@ * */ -class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_DAV_IFile { +class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\DAV\IFile { /** * Updates the data @@ -41,28 +41,28 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D * return an ETag, and just return null. * * @param resource $data - * @throws Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\Forbidden * @throws OC_Connector_Sabre_Exception_UnsupportedMediaType - * @throws Sabre_DAV_Exception_BadRequest - * @throws Sabre_DAV_Exception + * @throws \Sabre\DAV\Exception\BadRequest + * @throws \Sabre\DAV\Exception * @throws OC_Connector_Sabre_Exception_EntityTooLarge - * @throws Sabre_DAV_Exception_ServiceUnavailable + * @throws \Sabre\DAV\Exception\ServiceUnavailable * @return string|null */ public function put($data) { if ($this->info && $this->fileView->file_exists($this->path) && !$this->info->isUpdateable()) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } // throw an exception if encryption was disabled but the files are still encrypted if (\OC_Util::encryptedFiles()) { - throw new \Sabre_DAV_Exception_ServiceUnavailable(); + throw new \Sabre\DAV\Exception\ServiceUnavailable(); } $fileName = basename($this->path); if (!\OCP\Util::isValidFileName($fileName)) { - throw new \Sabre_DAV_Exception_BadRequest(); + throw new \Sabre\DAV\Exception\BadRequest(); } // chunked handling @@ -79,11 +79,11 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D \OC_Log::write('webdav', '\OC\Files\Filesystem::file_put_contents() failed', \OC_Log::ERROR); $this->fileView->unlink($partpath); // because we have no clue about the cause we can only throw back a 500/Internal Server Error - throw new Sabre_DAV_Exception('Could not write file contents'); + throw new \Sabre\DAV\Exception('Could not write file contents'); } } catch (\OCP\Files\NotPermittedException $e) { // a more general case - due to whatever reason the content could not be written - throw new Sabre_DAV_Exception_Forbidden($e->getMessage()); + throw new \Sabre\DAV\Exception\Forbidden($e->getMessage()); } catch (\OCP\Files\EntityTooLargeException $e) { // the file is too big to be stored @@ -96,7 +96,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D } catch (\OCP\Files\InvalidPathException $e) { // the path for the file was not valid // TODO: find proper http status code for this case - throw new Sabre_DAV_Exception_Forbidden($e->getMessage()); + throw new \Sabre\DAV\Exception\Forbidden($e->getMessage()); } catch (\OCP\Files\LockNotAcquiredException $e) { // the file is currently being written to by another process throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e); @@ -109,7 +109,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D if ($renameOkay === false || $fileExists === false) { \OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR); $this->fileView->unlink($partpath); - throw new Sabre_DAV_Exception('Could not rename part file to final file'); + throw new \Sabre\DAV\Exception('Could not rename part file to final file'); } } catch (\OCP\Files\LockNotAcquiredException $e) { @@ -138,7 +138,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D //throw exception if encryption is disabled but files are still encrypted if (\OC_Util::encryptedFiles()) { - throw new \Sabre_DAV_Exception_ServiceUnavailable(); + throw new \Sabre\DAV\Exception\ServiceUnavailable(); } else { return $this->fileView->fopen($this->path, 'rb'); } @@ -149,11 +149,11 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D * Delete the current file * * @return void - * @throws Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\Forbidden */ public function delete() { if (!$this->info->isDeletable()) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } $this->fileView->unlink($this->path); @@ -205,11 +205,11 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D */ private function createFileChunked($data) { - list($path, $name) = \Sabre_DAV_URLUtil::splitPath($this->path); + list($path, $name) = \Sabre\DAV\URLUtil::splitPath($this->path); $info = OC_FileChunking::decodeName($name); if (empty($info)) { - throw new Sabre_DAV_Exception_NotImplemented(); + throw new \Sabre\DAV\Exception\NotImplemented(); } $chunk_handler = new OC_FileChunking($info); $bytesWritten = $chunk_handler->store($info['index'], $data); @@ -220,7 +220,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D $expected = $_SERVER['CONTENT_LENGTH']; if ($bytesWritten != $expected) { $chunk_handler->remove($info['index']); - throw new Sabre_DAV_Exception_BadRequest( + throw new \Sabre\DAV\Exception\BadRequest( 'expected filesize ' . $expected . ' got ' . $bytesWritten); } } @@ -242,7 +242,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D if ($fileExists) { $this->fileView->unlink($targetPath); } - throw new Sabre_DAV_Exception('Could not rename part file assembled from chunks'); + throw new \Sabre\DAV\Exception('Could not rename part file assembled from chunks'); } // allow sync clients to send the mtime along in a header diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index 25d7fd53343..871fac88e68 100644 --- a/lib/private/connector/sabre/filesplugin.php +++ b/lib/private/connector/sabre/filesplugin.php @@ -9,7 +9,7 @@ * @license AGPL3 */ -class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin +class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin { // namespace @@ -18,22 +18,22 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin /** * Reference to main server object * - * @var Sabre_DAV_Server + * @var \Sabre\DAV\Server */ private $server; /** * This initializes the plugin. * - * This function is called by Sabre_DAV_Server, after + * This function is called by \Sabre\DAV\Server, after * addPlugin is called. * * This method should set up the required event subscriptions. * - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server * @return void */ - public function initialize(Sabre_DAV_Server $server) { + public function initialize(\Sabre\DAV\Server $server) { $server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc'; $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id'; @@ -49,12 +49,12 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin * Adds all ownCloud-specific properties * * @param string $path - * @param Sabre_DAV_INode $node + * @param \Sabre\DAV\INode $node * @param array $requestedProperties * @param array $returnedProperties * @return void */ - public function beforeGetProperties($path, Sabre_DAV_INode $node, array &$requestedProperties, array &$returnedProperties) { + public function beforeGetProperties($path, \Sabre\DAV\INode $node, array &$requestedProperties, array &$returnedProperties) { if ($node instanceof OC_Connector_Sabre_Node) { @@ -84,13 +84,13 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin /** * @param string $filePath - * @param Sabre_DAV_INode $node - * @throws Sabre_DAV_Exception_BadRequest + * @param \Sabre\DAV\INode $node + * @throws \Sabre\DAV\Exception\BadRequest */ - public function sendFileIdHeader($filePath, Sabre_DAV_INode $node = null) { + public function sendFileIdHeader($filePath, \Sabre\DAV\INode $node = null) { // chunked upload handling if (isset($_SERVER['HTTP_OC_CHUNKED'])) { - list($path, $name) = \Sabre_DAV_URLUtil::splitPath($filePath); + list($path, $name) = \Sabre\DAV\URLUtil::splitPath($filePath); $info = OC_FileChunking::decodeName($name); if (!empty($info)) { $filePath = $path . '/' . $info['name']; diff --git a/lib/private/connector/sabre/locks.php b/lib/private/connector/sabre/locks.php index 69496c15ada..09bf874ec70 100644 --- a/lib/private/connector/sabre/locks.php +++ b/lib/private/connector/sabre/locks.php @@ -21,10 +21,10 @@ * */ -class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract { +class OC_Connector_Sabre_Locks extends \Sabre\DAV\Locks\Backend\AbstractBackend { /** - * Returns a list of Sabre_DAV_Locks_LockInfo objects + * Returns a list of \Sabre\DAV\Locks_LockInfo objects * * This method should return all the locks for a particular uri, including * locks that might be set on a parent uri. @@ -93,7 +93,7 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract { $lockList = array(); while( $row = $result->fetchRow()) { - $lockInfo = new Sabre_DAV_Locks_LockInfo(); + $lockInfo = new \Sabre\DAV\Locks\LockInfo(); $lockInfo->owner = $row['owner']; $lockInfo->token = $row['token']; $lockInfo->timeout = $row['timeout']; @@ -113,10 +113,10 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract { * Locks a uri * * @param string $uri - * @param Sabre_DAV_Locks_LockInfo $lockInfo + * @param \Sabre\DAV\Locks\LockInfo $lockInfo * @return bool */ - public function lock($uri, Sabre_DAV_Locks_LockInfo $lockInfo) { + public function lock($uri, \Sabre\DAV\Locks\LockInfo $lockInfo) { // We're making the lock timeout 5 minutes $lockInfo->timeout = 300; @@ -170,10 +170,10 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract { * Removes a lock from a uri * * @param string $uri - * @param Sabre_DAV_Locks_LockInfo $lockInfo + * @param \Sabre\DAV\Locks\LockInfo $lockInfo * @return bool */ - public function unlock($uri, Sabre_DAV_Locks_LockInfo $lockInfo) { + public function unlock($uri, \Sabre\DAV\Locks\LockInfo $lockInfo) { $sql = 'DELETE FROM `*PREFIX*locks` WHERE `userid` = ? AND `uri` = ? AND `token` = ?'; if (OC_Config::getValue( "dbtype") === 'oci') { diff --git a/lib/private/connector/sabre/maintenanceplugin.php b/lib/private/connector/sabre/maintenanceplugin.php index 2eda269afc2..0208f3fb5a6 100644 --- a/lib/private/connector/sabre/maintenanceplugin.php +++ b/lib/private/connector/sabre/maintenanceplugin.php @@ -9,30 +9,28 @@ * @license AGPL3 */ -require 'ServiceUnavailable.php'; - -class OC_Connector_Sabre_MaintenancePlugin extends Sabre_DAV_ServerPlugin +class OC_Connector_Sabre_MaintenancePlugin extends \Sabre\DAV\ServerPlugin { /** * Reference to main server object * - * @var Sabre_DAV_Server + * @var \Sabre\DAV\Server */ private $server; /** * This initializes the plugin. * - * This function is called by Sabre_DAV_Server, after + * This function is called by \Sabre\DAV\Server, after * addPlugin is called. * * This method should set up the required event subscriptions. * - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server * @return void */ - public function initialize(Sabre_DAV_Server $server) { + public function initialize(\Sabre\DAV\Server $server) { $this->server = $server; $this->server->subscribeEvent('beforeMethod', array($this, 'checkMaintenanceMode'), 10); @@ -42,16 +40,16 @@ class OC_Connector_Sabre_MaintenancePlugin extends Sabre_DAV_ServerPlugin * This method is called before any HTTP method and returns http status code 503 * in case the system is in maintenance mode. * - * @throws Sabre_DAV_Exception_ServiceUnavailable + * @throws \Sabre\DAV\Exception\ServiceUnavailable * @internal param string $method * @return bool */ public function checkMaintenanceMode() { if (OC_Config::getValue('maintenance', false)) { - throw new Sabre_DAV_Exception_ServiceUnavailable(); + throw new \Sabre\DAV\Exception\ServiceUnavailable(); } if (OC::checkUpgrade(false)) { - throw new Sabre_DAV_Exception_ServiceUnavailable('Upgrade needed'); + throw new \Sabre\DAV\Exception\ServiceUnavailable('Upgrade needed'); } return true; diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php index f124b754443..8a369eccf6b 100644 --- a/lib/private/connector/sabre/node.php +++ b/lib/private/connector/sabre/node.php @@ -1,4 +1,5 @@ <?php +use Sabre\DAV\URLUtil; /** * ownCloud @@ -20,7 +21,7 @@ * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ -abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IProperties { +abstract class OC_Connector_Sabre_Node implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { const GETETAG_PROPERTYNAME = '{DAV:}getetag'; const LASTMODIFIED_PROPERTYNAME = '{DAV:}lastmodified'; @@ -81,21 +82,21 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr /** * Renames the node * @param string $name The new name - * @throws Sabre_DAV_Exception_BadRequest - * @throws Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\BadRequest + * @throws \Sabre\DAV\Exception\Forbidden */ public function setName($name) { // rename is only allowed if the update privilege is granted if (!$this->info->isUpdateable()) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } - list($parentPath,) = Sabre_DAV_URLUtil::splitPath($this->path); - list(, $newName) = Sabre_DAV_URLUtil::splitPath($name); + list($parentPath,) = URLUtil::splitPath($this->path); + list(, $newName) = URLUtil::splitPath($name); if (!\OCP\Util::isValidFileName($newName)) { - throw new \Sabre_DAV_Exception_BadRequest(); + throw new \Sabre\DAV\Exception\BadRequest(); } $newPath = $parentPath . '/' . $newName; @@ -139,7 +140,7 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr /** * Updates properties on this node, - * @see Sabre_DAV_IProperties::updateProperties + * @see \Sabre\DAV\IProperties::updateProperties * @param array $properties * @return boolean */ diff --git a/lib/private/connector/sabre/objecttree.php b/lib/private/connector/sabre/objecttree.php index 35cc1679ab6..a3de2efaa50 100644 --- a/lib/private/connector/sabre/objecttree.php +++ b/lib/private/connector/sabre/objecttree.php @@ -11,7 +11,7 @@ namespace OC\Connector\Sabre; use OC\Files\FileInfo; use OC\Files\Filesystem; -class ObjectTree extends \Sabre_DAV_ObjectTree { +class ObjectTree extends \Sabre\DAV\ObjectTree { /** * @var \OC\Files\View @@ -27,10 +27,10 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { } /** - * @param \Sabre_DAV_ICollection $rootNode + * @param \Sabre\DAV\ICollection $rootNode * @param \OC\Files\View $view */ - public function init(\Sabre_DAV_ICollection $rootNode, \OC\Files\View $view) { + public function init(\Sabre\DAV\ICollection $rootNode, \OC\Files\View $view) { $this->rootNode = $rootNode; $this->fileView = $view; } @@ -39,13 +39,13 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { * Returns the INode object for the requested path * * @param string $path - * @throws \Sabre_DAV_Exception_ServiceUnavailable - * @throws \Sabre_DAV_Exception_NotFound - * @return \Sabre_DAV_INode + * @throws \Sabre\DAV\Exception\ServiceUnavailable + * @throws \Sabre\DAV\Exception\NotFound + * @return \Sabre\DAV\INode */ public function getNodeForPath($path) { if (!$this->fileView) { - throw new \Sabre_DAV_Exception_ServiceUnavailable('filesystem not setup'); + throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup'); } $path = trim($path, '/'); @@ -79,7 +79,7 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { } if (!$info) { - throw new \Sabre_DAV_Exception_NotFound('File with name ' . $path . ' could not be located'); + throw new \Sabre\DAV\Exception\NotFound('File with name ' . $path . ' could not be located'); } if ($info->getType() === 'dir') { @@ -98,22 +98,22 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { * * @param string $sourcePath The path to the file which should be moved * @param string $destinationPath The full destination path, so not just the destination parent node - * @throws \Sabre_DAV_Exception_BadRequest - * @throws \Sabre_DAV_Exception_ServiceUnavailable - * @throws \Sabre_DAV_Exception_Forbidden + * @throws \Sabre\DAV\Exception\BadRequest + * @throws \Sabre\DAV\Exception\ServiceUnavailable + * @throws \Sabre\DAV\Exception\Forbidden * @return int */ public function move($sourcePath, $destinationPath) { if (!$this->fileView) { - throw new \Sabre_DAV_Exception_ServiceUnavailable('filesystem not setup'); + throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup'); } $sourceNode = $this->getNodeForPath($sourcePath); - if ($sourceNode instanceof \Sabre_DAV_ICollection and $this->nodeExists($destinationPath)) { - throw new \Sabre_DAV_Exception_Forbidden('Could not copy directory ' . $sourceNode . ', target exists'); + if ($sourceNode instanceof \Sabre\DAV\ICollection and $this->nodeExists($destinationPath)) { + throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode . ', target exists'); } - list($sourceDir,) = \Sabre_DAV_URLUtil::splitPath($sourcePath); - list($destinationDir,) = \Sabre_DAV_URLUtil::splitPath($destinationPath); + list($sourceDir,) = \Sabre\DAV\URLUtil::splitPath($sourcePath); + list($destinationDir,) = \Sabre\DAV\URLUtil::splitPath($destinationPath); $isShareMountPoint = false; list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath( '/' . \OCP\User::getUser() . '/files/' . $sourcePath); @@ -123,38 +123,39 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { // check update privileges if (!$this->fileView->isUpdatable($sourcePath) && !$isShareMountPoint) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } if ($sourceDir !== $destinationDir) { // for a full move we need update privileges on sourcePath and sourceDir as well as destinationDir if (ltrim($destinationDir, '/') === '') { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } if (!$this->fileView->isUpdatable($sourceDir)) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } if (!$this->fileView->isUpdatable($destinationDir)) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } if (!$this->fileView->isDeletable($sourcePath)) { - throw new \Sabre_DAV_Exception_Forbidden(); + throw new \Sabre\DAV\Exception\Forbidden(); } } $fileName = basename($destinationPath); if (!\OCP\Util::isValidFileName($fileName)) { - throw new \Sabre_DAV_Exception_BadRequest(); + throw new \Sabre\DAV\Exception\BadRequest(); } $renameOkay = $this->fileView->rename($sourcePath, $destinationPath); if (!$renameOkay) { - throw new \Sabre_DAV_Exception_Forbidden(''); + throw new \Sabre\DAV\Exception\Forbidden(''); } // update properties $query = \OC_DB::prepare('UPDATE `*PREFIX*properties` SET `propertypath` = ?' . ' WHERE `userid` = ? AND `propertypath` = ?'); - $query->execute(array(\OC\Files\Filesystem::normalizePath($destinationPath), \OC_User::getUser(), \OC\Files\Filesystem::normalizePath($sourcePath))); + $query->execute(array(\OC\Files\Filesystem::normalizePath($destinationPath), \OC_User::getUser(), + \OC\Files\Filesystem::normalizePath($sourcePath))); $this->markDirty($sourceDir); $this->markDirty($destinationDir); @@ -169,12 +170,12 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { * * @param string $source * @param string $destination - * @throws \Sabre_DAV_Exception_ServiceUnavailable + * @throws \Sabre\DAV\Exception\ServiceUnavailable * @return void */ public function copy($source, $destination) { if (!$this->fileView) { - throw new \Sabre_DAV_Exception_ServiceUnavailable('filesystem not setup'); + throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup'); } if ($this->fileView->is_file($source)) { @@ -192,7 +193,7 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { } } - list($destinationDir,) = \Sabre_DAV_URLUtil::splitPath($destination); + list($destinationDir,) = \Sabre\DAV\URLUtil::splitPath($destination); $this->markDirty($destinationDir); } } diff --git a/lib/private/connector/sabre/principal.php b/lib/private/connector/sabre/principal.php index 2075aa55c86..9bad3b9df16 100644 --- a/lib/private/connector/sabre/principal.php +++ b/lib/private/connector/sabre/principal.php @@ -7,7 +7,7 @@ * See the COPYING-README file. */ -class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend { +class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\BackendInterface { /** * Returns a list of principals based on a prefix. * @@ -68,7 +68,7 @@ class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend { // TODO: for now the group principal has only one member, the user itself $principal = $this->getPrincipalByPath($principal); if (!$principal) { - throw new Sabre_DAV_Exception('Principal not found'); + throw new \Sabre\DAV\Exception('Principal not found'); } return array( @@ -83,13 +83,13 @@ class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend { * @return array */ public function getGroupMembership($principal) { - list($prefix, $name) = Sabre_DAV_URLUtil::splitPath($principal); + list($prefix, $name) = \Sabre\DAV\URLUtil::splitPath($principal); $group_membership = array(); if ($prefix == 'principals') { $principal = $this->getPrincipalByPath($principal); if (!$principal) { - throw new Sabre_DAV_Exception('Principal not found'); + throw new \Sabre\DAV\Exception('Principal not found'); } // TODO: for now the user principal has only its own groups @@ -115,7 +115,7 @@ class OC_Connector_Sabre_Principal implements Sabre_DAVACL_IPrincipalBackend { * @return void */ public function setGroupMemberSet($principal, array $members) { - throw new Sabre_DAV_Exception('Setting members of the group is not supported yet'); + throw new \Sabre\DAV\Exception('Setting members of the group is not supported yet'); } function updatePrincipal($path, $mutations) { diff --git a/lib/private/connector/sabre/quotaplugin.php b/lib/private/connector/sabre/quotaplugin.php index c9b8336b57b..cf3c1103f84 100644 --- a/lib/private/connector/sabre/quotaplugin.php +++ b/lib/private/connector/sabre/quotaplugin.php @@ -1,4 +1,5 @@ <?php +use Sabre\DAV\URLUtil; /** * This plugin check user quota and deny creating files when they exceeds the quota. @@ -7,7 +8,7 @@ * @copyright Copyright (C) 2012 entreCables S.L. All rights reserved. * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License */ -class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { +class OC_Connector_Sabre_QuotaPlugin extends \Sabre\DAV\ServerPlugin { /** * @var \OC\Files\View @@ -17,7 +18,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { /** * Reference to main server object * - * @var Sabre_DAV_Server + * @var \Sabre\DAV\Server */ private $server; @@ -31,15 +32,15 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { /** * This initializes the plugin. * - * This function is called by Sabre_DAV_Server, after + * This function is called by \Sabre\DAV\Server, after * addPlugin is called. * * This method should set up the requires event subscriptions. * - * @param Sabre_DAV_Server $server + * @param \Sabre\DAV\Server $server * @return void */ - public function initialize(Sabre_DAV_Server $server) { + public function initialize(\Sabre\DAV\Server $server) { $this->server = $server; @@ -52,7 +53,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { * * @param string $uri * @param null $data - * @throws Sabre_DAV_Exception_InsufficientStorage + * @throws \Sabre\DAV\Exception\InsufficientStorage * @return bool */ public function checkQuota($uri, $data = null) { @@ -61,7 +62,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { if (substr($uri, 0, 1) !== '/') { $uri = '/' . $uri; } - list($parentUri, $newName) = Sabre_DAV_URLUtil::splitPath($uri); + list($parentUri, $newName) = URLUtil::splitPath($uri); $req = $this->server->httpRequest; if ($req->getHeader('OC-Chunked')) { $info = OC_FileChunking::decodeName($newName); @@ -75,7 +76,7 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { if (isset($chunkHandler)) { $chunkHandler->cleanup(); } - throw new Sabre_DAV_Exception_InsufficientStorage(); + throw new \Sabre\DAV\Exception\InsufficientStorage(); } } return true; diff --git a/lib/private/connector/sabre/request.php b/lib/private/connector/sabre/request.php index d70c25c4e70..c98b28c4d74 100644 --- a/lib/private/connector/sabre/request.php +++ b/lib/private/connector/sabre/request.php @@ -21,7 +21,7 @@ * */ -class OC_Connector_Sabre_Request extends Sabre_HTTP_Request { +class OC_Connector_Sabre_Request extends \Sabre\HTTP\Request { /** * Returns the requested uri * diff --git a/lib/private/connector/sabre/server.php b/lib/private/connector/sabre/server.php index cf28b11163f..e4ee5dcefbf 100644 --- a/lib/private/connector/sabre/server.php +++ b/lib/private/connector/sabre/server.php @@ -12,7 +12,7 @@ /** * Class OC_Connector_Sabre_Server * - * This class reimplements some methods from @see Sabre_DAV_Server. + * This class reimplements some methods from @see \Sabre\DAV\Server. * * Basically we add handling of depth: infinity. * @@ -24,16 +24,16 @@ * * For ownCloud 7 we will upgrade SabreDAV and submit the patch - if needed. * - * @see Sabre_DAV_Server + * @see \Sabre\DAV\Server */ -class OC_Connector_Sabre_Server extends Sabre_DAV_Server { +class OC_Connector_Sabre_Server extends Sabre\DAV\Server { /** - * @see Sabre_DAV_Server + * @see \Sabre\DAV\Server */ protected function httpPropfind($uri) { - // $xml = new Sabre_DAV_XMLReader(file_get_contents('php://input')); + // $xml = new \Sabre\DAV\XMLReader(file_get_contents('php://input')); $requestedProperties = $this->parsePropFindRequest($this->httpRequest->getBody(true)); $depth = $this->getHTTPDepth(1); @@ -72,7 +72,7 @@ class OC_Connector_Sabre_Server extends Sabre_DAV_Server { private function addPathNodesRecursively(&$nodes, $path) { foreach($this->tree->getChildren($path) as $childNode) { $nodes[$path . '/' . $childNode->getName()] = $childNode; - if ($childNode instanceof Sabre_DAV_ICollection) + if ($childNode instanceof \Sabre\DAV\ICollection) $this->addPathNodesRecursively($nodes, $path . '/' . $childNode->getName()); } } @@ -89,10 +89,10 @@ class OC_Connector_Sabre_Server extends Sabre_DAV_Server { $nodes = array( $path => $parentNode ); - if ($depth==1 && $parentNode instanceof Sabre_DAV_ICollection) { + if ($depth==1 && $parentNode instanceof \Sabre\DAV\ICollection) { foreach($this->tree->getChildren($path) as $childNode) $nodes[$path . '/' . $childNode->getName()] = $childNode; - } else if ($depth == self::DEPTH_INFINITY && $parentNode instanceof Sabre_DAV_ICollection) { + } else if ($depth == self::DEPTH_INFINITY && $parentNode instanceof \Sabre\DAV\ICollection) { $this->addPathNodesRecursively($nodes, $path); } @@ -140,7 +140,7 @@ class OC_Connector_Sabre_Server extends Sabre_DAV_Server { if (count($currentPropertyNames) > 0) { - if ($node instanceof Sabre_DAV_IProperties) { + if ($node instanceof \Sabre\DAV\IProperties) { $nodeProperties = $node->getProperties($currentPropertyNames); // The getProperties method may give us too much, @@ -165,9 +165,9 @@ class OC_Connector_Sabre_Server extends Sabre_DAV_Server { if (isset($newProperties[200][$prop])) continue; switch($prop) { - case '{DAV:}getlastmodified' : if ($node->getLastModified()) $newProperties[200][$prop] = new Sabre_DAV_Property_GetLastModified($node->getLastModified()); break; + case '{DAV:}getlastmodified' : if ($node->getLastModified()) $newProperties[200][$prop] = new \Sabre\DAV\Property\GetLastModified($node->getLastModified()); break; case '{DAV:}getcontentlength' : - if ($node instanceof Sabre_DAV_IFile) { + if ($node instanceof \Sabre\DAV\IFile) { $size = $node->getSize(); if (!is_null($size)) { $newProperties[200][$prop] = 0 + $size; @@ -175,28 +175,28 @@ class OC_Connector_Sabre_Server extends Sabre_DAV_Server { } break; case '{DAV:}quota-used-bytes' : - if ($node instanceof Sabre_DAV_IQuota) { + if ($node instanceof \Sabre\DAV\IQuota) { $quotaInfo = $node->getQuotaInfo(); $newProperties[200][$prop] = $quotaInfo[0]; } break; case '{DAV:}quota-available-bytes' : - if ($node instanceof Sabre_DAV_IQuota) { + if ($node instanceof \Sabre\DAV\IQuota) { $quotaInfo = $node->getQuotaInfo(); $newProperties[200][$prop] = $quotaInfo[1]; } break; - case '{DAV:}getetag' : if ($node instanceof Sabre_DAV_IFile && $etag = $node->getETag()) $newProperties[200][$prop] = $etag; break; - case '{DAV:}getcontenttype' : if ($node instanceof Sabre_DAV_IFile && $ct = $node->getContentType()) $newProperties[200][$prop] = $ct; break; + case '{DAV:}getetag' : if ($node instanceof \Sabre\DAV\IFile && $etag = $node->getETag()) $newProperties[200][$prop] = $etag; break; + case '{DAV:}getcontenttype' : if ($node instanceof \Sabre\DAV\IFile && $ct = $node->getContentType()) $newProperties[200][$prop] = $ct; break; case '{DAV:}supported-report-set' : $reports = array(); foreach($this->plugins as $plugin) { $reports = array_merge($reports, $plugin->getSupportedReportSet($myPath)); } - $newProperties[200][$prop] = new Sabre_DAV_Property_SupportedReportSet($reports); + $newProperties[200][$prop] = new \Sabre\DAV\Property\SupportedReportSet($reports); break; case '{DAV:}resourcetype' : - $newProperties[200]['{DAV:}resourcetype'] = new Sabre_DAV_Property_ResourceType(); + $newProperties[200]['{DAV:}resourcetype'] = new \Sabre\DAV\Property\ResourceType(); foreach($this->resourceTypeMapping as $className => $resourceType) { if ($node instanceof $className) $newProperties[200]['{DAV:}resourcetype']->add($resourceType); } diff --git a/lib/private/davclient.php b/lib/private/davclient.php index a7bf0486519..6a544d27068 100644 --- a/lib/private/davclient.php +++ b/lib/private/davclient.php @@ -25,7 +25,7 @@ * like request timeout. */ -class OC_DAVClient extends \Sabre_DAV_Client { +class OC_DAVClient extends \Sabre\DAV\Client { protected $requestTimeout; diff --git a/lib/private/db.php b/lib/private/db.php index 422f783c745..82affe293ed 100644 --- a/lib/private/db.php +++ b/lib/private/db.php @@ -322,6 +322,23 @@ class OC_DB { } /** + * simulate the database schema update + * @param string $file file to read structure from + * @throws Exception + * @return string|boolean + */ + public static function simulateUpdateDbFromStructure($file) { + $schemaManager = self::getMDB2SchemaManager(); + try { + $result = $schemaManager->simulateUpdateDbFromStructure($file); + } catch (Exception $e) { + OC_Log::write('core', 'Simulated database structure update failed ('.$e.')', OC_Log::FATAL); + throw $e; + } + return $result; + } + + /** * drop a table - the database prefix will be prepended * @param string $tableName the table to drop */ diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php index 533ed9110e7..734ba18d1ac 100644 --- a/lib/private/db/mdb2schemamanager.php +++ b/lib/private/db/mdb2schemamanager.php @@ -74,28 +74,46 @@ class MDB2SchemaManager { } /** + * Reads database schema from file + * + * @param string $file file to read from + */ + private function readSchemaFromFile($file) { + $platform = $this->conn->getDatabasePlatform(); + $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $platform); + return $schemaReader->loadSchemaFromFile($file); + } + + /** * update the database scheme * @param string $file file to read structure from * @param bool $generateSql only return the sql needed for the upgrade * @return string|boolean */ public function updateDbFromStructure($file, $generateSql = false) { - - $platform = $this->conn->getDatabasePlatform(); - $schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $platform); - $toSchema = $schemaReader->loadSchemaFromFile($file); + $toSchema = $this->readSchemaFromFile($file); $migrator = $this->getMigrator(); if ($generateSql) { return $migrator->generateChangeScript($toSchema); } else { - $migrator->checkMigrate($toSchema); $migrator->migrate($toSchema); return true; } } /** + * update the database scheme + * @param string $file file to read structure from + * @return string|boolean + */ + public function simulateUpdateDbFromStructure($file) { + $toSchema = $this->readSchemaFromFile($file); + $migrator = $this->getMigrator()->checkMigrate($toSchema); + return true; + } + + /** * @param \Doctrine\DBAL\Schema\Schema $schema * @return string */ diff --git a/lib/private/files/cache/backgroundwatcher.php b/lib/private/files/cache/backgroundwatcher.php deleted file mode 100644 index 2194651233d..00000000000 --- a/lib/private/files/cache/backgroundwatcher.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php -/** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace OC\Files\Cache; - -use \OC\Files\Mount; -use \OC\Files\Filesystem; - -class BackgroundWatcher { - static $folderMimetype = null; - - static private function getFolderMimetype() { - if (!is_null(self::$folderMimetype)) { - return self::$folderMimetype; - } - $sql = 'SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?'; - $result = \OC_DB::executeAudited($sql, array('httpd/unix-directory')); - $row = $result->fetchRow(); - return $row['id']; - } - - /** - * @param integer $id - */ - static private function checkUpdate($id) { - $cacheItem = Cache::getById($id); - if (is_null($cacheItem)) { - return; - } - list($storageId, $internalPath) = $cacheItem; - $mounts = Filesystem::getMountByStorageId($storageId); - - if (count($mounts) === 0) { - //if the storage we need isn't mounted on default, try to find a user that has access to the storage - $permissionsCache = new Permissions($storageId); - $users = $permissionsCache->getUsers($id); - if (count($users) === 0) { - return; - } - Filesystem::initMountPoints($users[0]); - $mounts = Filesystem::getMountByStorageId($storageId); - if (count($mounts) === 0) { - return; - } - } - $storage = $mounts[0]->getStorage(); - $watcher = new Watcher($storage); - $watcher->checkUpdate($internalPath); - } - - /** - * get the next fileid in the cache - * - * @param int $previous - * @param bool $folder - * @return int - */ - static private function getNextFileId($previous, $folder) { - if ($folder) { - $stmt = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `fileid` > ? AND `mimetype` = ? ORDER BY `fileid` ASC', 1); - } else { - $stmt = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `fileid` > ? AND `mimetype` != ? ORDER BY `fileid` ASC', 1); - } - $result = \OC_DB::executeAudited($stmt, array($previous,self::getFolderMimetype())); - if ($row = $result->fetchRow()) { - return $row['fileid']; - } else { - return 0; - } - } - - static public function checkNext() { - // check both 1 file and 1 folder, this way new files are detected quicker because there are less folders than files usually - $previousFile = \OC_Appconfig::getValue('files', 'backgroundwatcher_previous_file', 0); - $previousFolder = \OC_Appconfig::getValue('files', 'backgroundwatcher_previous_folder', 0); - $nextFile = self::getNextFileId($previousFile, false); - $nextFolder = self::getNextFileId($previousFolder, true); - \OC_Appconfig::setValue('files', 'backgroundwatcher_previous_file', $nextFile); - \OC_Appconfig::setValue('files', 'backgroundwatcher_previous_folder', $nextFolder); - if ($nextFile > 0) { - self::checkUpdate($nextFile); - } - if ($nextFolder > 0) { - self::checkUpdate($nextFolder); - } - } - - static public function checkAll() { - $previous = 0; - $next = 1; - while ($next != 0) { - $next = self::getNextFileId($previous, true); - self::checkUpdate($next); - } - $previous = 0; - $next = 1; - while ($next != 0) { - $next = self::getNextFileId($previous, false); - self::checkUpdate($next); - } - } -} diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php index 59963f41e3d..bfd280a91a1 100644 --- a/lib/private/files/cache/cache.php +++ b/lib/private/files/cache/cache.php @@ -123,7 +123,7 @@ class Cache { $params = array($file); } $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, - `storage_mtime`, `encrypted`, `unencrypted_size`, `etag` + `storage_mtime`, `encrypted`, `unencrypted_size`, `etag`, `permissions` FROM `*PREFIX*filecache` ' . $where; $result = \OC_DB::executeAudited($sql, $params); $data = $result->fetchRow(); @@ -153,6 +153,7 @@ class Cache { if ($data['storage_mtime'] == 0) { $data['storage_mtime'] = $data['mtime']; } + $data['permissions'] = (int)$data['permissions']; } return $data; @@ -178,7 +179,7 @@ class Cache { public function getFolderContentsById($fileId) { if ($fileId > -1) { $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, - `storage_mtime`, `encrypted`, `unencrypted_size`, `etag` + `storage_mtime`, `encrypted`, `unencrypted_size`, `etag`, `permissions` FROM `*PREFIX*filecache` WHERE `parent` = ? ORDER BY `name` ASC'; $result = \OC_DB::executeAudited($sql,array($fileId)); $files = $result->fetchAll(); @@ -192,6 +193,7 @@ class Cache { $file['encrypted_size'] = $file['size']; $file['size'] = $file['unencrypted_size']; } + $file['permissions'] = (int)$file['permissions']; } return $files; } else { @@ -277,7 +279,9 @@ class Cache { * @return array */ function buildParts(array $data) { - $fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'storage_mtime', 'encrypted', 'unencrypted_size', 'etag'); + $fields = array( + 'path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'storage_mtime', 'encrypted', 'unencrypted_size', + 'etag', 'permissions'); $params = array(); $queryParts = array(); foreach ($data as $name => $value) { @@ -370,9 +374,6 @@ class Cache { $sql = 'DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?'; \OC_DB::executeAudited($sql, array($entry['fileid'])); - - $permissionsCache = new Permissions($this->storageId); - $permissionsCache->remove($entry['fileid']); } /** @@ -457,7 +458,7 @@ class Cache { // normalize pattern $pattern = $this->normalize($pattern); - $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag` + $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`, `permissions` FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `storage` = ?'; $result = \OC_DB::executeAudited($sql, array($pattern, $this->getNumericStorageId())); $files = array(); @@ -481,7 +482,7 @@ class Cache { } else { $where = '`mimepart` = ?'; } - $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag` + $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`, `permissions` FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?'; $mimetype = $this->getMimetypeId($mimetype); $result = \OC_DB::executeAudited($sql, array($mimetype, $this->getNumericStorageId())); diff --git a/lib/private/files/cache/homecache.php b/lib/private/files/cache/homecache.php index f61769f0b9b..06ae62015a5 100644 --- a/lib/private/files/cache/homecache.php +++ b/lib/private/files/cache/homecache.php @@ -17,7 +17,7 @@ class HomeCache extends Cache { * @return int */ public function calculateFolderSize($path, $entry = null) { - if ($path !== '/' and $path !== '' and $path !== 'files' and $path !== 'files_trashbin') { + if ($path !== '/' and $path !== '' and $path !== 'files' and $path !== 'files_trashbin' and $path !== 'files_versions') { return parent::calculateFolderSize($path, $entry); } elseif ($path === '' or $path === '/') { // since the size of / isn't used (the size of /files is used instead) there is no use in calculating it diff --git a/lib/private/files/cache/permissions.php b/lib/private/files/cache/permissions.php deleted file mode 100644 index a2a614ca0b1..00000000000 --- a/lib/private/files/cache/permissions.php +++ /dev/null @@ -1,170 +0,0 @@ -<?php -/** - * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace OC\Files\Cache; - -class Permissions { - /** - * @var string $storageId - */ - private $storageId; - - /** - * @var \OC\Files\Storage\Storage $storage - */ - protected $storage; - - /** - * @param \OC\Files\Storage\Storage|string $storage - */ - public function __construct($storage) { - if ($storage instanceof \OC\Files\Storage\Storage) { - $this->storageId = $storage->getId(); - $this->storage = $storage; - } else { - $this->storageId = $storage; - $mountManager = \OC\Files\Filesystem::getMountManager(); - $mount = $mountManager->findByStorageId($this->storageId); - $firstMountPoint = reset($mount); - if ($firstMountPoint instanceof \OC\Files\Storage\Storage) { - $storage = $firstMountPoint->getStorage(); - $this->storage = $storage; - } - } - - } - - /** - * get the permissions for a single file - * - * @param int $fileId - * @param string $user - * @return int (-1 if file no permissions set) - */ - public function get($fileId, $user) { - $sql = 'SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?'; - $result = \OC_DB::executeAudited($sql, array($user, $fileId)); - if ($row = $result->fetchRow()) { - return $this->updatePermissions($row['permissions']); - } else { - return -1; - } - } - - /** - * set the permissions of a file - * - * @param int $fileId - * @param string $user - * @param int $permissions - */ - public function set($fileId, $user, $permissions) { - if (self::get($fileId, $user) !== -1) { - $sql = 'UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?'; - } else { - $sql = 'INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )'; - } - \OC_DB::executeAudited($sql, array($permissions, $user, $fileId)); - } - - /** - * get the permissions of multiply files - * - * @param int[] $fileIds - * @param string $user - * @return int[] - */ - public function getMultiple($fileIds, $user) { - if (count($fileIds) === 0) { - return array(); - } - $params = $fileIds; - $params[] = $user; - $inPart = implode(', ', array_fill(0, count($fileIds), '?')); - - $sql = 'SELECT `fileid`, `permissions` FROM `*PREFIX*permissions`' - . ' WHERE `fileid` IN (' . $inPart . ') AND `user` = ?'; - $result = \OC_DB::executeAudited($sql, $params); - $filePermissions = array(); - while ($row = $result->fetchRow()) { - $filePermissions[$row['fileid']] = $this->updatePermissions($row['permissions']); - } - return $filePermissions; - } - - /** - * get the permissions for all files in a folder - * - * @param int $parentId - * @param string $user - * @return int[] - */ - public function getDirectoryPermissions($parentId, $user) { - $sql = 'SELECT `*PREFIX*permissions`.`fileid`, `permissions` - FROM `*PREFIX*permissions` - INNER JOIN `*PREFIX*filecache` ON `*PREFIX*permissions`.`fileid` = `*PREFIX*filecache`.`fileid` - WHERE `*PREFIX*filecache`.`parent` = ? AND `*PREFIX*permissions`.`user` = ?'; - - $result = \OC_DB::executeAudited($sql, array($parentId, $user)); - $filePermissions = array(); - while ($row = $result->fetchRow()) { - $filePermissions[$row['fileid']] = $this->updatePermissions($row['permissions']); - } - return $filePermissions; - } - - /** - * remove the permissions for a file - * - * @param int $fileId - * @param string $user - */ - public function remove($fileId, $user = null) { - if (is_null($user)) { - \OC_DB::executeAudited('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ?', array($fileId)); - } else { - $sql = 'DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?'; - \OC_DB::executeAudited($sql, array($fileId, $user)); - } - } - - public function removeMultiple($fileIds, $user) { - $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?'); - foreach ($fileIds as $fileId) { - \OC_DB::executeAudited($query, array($fileId, $user)); - } - } - - /** - * get the list of users which have permissions stored for a file - * - * @param int $fileId - */ - public function getUsers($fileId) { - $sql = 'SELECT `user` FROM `*PREFIX*permissions` WHERE `fileid` = ?'; - $result = \OC_DB::executeAudited($sql, array($fileId)); - $users = array(); - while ($row = $result->fetchRow()) { - $users[] = $row['user']; - } - return $users; - } - - /** - * check if admin removed the share permission for the user and update the permissions - * - * @param int $permissions - * @return int - */ - protected function updatePermissions($permissions) { - if (\OCP\Util::isSharingDisabledForUser()) { - $permissions &= ~\OCP\PERMISSION_SHARE; - } - return $permissions; - } -} diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php index 6cb9807f5a7..0c59e57d839 100644 --- a/lib/private/files/cache/scanner.php +++ b/lib/private/files/cache/scanner.php @@ -40,11 +40,6 @@ class Scanner extends BasicEmitter { protected $cache; /** - * @var \OC\Files\Cache\Permissions $permissionsCache - */ - protected $permissionsCache; - - /** * @var boolean $cacheActive If true, perform cache operations, if false, do not affect cache */ protected $cacheActive; @@ -59,7 +54,6 @@ class Scanner extends BasicEmitter { $this->storage = $storage; $this->storageId = $this->storage->getId(); $this->cache = $storage->getCache(); - $this->permissionsCache = $storage->getPermissionsCache(); $this->cacheActive = !Config::getSystemValue('filesystem_cache_readonly', false); } @@ -86,6 +80,7 @@ class Scanner extends BasicEmitter { } $data['etag'] = $this->storage->getETag($path); $data['storage_mtime'] = $data['mtime']; + $data['permissions'] = $this->storage->getPermissions($path); return $data; } @@ -117,9 +112,6 @@ class Scanner extends BasicEmitter { $newData = $data; $cacheData = $this->cache->get($file); if ($cacheData) { - if (isset($cacheData['fileid'])) { - $this->permissionsCache->remove($cacheData['fileid']); - } if ($reuseExisting) { // prevent empty etag if (empty($cacheData['etag'])) { diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php index 1af34fc2be6..3e23f5c2c94 100644 --- a/lib/private/files/node/folder.php +++ b/lib/private/files/node/folder.php @@ -71,13 +71,11 @@ class Folder extends Node implements \OCP\Files\Folder { list($storage, $internalPath) = $this->view->resolvePath($this->path); if ($storage) { $cache = $storage->getCache($internalPath); - $permissionsCache = $storage->getPermissionsCache($internalPath); //trigger cache update check $this->view->getFileInfo($this->path); $files = $cache->getFolderContents($internalPath); - $permissions = $permissionsCache->getDirectoryPermissions($this->getId(), $this->root->getUser()->getUID()); } else { $files = array(); } @@ -129,9 +127,6 @@ class Folder extends Node implements \OCP\Files\Folder { foreach ($files as $file) { if ($file) { - if (isset($permissions[$file['fileid']])) { - $file['permissions'] = $permissions[$file['fileid']]; - } $node = $this->createNode($this->path . '/' . $file['name'], $file); $result[] = $node; } diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index 6b11603323a..4d5a2078ef7 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -301,13 +301,6 @@ abstract class Common implements \OC\Files\Storage\Storage { return $this->scanner; } - public function getPermissionsCache($path = '') { - if (!isset($this->permissioncache)) { - $this->permissioncache = new \OC\Files\Cache\Permissions($this); - } - return $this->permissioncache; - } - public function getWatcher($path = '') { if (!isset($this->watcher)) { $this->watcher = new \OC\Files\Cache\Watcher($this); diff --git a/lib/private/files/storage/storage.php b/lib/private/files/storage/storage.php index 5be90f24756..f085a0590b4 100644 --- a/lib/private/files/storage/storage.php +++ b/lib/private/files/storage/storage.php @@ -41,14 +41,6 @@ interface Storage extends \OCP\Files\Storage { public function getOwner($path); /** - * get a permissions cache instance for the cache - * - * @param string $path - * @return \OC\Files\Cache\Permissions - */ - public function getPermissionsCache($path = ''); - - /** * get a watcher instance for the cache * * @param string $path diff --git a/lib/private/files/storage/wrapper/wrapper.php b/lib/private/files/storage/wrapper/wrapper.php index 364475a68e0..057c31c3cd8 100644 --- a/lib/private/files/storage/wrapper/wrapper.php +++ b/lib/private/files/storage/wrapper/wrapper.php @@ -389,16 +389,6 @@ class Wrapper implements \OC\Files\Storage\Storage { } /** - * get a permissions cache instance for the cache - * - * @param string $path - * @return \OC\Files\Cache\Permissions - */ - public function getPermissionsCache($path = '') { - return $this->storage->getPermissionsCache($path); - } - - /** * get a watcher instance for the cache * * @param string $path diff --git a/lib/private/files/view.php b/lib/private/files/view.php index 0b8d336f260..71c4980db2d 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -826,8 +826,6 @@ class View { $data = null; if ($storage) { $cache = $storage->getCache($internalPath); - $permissionsCache = $storage->getPermissionsCache($internalPath); - $user = \OC_User::getUser(); if (!$cache->inCache($internalPath)) { if (!$storage->file_exists($internalPath)) { @@ -857,13 +855,6 @@ class View { } } } - - $permissions = $permissionsCache->get($data['fileid'], $user); - if ($permissions === -1) { - $permissions = $storage->getPermissions($internalPath); - $permissionsCache->set($data['fileid'], $user, $permissions); - } - $data['permissions'] = $permissions; } } if (!$data) { @@ -896,7 +887,6 @@ class View { list($storage, $internalPath) = Filesystem::resolvePath($path); if ($storage) { $cache = $storage->getCache($internalPath); - $permissionsCache = $storage->getPermissionsCache($internalPath); $user = \OC_User::getUser(); if ($cache->getStatus($internalPath) < Cache\Cache::COMPLETE) { @@ -913,7 +903,6 @@ class View { foreach ($contents as $content) { $files[] = new FileInfo($path . '/' . $content['name'], $storage, $content['path'], $content); } - $permissions = $permissionsCache->getDirectoryPermissions($folderId, $user); $ids = array(); foreach ($files as $i => $file) { @@ -922,7 +911,6 @@ class View { if (!isset($permissions[$file['fileid']])) { $permissions[$file['fileid']] = $storage->getPermissions($file['path']); - $permissionsCache->set($file['fileid'], $user, $permissions[$file['fileid']]); } $files[$i]['permissions'] = $permissions[$file['fileid']]; } @@ -954,12 +942,7 @@ class View { } else { //mountpoint in this folder, add an entry for it $rootEntry['name'] = $relativePath; $rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file'; - $subPermissionsCache = $subStorage->getPermissionsCache(''); - $permissions = $subPermissionsCache->get($rootEntry['fileid'], $user); - if ($permissions === -1) { - $permissions = $subStorage->getPermissions($rootEntry['path']); - $subPermissionsCache->set($rootEntry['fileid'], $user, $permissions); - } + $permissions = $rootEntry['permissions']; // do not allow renaming/deleting the mount point if they are not shared files/folders // for shared files/folders we use the permissions given by the owner if ($subStorage instanceof \OC\Files\Storage\Shared) { diff --git a/lib/private/request.php b/lib/private/request.php index 09928021a7f..619eae3e9b5 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -184,7 +184,7 @@ class OC_Request { $path_info = $_SERVER['PATH_INFO']; }else{ $path_info = self::getRawPathInfo(); - // following is taken from Sabre_DAV_URLUtil::decodePathSegment + // following is taken from \Sabre\DAV\URLUtil::decodePathSegment $path_info = rawurldecode($path_info); $encoding = mb_detect_encoding($path_info, array('UTF-8', 'ISO-8859-1')); @@ -220,7 +220,7 @@ class OC_Request { $path_info = $requestUri; // strip off the script name's dir and file name - list($path, $name) = \Sabre_DAV_URLUtil::splitPath($scriptName); + list($path, $name) = \Sabre\DAV\URLUtil::splitPath($scriptName); if (!empty($path)) { if( $path === $path_info || strpos($path_info, $path.'/') === 0) { $path_info = substr($path_info, strlen($path)); diff --git a/lib/private/share/share.php b/lib/private/share/share.php index 46796c26370..189be2363ea 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -1744,10 +1744,10 @@ class Share extends \OC\Share\Constants { if (isset($uidOwner)) { if ($fileDependent) { $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `*PREFIX*share`.`parent`,' - . ' `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`,' + . ' `share_type`, `share_with`, `file_source`, `path`, `*PREFIX*share`.`permissions`, `stime`,' . ' `expiration`, `token`, `storage`, `mail_send`, `uid_owner`'; } else { - $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`,' + $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `*PREFIX*share`.`permissions`,' . ' `stime`, `file_source`, `expiration`, `token`, `mail_send`, `uid_owner`'; } } else { @@ -1755,12 +1755,12 @@ class Share extends \OC\Share\Constants { if ($format == \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT) { $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `*PREFIX*share`.`parent`, `uid_owner`, ' . '`share_type`, `share_with`, `file_source`, `path`, `file_target`, `stime`, ' - . '`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, ' + . '`*PREFIX*share`.`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, ' . '`name`, `mtime`, `mimetype`, `mimepart`, `size`, `unencrypted_size`, `encrypted`, `etag`, `mail_send`'; } else { $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, - `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`, `storage`, `mail_send`'; + `file_source`, `path`, `file_target`, `*PREFIX*share`.`permissions`, `stime`, `expiration`, `token`, `storage`, `mail_send`'; } } } diff --git a/lib/private/updater.php b/lib/private/updater.php index 58d3cab73aa..106970c4121 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -125,29 +125,63 @@ class Updater extends BasicEmitter { * STOP CONFIG CHANGES FOR OLDER VERSIONS */ + $canUpgrade = false; + // simulate DB upgrade try { - \OC_DB::updateDbFromStructure(\OC::$SERVERROOT . '/db_structure.xml'); - $this->emit('\OC\Updater', 'dbUpgrade'); - + // simulate core DB upgrade + \OC_DB::simulateUpdateDbFromStructure(\OC::$SERVERROOT . '/db_structure.xml'); + + // simulate apps DB upgrade + $version = \OC_Util::getVersion(); + $apps = \OC_App::getEnabledApps(); + foreach ($apps as $appId) { + $info = \OC_App::getAppInfo($appId); + if (\OC_App::isAppCompatible($version, $info) && \OC_App::shouldUpgrade($appId)) { + if (file_exists(\OC_App::getAppPath($appId) . '/appinfo/database.xml')) { + \OC_DB::simulateUpdateDbFromStructure(\OC_App::getAppPath($appId) . '/appinfo/database.xml'); + } + } + } + + $this->emit('\OC\Updater', 'dbSimulateUpgrade'); + + $canUpgrade = true; } catch (\Exception $exception) { $this->emit('\OC\Updater', 'failure', array($exception->getMessage())); } - \OC_Config::setValue('version', implode('.', \OC_Util::getVersion())); - $disabledApps = \OC_App::checkAppsRequirements(); - if (!empty($disabledApps)) { - $this->emit('\OC\Updater', 'disabledApps', array($disabledApps)); - } - // load all apps to also upgrade enabled apps - \OC_App::loadApps(); - $repair = new Repair(); - $repair->run(); + if ($canUpgrade) { + // proceed with real upgrade + try { + // do the real upgrade + \OC_DB::updateDbFromStructure(\OC::$SERVERROOT . '/db_structure.xml'); + $this->emit('\OC\Updater', 'dbUpgrade'); + + } catch (\Exception $exception) { + $this->emit('\OC\Updater', 'failure', array($exception->getMessage())); + return false; + } + // TODO: why not do this at the end ? + \OC_Config::setValue('version', implode('.', \OC_Util::getVersion())); + $disabledApps = \OC_App::checkAppsRequirements(); + if (!empty($disabledApps)) { + $this->emit('\OC\Updater', 'disabledApps', array($disabledApps)); + } + // load all apps to also upgrade enabled apps + \OC_App::loadApps(); + + $repair = new Repair(); + $repair->run(); + + //Invalidate update feed + \OC_Appconfig::setValue('core', 'lastupdatedat', 0); + } - //Invalidate update feed - \OC_Appconfig::setValue('core', 'lastupdatedat', 0); \OC_Config::setValue('maintenance', false); $this->emit('\OC\Updater', 'maintenanceEnd'); + + return $canUpgrade; } } diff --git a/lib/private/util.php b/lib/private/util.php index da67dbcee54..905f8d72cf4 100755 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -983,7 +983,7 @@ class OC_Util { try { // test PROPFIND $client->propfind('', array('{DAV:}resourcetype')); - } catch (\Sabre_DAV_Exception_NotAuthenticated $e) { + } catch (\Sabre\DAV\Exception\NotAuthenticated $e) { $return = true; } catch (\Exception $e) { OC_Log::write('core', 'isWebDAVWorking: NO - Reason: '.$e->getMessage(). ' ('.get_class($e).')', OC_Log::WARN); |