Completed
Pull Request — master (#8821)
by Joas
27:41 queued 08:42
created
apps/files_trashbin/lib/Helper.php 1 patch
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -30,97 +30,97 @@
 block discarded – undo
30 30
 use OCP\Files\Cache\ICacheEntry;
31 31
 
32 32
 class Helper {
33
-	/**
34
-	 * Retrieves the contents of a trash bin directory.
35
-	 *
36
-	 * @param string $dir path to the directory inside the trashbin
37
-	 * or empty to retrieve the root of the trashbin
38
-	 * @param string $user
39
-	 * @param string $sortAttribute attribute to sort on or empty to disable sorting
40
-	 * @param bool $sortDescending true for descending sort, false otherwise
41
-	 * @return \OCP\Files\FileInfo[]
42
-	 */
43
-	public static function getTrashFiles($dir, $user, $sortAttribute = '', $sortDescending = false) {
44
-		$result = array();
45
-		$timestamp = null;
33
+    /**
34
+     * Retrieves the contents of a trash bin directory.
35
+     *
36
+     * @param string $dir path to the directory inside the trashbin
37
+     * or empty to retrieve the root of the trashbin
38
+     * @param string $user
39
+     * @param string $sortAttribute attribute to sort on or empty to disable sorting
40
+     * @param bool $sortDescending true for descending sort, false otherwise
41
+     * @return \OCP\Files\FileInfo[]
42
+     */
43
+    public static function getTrashFiles($dir, $user, $sortAttribute = '', $sortDescending = false) {
44
+        $result = array();
45
+        $timestamp = null;
46 46
 
47
-		$view = new \OC\Files\View('/' . $user . '/files_trashbin/files');
47
+        $view = new \OC\Files\View('/' . $user . '/files_trashbin/files');
48 48
 
49
-		if (ltrim($dir, '/') !== '' && !$view->is_dir($dir)) {
50
-			throw new \Exception('Directory does not exists');
51
-		}
49
+        if (ltrim($dir, '/') !== '' && !$view->is_dir($dir)) {
50
+            throw new \Exception('Directory does not exists');
51
+        }
52 52
 
53
-		$mount = $view->getMount($dir);
54
-		$storage = $mount->getStorage();
55
-		$absoluteDir = $view->getAbsolutePath($dir);
56
-		$internalPath = $mount->getInternalPath($absoluteDir);
53
+        $mount = $view->getMount($dir);
54
+        $storage = $mount->getStorage();
55
+        $absoluteDir = $view->getAbsolutePath($dir);
56
+        $internalPath = $mount->getInternalPath($absoluteDir);
57 57
 
58
-		$originalLocations = \OCA\Files_Trashbin\Trashbin::getLocations($user);
59
-		$dirContent = $storage->getCache()->getFolderContents($mount->getInternalPath($view->getAbsolutePath($dir)));
60
-		foreach ($dirContent as $entry) {
61
-			$entryName = $entry->getName();
62
-			$id = $entry->getId();
63
-			$name = $entryName;
64
-			if ($dir === '' || $dir === '/') {
65
-				$pathparts = pathinfo($entryName);
66
-				$timestamp = substr($pathparts['extension'], 1);
67
-				$name = $pathparts['filename'];
58
+        $originalLocations = \OCA\Files_Trashbin\Trashbin::getLocations($user);
59
+        $dirContent = $storage->getCache()->getFolderContents($mount->getInternalPath($view->getAbsolutePath($dir)));
60
+        foreach ($dirContent as $entry) {
61
+            $entryName = $entry->getName();
62
+            $id = $entry->getId();
63
+            $name = $entryName;
64
+            if ($dir === '' || $dir === '/') {
65
+                $pathparts = pathinfo($entryName);
66
+                $timestamp = substr($pathparts['extension'], 1);
67
+                $name = $pathparts['filename'];
68 68
 
69
-			} else if ($timestamp === null) {
70
-				// for subfolders we need to calculate the timestamp only once
71
-				$parts = explode('/', ltrim($dir, '/'));
72
-				$timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1);
73
-			}
74
-			$originalPath = '';
75
-			$originalName = substr($entryName, 0, -strlen($timestamp)-2);
76
-			if (isset($originalLocations[$originalName][$timestamp])) {
77
-				$originalPath = $originalLocations[$originalName][$timestamp];
78
-				if (substr($originalPath, -1) === '/') {
79
-					$originalPath = substr($originalPath, 0, -1);
80
-				}
81
-			}
82
-			$type = $entry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE ? 'dir' : 'file';
83
-			$i = array(
84
-				'name' => $name,
85
-				'mtime' => $timestamp,
86
-				'mimetype' => $type === 'dir' ? 'httpd/unix-directory' : \OC::$server->getMimeTypeDetector()->detectPath($name),
87
-				'type' => $type,
88
-				'directory' => ($dir === '/') ? '' : $dir,
89
-				'size' => $entry->getSize(),
90
-				'etag' => '',
91
-				'permissions' => Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE
92
-			);
93
-			if ($originalPath) {
94
-				if ($originalPath !== '.') {
95
-					$i['extraData'] = $originalPath . '/' . $originalName;
96
-				} else {
97
-					$i['extraData'] = $originalName;
98
-				}
99
-			}
100
-			$result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i, $mount);
101
-		}
69
+            } else if ($timestamp === null) {
70
+                // for subfolders we need to calculate the timestamp only once
71
+                $parts = explode('/', ltrim($dir, '/'));
72
+                $timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1);
73
+            }
74
+            $originalPath = '';
75
+            $originalName = substr($entryName, 0, -strlen($timestamp)-2);
76
+            if (isset($originalLocations[$originalName][$timestamp])) {
77
+                $originalPath = $originalLocations[$originalName][$timestamp];
78
+                if (substr($originalPath, -1) === '/') {
79
+                    $originalPath = substr($originalPath, 0, -1);
80
+                }
81
+            }
82
+            $type = $entry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE ? 'dir' : 'file';
83
+            $i = array(
84
+                'name' => $name,
85
+                'mtime' => $timestamp,
86
+                'mimetype' => $type === 'dir' ? 'httpd/unix-directory' : \OC::$server->getMimeTypeDetector()->detectPath($name),
87
+                'type' => $type,
88
+                'directory' => ($dir === '/') ? '' : $dir,
89
+                'size' => $entry->getSize(),
90
+                'etag' => '',
91
+                'permissions' => Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE
92
+            );
93
+            if ($originalPath) {
94
+                if ($originalPath !== '.') {
95
+                    $i['extraData'] = $originalPath . '/' . $originalName;
96
+                } else {
97
+                    $i['extraData'] = $originalName;
98
+                }
99
+            }
100
+            $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i, $mount);
101
+        }
102 102
 
103
-		if ($sortAttribute !== '') {
104
-			return \OCA\Files\Helper::sortFiles($result, $sortAttribute, $sortDescending);
105
-		}
106
-		return $result;
107
-	}
103
+        if ($sortAttribute !== '') {
104
+            return \OCA\Files\Helper::sortFiles($result, $sortAttribute, $sortDescending);
105
+        }
106
+        return $result;
107
+    }
108 108
 
