diff options
author | Björn Schießle <bjoern@schiessle.org> | 2013-10-07 02:07:11 -0700 |
---|---|---|
committer | Björn Schießle <bjoern@schiessle.org> | 2013-10-07 02:07:11 -0700 |
commit | 981608cf6b82daf6f8610ad0b5db319f663a02a7 (patch) | |
tree | b3d5514e27eab05c99a065746cec8e6583ee6f69 /apps | |
parent | 46fdb449a4eb87fe7ab2b0c2c96b61f52c37a150 (diff) | |
parent | 288f01bf6262d825527d71ba262bcaa5d082268d (diff) | |
download | nextcloud-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.php | 22 | ||||
-rw-r--r-- | apps/files_sharing/appinfo/version | 2 | ||||
-rw-r--r-- | apps/files_sharing/lib/updater.php | 19 |
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 */ |