Pages: Add enabled filter + admin can see enabled=false + add link in settings

pull/4020/head^2
Julio 4 years ago
parent d074b618f7
commit 4560b82e5f
  1. 17
      assets/vue/components/page/Form.vue
  2. 2
      assets/vue/pages/Home.vue
  3. 4
      assets/vue/views/page/Create.vue
  4. 9
      assets/vue/views/page/List.vue
  5. 1
      public/main/admin/index.php
  6. 4
      src/CoreBundle/DataProvider/Extension/PageExtension.php
  7. 3
      src/CoreBundle/Entity/Page.php

@ -14,16 +14,15 @@
<q-checkbox v-model="item.enabled" :label="$t('Enabled')"/> <q-checkbox v-model="item.enabled" :label="$t('Enabled')"/>
</div> </div>
<q-select v-model="item.category" :options="categories" :label="$t('Category')" <q-select
v-model="item.category"
:options="categories" :label="$t('Category')"
option-value="id" option-value="id"
option-label="title" option-label="title"
/> />
<q-select v-model="item.locale" :options="locales" :label="$t('Locale')"/> <q-select v-model="item.locale" :options="locales" :label="$t('Locale')"/>
<TinyEditor <TinyEditor
id="item_content" id="item_content"
v-model="item.content" v-model="item.content"
@ -58,11 +57,8 @@ import {computed, ref} from "vue";
import {mapGetters, useStore} from "vuex"; import {mapGetters, useStore} from "vuex";
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import Dropdown from "primevue/dropdown";
export default { export default {
name: 'PageForm', name: 'PageForm',
components:{Dropdown},
setup () { setup () {
let locales = ref([]); let locales = ref([]);
const store = useStore(); const store = useStore();
@ -98,7 +94,7 @@ export default {
title: null, title: null,
content: null, content: null,
locale: null, locale: null,
enabled: null, enabled: true,
}; };
}, },
computed: { computed: {
@ -110,8 +106,6 @@ export default {
if (this.values) { if (this.values) {
this.values.creator = this.currentUser['@id']; this.values.creator = this.currentUser['@id'];
this.values.url = '/api/access_urls/' + window.access_url_id; this.values.url = '/api/access_urls/' + window.access_url_id;
if (!isEmpty(this.values.category)) { if (!isEmpty(this.values.category)) {
this.values.category = this.values.category['@id']; this.values.category = this.values.category['@id'];
} }
@ -139,6 +133,9 @@ export default {
title: { title: {
required, required,
}, },
enabled: {
required,
},
content: { content: {
required, required,
}, },

@ -56,7 +56,7 @@ export default {
console.log(error); console.log(error);
}); });
axios.get(ENTRYPOINT + 'pages.json?category.title=home').then(response => { axios.get(ENTRYPOINT + 'pages.json?category.title=home&enabled=1').then(response => {
if (Array.isArray(response.data)) { if (Array.isArray(response.data)) {
state.pages = response.data; state.pages = response.data;
} }

@ -32,7 +32,9 @@ export default {
}, },
data() { data() {
return { return {
item: {} item: {
enabled: true
}
}; };
}, },
computed: { computed: {

@ -10,10 +10,10 @@
<v-icon icon="mdi-file-plus"/> <v-icon icon="mdi-file-plus"/>
{{ $t('New page') }} {{ $t('New page') }}
</Button> </Button>
<Button label="{{ $t('Delete selected') }}" class="btn btn-danger " @click="confirmDeleteMultiple" :disabled="!selectedItems || !selectedItems.length"> <!-- <Button label="{{ $t('Delete selected') }}" class="btn btn-danger " @click="confirmDeleteMultiple" :disabled="!selectedItems || !selectedItems.length">-->
<v-icon icon="mdi-delete"/> <!-- <v-icon icon="mdi-delete"/>-->
{{ $t('Delete selected') }} <!-- {{ $t('Delete selected') }}-->
</Button> <!-- </Button>-->
</div> </div>
</div> </div>
</div> </div>
@ -53,6 +53,7 @@
<Column field="locale" :header="$t('Locale')" /> <Column field="locale" :header="$t('Locale')" />
<Column field="category.title" :header="$t('Category')" /> <Column field="category.title" :header="$t('Category')" />
<Column field="enabled" :header="$t('Enabled')" />
<Column :exportable="false"> <Column :exportable="false">
<template #body="slotProps"> <template #body="slotProps">

@ -339,6 +339,7 @@ if (api_is_platform_admin()) {
$items[] = ['url' => 'settings.php?category=Plugins', 'label' => get_lang('Plugins')]; $items[] = ['url' => 'settings.php?category=Plugins', 'label' => get_lang('Plugins')];
$items[] = ['url' => 'settings.php?category=Regions', 'label' => get_lang('Regions')]; $items[] = ['url' => 'settings.php?category=Regions', 'label' => get_lang('Regions')];
$items[] = ['url' => 'system_announcements.php', 'label' => get_lang('Portal news')]; $items[] = ['url' => 'system_announcements.php', 'label' => get_lang('Portal news')];
$items[] = ['url' => '/resources/pages', 'label' => get_lang('Pages')];
$items[] = [ $items[] = [
'url' => api_get_path(WEB_CODE_PATH).'calendar/agenda_js.php?type=admin', 'url' => api_get_path(WEB_CODE_PATH).'calendar/agenda_js.php?type=admin',
'label' => get_lang('Global agenda'), 'label' => get_lang('Global agenda'),

@ -62,5 +62,9 @@ final class PageExtension implements QueryCollectionExtensionInterface //, Query
->setParameter('locale', $request->getLocale()) ->setParameter('locale', $request->getLocale())
; ;
} }
if (!$this->security->isGranted('ROLE_ADMIN')) {
$qb->andWhere("$alias.enabled = 1");
}
} }
} }

@ -26,7 +26,7 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource( #[ApiResource(
collectionOperations: [ collectionOperations: [
'get' => [ 'get' => [
'security' => "is_granted('ROLE_USER')", //'security' => "is_granted('ROLE_USER')",
], ],
'post' => [ 'post' => [
'security' => "is_granted('ROLE_ADMIN')", 'security' => "is_granted('ROLE_ADMIN')",
@ -54,6 +54,7 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiFilter(SearchFilter::class, properties: [ #[ApiFilter(SearchFilter::class, properties: [
'locale' => 'exact', 'locale' => 'exact',
'url' => 'exact', 'url' => 'exact',
'enabled' => 'exact',
'category' => 'exact', 'category' => 'exact',
'category.title' => 'partial', 'category.title' => 'partial',
])] ])]

Loading…
Cancel
Save