109
-	/**
110
-	 * Format file infos for JSON
111
-	 *
112
-	 * @param \OCP\Files\FileInfo[] $fileInfos file infos
113
-	 */
114
-	public static function formatFileInfos($fileInfos) {
115
-		$files = array();
116
-		$id = 0;
117
-		foreach ($fileInfos as $i) {
118
-			$entry = \OCA\Files\Helper::formatFileInfo($i);
119
-			$entry['id'] = $id++;
120
-			$entry['etag'] = $entry['mtime']; // add fake etag, it is only needed to identify the preview image
121
-			$entry['permissions'] = \OCP\Constants::PERMISSION_READ;
122
-			$files[] = $entry;
123
-		}
124
-		return $files;
125
-	}
109
+    /**
110
+     * Format file infos for JSON
111
+     *
112
+     * @param \OCP\Files\FileInfo[] $fileInfos file infos
113
+     */
114
+    public static function formatFileInfos($fileInfos) {
115
+        $files = array();
116
+        $id = 0;
117
+        foreach ($fileInfos as $i) {
118
+            $entry = \OCA\Files\Helper::formatFileInfo($i);
119
+            $entry['id'] = $id++;
120
+            $entry['etag'] = $entry['mtime']; // add fake etag, it is only needed to identify the preview image
121
+            $entry['permissions'] = \OCP\Constants::PERMISSION_READ;
122
+            $files[] = $entry;
123
+        }
124
+        return $files;
125
+    }
126 126
 }
Please login to merge, or discard this patch.
apps/files/lib/Command/TransferOwnership.php 1 patch
Indentation   +244 added lines, -244 removed lines patch added patch discarded remove patch
@@ -42,248 +42,248 @@
 block discarded – undo
42 42
 
