|
|
|
@ -7,10 +7,15 @@ declare(strict_types=1); |
|
|
|
namespace Chamilo\CoreBundle\Controller\Admin; |
|
|
|
namespace Chamilo\CoreBundle\Controller\Admin; |
|
|
|
|
|
|
|
|
|
|
|
use Chamilo\CoreBundle\Controller\BaseController; |
|
|
|
use Chamilo\CoreBundle\Controller\BaseController; |
|
|
|
|
|
|
|
use Chamilo\CoreBundle\Entity\Page; |
|
|
|
|
|
|
|
use Chamilo\CoreBundle\Entity\PageCategory; |
|
|
|
|
|
|
|
use Chamilo\CoreBundle\Repository\PageCategoryRepository; |
|
|
|
|
|
|
|
use Chamilo\CoreBundle\Repository\PageRepository; |
|
|
|
use Chamilo\CoreBundle\Settings\SettingsManager; |
|
|
|
use Chamilo\CoreBundle\Settings\SettingsManager; |
|
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; |
|
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; |
|
|
|
use Symfony\Component\HttpFoundation\JsonResponse; |
|
|
|
use Symfony\Component\HttpFoundation\JsonResponse; |
|
|
|
use Symfony\Component\Routing\Annotation\Route; |
|
|
|
use Symfony\Component\Routing\Annotation\Route; |
|
|
|
|
|
|
|
use Symfony\Component\Serializer\SerializerInterface; |
|
|
|
use Symfony\Contracts\Translation\TranslatorInterface; |
|
|
|
use Symfony\Contracts\Translation\TranslatorInterface; |
|
|
|
|
|
|
|
|
|
|
|
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SESSION_MANAGER')")] |
|
|
|
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SESSION_MANAGER')")] |
|
|
|
@ -23,7 +28,10 @@ class IndexBlocksController extends BaseController |
|
|
|
|
|
|
|
|
|
|
|
public function __construct( |
|
|
|
public function __construct( |
|
|
|
private readonly TranslatorInterface $translator, |
|
|
|
private readonly TranslatorInterface $translator, |
|
|
|
private readonly SettingsManager $settingsManager |
|
|
|
private readonly SettingsManager $settingsManager, |
|
|
|
|
|
|
|
private readonly PageRepository $pageRepository, |
|
|
|
|
|
|
|
private readonly PageCategoryRepository $pageCategoryRepository, |
|
|
|
|
|
|
|
private readonly SerializerInterface $serializer |
|
|
|
) { |
|
|
|
) { |
|
|
|
$this->extAuthSource = [ |
|
|
|
$this->extAuthSource = [ |
|
|
|
'extldap' => [], |
|
|
|
'extldap' => [], |
|
|
|
@ -38,70 +46,110 @@ class IndexBlocksController extends BaseController |
|
|
|
|
|
|
|
|
|
|
|
$json = []; |
|
|
|
$json = []; |
|
|
|
$json['users'] = [ |
|
|
|
$json['users'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-users', |
|
|
|
'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']), |
|
|
|
'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']), |
|
|
|
'editable' => $this->isAdmin, |
|
|
|
'editable' => $this->isAdmin, |
|
|
|
'items' => $this->getItemsUsers(), |
|
|
|
'items' => $this->getItemsUsers(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-users'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
if ($this->isAdmin) { |
|
|
|
if ($this->isAdmin) { |
|
|
|
$json['courses'] = [ |
|
|
|
$json['courses'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-courses', |
|
|
|
'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'admin/course_list.php']), |
|
|
|
'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'admin/course_list.php']), |
|
|
|
'editable' => true, |
|
|
|
'editable' => true, |
|
|
|
'items' => $this->getItemsCourses(), |
|
|
|
'items' => $this->getItemsCourses(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-courses'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
$json['platform'] = [ |
|
|
|
$json['platform'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-platform', |
|
|
|
'searchUrl' => $this->generateUrl('chamilo_platform_settings_search'), |
|
|
|
'searchUrl' => $this->generateUrl('chamilo_platform_settings_search'), |
|
|
|
'editable' => true, |
|
|
|
'editable' => true, |
|
|
|
'items' => $this->getItemsPlatform(), |
|
|
|
'items' => $this->getItemsPlatform(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-platform'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
/* Settings */ |
|
|
|
/* Settings */ |
|
|
|
$json['settings'] = [ |
|
|
|
$json['settings'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-settings', |
|
|
|
'editable' => false, |
|
|
|
'editable' => false, |
|
|
|
'items' => $this->getItemsSettings(), |
|
|
|
'items' => $this->getItemsSettings(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-settings'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// Skills |
|
|
|
// Skills |
|
|
|
if ('true' === $this->settingsManager->getSetting('skill.allow_skills_tool')) { |
|
|
|
if ('true' === $this->settingsManager->getSetting('skill.allow_skills_tool')) { |
|
|
|
$json['skills'] = [ |
|
|
|
$json['skills'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-skills', |
|
|
|
'editable' => false, |
|
|
|
'editable' => false, |
|
|
|
'items' => $this->getItemsSkills(), |
|
|
|
'items' => $this->getItemsSkills(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-skills'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ('true' === $this->settingsManager->getSetting('gradebook.gradebook_dependency')) { |
|
|
|
if ('true' === $this->settingsManager->getSetting('gradebook.gradebook_dependency')) { |
|
|
|
$json['gradebook'] = [ |
|
|
|
$json['gradebook'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-gradebook', |
|
|
|
'editable' => false, |
|
|
|
'editable' => false, |
|
|
|
'items' => $this->getItemsGradebook(), |
|
|
|
'items' => $this->getItemsGradebook(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-gradebook'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Data protection |
|
|
|
// Data protection |
|
|
|
if ('true' !== $this->settingsManager->getSetting('profile.disable_gdpr')) { |
|
|
|
if ('true' !== $this->settingsManager->getSetting('profile.disable_gdpr')) { |
|
|
|
$json['data_privacy'] = [ |
|
|
|
$json['data_privacy'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-privacy', |
|
|
|
'editable' => false, |
|
|
|
'editable' => false, |
|
|
|
'items' => $this->getItemsPrivacy(), |
|
|
|
'items' => $this->getItemsPrivacy(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-privacy'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* Chamilo.org */ |
|
|
|
/* Chamilo.org */ |
|
|
|
$json['chamilo'] = [ |
|
|
|
$json['chamilo'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-chamilo', |
|
|
|
'editable' => false, |
|
|
|
'editable' => false, |
|
|
|
'items' => $this->getItemsChamilo(), |
|
|
|
'items' => $this->getItemsChamilo(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-chamilo'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* Sessions */ |
|
|
|
/* Sessions */ |
|
|
|
$json['sessions'] = [ |
|
|
|
$json['sessions'] = [ |
|
|
|
|
|
|
|
'id' => 'block-admin-sessions', |
|
|
|
'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'session/session_list.php']), |
|
|
|
'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'session/session_list.php']), |
|
|
|
'editable' => $this->isAdmin, |
|
|
|
'editable' => $this->isAdmin, |
|
|
|
'items' => $this->getItemsSessions(), |
|
|
|
'items' => $this->getItemsSessions(), |
|
|
|
|
|
|
|
'extraContent' => $this->getExtraContent('block-admin-sessions'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
return $this->json($json); |
|
|
|
return $this->json($json); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private function getExtraContent(string $title): ?array |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
/** @var Page|null $page */ |
|
|
|
|
|
|
|
$page = $this->pageRepository->findOneBy(['title' => $title]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$pageJsonld = $this->serializer->serialize($page, 'jsonld', ['groups' => ['adminblock:read']]); |
|
|
|
|
|
|
|
$pageArray = json_decode($pageJsonld, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($page) { |
|
|
|
|
|
|
|
return $pageArray; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** @var PageCategory $category */ |
|
|
|
|
|
|
|
$category = $this->pageCategoryRepository->findOneBy(['title' => $title]); |
|
|
|
|
|
|
|
$categoryJsonld = $this->serializer->serialize($category, 'jsonld', ['groups' => ['page:read']]); |
|
|
|
|
|
|
|
$categoryArray = json_decode($categoryJsonld, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return [ |
|
|
|
|
|
|
|
'category' => $categoryArray['@id'], |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private function getItemsUsers(): array |
|
|
|
private function getItemsUsers(): array |
|
|
|
{ |
|
|
|
{ |
|
|
|
$items = []; |
|
|
|
$items = []; |
|
|
|
@ -339,7 +387,7 @@ class IndexBlocksController extends BaseController |
|
|
|
]; |
|
|
|
]; |
|
|
|
$items[] = [ |
|
|
|
$items[] = [ |
|
|
|
'class' => 'item-global-agenda', |
|
|
|
'class' => 'item-global-agenda', |
|
|
|
'url' => '/resources/ccalendarevent?type=global', |
|
|
|
'route' => ['name' => 'CCalendarEventList', 'query' => ['type' => 'global']], |
|
|
|
'label' => $this->translator->trans('Global agenda'), |
|
|
|
'label' => $this->translator->trans('Global agenda'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
@ -353,7 +401,7 @@ class IndexBlocksController extends BaseController |
|
|
|
|
|
|
|
|
|
|
|
$items[] = [ |
|
|
|
$items[] = [ |
|
|
|
'class' => 'item-pages-list', |
|
|
|
'class' => 'item-pages-list', |
|
|
|
'url' => '/resources/pages', |
|
|
|
'route' => ['name' => 'PageList'], |
|
|
|
'label' => $this->translator->trans('Pages'), |
|
|
|
'label' => $this->translator->trans('Pages'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
$items[] = [ |
|
|
|
$items[] = [ |
|
|
|
@ -414,7 +462,7 @@ class IndexBlocksController extends BaseController |
|
|
|
if ('true' === $this->settingsManager->getSetting('registration.allow_terms_conditions')) { |
|
|
|
if ('true' === $this->settingsManager->getSetting('registration.allow_terms_conditions')) { |
|
|
|
$items[] = [ |
|
|
|
$items[] = [ |
|
|
|
'class' => 'item-terms-and-conditions', |
|
|
|
'class' => 'item-terms-and-conditions', |
|
|
|
'url' => '/resources/terms-conditions', |
|
|
|
'route' => ['name' => 'TermsConditions'], |
|
|
|
'label' => $this->translator->trans('Terms and Conditions'), |
|
|
|
'label' => $this->translator->trans('Terms and Conditions'), |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -608,6 +656,12 @@ class IndexBlocksController extends BaseController |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$items[] = [ |
|
|
|
|
|
|
|
'class' => 'item-colors', |
|
|
|
|
|
|
|
'route' => ['name' => 'AdminConfigurationColors'], |
|
|
|
|
|
|
|
'label' => $this->translator->trans('Colors'), |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
return $items; |
|
|
|
return $items; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|