Passed
Push — master ( 39bde9...53659e )
by
unknown
02:47
created

PreviewController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 8
nc 1
nop 9
dl 0
loc 20
rs 10
c 0
b 0
f 0

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
 * Nextcloud - Gallery
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 2017
11
 */
12
13
namespace OCA\Gallery\Controller;
14
15
use OCP\AppFramework\Http\DataResponse;
0 ignored issues
show
Bug introduced by
The type OCP\AppFramework\Http\DataResponse was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
16
use OCP\IRequest;
0 ignored issues
show
Bug introduced by
The type OCP\IRequest was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
17
use OCP\IURLGenerator;
0 ignored issues
show
Bug introduced by
The type OCP\IURLGenerator was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
18
use OCP\ILogger;
0 ignored issues
show
Bug introduced by
The type OCP\ILogger was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
19
use OCP\Files\File;
0 ignored issues
show
Bug introduced by
The type OCP\Files\File was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
20
21
use OCP\AppFramework\Controller;
0 ignored issues
show
Bug introduced by
The type OCP\AppFramework\Controller was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
22
use OCP\AppFramework\Http;
0 ignored issues
show
Bug introduced by
The type OCP\AppFramework\Http was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
23
use OCP\AppFramework\Http\JSONResponse;
0 ignored issues
show
Bug introduced by
The type OCP\AppFramework\Http\JSONResponse was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
24
25
use OCA\Gallery\Http\ImageResponse;
26
use OCA\Gallery\Service\ConfigService;
27
use OCA\Gallery\Service\ThumbnailService;
28
use OCA\Gallery\Service\PreviewService;
29
use OCA\Gallery\Service\DownloadService;
30
use OCA\Gallery\Utility\EventSource;
31
32
/**
33
 * Class PreviewController
34
 *
35
 * @package OCA\Gallery\Controller
36
 */
37
class PreviewController extends Controller {
38
39
	use Preview;
40
41
	/** @var EventSource */
42
	private $eventSource;
43
44
	/**
45
	 * Constructor
46
	 *
47
	 * @param string $appName
48
	 * @param IRequest $request
49
	 * @param IURLGenerator $urlGenerator
50
	 * @param ConfigService $configService
51
	 * @param ThumbnailService $thumbnailService
52
	 * @param PreviewService $previewService
53
	 * @param DownloadService $downloadService
54
	 * @param EventSource $eventSource
55
	 * @param ILogger $logger
56
	 */
57
	public function __construct(
58
		$appName,
59
		IRequest $request,
60
		IURLGenerator $urlGenerator,
61
		ConfigService $configService,
62
		ThumbnailService $thumbnailService,
63
		PreviewService $previewService,
64
		DownloadService $downloadService,
65
		EventSource $eventSource,
66
		ILogger $logger
67
	) {
68
		parent::__construct($appName, $request);
69
70
		$this->urlGenerator = $urlGenerator;
71
		$this->configService = $configService;
72
		$this->thumbnailService = $thumbnailService;
73
		$this->previewService = $previewService;
74
		$this->downloadService = $downloadService;
75
		$this->eventSource = $eventSource;
76
		$this->logger = $logger;
77
	}
78
79
	/**
80
	 * @NoAdminRequired
81
	 *
82
	 * Generates thumbnails
83
	 *
84
	 * Uses EventSource to send thumbnails back as soon as they're created
85
	 *
86
	 * FIXME: @LukasReschke says: The exit is required here because
87
	 * otherwise the AppFramework is trying to add headers as well after
88
	 * dispatching the request which results in a "Cannot modify header
89
	 * information" notice.
90
	 *
91
	 * WARNING: Returning a JSON response does not get rid of the problem
92
	 *
93
	 * @param string $ids the ID of the files of which we need thumbnail previews of
94
	 * @param bool $square
95
	 * @param double $scale
96
	 *
97
	 * @return array<string,array|string|null>
98
	 */
99
	public function getThumbnails($ids, $square, $scale) {
100
		$idsArray = explode(';', $ids);
101
102
		foreach ($idsArray as $id) {
103
			// Casting to integer here instead of using array_map to extract IDs from the URL
104
			list($thumbnail, $status) = $this->getThumbnail((int)$id, $square, $scale);
105
			$thumbnail['fileid'] = $id;
106
			$thumbnail['status'] = $status;
107
108
			$this->eventSource->send('preview', $thumbnail);
109
		}
110
		$this->eventSource->close();
111
112
		$this->exitController();
113
		// @codeCoverageIgnoreStart
114
	} // @codeCoverageIgnoreEnd
115
116
	/**
117
	 * @NoAdminRequired
118
	 * @NoCSRFRequired
119
	 *
120
	 * Sends either a large preview of the requested file or the original file itself
121
	 *
122
	 * @param int $fileId the ID of the file of which we need a large preview of
123
	 * @param int $width
124
	 * @param int $height
125
	 *
126
	 * @return DataResponse|ImageResponse|JSONResponse
127
	 */
128
	public function getPreview($fileId, $width, $height) {
129
		/** @type File $file */
130
		list($file, $status) = $this->getFile($fileId);
131
		if ($this->request->getHeader('If-None-Match') === $file->getEtag()) {
132
			return new DataResponse([], Http::STATUS_NOT_MODIFIED);
133
		}
134
		list($file, $preview, $status) = $this->getData($fileId, $width, $height);
135
136
		if (!$preview) {
137
			return new JSONResponse(
138
				[
139
					'message' => "I'm truly sorry, but we were unable to generate a preview for this file",
140
					'success' => false
141
				], $status
142
			);
143
		}
144
		$preview['name'] = $file->getName();
145
146
		$response = new ImageResponse($preview, $status);
0 ignored issues
show
Bug introduced by
$preview of type OC_Image|string is incompatible with the type array expected by parameter $image of OCA\Gallery\Http\ImageResponse::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

146
		$response = new ImageResponse(/** @scrutinizer ignore-type */ $preview, $status);
Loading history...
Bug introduced by
$status of type OC_Image|string is incompatible with the type integer expected by parameter $statusCode of OCA\Gallery\Http\ImageResponse::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

146
		$response = new ImageResponse($preview, /** @scrutinizer ignore-type */ $status);
Loading history...
147
		$response->setETag($file->getEtag());
148
		$lastModified = new \DateTime();
149
		$lastModified->setTimestamp($file->getMTime());
150
		$response->setLastModified($lastModified);
151
		$response->cacheFor(3600*24);
152
		return $response;
153
	}
154
155
}
156