43 43
 class TransferOwnership extends Command {
44 44
 
45
-	/** @var IUserManager $userManager */
46
-	private $userManager;
47
-
48
-	/** @var IManager */
49
-	private $shareManager;
50
-
51
-	/** @var IMountManager */
52
-	private $mountManager;
53
-
54
-	/** @var FileInfo[] */
55
-	private $allFiles = [];
56
-
57
-	/** @var FileInfo[] */
58
-	private $encryptedFiles = [];
59
-
60
-	/** @var IShare[] */
61
-	private $shares = [];
62
-
63
-	/** @var string */
64
-	private $sourceUser;
65
-
66
-	/** @var string */
67
-	private $destinationUser;
68
-
69
-	/** @var string */
70
-	private $sourcePath;
71
-
72
-	/** @var string */
73
-	private $finalTarget;
74
-
75
-	public function __construct(IUserManager $userManager, IManager $shareManager, IMountManager $mountManager) {
76
-		$this->userManager = $userManager;
77
-		$this->shareManager = $shareManager;
78
-		$this->mountManager = $mountManager;
79
-		parent::__construct();
80
-	}
81
-
82
-	protected function configure() {
83
-		$this
84
-			->setName('files:transfer-ownership')
85
-			->setDescription('All files and folders are moved to another user - shares are moved as well.')
86
-			->addArgument(
87
-				'source-user',
88
-				InputArgument::REQUIRED,
89
-				'owner of files which shall be moved'
90
-			)
91
-			->addArgument(
92
-				'destination-user',
93
-				InputArgument::REQUIRED,
94
-				'user who will be the new owner of the files'
95
-			)
96
-			->addOption(
97
-				'path',
98
-				null,
99
-				InputOption::VALUE_REQUIRED,
100
-				'selectively provide the path to transfer. For example --path="folder_name"',
101
-				''
102
-			);
103
-	}
104
-
105
-	protected function execute(InputInterface $input, OutputInterface $output) {
106
-		$sourceUserObject = $this->userManager->get($input->getArgument('source-user'));
107
-		$destinationUserObject = $this->userManager->get($input->getArgument('destination-user'));
108
-
109
-		if (!$sourceUserObject instanceof IUser) {
110
-			$output->writeln("<error>Unknown source user $this->sourceUser</error>");
111
-			return 1;
112
-		}
113
-
114
-		if (!$destinationUserObject instanceof IUser) {
115
-			$output->writeln("<error>Unknown destination user $this->destinationUser</error>");
116
-			return 1;
117
-		}
118
-
119
-		$this->sourceUser = $sourceUserObject->getUID();
120
-		$this->destinationUser = $destinationUserObject->getUID();
121
-		$sourcePathOption = ltrim($input->getOption('path'), '/');
122
-		$this->sourcePath = rtrim($this->sourceUser . '/files/' . $sourcePathOption, '/');
123
-
124
-		// target user has to be ready
125
-		if (!\OC::$server->getEncryptionManager()->isReadyForUser($this->destinationUser)) {
126
-			$output->writeln("<error>The target user is not ready to accept files. The user has at least to be logged in once.</error>");
127
-			return 2;
128
-		}
129
-
130
-		$date = date('Y-m-d H-i-s');
131
-		$this->finalTarget = "$this->destinationUser/files/transferred from $this->sourceUser on $date";
132
-
133
-		// setup filesystem
134
-		Filesystem::initMountPoints($this->sourceUser);
135
-		Filesystem::initMountPoints($this->destinationUser);
136
-
137
-		$view = new View();
138
-		if (!$view->is_dir($this->sourcePath)) {
139
-			$output->writeln("<error>Unknown path provided: $sourcePathOption</error>");
140
-			return 1;
141
-		}
142
-
143
-		// analyse source folder
144
-		$this->analyse($output);
145
-
146
-		// collect all the shares
147
-		$this->collectUsersShares($output);
148
-
149
-		// transfer the files
150
-		$this->transfer($output);
151
-
152
-		// restore the shares
153
-		$this->restoreShares($output);
154
-	}
155
-
156
-	private function walkFiles(View $view, $path, \Closure $callBack) {
157
-		foreach ($view->getDirectoryContent($path) as $fileInfo) {
158
-			if (!$callBack($fileInfo)) {
159
-				return;
160
-			}
161
-			if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
162
-				$this->walkFiles($view, $fileInfo->getPath(), $callBack);
163
-			}
164
-		}
165
-	}
166
-
167
-	/**
168
-	 * @param OutputInterface $output
169
-	 * @throws \Exception
170
-	 */
171
-	protected function analyse(OutputInterface $output) {
172
-		$view = new View();
173
-		$output->writeln("Analysing files of $this->sourceUser ...");
174
-		$progress = new ProgressBar($output);
175
-		$progress->start();
176
-		$self = $this;
177
-
178
-		$this->walkFiles($view, $this->sourcePath,
179
-				function (FileInfo $fileInfo) use ($progress, $self) {
180
-					if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
181
-						// only analyze into folders from main storage,
182
-						if (!$fileInfo->getStorage()->instanceOfStorage(IHomeStorage::class)) {
183
-							return false;
184
-						}
185
-						return true;
186
-					}
187
-					$progress->advance();
188
-					$this->allFiles[] = $fileInfo;
189
-					if ($fileInfo->isEncrypted()) {
190
-						$this->encryptedFiles[] = $fileInfo;
191
-					}
192
-					return true;
193
-				});
194
-		$progress->finish();
195
-		$output->writeln('');
196
-
197
-		// no file is allowed to be encrypted
198
-		if (!empty($this->encryptedFiles)) {
199
-			$output->writeln("<error>Some files are encrypted - please decrypt them first</error>");
200
-			foreach($this->encryptedFiles as $encryptedFile) {
201
-				/** @var FileInfo $encryptedFile */
202
-				$output->writeln("  " . $encryptedFile->getPath());
203
-			}
204
-			throw new \Exception('Execution terminated.');
205
-		}
206
-
207
-	}
208
-
209
-	/**
210
-	 * @param OutputInterface $output
211
-	 */
212
-	private function collectUsersShares(OutputInterface $output) {
213
-		$output->writeln("Collecting all share information for files and folder of $this->sourceUser ...");
214
-
215
-		$progress = new ProgressBar($output, count($this->shares));
216
-		foreach([\OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE] as $shareType) {
217
-		$offset = 0;
218
-			while (true) {
219
-				$sharePage = $this->shareManager->getSharesBy($this->sourceUser, $shareType, null, true, 50, $offset);
220
-				$progress->advance(count($sharePage));
221
-				if (empty($sharePage)) {
222
-					break;
223
-				}
224
-				$this->shares = array_merge($this->shares, $sharePage);
225
-				$offset += 50;
226
-			}
227
-		}
228
-
229
-		$progress->finish();
230
-		$output->writeln('');
231
-	}
232
-
233
-	/**
234
-	 * @param OutputInterface $output
235
-	 */
236
-	protected function transfer(OutputInterface $output) {
237
-		$view = new View();
238
-		$output->writeln("Transferring files to $this->finalTarget ...");
239
-
240
-		// This change will help user to transfer the folder specified using --path option.
241
-		// Else only the content inside folder is transferred which is not correct.
242
-		if($this->sourcePath !== "$this->sourceUser/files") {
243
-			$view->mkdir($this->finalTarget);
244
-			$this->finalTarget = $this->finalTarget . '/' . basename($this->sourcePath);
245
-		}
246
-		$view->rename($this->sourcePath, $this->finalTarget);
247
-		if (!is_dir("$this->sourceUser/files")) {
248
-			// because the files folder is moved away we need to recreate it
249
-			$view->mkdir("$this->sourceUser/files");
250
-		}
251
-	}
252
-
253
-	/**
254
-	 * @param OutputInterface $output
255
-	 */
256
-	private function restoreShares(OutputInterface $output) {
257
-		$output->writeln("Restoring shares ...");
258
-		$progress = new ProgressBar($output, count($this->shares));
259
-
260
-		foreach($this->shares as $share) {
261
-			try {
262
-				if ($share->getSharedWith() === $this->destinationUser) {
263
-					// Unmount the shares before deleting, so we don't try to get the storage later on.
264
-					$shareMountPoint = $this->mountManager->find('/' . $this->destinationUser . '/files' . $share->getTarget());
265
-					if ($shareMountPoint) {
266
-						$this->mountManager->removeMount($shareMountPoint->getMountPoint());
267
-					}
268
-					$this->shareManager->deleteShare($share);
269
-				} else {
270
-					if ($share->getShareOwner() === $this->sourceUser) {
271
-						$share->setShareOwner($this->destinationUser);
272
-					}
273
-					if ($share->getSharedBy() === $this->sourceUser) {
274
-						$share->setSharedBy($this->destinationUser);
275
-					}
276
-
277
-					$this->shareManager->updateShare($share);
278
-				}
279
-			} catch (\OCP\Files\NotFoundException $e) {
280
-				$output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>');
281
-			} catch (\Exception $e) {
282
-				$output->writeln('<error>Could not restore share with id ' . $share->getId() . ':' . $e->getTraceAsString() . '</error>');
283
-			}
284
-			$progress->advance();
285
-		}
286
-		$progress->finish();
287
-		$output->writeln('');
288
-	}
45
+    /** @var IUserManager $userManager */
46
+    private $userManager;
47
+
48
+    /** @var IManager */
49
+    private $shareManager;
50
+
51
+    /** @var IMountManager */
52
+    private $mountManager;
53
+
54
+    /** @var FileInfo[] */
55
+    private $allFiles = [];
56
+
57
+    /** @var FileInfo[] */
58
+    private $encryptedFiles = [];
59
+
60
+    /** @var IShare[] */
61
+    private $shares = [];
62
+
63
+    /** @var string */
64
+    private $sourceUser;
65
+
66
+    /** @var string */
67
+    private $destinationUser;
68
+
69
+    /** @var string */
70
+    private $sourcePath;
71
+
72
+    /** @var string */
73
+    private $finalTarget;
74
+
75
+    public function __construct(IUserManager $userManager, IManager $shareManager, IMountManager $mountManager) {
76
+        $this->userManager = $userManager;
77
+        $this->shareManager = $shareManager;
78
+        $this->mountManager = $mountManager;
79
+        parent::__construct();
80
+    }
81
+
82
+    protected function configure() {
83
+        $this
84
+            ->setName('files:transfer-ownership')
85
+            ->setDescription('All files and folders are moved to another user - shares are moved as well.')
86
+            ->addArgument(
87
+                'source-user',
88
+                InputArgument::REQUIRED,
89
+                'owner of files which shall be moved'
90
+            )
91
+            ->addArgument(
92
+                'destination-user',
93
+                InputArgument::REQUIRED,
94
+                'user who will be the new owner of the files'
95
+            )
96
+            ->addOption(
97
+                'path',
98
+                null,
99
+                InputOption::VALUE_REQUIRED,
100
+                'selectively provide the path to transfer. For example --path="folder_name"',
101
+                ''
102
+            );
103
+    }
104
+
105
+    protected function execute(InputInterface $input, OutputInterface $output) {
106
+        $sourceUserObject = $this->userManager->get($input->getArgument('source-user'));
107
+        $destinationUserObject = $this->userManager->get($input->getArgument('destination-user'));
108
+
109
+        if (!$sourceUserObject instanceof IUser) {
110
+            $output->writeln("<error>Unknown source user $this->sourceUser</error>");
111
+            return 1;
112
+        }
113
+
114
+        if (!$destinationUserObject instanceof IUser) {
115
+            $output->writeln("<error>Unknown destination user $this->destinationUser</error>");
116
+            return 1;
117
+        }
118
+
119
+        $this->sourceUser = $sourceUserObject->getUID();
120
+        $this->destinationUser = $destinationUserObject->getUID();
121
+        $sourcePathOption = ltrim($input->getOption('path'), '/');
122
+        $this->sourcePath = rtrim($this->sourceUser . '/files/' . $sourcePathOption, '/');
123
+
124
+        // target user has to be ready
125
+        if (!\OC::$server->getEncryptionManager()->isReadyForUser($this->destinationUser)) {
126
+            $output->writeln("<error>The target user is not ready to accept files. The user has at least to be logged in once.</error>");
127
+            return 2;
128
+        }
129
+
130
+        $date = date('Y-m-d H-i-s');
131
+        $this->finalTarget = "$this->destinationUser/files/transferred from $this->sourceUser on $date";
132
+
133
+        // setup filesystem
134
+        Filesystem::initMountPoints($this->sourceUser);
135
+        Filesystem::initMountPoints($this->destinationUser);
136
+
137
+        $view = new View();
138
+        if (!$view->is_dir($this->sourcePath)) {
139
+            $output->writeln("<error>Unknown path provided: $sourcePathOption</error>");
140
+            return 1;
141
+        }
142
+
143
+        // analyse source folder
144
+        $this->analyse($output);
145
+
146
+        // collect all the shares
147
+        $this->collectUsersShares($output);
148
+
149
+        // transfer the files
150
+        $this->transfer($output);
151
+
152
+        // restore the shares
153
+        $this->restoreShares($output);
154
+    }
155
+
156
+    private function walkFiles(View $view, $path, \Closure $callBack) {
157
+        foreach ($view->getDirectoryContent($path) as $fileInfo) {
158
+            if (!$callBack($fileInfo)) {
159
+                return;
160
+            }
161
+            if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
162
+                $this->walkFiles($view, $fileInfo->getPath(), $callBack);
163
+            }
164
+        }
165
+    }
166
+
167
+    /**
168
+     * @param OutputInterface $output
169
+     * @throws \Exception
170
+     */
171
+    protected function analyse(OutputInterface $output) {
172
+        $view = new View();
173
+        $output->writeln("Analysing files of $this->sourceUser ...");
174
+        $progress = new ProgressBar($output);
175
+        $progress->start();
176
+        $self = $this;
177
+
178
+        $this->walkFiles($view, $this->sourcePath,
179
+                function (FileInfo $fileInfo) use ($progress, $self) {
180
+                    if ($fileInfo->getType() === FileInfo::TYPE_FOLDER) {
181
+                        // only analyze into folders from main storage,
182
+                        if (!$fileInfo->getStorage()->instanceOfStorage(IHomeStorage::class)) {
183
+                            return false;
184
+                        }
185
+                        return true;
186
+                    }
187
+                    $progress->advance();
188
+                    $this->allFiles[] = $fileInfo;
189
+                    if ($fileInfo->isEncrypted()) {
190
+                        $this->encryptedFiles[] = $fileInfo;
191
+                    }
192
+                    return true;
193
+                });
194
+        $progress->finish();
195
+        $output->writeln('');
196
+
197
+        // no file is allowed to be encrypted
198
+        if (!empty($this->encryptedFiles)) {
199
+            $output->writeln("<error>Some files are encrypted - please decrypt them first</error>");
200
+            foreach($this->encryptedFiles as $encryptedFile) {
201
+                /** @var FileInfo $encryptedFile */
202
+                $output->writeln("  " . $encryptedFile->getPath());
203
+            }
204
+            throw new \Exception('Execution terminated.');
205
+        }
206
+
207
+    }
208
+
209
+    /**
210
+     * @param OutputInterface $output
211
+     */
212
+    private function collectUsersShares(OutputInterface $output) {
213
+        $output->writeln("Collecting all share information for files and folder of $this->sourceUser ...");
214
+
215
+        $progress = new ProgressBar($output, count($this->shares));
216
+        foreach([\OCP\Share::SHARE_TYPE_GROUP, \OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK, \OCP\Share::SHARE_TYPE_REMOTE] as $shareType) {
217
+        $offset = 0;
218
+            while (true) {
219
+                $sharePage = $this->shareManager->getSharesBy($this->sourceUser, $shareType, null, true, 50, $offset);
220
+                $progress->advance(count($sharePage));
221
+                if (empty($sharePage)) {
222
+                    break;
223
+                }
224
+                $this->shares = array_merge($this->shares, $sharePage);
225
+                $offset += 50;
226
+            }
227
+        }
228
+
229
+        $progress->finish();
230
+        $output->writeln('');
231
+    }
232
+
233
+    /**
234
+     * @param OutputInterface $output
235
+     */
236
+    protected function transfer(OutputInterface $output) {
237
+        $view = new View();
238
+        $output->writeln("Transferring files to $this->finalTarget ...");
239
+
240
+        // This change will help user to transfer the folder specified using --path option.
241
+        // Else only the content inside folder is transferred which is not correct.
242
+        if($this->sourcePath !== "$this->sourceUser/files") {
243
+            $view->mkdir($this->finalTarget);
244
+            $this->finalTarget = $this->finalTarget . '/' . basename($this->sourcePath);
245
+        }
246
+        $view->rename($this->sourcePath, $this->finalTarget);
247
+        if (!is_dir("$this->sourceUser/files")) {
248
+            // because the files folder is moved away we need to recreate it
249
+            $view->mkdir("$this->sourceUser/files");
250
+        }
251
+    }
252
+
253
+    /**
254
+     * @param OutputInterface $output
255
+     */
256
+    private function restoreShares(OutputInterface $output) {
257
+        $output->writeln("Restoring shares ...");
258
+        $progress = new ProgressBar($output, count($this->shares));
259
+
260
+        foreach($this->shares as $share) {
261
+            try {
262
+                if ($share->getSharedWith() === $this->destinationUser) {
263
+                    // Unmount the shares before deleting, so we don't try to get the storage later on.
264
+                    $shareMountPoint = $this->mountManager->find('/' . $this->destinationUser . '/files' . $share->getTarget());
265
+                    if ($shareMountPoint) {
266
+                        $this->mountManager->removeMount($shareMountPoint->getMountPoint());
267
+                    }
268
+                    $this->shareManager->deleteShare($share);
269
+                } else {
270
+                    if ($share->getShareOwner() === $this->sourceUser) {
271
+                        $share->setShareOwner($this->destinationUser);
272
+                    }
273
+                    if ($share->getSharedBy() === $this->sourceUser) {
274
+                        $share->setSharedBy($this->destinationUser);
275
+                    }
276
+
277
+                    $this->shareManager->updateShare($share);
278
+                }
279
+            } catch (\OCP\Files\NotFoundException $e) {
280
+                $output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>');
281
+            } catch (\Exception $e) {
282
+                $output->writeln('<error>Could not restore share with id ' . $share->getId() . ':' . $e->getTraceAsString() . '</error>');
283
+            }
284
+            $progress->advance();
285
+        }
286
+        $progress->finish();
287
+        $output->writeln('');
288
+    }
289 289
 }
