aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBjörn Schießle <bjoern@schiessle.org>2013-10-07 02:07:11 -0700
committerBjörn Schießle <bjoern@schiessle.org>2013-10-07 02:07:11 -0700
commit981608cf6b82daf6f8610ad0b5db319f663a02a7 (patch)
treeb3d5514e27eab05c99a065746cec8e6583ee6f69 /apps
parent46fdb449a4eb87fe7ab2b0c2c96b61f52c37a150 (diff)
parent288f01bf6262d825527d71ba262bcaa5d082268d (diff)
downloadnextcloud-server-981608cf6b82daf6f8610ad0b5db319f663a02a7.tar.gz
nextcloud-server-981608cf6b82daf6f8610ad0b5db319f663a02a7.zip
Merge pull request #5129 from owncloud/remove_deleted_shares_from_db
remove deleted files from oc_share
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/appinfo/update.php22
-rw-r--r--apps/files_sharing/appinfo/version2
-rw-r--r--apps/files_sharing/lib/updater.php19
3 files changed, 36 insertions, 7 deletions
diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php
index 48e41e93048..bc33dd40437 100644
--- a/apps/files_sharing/appinfo/update.php
+++ b/apps/files_sharing/appinfo/update.php
@@ -68,11 +68,21 @@ if (version_compare($installedVersion, '0.3', '<')) {
// $query = OCP\DB::prepare('DROP TABLE `*PREFIX*sharing`');
// $query->execute();
}
-if (version_compare($installedVersion, '0.3.3', '<')) {
- OC_User::useBackend(new OC_User_Database());
- OC_App::loadApps(array('authentication'));
- $users = OC_User::getUsers();
- foreach ($users as $user) {
-// OC_FileCache::delete('Shared', '/'.$user.'/files/');
+
+// clean up oc_share table from files which are no longer exists
+if (version_compare($installedVersion, '0.3.4', '<')) {
+
+ // get all shares where the original file no longer exists
+ $findShares = \OC_DB::prepare('SELECT `file_source` FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` WHERE `*PREFIX*filecache`.`fileid` IS NULL');
+ $sharesFound = $findShares->execute(array())->fetchAll();
+
+ // delete those shares from the oc_share table
+ if (is_array($sharesFound) && !empty($sharesFound)) {
+ $delArray = array();
+ foreach ($sharesFound as $share) {
+ $delArray[] = $share['file_source'];
+ }
+ $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `file_source` IN (?)');
+ $result = $removeShares->execute(array(implode(',', $delArray)));
}
}
diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version
index 87a0871112f..448a0fa11cd 100644
--- a/apps/files_sharing/appinfo/version
+++ b/apps/files_sharing/appinfo/version
@@ -1 +1 @@
-0.3.3 \ No newline at end of file
+0.3.4 \ No newline at end of file
diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index a43ab2e2a0a..08aaa62e252 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -58,6 +58,23 @@ class Shared_Updater {
}
/**
+ * @brief remove all shares for a given file if the file was deleted
+ *
+ * @param string $path
+ */
+ private static function removeShare($path) {
+ $fileInfo = \OC\Files\Filesystem::getFileInfo($path);
+ $fileSource = $fileInfo['fileid'];
+
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `file_source`=?');
+ try {
+ \OC_DB::executeAudited($query, array($fileSource));
+ } catch (\Exception $e) {
+ \OCP\Util::writeLog('files_sharing', "can't remove share: " . $e->getMessage(), \OCP\Util::WARN);
+ }
+ }
+
+ /**
* @param array $params
*/
static public function writeHook($params) {
@@ -77,8 +94,10 @@ class Shared_Updater {
*/
static public function deleteHook($params) {
self::correctFolders($params['path']);
+ self::removeShare($params['path']);
}
+
/**
* @param array $params
*/