Completed
Pull Request — stable9 (#52)
by Olivier
09:56
created

FilesController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 16

Duplication

Lines 19
Ratio 100 %

Code Coverage

Tests 9
CRAP Score 1

Importance

Changes 0
Metric Value
dl 19
loc 19
ccs 9
cts 9
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 16
nc 1
nop 8
crap 1

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 * ownCloud - galleryplus
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the COPYING file.
7
 *
8
 * @author Olivier Paroz <[email protected]>
9
 *
10
 * @copyright Olivier Paroz 2016
11
 */
12
13
namespace OCA\GalleryPlus\Controller;
14
15
use OCP\IRequest;
16
use OCP\IURLGenerator;
17
use OCP\ILogger;
18
19
use OCP\AppFramework\Controller;
20
use OCP\AppFramework\Http;
21
use OCP\AppFramework\Http\RedirectResponse;
22
23
use OCA\GalleryPlus\Http\ImageResponse;
24
use OCA\GalleryPlus\Service\SearchFolderService;
25
use OCA\GalleryPlus\Service\ConfigService;
26
use OCA\GalleryPlus\Service\SearchMediaService;
27
use OCA\GalleryPlus\Service\DownloadService;
28
use OCA\GalleryPlus\Service\ServiceException;
29
30
/**
31
 * Class FilesController
32
 *
33
 * @package OCA\GalleryPlus\Controller
34
 */
35
class FilesController extends Controller {
36
37
	use Files;
38
	use HttpError;
39
40
	/** @var IURLGenerator */
41
	private $urlGenerator;
42
43
	/**
44
	 * Constructor
45
	 *
46
	 * @param string $appName
47
	 * @param IRequest $request
48
	 * @param IURLGenerator $urlGenerator
49
	 * @param SearchFolderService $searchFolderService
50
	 * @param ConfigService $configService
51
	 * @param SearchMediaService $searchMediaService
52
	 * @param DownloadService $downloadService
53
	 * @param ILogger $logger
54
	 */
55 34 View Code Duplication
	public function __construct(
56
		$appName,
57
		IRequest $request,
58
		IURLGenerator $urlGenerator,
59
		SearchFolderService $searchFolderService,
60
		ConfigService $configService,
61
		SearchMediaService $searchMediaService,
62
		DownloadService $downloadService,
63
		ILogger $logger
64
	) {
65 34
		parent::__construct($appName, $request);
66
67 34
		$this->urlGenerator = $urlGenerator;
68 34
		$this->searchFolderService = $searchFolderService;
69 34
		$this->configService = $configService;
70 34
		$this->searchMediaService = $searchMediaService;
71 34
		$this->downloadService = $downloadService;
72 34
		$this->logger = $logger;
73 34
	}
74
75
	/**
76
	 * @NoAdminRequired
77
	 *
78
	 * Returns a list of all media files available to the authenticated user
79
	 *
80
	 *    * Authentication can be via a login/password or a token/(password)
81
	 *    * For private galleries, it returns all media files, with the full path from the root
82
	 *     folder For public galleries, the path starts from the folder the link gives access to
83
	 *     (virtual root)
84
	 *    * An exception is only caught in case something really wrong happens. As we don't test
85
	 *     files before including them in the list, we may return some bad apples
86
	 *
87
	 * @param string $location a path representing the current album in the app
88
	 * @param string $features the list of supported features
89
	 * @param string $etag the last known etag in the client
90
	 * @param string $mediatypes the list of supported media types
91
	 *
92
	 * @return array <string,array<string,string|int>>|Http\JSONResponse
0 ignored issues
show
Documentation introduced by
Should the return type not be array<string,array|strin...lean>|Http\JSONResponse?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
93
	 */
94 7
	public function getList($location, $features, $etag, $mediatypes) {
95 7
		$featuresArray = explode(';', $features);
96 7
		$mediaTypesArray = explode(';', $mediatypes);
97
		try {
98 7
			return $this->getFilesAndAlbums($location, $featuresArray, $etag, $mediaTypesArray);
99 2
		} catch (\Exception $exception) {
100 2
			return $this->jsonError($exception);
101
		}
102
	}
103
104
	/**
105
	 * @NoAdminRequired
106
	 *
107
	 * Sends the file matching the fileId
108
	 *
109
	 * @param int $fileId the ID of the file we want to download
110
	 * @param string|null $filename
111
	 *
112
	 * @return ImageResponse
113
	 */
114 9
	public function download($fileId, $filename = null) {
115
		try {
116 9
			$download = $this->getDownload($fileId, $filename);
117 2
		} catch (ServiceException $exception) {
118 2
			$code = $this->getHttpStatusCode($exception);
119 2
			$url = $this->urlGenerator->linkToRoute(
120 2
				$this->appName . '.page.error_page', ['code' => $code]
121
			);
122
123 2
			$response = new RedirectResponse($url);
124 2
			$response->addCookie('galleryErrorMessage', $exception->getMessage());
125
126 2
			return $response;
127
		}
128
129
		// That's the only exception out of all the image media types we serve
130 7
		if ($download['mimetype'] === 'image/svg+xml') {
131 2
			$download['mimetype'] = 'text/plain';
132
		}
133
134 7
		return new ImageResponse($download);
135
	}
136
137
}
138