Please login to merge, or discard this patch.
apps/workflowengine/lib/Check/FileMimeType.php 1 patch
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -29,159 +29,159 @@
 block discarded – undo
29 29
 
30 30
 class FileMimeType extends AbstractStringCheck {
31 31
 
32
-	/** @var array */
33
-	protected $mimeType;
34
-
35
-	/** @var IRequest */
36
-	protected $request;
37
-
38
-	/** @var IMimeTypeDetector */
39
-	protected $mimeTypeDetector;
40
-
41
-	/** @var IStorage */
42
-	protected $storage;
43
-
44
-	/** @var string */
45
-	protected $path;
46
-
47
-	/**
48
-	 * @param IL10N $l
49
-	 * @param IRequest $request
50
-	 * @param IMimeTypeDetector $mimeTypeDetector
51
-	 */
52
-	public function __construct(IL10N $l, IRequest $request, IMimeTypeDetector $mimeTypeDetector) {
53
-		parent::__construct($l);
54
-		$this->request = $request;
55
-		$this->mimeTypeDetector = $mimeTypeDetector;
56
-	}
57
-
58
-	/**
59
-	 * @param IStorage $storage
60
-	 * @param string $path
61
-	 */
62
-	public function setFileInfo(IStorage $storage, $path) {
63
-		$this->storage = $storage;
64
-		$this->path = $path;
65
-		if (!isset($this->mimeType[$this->storage->getId()][$this->path])
66
-			|| $this->mimeType[$this->storage->getId()][$this->path] === '') {
67
-			$this->mimeType[$this->storage->getId()][$this->path] = null;
68
-		}
69
-	}
70
-
71
-	/**
72
-	 * @return string
73
-	 */
74
-	protected function getActualValue() {
75
-		if ($this->mimeType[$this->storage->getId()][$this->path] !== null) {
76
-			return $this->mimeType[$this->storage->getId()][$this->path];
77
-		}
78
-
79
-		if ($this->isWebDAVRequest()) {
80
-			// Creating a folder
81
-			if ($this->request->getMethod() === 'MKCOL') {
82
-				$this->mimeType[$this->storage->getId()][$this->path] = 'httpd/unix-directory';
83
-				return $this->mimeType[$this->storage->getId()][$this->path];
84
-			}
85
-
86
-			if ($this->request->getMethod() === 'PUT') {
87
-				$path = $this->request->getPathInfo();
88
-				$this->mimeType[$this->storage->getId()][$this->path] = $this->mimeTypeDetector->detectPath($path);
89
-				return $this->mimeType[$this->storage->getId()][$this->path];
90
-			}
91
-		} else if ($this->isPublicWebDAVRequest()) {
92
-			if ($this->request->getMethod() === 'PUT') {
93
-				$path = $this->request->getPathInfo();
94
-				if (strpos($path, '/webdav/') === 0) {
95
-					$path = substr($path, strlen('/webdav'));
96
-				}
97
-				$path = $this->path . $path;
98
-				$this->mimeType[$this->storage->getId()][$path] = $this->mimeTypeDetector->detectPath($path);
99
-				return $this->mimeType[$this->storage->getId()][$path];
100
-			}
101
-		}
102
-
103
-		if (in_array($this->request->getMethod(), ['POST', 'PUT'])) {
104
-			$files = $this->request->getUploadedFile('files');
105
-			if (isset($files['type'][0])) {
106
-				$mimeType = $files['type'][0];
107
-				if ($this->mimeType === 'application/octet-stream') {
108
-					// Maybe not...
109
-					$mimeTypeTest = $this->mimeTypeDetector->detectPath($files['name'][0]);
110
-					if ($mimeTypeTest !== 'application/octet-stream' && $mimeTypeTest !== false) {
111
-						$mimeType = $mimeTypeTest;
112
-					} else {
113
-						$mimeTypeTest = $this->mimeTypeDetector->detect($files['tmp_name'][0]);
114
-						if ($mimeTypeTest !== 'application/octet-stream' && $mimeTypeTest !== false) {
115
-							$mimeType = $mimeTypeTest;
116
-						}
117
-					}
118
-				}
119
-				$this->mimeType[$this->storage->getId()][$this->path] = $mimeType;
120
-				return $mimeType;
121
-			}
122
-		}
123
-
124
-		$this->mimeType[$this->storage->getId()][$this->path] = $this->storage->getMimeType($this->path);
125
-		if ($this->mimeType[$this->storage->getId()][$this->path] === 'application/octet-stream') {
126
-			$this->mimeType[$this->storage->getId()][$this->path] = $this->detectMimetypeFromPath();
127
-		}
128
-
129
-		return $this->mimeType[$this->storage->getId()][$this->path];
130
-	}
131
-
132
-	/**
133
-	 * @return string
134
-	 */
135
-	protected function detectMimetypeFromPath() {
136
-		$mimeType = $this->mimeTypeDetector->detectPath($this->path);
137
-		if ($mimeType !== 'application/octet-stream' && $mimeType !== false) {
138
-			return $mimeType;
139
-		}
140
-
141
-		if ($this->storage->instanceOfStorage('\OC\Files\Storage\Local')
142
-			|| $this->storage->instanceOfStorage('\OC\Files\Storage\Home')
143
-			|| $this->storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')) {
144
-			$localFile = $this->storage->getLocalFile($this->path);
145
-			if ($localFile !== false) {
146
-				$mimeType = $this->mimeTypeDetector->detect($localFile);
147
-				if ($mimeType !== false) {
148
-					return $mimeType;
149
-				}
150
-			}
151
-
152
-			return 'application/octet-stream';
153
-		} else {
154
-			$handle = $this->storage->fopen($this->path, 'r');
155
-			$data = fread($handle, 8024);
156
-			fclose($handle);
157
-			$mimeType = $this->mimeTypeDetector->detectString($data);
158
-			if ($mimeType !== false) {
159
-				return $mimeType;
160
-			}
161
-
162
-			return 'application/octet-stream';
163
-		}
164
-	}
165
-
166
-	/**
167
-	 * @return bool
168
-	 */
169
-	protected function isWebDAVRequest() {
170
-		return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && (
171
-			$this->request->getPathInfo() === '/webdav' ||
172
-			strpos($this->request->getPathInfo(), '/webdav/') === 0 ||
173
-			$this->request->getPathInfo() === '/dav/files' ||
174
-			strpos($this->request->getPathInfo(), '/dav/files/') === 0
175
-		);
176
-	}
177
-
178
-	/**
179
-	 * @return bool
180
-	 */
181
-	protected function isPublicWebDAVRequest() {
182
-		return substr($this->request->getScriptName(), 0 - strlen('/public.php')) === '/public.php' && (
183
-			$this->request->getPathInfo() === '/webdav' ||
184
-			strpos($this->request->getPathInfo(), '/webdav/') === 0
185
-		);
186
-	}
32
+    /** @var array */
33
+    protected $mimeType;
34
+
35
+    /** @var IRequest */
36
+    protected $request;
37
+
38
+    /** @var IMimeTypeDetector */
39
+    protected $mimeTypeDetector;
40
+
41
+    /** @var IStorage */
42
+    protected $storage;
43
+
44
+    /** @var string */
45
+    protected $path;
46
+
47
+    /**
48
+     * @param IL10N $l
49
+     * @param IRequest $request
50
+     * @param IMimeTypeDetector $mimeTypeDetector
51
+     */
52
+    public function __construct(IL10N $l, IRequest $request, IMimeTypeDetector $mimeTypeDetector) {
53
+        parent::__construct($l);
54
+        $this->request = $request;
55
+        $this->mimeTypeDetector = $mimeTypeDetector;
56
+    }
57
+
58
+    /**
59
+     * @param IStorage $storage
60
+     * @param string $path
61
+     */
62
+    public function setFileInfo(IStorage $storage, $path) {
63
+        $this->storage = $storage;
64
+        $this->path = $path;
65
+        if (!isset($this->mimeType[$this->storage->getId()][$this->path])
66
+            || $this->mimeType[$this->storage->getId()][$this->path] === '') {
67
+            $this->mimeType[$this->storage->getId()][$this->path] = null;
68
+        }
69
+    }
70
+
71
+    /**
72
+     * @return string
73
+     */
74
+    protected function getActualValue() {
75
+        if ($this->mimeType[$this->storage->getId()][$this->path] !== null) {
76
+            return $this->mimeType[$this->storage->getId()][$this->path];
77
+        }
78
+
79
+        if ($this->isWebDAVRequest()) {
80
+            // Creating a folder
81
+            if ($this->request->getMethod() === 'MKCOL') {
82
+                $this->mimeType[$this->storage->getId()][$this->path] = 'httpd/unix-directory';
83
+                return $this->mimeType[$this->storage->getId()][$this->path];
84
+            }
85
+
86
+            if ($this->request->getMethod() === 'PUT') {
87
+                $path = $this->request->getPathInfo();
88
+                $this->mimeType[$this->storage->getId()][$this->path] = $this->mimeTypeDetector->detectPath($path);
89
+                return $this->mimeType[$this->storage->getId()][$this->path];
90
+            }
91
+        } else if ($this->isPublicWebDAVRequest()) {
92
+            if ($this->request->getMethod() === 'PUT') {
93
+                $path = $this->request->getPathInfo();
94
+                if (strpos($path, '/webdav/') === 0) {
95
+                    $path = substr($path, strlen('/webdav'));
96
+                }
97
+                $path = $this->path . $path;
98
+                $this->mimeType[$this->storage->getId()][$path] = $this->mimeTypeDetector->detectPath($path);
99
+                return $this->mimeType[$this->storage->getId()][$path];
100
+            }
101
+        }
102
+
103
+        if (in_array($this->request->getMethod(), ['POST', 'PUT'])) {
104
+            $files = $this->request->getUploadedFile('files');
105
+            if (isset($files['type'][0])) {
106
+                $mimeType = $files['type'][0];
107
+                if ($this->mimeType === 'application/octet-stream') {
108
+                    // Maybe not...
109
+                    $mimeTypeTest = $this->mimeTypeDetector->detectPath($files['name'][0]);
110
+                    if ($mimeTypeTest !== 'application/octet-stream' && $mimeTypeTest !== false) {
111
+                        $mimeType = $mimeTypeTest;
112
+                    } else {
113
+                        $mimeTypeTest = $this->mimeTypeDetector->detect($files['tmp_name'][0]);
114
+                        if ($mimeTypeTest !== 'application/octet-stream' && $mimeTypeTest !== false) {
115
+                            $mimeType = $mimeTypeTest;
116
+                        }
117
+                    }
118
+                }
119
+                $this->mimeType[$this->storage->getId()][$this->path] = $mimeType;
120
+                return $mimeType;
121
+            }
122
+        }
123
+
124
+        $this->mimeType[$this->storage->getId()][$this->path] = $this->storage->getMimeType($this->path);
125
+        if ($this->mimeType[$this->storage->getId()][$this->path] === 'application/octet-stream') {
126
+            $this->mimeType[$this->storage->getId()][$this->path] = $this->detectMimetypeFromPath();
127
+        }
128
+
129
+        return $this->mimeType[$this->storage->getId()][$this->path];
130
+    }
131
+
132
+    /**
133
+     * @return string
134
+     */
135
+    protected function detectMimetypeFromPath() {
136
+        $mimeType = $this->mimeTypeDetector->detectPath($this->path);
137
+        if ($mimeType !== 'application/octet-stream' && $mimeType !== false) {
138
+            return $mimeType;
139
+        }
140
+
141
+        if ($this->storage->instanceOfStorage('\OC\Files\Storage\Local')
142
+            || $this->storage->instanceOfStorage('\OC\Files\Storage\Home')
143
+            || $this->storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')) {
144
+            $localFile = $this->storage->getLocalFile($this->path);
145
+            if ($localFile !== false) {
146
+                $mimeType = $this->mimeTypeDetector->detect($localFile);
147
+                if ($mimeType !== false) {
148
+                    return $mimeType;
149
+                }
150
+            }
151
+
152
+            return 'application/octet-stream';
153
+        } else {
154
+            $handle = $this->storage->fopen($this->path, 'r');
155
+            $data = fread($handle, 8024);
156
+            fclose($handle);
157
+            $mimeType = $this->mimeTypeDetector->detectString($data);
158
+            if ($mimeType !== false) {
159
+                return $mimeType;
160
+            }
161
+
162
+            return 'application/octet-stream';
163
+        }
164
+    }
165
+
166
+    /**
167
+     * @return bool
168
+     */
169
+    protected function isWebDAVRequest() {
170
+        return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && (
171
+            $this->request->getPathInfo() === '/webdav' ||
172
+            strpos($this->request->getPathInfo(), '/webdav/') === 0 ||
173
+            $this->request->getPathInfo() === '/dav/files' ||
174
+            strpos($this->request->getPathInfo(), '/dav/files/') === 0
175
+        );
176
+    }
177
+
178
+    /**
179
+     * @return bool
180
+     */
181
+    protected function isPublicWebDAVRequest() {
182
+        return substr($this->request->getScriptName(), 0 - strlen('/public.php')) === '/public.php' && (
183
+            $this->request->getPathInfo() === '/webdav' ||
184
+            strpos($this->request->getPathInfo(), '/webdav/') === 0
185
+        );
186
+    }
187 187
 }
