From f731918f43f540567de7876c74542957c7d5bc84 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 9 Jun 2020 17:02:54 +0200 Subject: [PATCH] Get resource link in the show page. --- assets/vue/App.vue | 4 ++ assets/vue/components/ErrorMessage.vue | 1 + assets/vue/components/course/Form.vue | 3 +- assets/vue/main.js | 9 ++++- assets/vue/mixins/ListMixin.js | 10 ++--- assets/vue/mixins/ShowMixin.js | 38 ++++++++++++++++-- assets/vue/router/documents.js | 3 +- assets/vue/services/resourcelink.js | 3 ++ assets/vue/store/modules/crud.js | 15 +++++++ assets/vue/views/Login.vue | 5 --- assets/vue/views/documents/Show.vue | 37 +++++++++++++++--- config/services.yaml | 4 ++ src/CoreBundle/Entity/AbstractResource.php | 1 + src/CoreBundle/Entity/ResourceLink.php | 39 ++++++++++++++++--- src/CoreBundle/Entity/ResourceNode.php | 4 +- src/CoreBundle/Entity/Usergroup.php | 5 +++ .../Security/HTTPExceptionListener.php | 24 ++++++++++++ src/CourseBundle/Entity/CDocument.php | 4 +- 18 files changed, 174 insertions(+), 35 deletions(-) create mode 100644 assets/vue/services/resourcelink.js create mode 100644 src/CoreBundle/Security/HTTPExceptionListener.php diff --git a/assets/vue/App.vue b/assets/vue/App.vue index 52dfdf99dc..e9ae93a366 100644 --- a/assets/vue/App.vue +++ b/assets/vue/App.vue @@ -368,6 +368,10 @@ return new Promise(() => { if (err.response.status === 401) { this.$router.push({path: "/login"}) + } else if (err.response.status === 500) { + document.open(); + document.write(err.response.data); + document.close(); } throw err; }); diff --git a/assets/vue/components/ErrorMessage.vue b/assets/vue/components/ErrorMessage.vue index 496e2ffd59..c7725e2903 100644 --- a/assets/vue/components/ErrorMessage.vue +++ b/assets/vue/components/ErrorMessage.vue @@ -4,6 +4,7 @@ role="alert" > {{ error.response.data.error }} + {{ error.response.data.message }} diff --git a/assets/vue/components/course/Form.vue b/assets/vue/components/course/Form.vue index c1d28bc9eb..08b281d7be 100644 --- a/assets/vue/components/course/Form.vue +++ b/assets/vue/components/course/Form.vue @@ -49,7 +49,6 @@ /> - @@ -151,7 +150,7 @@ }, methods: { ...mapActions({ - categoryGetSelectItems: 'coursecategory/fetchSelectItems' + categoryGetSelectItems: 'coursecategory/load' }), }, validations: { diff --git a/assets/vue/main.js b/assets/vue/main.js index 912ad21073..b031b4efaa 100644 --- a/assets/vue/main.js +++ b/assets/vue/main.js @@ -5,6 +5,7 @@ import store from "./store"; import courseCategoryService from './services/coursecategory'; import documentsService from './services/documents'; import courseService from './services/course'; +import resourceLinkService from './services/resourcelink'; import makeCrudModule from './store/modules/crud'; import vuetify from './plugins/vuetify' // path to vuetify export require('@fancyapps/fancybox'); @@ -28,7 +29,6 @@ const apolloProvider = new VueApollo({ defaultClient: apolloClient, }); -//import './quasar' store.registerModule( 'course', makeCrudModule({ @@ -36,6 +36,13 @@ store.registerModule( }) ); +store.registerModule( + 'resourcelink', + makeCrudModule({ + service: resourceLinkService + }) +); + store.registerModule( 'coursecategory', makeCrudModule({ diff --git a/assets/vue/mixins/ListMixin.js b/assets/vue/mixins/ListMixin.js index 6d8cc1c25f..0902244b9d 100644 --- a/assets/vue/mixins/ListMixin.js +++ b/assets/vue/mixins/ListMixin.js @@ -84,18 +84,16 @@ export default { showHandler(item) { let folderParams = this.$route.query; + folderParams['id'] = item['@id']; + this.$router.push({ name: `${this.$options.servicePrefix}Show`, - params: { id: item['@id'] }, + //params: { id: item['@id'] }, query: folderParams }); }, handleClick(item) { - /*this.$router.push({ - name: `${this.$options.servicePrefix}Show`, - params: { id: item['@id'] } - });*/ let folderParams = this.$route.query; this.resetList = true; this.$route.params.node = item['resourceNode']['id']; @@ -112,9 +110,7 @@ export default { /*console.log(item['resourceNode']['id']); this.$route.params.node = item['resourceNode']['id']; this.onUpdateOptions(this.options);*/ - }, - editHandler(item) { let folderParams = this.$route.query; this.$router.push({ diff --git a/assets/vue/mixins/ShowMixin.js b/assets/vue/mixins/ShowMixin.js index a6080712cc..f1ffddd851 100644 --- a/assets/vue/mixins/ShowMixin.js +++ b/assets/vue/mixins/ShowMixin.js @@ -1,15 +1,42 @@ +import isEmpty from 'lodash/isEmpty'; import NotificationMixin from './NotificationMixin'; import { formatDateTime } from '../utils/dates'; +import {mapActions, mapGetters} from "vuex"; export default { mixins: [NotificationMixin], created() { - this.retrieve(decodeURIComponent(this.$route.params.id)); + // Changed + let id = this.$route.params.id; + if (isEmpty(id)) { + id = this.$route.query.id; + } + this.retrieve(decodeURIComponent(id)); + //this.retrieve(decodeURIComponent(this.$route.params.id)); }, computed: { item() { - return this.find(decodeURIComponent(this.$route.params.id)); - } + // Changed + let id = this.$route.params.id; + if (isEmpty(id)) { + id = this.$route.query.id; + } + + let item = this.find(decodeURIComponent(id)); + if (item) { + item.resourceNode.resourceLinks.forEach((link) => { + this.resourcelinkfind('/api/resource_links/' + link.id).then( data => { + if (data) { + link = data; + return data; + } + }); + }); + } + + return item; + //return this.find(decodeURIComponent(this.$route.params.id)); + }, }, methods: { list() { @@ -31,7 +58,10 @@ export default { name: `${this.$options.servicePrefix}Update`, params: { id: this.item['@id'] } }); - } + }, + ...mapActions({ + resourcelinkfind: 'resourcelink/loadItem' + }), }, watch: { error(message) { diff --git a/assets/vue/router/documents.js b/assets/vue/router/documents.js index 52539e7ea9..7f59386a65 100644 --- a/assets/vue/router/documents.js +++ b/assets/vue/router/documents.js @@ -27,7 +27,8 @@ export default { }, { name: 'DocumentsShow', - path: ':id', + //path: ':id', + path: 'show', component: () => import('../views/documents/Show') } ] diff --git a/assets/vue/services/resourcelink.js b/assets/vue/services/resourcelink.js new file mode 100644 index 0000000000..214938c633 --- /dev/null +++ b/assets/vue/services/resourcelink.js @@ -0,0 +1,3 @@ +import makeService from './api'; + +export default makeService('resource_links'); diff --git a/assets/vue/store/modules/crud.js b/assets/vue/store/modules/crud.js index a293f09bae..ecb82c2a0f 100644 --- a/assets/vue/store/modules/crud.js +++ b/assets/vue/store/modules/crud.js @@ -139,11 +139,26 @@ export default function makeCrudModule({ .find(id) .then(response => response.json()) .then(item => { + console.log(item); commit(ACTIONS.TOGGLE_LOADING); commit(ACTIONS.ADD, normalizeRelations(item)); }) .catch(e => handleError(commit, e)); }, + loadItem: ({ commit }, id) => { + if (!service) throw new Error('No service specified!'); + + commit(ACTIONS.TOGGLE_LOADING); + service + .find(id) + .then(response => response.json()) + .then(item => { + console.log(item); + return item; + }) + .catch(e => handleError(commit, e)); + }, + resetCreate: ({ commit }) => { commit(ACTIONS.RESET_CREATE); }, diff --git a/assets/vue/views/Login.vue b/assets/vue/views/Login.vue index 1642d737b4..0269df3281 100644 --- a/assets/vue/views/Login.vue +++ b/assets/vue/views/Login.vue @@ -1,5 +1,4 @@