浏览代码

Merge pull request #23936 from nextcloud/bugfix/noid/trashbin-ocdb

Use query builder instead of OC_DB in trashbin
tags/v21.0.0beta1
John Molakvoæ 3 年前
父节点
当前提交
e90e499c8b
没有帐户链接到提交者的电子邮件
共有 1 个文件被更改,包括 56 次插入21 次删除
  1. 56
    21
      apps/files_trashbin/lib/Trashbin.php

+ 56
- 21
apps/files_trashbin/lib/Trashbin.php 查看文件

@@ -128,17 +128,20 @@ class Trashbin {
* @return array (filename => array (timestamp => original location))
*/
public static function getLocations($user) {
$query = \OC_DB::prepare('SELECT `id`, `timestamp`, `location`'
. ' FROM `*PREFIX*files_trash` WHERE `user`=?');
$result = $query->execute([$user]);
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->select('id', 'timestamp', 'location')
->from('files_trash')
->where($query->expr()->eq('user', $query->createNamedParameter($user)));
$result = $query->execute();
$array = [];
while ($row = $result->fetchRow()) {
while ($row = $result->fetch()) {
if (isset($array[$row['id']])) {
$array[$row['id']][$row['timestamp']] = $row['location'];
} else {
$array[$row['id']] = [$row['timestamp'] => $row['location']];
}
}
$result->closeCursor();
return $array;
}

@@ -151,11 +154,19 @@ class Trashbin {
* @return string original location
*/
public static function getLocation($user, $filename, $timestamp) {
$query = \OC_DB::prepare('SELECT `location` FROM `*PREFIX*files_trash`'
. ' WHERE `user`=? AND `id`=? AND `timestamp`=?');
$result = $query->execute([$user, $filename, $timestamp])->fetchAll();
if (isset($result[0]['location'])) {
return $result[0]['location'];
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->select('location')
->from('files_trash')
->where($query->expr()->eq('user', $query->createNamedParameter($user)))
->andWhere($query->expr()->eq('id', $query->createNamedParameter($filename)))
->andWhere($query->expr()->eq('timestamp', $query->createNamedParameter($timestamp)));

$result = $query->execute();
$row = $result->fetch();
$result->closeCursor();

if (isset($row['location'])) {
return $row['location'];
} else {
return false;
}
@@ -208,8 +219,13 @@ class Trashbin {


if ($view->file_exists($target)) {
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`user`) VALUES (?,?,?,?)");
$result = $query->execute([$targetFilename, $timestamp, $targetLocation, $user]);
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->insert('files_trash')
->setValue('id', $query->createNamedParameter($targetFilename))
->setValue('timestamp', $query->createNamedParameter($timestamp))
->setValue('location', $query->createNamedParameter($targetLocation))
->setValue('user', $query->createNamedParameter($user));
$result = $query->execute();
if (!$result) {
\OC::$server->getLogger()->error('trash bin database couldn\'t be updated for the files owner', ['app' => 'files_trashbin']);
}
@@ -330,8 +346,13 @@ class Trashbin {
}

if ($moveSuccessful) {
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`user`) VALUES (?,?,?,?)");
$result = $query->execute([$filename, $timestamp, $location, $owner]);
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->insert('files_trash')
->setValue('id', $query->createNamedParameter($filename))
->setValue('timestamp', $query->createNamedParameter($timestamp))
->setValue('location', $query->createNamedParameter($location))
->setValue('user', $query->createNamedParameter($owner));
$result = $query->execute();
if (!$result) {
\OC::$server->getLogger()->error('trash bin database couldn\'t be updated', ['app' => 'files_trashbin']);
}
@@ -489,8 +510,12 @@ class Trashbin {
self::restoreVersions($view, $file, $filename, $uniqueFilename, $location, $timestamp);

if ($timestamp) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=? AND `id`=? AND `timestamp`=?');
$query->execute([$user, $filename, $timestamp]);
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->delete('files_trash')
->where($query->expr()->eq('user', $query->createNamedParameter($user)))
->andWhere($query->expr()->eq('id', $query->createNamedParameter($filename)))
->andWhere($query->expr()->eq('timestamp', $query->createNamedParameter($timestamp)));
$query->execute();
}

return true;
@@ -576,8 +601,11 @@ class Trashbin {

// actual file deletion
$trash->delete();
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=?');
$query->execute([$user]);

$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->delete('files_trash')
->where($query->expr()->eq('user', $query->createNamedParameter($user)));
$query->execute();

// Bulk PostDelete-Hook
\OC_Hook::emit('\OCP\Trashbin', 'deleteAll', ['paths' => $filePaths]);
@@ -626,8 +654,13 @@ class Trashbin {
$size = 0;

if ($timestamp) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=? AND `id`=? AND `timestamp`=?');
$query->execute([$user, $filename, $timestamp]);
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->delete('files_trash')
->where($query->expr()->eq('user', $query->createNamedParameter($user)))
->andWhere($query->expr()->eq('id', $query->createNamedParameter($filename)))
->andWhere($query->expr()->eq('timestamp', $query->createNamedParameter($timestamp)));
$query->execute();

$file = $filename . '.d' . $timestamp;
} else {
$file = $filename;
@@ -709,8 +742,10 @@ class Trashbin {
* @return bool result of db delete operation
*/
public static function deleteUser($uid) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=?');
return $query->execute([$uid]);
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query->delete('files_trash')
->where($query->expr()->eq('user', $query->createNamedParameter($uid)));
return (bool) $query->execute();
}

/**

正在加载...
取消
保存