Please login to merge, or discard this patch.
lib/private/RedisFactory.php 1 patch
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -23,86 +23,86 @@
 block discarded – undo
23 23
 namespace OC;
24 24
 
25 25
 class RedisFactory {
26
-	/** @var  \Redis */
27
-	private $instance;
26
+    /** @var  \Redis */
27
+    private $instance;
28 28
 
29
-	/** @var  SystemConfig */
30
-	private $config;
29
+    /** @var  SystemConfig */
30
+    private $config;
31 31
 
32
-	/**
33
-	 * RedisFactory constructor.
34
-	 *
35
-	 * @param SystemConfig $config
36
-	 */
37
-	public function __construct(SystemConfig $config) {
38
-		$this->config = $config;
39
-	}
32
+    /**
33
+     * RedisFactory constructor.
34
+     *
35
+     * @param SystemConfig $config
36
+     */
37
+    public function __construct(SystemConfig $config) {
38
+        $this->config = $config;
39
+    }
40 40
 
41
-	private function create() {
42
-		if ($config = $this->config->getValue('redis.cluster', [])) {
43
-			if (!class_exists('RedisCluster')) {
44
-				throw new \Exception('Redis Cluster support is not available');
45
-			}
46
-			// cluster config
47
-			if (isset($config['timeout'])) {
48
-				$timeout = $config['timeout'];
49
-			} else {
50
-				$timeout = null;
51
-			}
52
-			if (isset($config['read_timeout'])) {
53
-				$readTimeout = $config['read_timeout'];
54
-			} else {
55
-				$readTimeout = null;
56
-			}
57
-			$this->instance = new \RedisCluster(null, $config['seeds'], $timeout, $readTimeout);
41
+    private function create() {
42
+        if ($config = $this->config->getValue('redis.cluster', [])) {
43
+            if (!class_exists('RedisCluster')) {
44
+                throw new \Exception('Redis Cluster support is not available');
45
+            }
46
+            // cluster config
47
+            if (isset($config['timeout'])) {
48
+                $timeout = $config['timeout'];
49
+            } else {
50
+                $timeout = null;
51
+            }
52
+            if (isset($config['read_timeout'])) {
53
+                $readTimeout = $config['read_timeout'];
54
+            } else {
55
+                $readTimeout = null;
56
+            }
57
+            $this->instance = new \RedisCluster(null, $config['seeds'], $timeout, $readTimeout);
58 58
 
59
-			if (isset($config['failover_mode'])) {
60
-				$this->instance->setOption(\RedisCluster::OPT_SLAVE_FAILOVER, $config['failover_mode']);
61
-			}
62
-		} else {
59
+            if (isset($config['failover_mode'])) {
60
+                $this->instance->setOption(\RedisCluster::OPT_SLAVE_FAILOVER, $config['failover_mode']);
61
+            }
62
+        } else {
63 63
 
64
-			$this->instance = new \Redis();
65
-			$config = $this->config->getValue('redis', []);
66
-			if (isset($config['host'])) {
67
-				$host = $config['host'];
68
-			} else {
69
-				$host = '127.0.0.1';
70
-			}
71
-			if (isset($config['port'])) {
72
-				$port = $config['port'];
73
-			} else {
74
-				$port = 6379;
75
-			}
76
-			if (isset($config['timeout'])) {
77
-				$timeout = $config['timeout'];
78
-			} else {
79
-				$timeout = 0.0; // unlimited
80
-			}
64
+            $this->instance = new \Redis();
65
+            $config = $this->config->getValue('redis', []);
66
+            if (isset($config['host'])) {
67
+                $host = $config['host'];
68
+            } else {
69
+                $host = '127.0.0.1';
70
+            }
71
+            if (isset($config['port'])) {
72
+                $port = $config['port'];
73
+            } else {
74
+                $port = 6379;
75
+            }
76
+            if (isset($config['timeout'])) {
77
+                $timeout = $config['timeout'];
78
+            } else {
79
+                $timeout = 0.0; // unlimited
80
+            }
81 81
 
82
-			$this->instance->connect($host, $port, $timeout);
83
-			if (isset($config['password']) && $config['password'] !== '') {
84
-				$this->instance->auth($config['password']);
85
-			}
82
+            $this->instance->connect($host, $port, $timeout);
83
+            if (isset($config['password']) && $config['password'] !== '') {
84
+                $this->instance->auth($config['password']);
85
+            }
86 86
 
87
-			if (isset($config['dbindex'])) {
88
-				$this->instance->select($config['dbindex']);
89
-			}
90
-		}
91
-	}
87
+            if (isset($config['dbindex'])) {
88
+                $this->instance->select($config['dbindex']);
89
+            }
90
+        }
91
+    }
92 92
 
93
-	public function getInstance() {
94
-		if (!$this->isAvailable()) {
95
-			throw new \Exception('Redis support is not available');
96
-		}
97
-		if (!$this->instance instanceof \Redis) {
98
-			$this->create();
99
-		}
93
+    public function getInstance() {
94
+        if (!$this->isAvailable()) {
95
+            throw new \Exception('Redis support is not available');
96
+        }
97
+        if (!$this->instance instanceof \Redis) {
98
+            $this->create();
99
+        }
100 100
 
101
-		return $this->instance;
102
-	}
101
+        return $this->instance;
102
+    }
103 103
 
104
-	public function isAvailable() {
105
-		return extension_loaded('redis')
106
-		&& version_compare(phpversion('redis'), '2.2.5', '>=');
107
-	}
104
+    public function isAvailable() {
105
+        return extension_loaded('redis')
106
+        && version_compare(phpversion('redis'), '2.2.5', '>=');
107
+    }
108 108
 }
