Settings: Load settings in vue with window.config

pull/3959/head
Julio 4 years ago
parent 4e2670cb76
commit eba065a171
  1. 8
      assets/vue/App.vue
  2. 21
      assets/vue/components/layout/DashboardLayout.vue
  3. 32
      src/CoreBundle/EventListener/TwigListener.php
  4. 2
      src/CoreBundle/Resources/views/Layout/vue_setup.html.twig

@ -142,12 +142,18 @@ export default {
let app = document.getElementById('app'); let app = document.getElementById('app');
let isAuthenticated = false; let isAuthenticated = false;
if (!isEmpty(window.user)) { if (!isEmpty(window.user)) {
console.log('APP.vue: is logged in as ' + window.user.username); console.log('APP.vue: is logged in as ' + window.user.username);
this.user = window.user; this.user = window.user;
isAuthenticated = true; isAuthenticated = true;
} }
console.log(this.user);
if (!isEmpty(window.config)) {
console.log('Config: ', window.config);
this.config = window.config;
}
let payload = {isAuthenticated: isAuthenticated, user: this.user}; let payload = {isAuthenticated: isAuthenticated, user: this.user};
this.$store.dispatch("security/onRefresh", payload); this.$store.dispatch("security/onRefresh", payload);

@ -188,7 +188,13 @@
<div class="q-mt-md"> <div class="q-mt-md">
<div class="flex flex-center q-gutter-xs"> <div class="flex flex-center q-gutter-xs">
<a class="GNL__drawer-footer-link" href="javascript:void(0)" aria-label="About">Chamilo</a> <a
class="GNL__drawer-footer-link"
href="javascript:void(0)"
>
{{ config['platform.site_name'] }}
{{ config['platform.institution'] }}
</a>
</div> </div>
</div> </div>
</q-list> </q-list>
@ -197,17 +203,13 @@
<!-- <q-drawer show-if-above v-model="rightDrawerOpen" side="right" elevated>--> <!-- <q-drawer show-if-above v-model="rightDrawerOpen" side="right" elevated>-->
<!-- &lt;!&ndash; drawer content &ndash;&gt;--> <!-- &lt;!&ndash; drawer content &ndash;&gt;-->
<!-- </q-drawer>--> <!-- </q-drawer>-->
<q-page-container> <q-page-container>
<q-page <q-page
class="q-layout-padding" class="q-layout-padding"
> >
<Breadcrumb v-if="this.showBreadcrumb" :legacy="this.breadcrumb"/> <Breadcrumb v-if="this.showBreadcrumb" :legacy="this.breadcrumb"/>
<router-view /> <router-view />
<slot></slot> <slot></slot>
</q-page> </q-page>
</q-page-container> </q-page-container>
</q-layout> </q-layout>
@ -218,7 +220,6 @@ import {mapGetters, useStore} from "vuex";
import isEmpty from "lodash/isEmpty"; import isEmpty from "lodash/isEmpty";
import useState from "../../hooks/useState"; import useState from "../../hooks/useState";
import {computed, ref, toRefs} from "vue"; import {computed, ref, toRefs} from "vue";
import Breadcrumb from '../../components/Breadcrumb.vue'; import Breadcrumb from '../../components/Breadcrumb.vue';
export default { export default {
@ -230,11 +231,14 @@ export default {
const { isSidebarOpen, isSettingsPanelOpen, isSearchPanelOpen, isNotificationsPanelOpen } = useState(); const { isSidebarOpen, isSettingsPanelOpen, isSearchPanelOpen, isNotificationsPanelOpen } = useState();
const rightDrawerOpen = ref(false); const rightDrawerOpen = ref(false);
const { showBreadcrumb } = toRefs(props); const { showBreadcrumb } = toRefs(props);
const config = ref([]);
/*const store = useStore(); if (!isEmpty(window.config)) {
const currentUser = store.getters["security/getUser"];*/ config.value = window.config;
}
return { return {
config,
//currentUser, //currentUser,
showBreadcrumb, showBreadcrumb,
isSettingsPanelOpen, isSettingsPanelOpen,
@ -251,7 +255,6 @@ export default {
data: () => ({ data: () => ({
user: {}, user: {},
moved: true, moved: true,
showBreadcrumb: true,
linksUser: [ linksUser: [
//{ icon: 'home', url: '/', text: 'Home' }, //{ icon: 'home', url: '/', text: 'Home' },
//{ icon: 'star_border', url: '/', text: 'News' }, //{ icon: 'star_border', url: '/', text: 'News' },

@ -8,6 +8,7 @@ namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Repository\Node\IllustrationRepository; use Chamilo\CoreBundle\Repository\Node\IllustrationRepository;
use Chamilo\CoreBundle\Settings\SettingsManager;
use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
@ -19,18 +20,22 @@ class TwigListener
private SerializerInterface $serializer; private SerializerInterface $serializer;
private Environment $twig; private Environment $twig;
private TokenStorageInterface $tokenStorage; private TokenStorageInterface $tokenStorage;
private IllustrationRepository $illustrationRepository; private SettingsManager $settingsManager;
//private IllustrationRepository $illustrationRepository;
public function __construct( public function __construct(
Environment $twig, Environment $twig,
SerializerInterface $serializer, SerializerInterface $serializer,
TokenStorageInterface $tokenStorage, TokenStorageInterface $tokenStorage,
IllustrationRepository $illustrationRepository SettingsManager $settingsManager
//IllustrationRepository $illustrationRepository
) { ) {
$this->twig = $twig; $this->twig = $twig;
$this->tokenStorage = $tokenStorage; $this->tokenStorage = $tokenStorage;
$this->serializer = $serializer; $this->serializer = $serializer;
$this->illustrationRepository = $illustrationRepository; $this->settingsManager = $settingsManager;
//$this->illustrationRepository = $illustrationRepository;
} }
public function __invoke(RequestEvent $event): void public function __invoke(RequestEvent $event): void
@ -39,7 +44,6 @@ class TwigListener
$token = $this->tokenStorage->getToken(); $token = $this->tokenStorage->getToken();
$data = null; $data = null;
$avatar = null;
$isAuth = false; $isAuth = false;
if (null !== $token) { if (null !== $token) {
$user = $token->getUser(); $user = $token->getUser();
@ -49,15 +53,31 @@ class TwigListener
$data = $this->serializer->serialize($userClone, 'jsonld', [ $data = $this->serializer->serialize($userClone, 'jsonld', [
'groups' => ['user_json:read'], 'groups' => ['user_json:read'],
]); ]);
$avatar = $this->illustrationRepository->getIllustrationUrl($userClone);
$isAuth = true; $isAuth = true;
} }
} }
$settings = [
'platform.site_name',
'platform.timezone',
'platform.theme',
'platform.administrator_name',
'platform.administrator_surname',
'editor.enabled_mathjax',
//'editor.translate_html',
];
$config = [];
foreach ($settings as $variable) {
$value = $this->settingsManager->getSetting($variable);
$config[$variable] = $value;
}
//$this->twig->addGlobal('text_direction', api_get_text_direction()); //$this->twig->addGlobal('text_direction', api_get_text_direction());
$this->twig->addGlobal('from_vue', $request->request->get('from_vue') ? 1 : 0); $this->twig->addGlobal('from_vue', $request->request->get('from_vue') ? 1 : 0);
$this->twig->addGlobal('is_authenticated', json_encode($isAuth)); $this->twig->addGlobal('is_authenticated', json_encode($isAuth));
$this->twig->addGlobal('user_json', $data ?? json_encode([])); $this->twig->addGlobal('user_json', $data ?? json_encode([]));
$this->twig->addGlobal('user_avatar', $avatar); $this->twig->addGlobal('config_json', json_encode($config));
} }
} }

@ -1,5 +1,7 @@
<script> <script>
window.config = {{ config_json | raw }};
window.user = {{ user_json | raw }}; window.user = {{ user_json | raw }};
{% if legacy_breadcrumb is defined %} {% if legacy_breadcrumb is defined %}
window.breadcrumb = {{ legacy_breadcrumb | raw }}; window.breadcrumb = {{ legacy_breadcrumb | raw }};
{% else %} {% else %}

Loading…
Cancel
Save