@@ -58,7 +58,7 @@ |
||
58 | 58 | } |
59 | 59 | |
60 | 60 | public function getId() { |
61 | - return (int)$this->data['fileid']; |
|
61 | + return (int) $this->data['fileid']; |
|
62 | 62 | } |
63 | 63 | |
64 | 64 | public function getStorageId() { |
@@ -28,100 +28,100 @@ |
||
28 | 28 | * meta data for a file or folder |
29 | 29 | */ |
30 | 30 | class CacheEntry implements ICacheEntry { |
31 | - /** |
|
32 | - * @var array |
|
33 | - */ |
|
34 | - private $data; |
|
31 | + /** |
|
32 | + * @var array |
|
33 | + */ |
|
34 | + private $data; |
|
35 | 35 | |
36 | - public function __construct(array $data) { |
|
37 | - $this->data = $data; |
|
38 | - } |
|
36 | + public function __construct(array $data) { |
|
37 | + $this->data = $data; |
|
38 | + } |
|
39 | 39 | |
40 | - public function offsetSet($offset, $value) { |
|
41 | - $this->data[$offset] = $value; |
|
42 | - } |
|
40 | + public function offsetSet($offset, $value) { |
|
41 | + $this->data[$offset] = $value; |
|
42 | + } |
|
43 | 43 | |
44 | - public function offsetExists($offset) { |
|
45 | - return isset($this->data[$offset]); |
|
46 | - } |
|
44 | + public function offsetExists($offset) { |
|
45 | + return isset($this->data[$offset]); |
|
46 | + } |
|
47 | 47 | |
48 | - public function offsetUnset($offset) { |
|
49 | - unset($this->data[$offset]); |
|
50 | - } |
|
48 | + public function offsetUnset($offset) { |
|
49 | + unset($this->data[$offset]); |
|
50 | + } |
|
51 | 51 | |
52 | - public function offsetGet($offset) { |
|
53 | - if (isset($this->data[$offset])) { |
|
54 | - return $this->data[$offset]; |
|
55 | - } else { |
|
56 | - return null; |
|
57 | - } |
|
58 | - } |
|
52 | + public function offsetGet($offset) { |
|
53 | + if (isset($this->data[$offset])) { |
|
54 | + return $this->data[$offset]; |
|
55 | + } else { |
|
56 | + return null; |
|
57 | + } |
|
58 | + } |
|
59 | 59 | |
60 | - public function getId() { |
|
61 | - return (int)$this->data['fileid']; |
|
62 | - } |
|
60 | + public function getId() { |
|
61 | + return (int)$this->data['fileid']; |
|
62 | + } |
|
63 | 63 | |
64 | - public function getStorageId() { |
|
65 | - return $this->data['storage']; |
|
66 | - } |
|
64 | + public function getStorageId() { |
|
65 | + return $this->data['storage']; |
|
66 | + } |
|
67 | 67 | |
68 | 68 | |
69 | - public function getPath() { |
|
70 | - return $this->data['path']; |
|
71 | - } |
|
69 | + public function getPath() { |
|
70 | + return $this->data['path']; |
|
71 | + } |
|
72 | 72 | |
73 | 73 | |
74 | - public function getName() { |
|
75 | - return $this->data['name']; |
|
76 | - } |
|
74 | + public function getName() { |
|
75 | + return $this->data['name']; |
|
76 | + } |
|
77 | 77 | |
78 | 78 | |
79 | - public function getMimeType() { |
|
80 | - return $this->data['mimetype']; |
|
81 | - } |
|
79 | + public function getMimeType() { |
|
80 | + return $this->data['mimetype']; |
|
81 | + } |
|
82 | 82 | |
83 | 83 | |
84 | - public function getMimePart() { |
|
85 | - return $this->data['mimepart']; |
|
86 | - } |
|
84 | + public function getMimePart() { |
|
85 | + return $this->data['mimepart']; |
|
86 | + } |
|
87 | 87 | |
88 | - public function getSize() { |
|
89 | - return $this->data['size']; |
|
90 | - } |
|
88 | + public function getSize() { |
|
89 | + return $this->data['size']; |
|
90 | + } |
|
91 | 91 | |
92 | - public function getMTime() { |
|
93 | - return $this->data['mtime']; |
|
94 | - } |
|
92 | + public function getMTime() { |
|
93 | + return $this->data['mtime']; |
|
94 | + } |
|
95 | 95 | |
96 | - public function getStorageMTime() { |
|
97 | - return $this->data['storage_mtime']; |
|
98 | - } |
|
96 | + public function getStorageMTime() { |
|
97 | + return $this->data['storage_mtime']; |
|
98 | + } |
|
99 | 99 | |
100 | - public function getEtag() { |
|
101 | - return $this->data['etag']; |
|
102 | - } |
|
100 | + public function getEtag() { |
|
101 | + return $this->data['etag']; |
|
102 | + } |
|
103 | 103 | |
104 | - public function getPermissions() { |
|
105 | - return $this->data['permissions']; |
|
106 | - } |
|
104 | + public function getPermissions() { |
|
105 | + return $this->data['permissions']; |
|
106 | + } |
|
107 | 107 | |
108 | - public function isEncrypted() { |
|
109 | - return isset($this->data['encrypted']) && $this->data['encrypted']; |
|
110 | - } |
|
108 | + public function isEncrypted() { |
|
109 | + return isset($this->data['encrypted']) && $this->data['encrypted']; |
|
110 | + } |
|
111 | 111 | |
112 | - public function getMetadataEtag(): ?string { |
|
113 | - return $this->data['metadata_etag']; |
|
114 | - } |
|
112 | + public function getMetadataEtag(): ?string { |
|
113 | + return $this->data['metadata_etag']; |
|
114 | + } |
|
115 | 115 | |
116 | - public function getCreationTime(): ?int { |
|
117 | - return $this->data['creation_time']; |
|
118 | - } |
|
116 | + public function getCreationTime(): ?int { |
|
117 | + return $this->data['creation_time']; |
|
118 | + } |
|
119 | 119 | |
120 | - public function getUploadTime(): ?int { |
|
121 | - return $this->data['upload_time']; |
|
122 | - } |
|
120 | + public function getUploadTime(): ?int { |
|
121 | + return $this->data['upload_time']; |
|
122 | + } |
|
123 | 123 | |
124 | - public function getData() { |
|
125 | - return $this->data; |
|
126 | - } |
|
124 | + public function getData() { |
|
125 | + return $this->data; |
|
126 | + } |
|
127 | 127 | } |
@@ -67,7 +67,7 @@ |
||
67 | 67 | if ($sourceEntry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE) { |
68 | 68 | $folderContent = $sourceCache->getFolderContentsById($sourceEntry->getId()); |
69 | 69 | foreach ($folderContent as $subEntry) { |
70 | - $subTargetPath = $targetPath . '/' . $subEntry->getName(); |
|
70 | + $subTargetPath = $targetPath.'/'.$subEntry->getName(); |
|
71 | 71 | $this->copyFromCache($sourceCache, $subEntry, $subTargetPath); |
72 | 72 | } |
73 | 73 | } |
@@ -29,63 +29,63 @@ |
||
29 | 29 | * Fallback implementation for moveFromCache |
30 | 30 | */ |
31 | 31 | trait MoveFromCacheTrait { |
32 | - /** |
|
33 | - * store meta data for a file or folder |
|
34 | - * |
|
35 | - * @param string $file |
|
36 | - * @param array $data |
|
37 | - * |
|
38 | - * @return int file id |
|
39 | - * @throws \RuntimeException |
|
40 | - */ |
|
41 | - abstract public function put($file, array $data); |
|
32 | + /** |
|
33 | + * store meta data for a file or folder |
|
34 | + * |
|
35 | + * @param string $file |
|
36 | + * @param array $data |
|
37 | + * |
|
38 | + * @return int file id |
|
39 | + * @throws \RuntimeException |
|
40 | + */ |
|
41 | + abstract public function put($file, array $data); |
|
42 | 42 | |
43 | - /** |
|
44 | - * Move a file or folder in the cache |
|
45 | - * |
|
46 | - * @param \OCP\Files\Cache\ICache $sourceCache |
|
47 | - * @param string $sourcePath |
|
48 | - * @param string $targetPath |
|
49 | - */ |
|
50 | - public function moveFromCache(ICache $sourceCache, $sourcePath, $targetPath) { |
|
51 | - $sourceEntry = $sourceCache->get($sourcePath); |
|
43 | + /** |
|
44 | + * Move a file or folder in the cache |
|
45 | + * |
|
46 | + * @param \OCP\Files\Cache\ICache $sourceCache |
|
47 | + * @param string $sourcePath |
|
48 | + * @param string $targetPath |
|
49 | + */ |
|
50 | + public function moveFromCache(ICache $sourceCache, $sourcePath, $targetPath) { |
|
51 | + $sourceEntry = $sourceCache->get($sourcePath); |
|
52 | 52 | |
53 | - $this->copyFromCache($sourceCache, $sourceEntry, $targetPath); |
|
53 | + $this->copyFromCache($sourceCache, $sourceEntry, $targetPath); |
|
54 | 54 | |
55 | - $sourceCache->remove($sourcePath); |
|
56 | - } |
|
55 | + $sourceCache->remove($sourcePath); |
|
56 | + } |
|
57 | 57 | |
58 | - /** |
|
59 | - * Copy a file or folder in the cache |
|
60 | - * |
|
61 | - * @param \OCP\Files\Cache\ICache $sourceCache |
|
62 | - * @param ICacheEntry $sourceEntry |
|
63 | - * @param string $targetPath |
|
64 | - */ |
|
65 | - public function copyFromCache(ICache $sourceCache, ICacheEntry $sourceEntry, $targetPath) { |
|
66 | - $this->put($targetPath, $this->cacheEntryToArray($sourceEntry)); |
|
67 | - if ($sourceEntry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE) { |
|
68 | - $folderContent = $sourceCache->getFolderContentsById($sourceEntry->getId()); |
|
69 | - foreach ($folderContent as $subEntry) { |
|
70 | - $subTargetPath = $targetPath . '/' . $subEntry->getName(); |
|
71 | - $this->copyFromCache($sourceCache, $subEntry, $subTargetPath); |
|
72 | - } |
|
73 | - } |
|
74 | - } |
|
58 | + /** |
|
59 | + * Copy a file or folder in the cache |
|
60 | + * |
|
61 | + * @param \OCP\Files\Cache\ICache $sourceCache |
|
62 | + * @param ICacheEntry $sourceEntry |
|
63 | + * @param string $targetPath |
|
64 | + */ |
|
65 | + public function copyFromCache(ICache $sourceCache, ICacheEntry $sourceEntry, $targetPath) { |
|
66 | + $this->put($targetPath, $this->cacheEntryToArray($sourceEntry)); |
|
67 | + if ($sourceEntry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE) { |
|
68 | + $folderContent = $sourceCache->getFolderContentsById($sourceEntry->getId()); |
|
69 | + foreach ($folderContent as $subEntry) { |
|
70 | + $subTargetPath = $targetPath . '/' . $subEntry->getName(); |
|
71 | + $this->copyFromCache($sourceCache, $subEntry, $subTargetPath); |
|
72 | + } |
|
73 | + } |
|
74 | + } |
|
75 | 75 | |
76 | - private function cacheEntryToArray(ICacheEntry $entry) { |
|
77 | - return [ |
|
78 | - 'size' => $entry->getSize(), |
|
79 | - 'mtime' => $entry->getMTime(), |
|
80 | - 'storage_mtime' => $entry->getStorageMTime(), |
|
81 | - 'mimetype' => $entry->getMimeType(), |
|
82 | - 'mimepart' => $entry->getMimePart(), |
|
83 | - 'etag' => $entry->getEtag(), |
|
84 | - 'permissions' => $entry->getPermissions(), |
|
85 | - 'encrypted' => $entry->isEncrypted(), |
|
86 | - 'creation_time' => $entry->getCreationTime(), |
|
87 | - 'upload_time' => $entry->getUploadTime(), |
|
88 | - 'metadata_etag' => $entry->getMetadataEtag(), |
|
89 | - ]; |
|
90 | - } |
|
76 | + private function cacheEntryToArray(ICacheEntry $entry) { |
|
77 | + return [ |
|
78 | + 'size' => $entry->getSize(), |
|
79 | + 'mtime' => $entry->getMTime(), |
|
80 | + 'storage_mtime' => $entry->getStorageMTime(), |
|
81 | + 'mimetype' => $entry->getMimeType(), |
|
82 | + 'mimepart' => $entry->getMimePart(), |
|
83 | + 'etag' => $entry->getEtag(), |
|
84 | + 'permissions' => $entry->getPermissions(), |
|
85 | + 'encrypted' => $entry->isEncrypted(), |
|
86 | + 'creation_time' => $entry->getCreationTime(), |
|
87 | + 'upload_time' => $entry->getUploadTime(), |
|
88 | + 'metadata_etag' => $entry->getMetadataEtag(), |
|
89 | + ]; |
|
90 | + } |
|
91 | 91 | } |
@@ -31,7 +31,7 @@ |
||
31 | 31 | * @package OC\AppFramework\Middleware\Security\Exceptions |
32 | 32 | */ |
33 | 33 | class NotConfirmedException extends SecurityException { |
34 | - public function __construct() { |
|
35 | - parent::__construct('Password confirmation is required', Http::STATUS_FORBIDDEN); |
|
36 | - } |
|
34 | + public function __construct() { |
|
35 | + parent::__construct('Password confirmation is required', Http::STATUS_FORBIDDEN); |
|
36 | + } |
|
37 | 37 | } |
@@ -34,7 +34,7 @@ |
||
34 | 34 | * @package OC\AppFramework\Middleware\Security\Exceptions |
35 | 35 | */ |
36 | 36 | class CrossSiteRequestForgeryException extends SecurityException { |
37 | - public function __construct() { |
|
38 | - parent::__construct('CSRF check failed', Http::STATUS_PRECONDITION_FAILED); |
|
39 | - } |
|
37 | + public function __construct() { |
|
38 | + parent::__construct('CSRF check failed', Http::STATUS_PRECONDITION_FAILED); |
|
39 | + } |
|
40 | 40 | } |
@@ -34,7 +34,7 @@ |
||
34 | 34 | * @package OC\AppFramework\Middleware\Security\Exceptions |
35 | 35 | */ |
36 | 36 | class AppNotEnabledException extends SecurityException { |
37 | - public function __construct() { |
|
38 | - parent::__construct('App is not enabled', Http::STATUS_PRECONDITION_FAILED); |
|
39 | - } |
|
37 | + public function __construct() { |
|
38 | + parent::__construct('App is not enabled', Http::STATUS_PRECONDITION_FAILED); |
|
39 | + } |
|
40 | 40 | } |
@@ -34,7 +34,7 @@ |
||
34 | 34 | * @package OC\AppFramework\Middleware\Security\Exceptions |
35 | 35 | */ |
36 | 36 | class NotLoggedInException extends SecurityException { |
37 | - public function __construct() { |
|
38 | - parent::__construct('Current user is not logged in', Http::STATUS_UNAUTHORIZED); |
|
39 | - } |
|
37 | + public function __construct() { |
|
38 | + parent::__construct('Current user is not logged in', Http::STATUS_UNAUTHORIZED); |
|
39 | + } |
|
40 | 40 | } |
@@ -29,50 +29,50 @@ |
||
29 | 29 | |
30 | 30 | class FixMountStorages implements IRepairStep { |
31 | 31 | |
32 | - /** @var IDBConnection */ |
|
33 | - private $db; |
|
32 | + /** @var IDBConnection */ |
|
33 | + private $db; |
|
34 | 34 | |
35 | - /** |
|
36 | - * @param IDBConnection $db |
|
37 | - */ |
|
38 | - public function __construct(IDBConnection $db) { |
|
39 | - $this->db = $db; |
|
40 | - } |
|
35 | + /** |
|
36 | + * @param IDBConnection $db |
|
37 | + */ |
|
38 | + public function __construct(IDBConnection $db) { |
|
39 | + $this->db = $db; |
|
40 | + } |
|
41 | 41 | |
42 | - /** |
|
43 | - * @return string |
|
44 | - */ |
|
45 | - public function getName() { |
|
46 | - return 'Fix potential broken mount points'; |
|
47 | - } |
|
42 | + /** |
|
43 | + * @return string |
|
44 | + */ |
|
45 | + public function getName() { |
|
46 | + return 'Fix potential broken mount points'; |
|
47 | + } |
|
48 | 48 | |
49 | - public function run(IOutput $output) { |
|
50 | - $query = $this->db->getQueryBuilder(); |
|
51 | - $query->select('m.id', 'f.storage') |
|
52 | - ->from('mounts', 'm') |
|
53 | - ->leftJoin('m', 'filecache', 'f', $query->expr()->eq('m.root_id', 'f.fileid')) |
|
54 | - ->where($query->expr()->neq('m.storage_id', 'f.storage')); |
|
49 | + public function run(IOutput $output) { |
|
50 | + $query = $this->db->getQueryBuilder(); |
|
51 | + $query->select('m.id', 'f.storage') |
|
52 | + ->from('mounts', 'm') |
|
53 | + ->leftJoin('m', 'filecache', 'f', $query->expr()->eq('m.root_id', 'f.fileid')) |
|
54 | + ->where($query->expr()->neq('m.storage_id', 'f.storage')); |
|
55 | 55 | |
56 | - $update = $this->db->getQueryBuilder(); |
|
57 | - $update->update('mounts') |
|
58 | - ->set('storage_id', $update->createParameter('storage')) |
|
59 | - ->where($query->expr()->eq('id', $update->createParameter('mount'))); |
|
56 | + $update = $this->db->getQueryBuilder(); |
|
57 | + $update->update('mounts') |
|
58 | + ->set('storage_id', $update->createParameter('storage')) |
|
59 | + ->where($query->expr()->eq('id', $update->createParameter('mount'))); |
|
60 | 60 | |
61 | - $result = $query->execute(); |
|
62 | - $entriesUpdated = 0; |
|
63 | - while ($row = $result->fetch()) { |
|
64 | - $update->setParameter('storage', $row['storage'], IQueryBuilder::PARAM_INT) |
|
65 | - ->setParameter('mount', $row['id'], IQueryBuilder::PARAM_INT); |
|
66 | - $update->execute(); |
|
67 | - $entriesUpdated++; |
|
68 | - } |
|
69 | - $result->closeCursor(); |
|
61 | + $result = $query->execute(); |
|
62 | + $entriesUpdated = 0; |
|
63 | + while ($row = $result->fetch()) { |
|
64 | + $update->setParameter('storage', $row['storage'], IQueryBuilder::PARAM_INT) |
|
65 | + ->setParameter('mount', $row['id'], IQueryBuilder::PARAM_INT); |
|
66 | + $update->execute(); |
|
67 | + $entriesUpdated++; |
|
68 | + } |
|
69 | + $result->closeCursor(); |
|
70 | 70 | |
71 | - if ($entriesUpdated > 0) { |
|
72 | - $output->info($entriesUpdated . ' mounts updated'); |
|
73 | - return; |
|
74 | - } |
|
71 | + if ($entriesUpdated > 0) { |
|
72 | + $output->info($entriesUpdated . ' mounts updated'); |
|
73 | + return; |
|
74 | + } |
|
75 | 75 | |
76 | - $output->info('No mounts updated'); |
|
77 | - } |
|
76 | + $output->info('No mounts updated'); |
|
77 | + } |
|
78 | 78 | } |
@@ -69,7 +69,7 @@ |
||
69 | 69 | $result->closeCursor(); |
70 | 70 | |
71 | 71 | if ($entriesUpdated > 0) { |
72 | - $output->info($entriesUpdated . ' mounts updated'); |
|
72 | + $output->info($entriesUpdated.' mounts updated'); |
|
73 | 73 | return; |
74 | 74 | } |
75 | 75 |
@@ -36,66 +36,66 @@ |
||
36 | 36 | * altered in order to retrigger SQL schema generation through OCSqlitePlatform. |
37 | 37 | */ |
38 | 38 | class SqliteAutoincrement implements IRepairStep { |
39 | - /** |
|
40 | - * @var \OC\DB\Connection |
|
41 | - */ |
|
42 | - protected $connection; |
|
39 | + /** |
|
40 | + * @var \OC\DB\Connection |
|
41 | + */ |
|
42 | + protected $connection; |
|
43 | 43 | |
44 | - /** |
|
45 | - * @param \OC\DB\Connection $connection |
|
46 | - */ |
|
47 | - public function __construct($connection) { |
|
48 | - $this->connection = $connection; |
|
49 | - } |
|
44 | + /** |
|
45 | + * @param \OC\DB\Connection $connection |
|
46 | + */ |
|
47 | + public function __construct($connection) { |
|
48 | + $this->connection = $connection; |
|
49 | + } |
|
50 | 50 | |
51 | - public function getName() { |
|
52 | - return 'Repair SQLite autoincrement'; |
|
53 | - } |
|
51 | + public function getName() { |
|
52 | + return 'Repair SQLite autoincrement'; |
|
53 | + } |
|
54 | 54 | |
55 | - /** |
|
56 | - * Fix mime types |
|
57 | - */ |
|
58 | - public function run(IOutput $out) { |
|
59 | - if (!$this->connection->getDatabasePlatform() instanceof SqlitePlatform) { |
|
60 | - return; |
|
61 | - } |
|
55 | + /** |
|
56 | + * Fix mime types |
|
57 | + */ |
|
58 | + public function run(IOutput $out) { |
|
59 | + if (!$this->connection->getDatabasePlatform() instanceof SqlitePlatform) { |
|
60 | + return; |
|
61 | + } |
|
62 | 62 | |
63 | - $sourceSchema = $this->connection->getSchemaManager()->createSchema(); |
|
63 | + $sourceSchema = $this->connection->getSchemaManager()->createSchema(); |
|
64 | 64 | |
65 | - $schemaDiff = new SchemaDiff(); |
|
65 | + $schemaDiff = new SchemaDiff(); |
|
66 | 66 | |
67 | - foreach ($sourceSchema->getTables() as $tableSchema) { |
|
68 | - $primaryKey = $tableSchema->getPrimaryKey(); |
|
69 | - if (!$primaryKey) { |
|
70 | - continue; |
|
71 | - } |
|
67 | + foreach ($sourceSchema->getTables() as $tableSchema) { |
|
68 | + $primaryKey = $tableSchema->getPrimaryKey(); |
|
69 | + if (!$primaryKey) { |
|
70 | + continue; |
|
71 | + } |
|
72 | 72 | |
73 | - $columnNames = $primaryKey->getColumns(); |
|
73 | + $columnNames = $primaryKey->getColumns(); |
|
74 | 74 | |
75 | - // add a column diff for every primary key column, |
|
76 | - // but do not actually change anything, this will |
|
77 | - // force the generation of SQL statements to alter |
|
78 | - // those tables, which will then trigger the |
|
79 | - // specific SQL code from OCSqlitePlatform |
|
80 | - try { |
|
81 | - $tableDiff = new TableDiff($tableSchema->getName()); |
|
82 | - $tableDiff->fromTable = $tableSchema; |
|
83 | - foreach ($columnNames as $columnName) { |
|
84 | - $columnSchema = $tableSchema->getColumn($columnName); |
|
85 | - $columnDiff = new ColumnDiff($columnSchema->getName(), $columnSchema); |
|
86 | - $tableDiff->changedColumns[] = $columnDiff; |
|
87 | - $schemaDiff->changedTables[] = $tableDiff; |
|
88 | - } |
|
89 | - } catch (SchemaException $e) { |
|
90 | - // ignore |
|
91 | - } |
|
92 | - } |
|
75 | + // add a column diff for every primary key column, |
|
76 | + // but do not actually change anything, this will |
|
77 | + // force the generation of SQL statements to alter |
|
78 | + // those tables, which will then trigger the |
|
79 | + // specific SQL code from OCSqlitePlatform |
|
80 | + try { |
|
81 | + $tableDiff = new TableDiff($tableSchema->getName()); |
|
82 | + $tableDiff->fromTable = $tableSchema; |
|
83 | + foreach ($columnNames as $columnName) { |
|
84 | + $columnSchema = $tableSchema->getColumn($columnName); |
|
85 | + $columnDiff = new ColumnDiff($columnSchema->getName(), $columnSchema); |
|
86 | + $tableDiff->changedColumns[] = $columnDiff; |
|
87 | + $schemaDiff->changedTables[] = $tableDiff; |
|
88 | + } |
|
89 | + } catch (SchemaException $e) { |
|
90 | + // ignore |
|
91 | + } |
|
92 | + } |
|
93 | 93 | |
94 | - $this->connection->beginTransaction(); |
|
95 | - foreach ($schemaDiff->toSql($this->connection->getDatabasePlatform()) as $sql) { |
|
96 | - $this->connection->query($sql); |
|
97 | - } |
|
98 | - $this->connection->commit(); |
|
99 | - } |
|
94 | + $this->connection->beginTransaction(); |
|
95 | + foreach ($schemaDiff->toSql($this->connection->getDatabasePlatform()) as $sql) { |
|
96 | + $this->connection->query($sql); |
|
97 | + } |
|
98 | + $this->connection->commit(); |
|
99 | + } |
|
100 | 100 | } |
101 | 101 |
@@ -93,7 +93,7 @@ |
||
93 | 93 | $result->closeCursor(); |
94 | 94 | |
95 | 95 | if ($deletedEntries) { |
96 | - $output->info('Removed ' . $deletedEntries . ' shares where user is not a member of the group anymore'); |
|
96 | + $output->info('Removed '.$deletedEntries.' shares where user is not a member of the group anymore'); |
|
97 | 97 | } |
98 | 98 | } |
99 | 99 |
@@ -32,88 +32,88 @@ |
||
32 | 32 | |
33 | 33 | class OldGroupMembershipShares implements IRepairStep { |
34 | 34 | |
35 | - /** @var \OCP\IDBConnection */ |
|
36 | - protected $connection; |
|
37 | - |
|
38 | - /** @var \OCP\IGroupManager */ |
|
39 | - protected $groupManager; |
|
40 | - |
|
41 | - /** |
|
42 | - * @var array [gid => [uid => (bool)]] |
|
43 | - */ |
|
44 | - protected $memberships; |
|
45 | - |
|
46 | - /** |
|
47 | - * @param IDBConnection $connection |
|
48 | - * @param IGroupManager $groupManager |
|
49 | - */ |
|
50 | - public function __construct(IDBConnection $connection, IGroupManager $groupManager) { |
|
51 | - $this->connection = $connection; |
|
52 | - $this->groupManager = $groupManager; |
|
53 | - } |
|
54 | - |
|
55 | - /** |
|
56 | - * Returns the step's name |
|
57 | - * |
|
58 | - * @return string |
|
59 | - */ |
|
60 | - public function getName() { |
|
61 | - return 'Remove shares of old group memberships'; |
|
62 | - } |
|
63 | - |
|
64 | - /** |
|
65 | - * Run repair step. |
|
66 | - * Must throw exception on error. |
|
67 | - * |
|
68 | - * @throws \Exception in case of failure |
|
69 | - */ |
|
70 | - public function run(IOutput $output) { |
|
71 | - $deletedEntries = 0; |
|
72 | - |
|
73 | - $query = $this->connection->getQueryBuilder(); |
|
74 | - $query->select('s1.id')->selectAlias('s1.share_with', 'user')->selectAlias('s2.share_with', 'group') |
|
75 | - ->from('share', 's1') |
|
76 | - ->where($query->expr()->isNotNull('s1.parent')) |
|
77 | - // \OC\Share\Constant::$shareTypeGroupUserUnique === 2 |
|
78 | - ->andWhere($query->expr()->eq('s1.share_type', $query->expr()->literal(2))) |
|
79 | - ->andWhere($query->expr()->isNotNull('s2.id')) |
|
80 | - ->andWhere($query->expr()->eq('s2.share_type', $query->expr()->literal(IShare::TYPE_GROUP))) |
|
81 | - ->leftJoin('s1', 'share', 's2', $query->expr()->eq('s1.parent', 's2.id')); |
|
82 | - |
|
83 | - $deleteQuery = $this->connection->getQueryBuilder(); |
|
84 | - $deleteQuery->delete('share') |
|
85 | - ->where($query->expr()->eq('id', $deleteQuery->createParameter('share'))); |
|
86 | - |
|
87 | - $result = $query->execute(); |
|
88 | - while ($row = $result->fetch()) { |
|
89 | - if (!$this->isMember($row['group'], $row['user'])) { |
|
90 | - $deletedEntries += $deleteQuery->setParameter('share', (int) $row['id']) |
|
91 | - ->execute(); |
|
92 | - } |
|
93 | - } |
|
94 | - $result->closeCursor(); |
|
95 | - |
|
96 | - if ($deletedEntries) { |
|
97 | - $output->info('Removed ' . $deletedEntries . ' shares where user is not a member of the group anymore'); |
|
98 | - } |
|
99 | - } |
|
100 | - |
|
101 | - /** |
|
102 | - * @param string $gid |
|
103 | - * @param string $uid |
|
104 | - * @return bool |
|
105 | - */ |
|
106 | - protected function isMember($gid, $uid) { |
|
107 | - if (isset($this->memberships[$gid][$uid])) { |
|
108 | - return $this->memberships[$gid][$uid]; |
|
109 | - } |
|
110 | - |
|
111 | - $isMember = $this->groupManager->isInGroup($uid, $gid); |
|
112 | - if (!isset($this->memberships[$gid])) { |
|
113 | - $this->memberships[$gid] = []; |
|
114 | - } |
|
115 | - $this->memberships[$gid][$uid] = $isMember; |
|
116 | - |
|
117 | - return $isMember; |
|
118 | - } |
|
35 | + /** @var \OCP\IDBConnection */ |
|
36 | + protected $connection; |
|
37 | + |
|
38 | + /** @var \OCP\IGroupManager */ |
|
39 | + protected $groupManager; |
|
40 | + |
|
41 | + /** |
|
42 | + * @var array [gid => [uid => (bool)]] |
|
43 | + */ |
|
44 | + protected $memberships; |
|
45 | + |
|
46 | + /** |
|
47 | + * @param IDBConnection $connection |
|
48 | + * @param IGroupManager $groupManager |
|
49 | + */ |
|
50 | + public function __construct(IDBConnection $connection, IGroupManager $groupManager) { |
|
51 | + $this->connection = $connection; |
|
52 | + $this->groupManager = $groupManager; |
|
53 | + } |
|
54 | + |
|
55 | + /** |
|
56 | + * Returns the step's name |
|
57 | + * |
|
58 | + * @return string |
|
59 | + */ |
|
60 | + public function getName() { |
|
61 | + return 'Remove shares of old group memberships'; |
|
62 | + } |
|
63 | + |
|
64 | + /** |
|
65 | + * Run repair step. |
|
66 | + * Must throw exception on error. |
|
67 | + * |
|
68 | + * @throws \Exception in case of failure |
|
69 | + */ |
|
70 | + public function run(IOutput $output) { |
|
71 | + $deletedEntries = 0; |
|
72 | + |
|
73 | + $query = $this->connection->getQueryBuilder(); |
|
74 | + $query->select('s1.id')->selectAlias('s1.share_with', 'user')->selectAlias('s2.share_with', 'group') |
|
75 | + ->from('share', 's1') |
|
76 | + ->where($query->expr()->isNotNull('s1.parent')) |
|
77 | + // \OC\Share\Constant::$shareTypeGroupUserUnique === 2 |
|
78 | + ->andWhere($query->expr()->eq('s1.share_type', $query->expr()->literal(2))) |
|
79 | + ->andWhere($query->expr()->isNotNull('s2.id')) |
|
80 | + ->andWhere($query->expr()->eq('s2.share_type', $query->expr()->literal(IShare::TYPE_GROUP))) |
|
81 | + ->leftJoin('s1', 'share', 's2', $query->expr()->eq('s1.parent', 's2.id')); |
|
82 | + |
|
83 | + $deleteQuery = $this->connection->getQueryBuilder(); |
|
84 | + $deleteQuery->delete('share') |
|
85 | + ->where($query->expr()->eq('id', $deleteQuery->createParameter('share'))); |
|
86 | + |
|
87 | + $result = $query->execute(); |
|
88 | + while ($row = $result->fetch()) { |
|
89 | + if (!$this->isMember($row['group'], $row['user'])) { |
|
90 | + $deletedEntries += $deleteQuery->setParameter('share', (int) $row['id']) |
|
91 | + ->execute(); |
|
92 | + } |
|
93 | + } |
|
94 | + $result->closeCursor(); |
|
95 | + |
|
96 | + if ($deletedEntries) { |
|
97 | + $output->info('Removed ' . $deletedEntries . ' shares where user is not a member of the group anymore'); |
|
98 | + } |
|
99 | + } |
|
100 | + |
|
101 | + /** |
|
102 | + * @param string $gid |
|
103 | + * @param string $uid |
|
104 | + * @return bool |
|
105 | + */ |
|
106 | + protected function isMember($gid, $uid) { |
|
107 | + if (isset($this->memberships[$gid][$uid])) { |
|
108 | + return $this->memberships[$gid][$uid]; |
|
109 | + } |
|
110 | + |
|
111 | + $isMember = $this->groupManager->isInGroup($uid, $gid); |
|
112 | + if (!isset($this->memberships[$gid])) { |
|
113 | + $this->memberships[$gid] = []; |
|
114 | + } |
|
115 | + $this->memberships[$gid][$uid] = $isMember; |
|
116 | + |
|
117 | + return $isMember; |
|
118 | + } |
|
119 | 119 | } |