Please login to merge, or discard this patch.
apps/dav/lib/Avatars/RootCollection.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -7,23 +7,23 @@
 block discarded – undo
7 7
 
8 8
 class RootCollection extends AbstractPrincipalCollection {
9 9
 
10
-	/**
11
-	 * This method returns a node for a principal.
12
-	 *
13
-	 * The passed array contains principal information, and is guaranteed to
14
-	 * at least contain a uri item. Other properties may or may not be
15
-	 * supplied by the authentication backend.
16
-	 *
17
-	 * @param array $principalInfo
18
-	 * @return AvatarHome
19
-	 */
20
-	public function getChildForPrincipal(array $principalInfo) {
21
-		$avatarManager = \OC::$server->getAvatarManager();
22
-		return new AvatarHome($principalInfo, $avatarManager);
23
-	}
10
+    /**
11
+     * This method returns a node for a principal.
12
+     *
13
+     * The passed array contains principal information, and is guaranteed to
14
+     * at least contain a uri item. Other properties may or may not be
15
+     * supplied by the authentication backend.
16
+     *
17
+     * @param array $principalInfo
18
+     * @return AvatarHome
19
+     */
20
+    public function getChildForPrincipal(array $principalInfo) {
21
+        $avatarManager = \OC::$server->getAvatarManager();
22
+        return new AvatarHome($principalInfo, $avatarManager);
23
+    }
24 24
 
25
-	public function getName() {
26
-		return 'avatars';
27
-	}
25
+    public function getName() {
26
+        return 'avatars';
27
+    }
28 28
 
29 29
 }
