Skip to content

Commit 962be7f

Browse files
committed
Internal: Fix conditions to check the value for the document.access_url_specific_files setting
1 parent 47c0b88 commit 962be7f

File tree

2 files changed

+49
-41
lines changed

2 files changed

+49
-41
lines changed

src/CoreBundle/Controller/ResourceController.php

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Chamilo\CoreBundle\Entity\Session;
1414
use Chamilo\CoreBundle\Entity\User;
1515
use Chamilo\CoreBundle\Helpers\AccessUrlHelper;
16+
use Chamilo\CoreBundle\Helpers\ResourceFileHelper;
1617
use Chamilo\CoreBundle\Helpers\UserHelper;
1718
use Chamilo\CoreBundle\Repository\ResourceFileRepository;
1819
use Chamilo\CoreBundle\Repository\ResourceNodeRepository;
@@ -144,8 +145,7 @@ public function diskSpace(Request $request): Response
144145
public function view(
145146
Request $request,
146147
TrackEDownloadsRepository $trackEDownloadsRepository,
147-
SettingsManager $settingsManager,
148-
AccessUrlHelper $accessUrlHelper
148+
ResourceFileHelper $resourceFileHelper,
149149
): Response {
150150
$id = $request->get('id');
151151
$resourceFileId = $request->get('resourceFileId');
@@ -161,26 +161,7 @@ public function view(
161161
$resourceFile = $this->resourceFileRepository->find($resourceFileId);
162162
}
163163

164-
if (!$resourceFile) {
165-
$accessUrlSpecificFiles = $settingsManager->getSetting('document.access_url_specific_files') && $accessUrlHelper->isMultiple();
166-
$currentUrl = $accessUrlHelper->getCurrent()?->getUrl();
167-
168-
$resourceFiles = $resourceNode->getResourceFiles();
169-
170-
if ($accessUrlSpecificFiles) {
171-
foreach ($resourceFiles as $file) {
172-
if ($file->getAccessUrl() && $file->getAccessUrl()->getUrl() === $currentUrl) {
173-
$resourceFile = $file;
174-
175-
break;
176-
}
177-
}
178-
}
179-
180-
if (!$resourceFile) {
181-
$resourceFile = $resourceFiles->filter(fn ($file) => null === $file->getAccessUrl())->first();
182-
}
183-
}
164+
$resourceFile ??= $resourceFileHelper->resolveResourceFileByAccessUrl($resourceNode);
184165

185166
if (!$resourceFile) {
186167
throw new FileNotFoundException($this->trans('Resource file not found for the given resource node'));
@@ -254,8 +235,7 @@ public function link(Request $request, RouterInterface $router, CLinkRepository
254235
public function download(
255236
Request $request,
256237
TrackEDownloadsRepository $trackEDownloadsRepository,
257-
SettingsManager $settingsManager,
258-
AccessUrlHelper $accessUrlHelper
238+
ResourceFileHelper $resourceFileHelper,
259239
): Response {
260240
$id = $request->get('id');
261241
$resourceNode = $this->getResourceNodeRepository()->findOneBy(['uuid' => $id]);
@@ -272,23 +252,7 @@ public function download(
272252
$this->trans('Unauthorised access to resource')
273253
);
274254

275-
$accessUrlSpecificFiles = $settingsManager->getSetting('document.access_url_specific_files') && $accessUrlHelper->isMultiple();
276-
$currentUrl = $accessUrlHelper->getCurrent()?->getUrl();
277-
278-
$resourceFiles = $resourceNode->getResourceFiles();
279-
$resourceFile = null;
280-
281-
if ($accessUrlSpecificFiles) {
282-
foreach ($resourceFiles as $file) {
283-
if ($file->getAccessUrl() && $file->getAccessUrl()->getUrl() === $currentUrl) {
284-
$resourceFile = $file;
285-
286-
break;
287-
}
288-
}
289-
}
290-
291-
$resourceFile ??= $resourceFiles->filter(fn ($file) => null === $file->getAccessUrl())->first();
255+
$resourceFile = $resourceFileHelper->resolveResourceFileByAccessUrl($resourceNode);
292256

293257
// If resource node has a file just download it. Don't download the children.
294258
if ($resourceFile) {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
/* For licensing terms, see /license.txt */
4+
5+
declare(strict_types=1);
6+
7+
namespace Chamilo\CoreBundle\Helpers;
8+
9+
use Chamilo\CoreBundle\Entity\ResourceFile;
10+
use Chamilo\CoreBundle\Entity\ResourceNode;
11+
use Chamilo\CoreBundle\Settings\SettingsManager;
12+
13+
class ResourceFileHelper
14+
{
15+
public function __construct(
16+
private readonly SettingsManager $settingsManager,
17+
private readonly AccessUrlHelper $accessUrlHelper,
18+
){}
19+
20+
public function resolveResourceFileByAccessUrl(ResourceNode $resourceNode): ?ResourceFile
21+
{
22+
$accessUrlSpecificFiles = 'true' === $this->settingsManager->getSetting('document.access_url_specific_files')
23+
&& $this->accessUrlHelper->isMultiple();
24+
25+
$resourceFile = null;
26+
$resourceFiles = $resourceNode->getResourceFiles();
27+
28+
if ($accessUrlSpecificFiles) {
29+
$currentUrl = $this->accessUrlHelper->getCurrent()?->getUrl();
30+
31+
foreach ($resourceFiles as $file) {
32+
if ($file->getAccessUrl() && $file->getAccessUrl()->getUrl() === $currentUrl) {
33+
$resourceFile = $file;
34+
35+
break;
36+
}
37+
}
38+
}
39+
40+
$resourceFile ??= $resourceFiles->filter(fn ($file) => null === $file->getAccessUrl())->first();
41+
42+
return $resourceFile;
43+
}
44+
}

0 commit comments

Comments
 (0)