Please login to merge, or discard this patch.
apps/dav/lib/Migration/CalDAVRemoveEmptyValue.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -33,87 +33,87 @@
 block discarded – undo
33 33
 
34 34
 class CalDAVRemoveEmptyValue implements IRepairStep {
35 35
 
36
-	/** @var IDBConnection */
37
-	private $db;
38
-
39
-	/** @var CalDavBackend */
40
-	private $calDavBackend;
41
-
42
-	/** @var ILogger */
43
-	private $logger;
44
-
45
-	/**
46
-	 * @param IDBConnection $db
47
-	 * @param CalDavBackend $calDavBackend
48
-	 * @param ILogger $logger
49
-	 */
50
-	public function __construct(IDBConnection $db, CalDavBackend $calDavBackend, ILogger $logger) {
51
-		$this->db = $db;
52
-		$this->calDavBackend = $calDavBackend;
53
-		$this->logger = $logger;
54
-	}
55
-
56
-	public function getName() {
57
-		return 'Fix broken values of calendar objects';
58
-	}
59
-
60
-	public function run(IOutput $output) {
61
-		$pattern = ';VALUE=:';
62
-		$count = $warnings = 0;
63
-
64
-		$objects = $this->getInvalidObjects($pattern);
65
-
66
-		$output->startProgress(count($objects));
67
-		foreach ($objects as $row) {
68
-			$calObject = $this->calDavBackend->getCalendarObject((int)$row['calendarid'], $row['uri']);
69
-			$data = preg_replace('/' . $pattern . '/', ':', $calObject['calendardata']);
70
-
71
-			if ($data !== $calObject['calendardata']) {
72
-				$output->advance();
73
-
74
-				try {
75
-					$this->calDavBackend->getDenormalizedData($data);
76
-				} catch (InvalidDataException $e) {
77
-					$this->logger->info('Calendar object for calendar {cal} with uri {uri} still invalid', [
78
-						'app' => 'dav',
79
-						'cal' => (int)$row['calendarid'],
80
-						'uri' => $row['uri'],
81
-					]);
82
-					$warnings++;
83
-					continue;
84
-				}
85
-
86
-				$this->calDavBackend->updateCalendarObject((int)$row['calendarid'], $row['uri'], $data);
87
-				$count++;
88
-			}
89
-		}
90
-		$output->finishProgress();
91
-
92
-		if ($warnings > 0) {
93
-			$output->warning(sprintf('%d events could not be updated, see log file for more information', $warnings));
94
-		}
95
-		if ($count > 0) {
96
-			$output->info(sprintf('Updated %d events', $count));
97
-		}
98
-	}
99
-
100
-	protected function getInvalidObjects($pattern) {
101
-		$query = $this->db->getQueryBuilder();
102
-		$query->select(['calendarid', 'uri'])
103
-			->from('calendarobjects')
104
-			->where($query->expr()->like(
105
-				'calendardata',
106
-				$query->createNamedParameter(
107
-					'%' . $this->db->escapeLikeParameter($pattern) . '%',
108
-					IQueryBuilder::PARAM_STR
109
-				),
110
-				IQueryBuilder::PARAM_STR
111
-			));
112
-
113
-		$result = $query->execute();
114
-		$rows = $result->fetchAll();
115
-		$result->closeCursor();
116
-
117
-		return $rows;
118
-	}
36
+    /** @var IDBConnection */
37
+    private $db;
38
+
39
+    /** @var CalDavBackend */
40
+    private $calDavBackend;
41
+
42
+    /** @var ILogger */
43
+    private $logger;
44
+
45
+    /**
46
+     * @param IDBConnection $db
47
+     * @param CalDavBackend $calDavBackend
48
+     * @param ILogger $logger
49
+     */
50
+    public function __construct(IDBConnection $db, CalDavBackend $calDavBackend, ILogger $logger) {
51
+        $this->db = $db;
52
+        $this->calDavBackend = $calDavBackend;
53
+        $this->logger = $logger;
54
+    }
55
+
56
+    public function getName() {
57
+        return 'Fix broken values of calendar objects';
58
+    }
59
+
60
+    public function run(IOutput $output) {
61
+        $pattern = ';VALUE=:';
62
+        $count = $warnings = 0;
63
+
64
+        $objects = $this->getInvalidObjects($pattern);
65
+
66
+        $output->startProgress(count($objects));
67
+        foreach ($objects as $row) {
68
+            $calObject = $this->calDavBackend->getCalendarObject((int)$row['calendarid'], $row['uri']);
69
+            $data = preg_replace('/' . $pattern . '/', ':', $calObject['calendardata']);
70
+
71
+            if ($data !== $calObject['calendardata']) {
72
+                $output->advance();
73
+
74
+                try {
75
+                    $this->calDavBackend->getDenormalizedData($data);
76
+                } catch (InvalidDataException $e) {
77
+                    $this->logger->info('Calendar object for calendar {cal} with uri {uri} still invalid', [
78
+                        'app' => 'dav',
79
+                        'cal' => (int)$row['calendarid'],
80
+                        'uri' => $row['uri'],
81
+                    ]);
82
+                    $warnings++;
83
+                    continue;
84
+                }
85
+
86
+                $this->calDavBackend->updateCalendarObject((int)$row['calendarid'], $row['uri'], $data);
87
+                $count++;
88
+            }
89
+        }
90
+        $output->finishProgress();
91
+
92
+        if ($warnings > 0) {
93
+            $output->warning(sprintf('%d events could not be updated, see log file for more information', $warnings));
94
+        }
95
+        if ($count > 0) {
96
+            $output->info(sprintf('Updated %d events', $count));
97
+        }
98
+    }
99
+
100
+    protected function getInvalidObjects($pattern) {
101
+        $query = $this->db->getQueryBuilder();
102
+        $query->select(['calendarid', 'uri'])
103
+            ->from('calendarobjects')
104
+            ->where($query->expr()->like(
105
+                'calendardata',
106
+                $query->createNamedParameter(
107
+                    '%' . $this->db->escapeLikeParameter($pattern) . '%',
108
+                    IQueryBuilder::PARAM_STR
109
+                ),
110
+                IQueryBuilder::PARAM_STR
111
+            ));
112
+
113
+        $result = $query->execute();
114
+        $rows = $result->fetchAll();
115
+        $result->closeCursor();
116
+
117
+        return $rows;
118
+    }
119 119
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -27,21 +27,21 @@
 block discarded – undo
27 27
 
28 28
 class CompFilter implements XmlDeserializable {
29 29
 
30
-	/**
31
-	 * @param Reader $reader
32
-	 * @throws BadRequest
33
-	 * @return string
34
-	 */
35
-	static function xmlDeserialize(Reader $reader) {
36
-		$att = $reader->parseAttributes();
37
-		$componentName = $att['name'];
30
+    /**
31
+     * @param Reader $reader
32
+     * @throws BadRequest
33
+     * @return string
34
+     */
35
+    static function xmlDeserialize(Reader $reader) {
36
+        $att = $reader->parseAttributes();
37
+        $componentName = $att['name'];
38 38
 
39
-		$reader->parseInnerTree();
39
+        $reader->parseInnerTree();
40 40
 
41
-		if (!is_string($componentName)) {
42
-			throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}comp-filter requires a valid name attribute');
43
-		}
41
+        if (!is_string($componentName)) {
42
+            throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}comp-filter requires a valid name attribute');
43
+        }
44 44
 
45
-		return $componentName;
46
-	}
45
+        return $componentName;
46
+    }
47 47
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -27,17 +27,17 @@
 block discarded – undo
27 27
 
28 28
 class SearchTermFilter implements XmlDeserializable {
29 29
 
30
-	/**
31
-	 * @param Reader $reader
32
-	 * @throws BadRequest
33
-	 * @return string
34
-	 */
35
-	static function xmlDeserialize(Reader $reader) {
36
-		$value = $reader->parseInnerTree();
37
-		if (!is_string($value)) {
38
-			throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}search-term has illegal value');
39
-		}
30
+    /**
31
+     * @param Reader $reader
32
+     * @throws BadRequest
33
+     * @return string
34
+     */
35
+    static function xmlDeserialize(Reader $reader) {
36
+        $value = $reader->parseInnerTree();
37
+        if (!is_string($value)) {
38
+            throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}search-term has illegal value');
39
+        }
40 40
 
41
-		return $value;
42
-	}
41
+        return $value;
42
+    }
43 43
 }
44 44
\ No newline at end of file
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -27,21 +27,21 @@
 block discarded – undo
27 27
 
28 28
 class PropFilter implements XmlDeserializable {
29 29
 
30
-	/**
31
-	 * @param Reader $reader
32
-	 * @throws BadRequest
33
-	 * @return string
34
-	 */
35
-	static function xmlDeserialize(Reader $reader) {
36
-		$att = $reader->parseAttributes();
37
-		$componentName = $att['name'];
30
+    /**
31
+     * @param Reader $reader
32
+     * @throws BadRequest
33
+     * @return string
34
+     */
35
+    static function xmlDeserialize(Reader $reader) {
36
+        $att = $reader->parseAttributes();
37
+        $componentName = $att['name'];
38 38
 
39
-		$reader->parseInnerTree();
39
+        $reader->parseInnerTree();
40 40
 
41
-		if (!is_string($componentName)) {
42
-			throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}prop-filter requires a valid name attribute');
43
-		}
41
+        if (!is_string($componentName)) {
42
+            throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}prop-filter requires a valid name attribute');
43
+        }
44 44
 
45
-		return $componentName;
46
-	}
45
+        return $componentName;
46
+    }
47 47
 }
Please login to merge, or discard this patch.