Calendar: Load events from resource links + if creator = current user

Add Fullcalendar using vue, add filters with api platform
pull/3924/head
Julio Montoya 3 years ago
parent 8f9852a1a5
commit 5f77c651c3
  1. 2
      assets/vue/components/layout/DashboardLayout.vue
  2. 6
      assets/vue/router/ccalendarevent.js
  3. 47
      assets/vue/views/ccalendarevent/Create.vue
  4. 114
      assets/vue/views/ccalendarevent/Index.vue
  5. 28
      package.json
  6. 99
      src/CoreBundle/DataProvider/Extension/CCalendarEventExtension.php
  7. 1
      src/CoreBundle/DataProvider/Extension/MessageExtension.php
  8. 15
      src/CourseBundle/Entity/CCalendarEvent.php
  9. 250
      yarn.lock

@ -256,7 +256,7 @@ export default {
//{ icon: 'home', url: '/', text: 'Home' },
//{ icon: 'star_border', url: '/', text: 'News' },
{ icon: 'mdi-book', url: '/courses', text: 'My courses' },
{ icon: 'mdi-calendar', url: '/main/calendar/agenda_js.php?type=personal', text: 'Events' },
{ icon: 'mdi-calendar', url: '/resources/ccalendarevent', text: 'Events' },
//{ icon: 'star_border', url: '/sessions', text: 'My Sessions' },
//{ icon: 'star_border', url: '/calendar', text: 'My calendar' },
//{ icon: 'compass', url: '/catalog', text: 'Explore' },

@ -2,6 +2,7 @@ export default {
path: '/resources/ccalendarevent',
meta: { requiresAuth: true },
name: 'ccalendarevent',
redirect: { name: 'CCalendarEventIndex' },
component: () => import('../components/ccalendarevent/Layout.vue'),
children: [
{
@ -13,6 +14,11 @@ export default {
name: 'CCalendarEventCreate',
path: 'new',
component: () => import('../views/ccalendarevent/Create.vue')
},
{
name: 'CCalendarEventIndex',
path: '',
component: () => import('../views/ccalendarevent/Index.vue')
}
]
};

@ -20,7 +20,7 @@ import CCalendarEventForm from '../../components/ccalendarevent/Form.vue';
import Loading from '../../components/Loading.vue';
import Toolbar from '../../components/Toolbar.vue';
import CreateMixin from '../../mixins/CreateMixin';
import {computed, ref} from "vue";
import {computed, onMounted, ref} from "vue";
import axios from "axios";
import {ENTRYPOINT} from "../../config/entrypoint";
import useVuelidate from "@vuelidate/core";
@ -44,35 +44,44 @@ export default {
},
setup () {
const users = ref([]);
const item = ref([]);
const isLoadingSelect = ref(false);
const parentResourceNodeId = ref(null);
const item = ref([]);
const store = useStore();
const route = useRoute();
const router = useRouter();
const store = useStore();
/*const user = computed(() => store.getters['security/getUser']);
parentResourceNodeId.value = user.value.resourceNode['id']
let id = route.params.id;
if (isEmpty(id)) {
id = route.query.id;
}
let message = find(decodeURIComponent(id));
console.log(id);
console.log(message);
item.value.title = message.title;*/
onMounted(async () => {
const response = await store.dispatch('message/load', id);
return {v$: useVuelidate(), users, isLoadingSelect};
},
created() {
this.item.parentResourceNodeId = this.currentUser.resourceNode['id'];
},
data() {
return {
item: {},
};
const currentUser = computed(() => store.getters['security/getUser']);
item.value = await response;
delete item.value['@id'];
delete item.value['id'];
delete item.value['firstReceiver'];
//delete item.value['receivers'];
delete item.value['sendDate'];
item.value['parentResourceNodeId'] = currentUser.value.resourceNode['id'];
//item.value['originalSender'] = item.value['sender'];
// New sender.
//item.value['sender'] = currentUser.value['@id'];
// Set new receivers, will be loaded by onSendMessageForm()
/*item.value['receivers'] = [];
item.value['receivers'][0] = item.value['originalSender'];*/
});
return {v$: useVuelidate(), users, isLoadingSelect, item};
},
computed: {
...mapFields(['error', 'isLoading', 'created', 'violations']),

@ -0,0 +1,114 @@
<template>
<div>
<Toolbar
v-if="item"
:handle-edit="editHandler"
:handle-delete="del"
>
</Toolbar>
<FullCalendar :options="calendarOptions" />
<Loading :visible="isLoading" />
</div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex';
import { mapFields } from 'vuex-map-fields';
import Loading from '../../components/Loading.vue';
import Toolbar from '../../components/Toolbar.vue';
import {ref} from "vue";
//import '@fullcalendar/core/vdom' // solve problem with Vite
import FullCalendar from '@fullcalendar/vue3';
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from '@fullcalendar/interaction';
import timeGridPlugin from '@fullcalendar/timegrid';
import axios from "axios";
const servicePrefix = 'CCalendarEvent';
export default {
name: 'CCalendarEventIndex',
components: {
Loading,
Toolbar,
FullCalendar
},
//mixins: [ShowMixin],
setup() {
const calendarOptions = ref([]);
const events = [];
calendarOptions.value = {
plugins: [
dayGridPlugin,
timeGridPlugin,
interactionPlugin
],
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
nowIndicator: true,
initialView: 'dayGridMonth',
//events: '/api/c_calendar_events',
startParam: "startDate[after]",
endParam: 'endDate[before]',
events: function(info, successCallback, failureCallback) {
axios.get('/api/c_calendar_events',{
params: {
'startDate[after]': info.start.valueOf(),
'endDate[after]': info.end.valueOf()
}
}).then(response => {
let data = response.data;
let events = data['hydra:member'];
successCallback(
Array.prototype.slice.call( // convert to array
events
).map(function(event) {
return {
title: event['title'],
start: event['startDate'],
end: event['endDate'],
}
})
)
})
},
/*eventSourceSuccess: function(content, xhr) {
console.log('aaa');
console.log(content['hydra:member']);
return content['hydra:member'];
}*/
}
return {calendarOptions};
},
computed: {
...mapFields('ccalendarevent', {
isLoading: 'isLoading'
}),
...mapGetters('ccalendarevent', ['find']),
...mapGetters({
'isAuthenticated': 'security/isAuthenticated',
'isAdmin': 'security/isAdmin',
'isCurrentTeacher': 'security/isCurrentTeacher',
}),
},
methods: {
...mapActions('ccalendarevent', {
deleteItem: 'del',
reset: 'resetShow',
retrieve: 'loadWithQuery'
}),
},
servicePrefix
};
</script>

@ -6,18 +6,23 @@
"start": "vue-cli-service serve --open"
},
"dependencies": {
"@apollo/client": "^3.4.0-rc.15",
"@apollo/client": "^3.4.0-rc.18",
"@babel/plugin-transform-runtime": "^7.14.5",
"@fancyapps/fancybox": "^3.5.7",
"@fullcalendar/core": "^5.8.0",
"@fullcalendar/daygrid": "^5.8.0",
"@fullcalendar/interaction": "^5.8.0",
"@fullcalendar/timegrid": "^5.8.0",
"@fullcalendar/vue3": "^5.8.0",
"@headlessui/vue": "^1.3.0",
"@heroicons/vue": "^1.0.1",
"@heroicons/vue": "^1.0.2",
"@popperjs/core": "^2.9.2",
"@quasar/extras": "latest",
"@tailwindcss/forms": "^0.3.3",
"@tailwindcss/line-clamp": "^0.2.1",
"@tailwindcss/typography": "^0.4.1",
"@tailwindcss/ui": "^0.7.2",
"@tinymce/tinymce-vue": "^4.0.3",
"@tinymce/tinymce-vue": "^4.0.4",
"@types/lodash": "^4.14.171",
"@uppy/core": "^1.19.2",
"@uppy/dashboard": "^1.20.2",
@ -28,12 +33,12 @@
"@uppy/vue": "^0.2.5",
"@uppy/webcam": "^1.8.12",
"@uppy/xhr-upload": "^1.7.5",
"@vue/apollo-composable": "^4.0.0-alpha.12",
"@vue/apollo-option": "^4.0.0-alpha.11",
"@vue/apollo-composable": "^4.0.0-alpha.13",
"@vue/apollo-option": "^4.0.0-alpha.13",
"@vue/cli": "^4.5.13",
"@vuelidate/core": "^2.0.0-alpha.19",
"@vuelidate/validators": "^2.0.0-alpha.17",
"autoprefixer": "^10.2.6",
"@vuelidate/core": "^2.0.0-alpha.21",
"@vuelidate/validators": "^2.0.0-alpha.18",
"autoprefixer": "^10.3.0",
"axios": "^0.21.1",
"babel": "^6.23.0",
"babel-plugin-transform-builtin-extend": "^1.1.2",
@ -56,12 +61,11 @@
"file-loader": "^6.2.0",
"flag-icon-css": "^3.5.0",
"full-icu": "^1.3.4",
"fullcalendar": "^5.8.0",
"glob-all": "^3.2.1",
"graphql": "^15.5.1",
"highlight.js": "^11.1.0",
"hljs": "^6.2.3",
"html2canvas": "^1.0.0-rc.7",
"html2canvas": "^1.1.0",
"image-map-resizer": "^1.0.10",
"jquery": "^3.6.0",
"jquery-ui": "^1.12.1",
@ -72,7 +76,7 @@
"jsplumb": "^2.15.6",
"linkifyjs": "3.0.0-beta.3",
"litepicker": "^2.0.11",
"luxon": "^1.27.0",
"luxon": "^1.28.0",
"mathjax": "^2.7.9",
"mediaelement": "^4.2.16",
"mediaelement-plugins": "https://github.com/chamilo/mediaelement-plugins",
@ -91,7 +95,7 @@
"purgecss-webpack-plugin": "^4.0.3",
"pwstrength-bootstrap": "^3.1.0",
"qtip2": "^3.0.3",
"quasar": "2.0.1",
"quasar": "2.0.2",
"readmore-js": "^2.2.1",
"select2": "^4.1.0-rc.0",
"signature_pad": "^3.0.0-beta.4",

@ -0,0 +1,99 @@
<?php
/* For licensing terms, see /license.txt */
declare(strict_types=1);
namespace Chamilo\CoreBundle\DataProvider\Extension;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
//use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
//use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use Chamilo\CoreBundle\Entity\Message;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CourseBundle\Entity\CCalendarEvent;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\Security;
final class CCalendarEventExtension implements QueryCollectionExtensionInterface //, QueryItemExtensionInterface
{
private Security $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
{
/*if ($this->security->isGranted('ROLE_ADMIN')) {
return;
}*/
/*
if ('collection_query' === $operationName) {
if (null === $user = $this->security->getUser()) {
throw new AccessDeniedException('Access Denied.');
}
$rootAlias = $queryBuilder->getRootAliases()[0];
$queryBuilder->andWhere(sprintf('%s.user = :current_user', $rootAlias));
$queryBuilder->setParameter('current_user', $user);
}*/
$this->addWhere($queryBuilder, $resourceClass);
}
public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
{
//error_log('applyToItem1');
//$this->addWhere($queryBuilder, $resourceClass);
}
private function addWhere(QueryBuilder $qb, string $resourceClass): void
{
if (CCalendarEvent::class !== $resourceClass) {
return;
}
/*if ($this->security->isGranted('ROLE_ADMIN')) {
return;
}*/
/** @var User $user */
$user = $this->security->getUser();
$alias = $qb->getRootAliases()[0];
$qb
->innerJoin("$alias.resourceNode", 'node')
->leftJoin('node.resourceLinks', 'links')
;
$qb
->andWhere(
'
links.user = :user OR node.creator = :user
'
)
->setParameter('user', $user)
;
//$qb->leftJoin("$alias.receivers", 'r');
//$qb->leftJoin("$alias.receivers", 'r', Join::WITH, "r.receiver = :current OR $alias.sender = :current ");
//$qb->leftJoin("$alias.receivers", 'r');
/*$qb->andWhere(
$qb->expr()->orX(
$qb->andWhere(
$qb->expr()->eq("$alias.sender", $user->getId()),
$qb->expr()->eq("$alias.msgType", Message::MESSAGE_TYPE_OUTBOX)
),
$qb->andWhere(
$qb->expr()->in("r", $user->getId()),
$qb->expr()->eq("$alias.msgType", Message::MESSAGE_TYPE_INBOX)
)
),
);*/
}
}

@ -53,7 +53,6 @@ final class MessageExtension implements QueryCollectionExtensionInterface //, Qu
private function addWhere(QueryBuilder $qb, string $resourceClass): void
{
error_log('addWher2');
if (Message::class !== $resourceClass) {
return;
}

@ -6,7 +6,10 @@ declare(strict_types=1);
namespace Chamilo\CourseBundle\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use Chamilo\CoreBundle\Entity\AbstractResource;
use Chamilo\CoreBundle\Entity\ResourceInterface;
use Chamilo\CoreBundle\Entity\Room;
@ -30,7 +33,8 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
collectionOperations: [
'get' => [
'security' => "is_granted('VIEW', object)", // the get collection is also filtered by MessageExtension.php
//'security' => "is_granted('VIEW', object)", // the get collection is also filtered by MessageExtension.php
'security' => "is_granted('ROLE_USER')",
],
'post' => [
'security_post_denormalize' => "is_granted('CREATE', object)",
@ -57,6 +61,15 @@ use Symfony\Component\Validator\Constraints as Assert;
'groups' => ['calendar_event:read'],
],
)]
#[ApiFilter(SearchFilter::class, properties: [
'startDate' => 'exact',
'endDate' => 'exact',
'allDay' => 'boolean',
])]
#[ApiFilter(DateFilter::class, strategy: DateFilter::EXCLUDE_NULL)]
class CCalendarEvent extends AbstractResource implements ResourceInterface
{
/**

@ -14,9 +14,9 @@ __metadata:
languageName: node
linkType: hard
"@apollo/client@npm:^3.4.0-rc.15":
version: 3.4.0-rc.15
resolution: "@apollo/client@npm:3.4.0-rc.15"
"@apollo/client@npm:^3.4.0-rc.18":
version: 3.4.0-rc.18
resolution: "@apollo/client@npm:3.4.0-rc.18"
dependencies:
"@graphql-typed-document-node/core": ^3.0.0
"@wry/context": ^0.6.0
@ -29,7 +29,7 @@ __metadata:
symbol-observable: ^4.0.0
ts-invariant: ^0.8.2
tslib: ^2.1.0
zen-observable-ts: ^1.0.0
zen-observable-ts: ^1.1.0
peerDependencies:
graphql: ^14.0.0 || ^15.0.0
react: ^16.8.0 || ^17.0.0
@ -39,7 +39,7 @@ __metadata:
optional: true
subscriptions-transport-ws:
optional: true
checksum: 9aab66954dde42e0526ded57831b46742fba3339d5786300f3091a220dc4aea2e369f5c04f98b85cf09a346f5f4292ccd5e3c184ae2b05c9614d91a3b80530fd
checksum: f82bf07baadffae45d834f738720314684dda44dac582273b5fef77c2c52ef01d1c8f80a46b54fcbc5d5432bc33e76ad4352596da702879e25a7200c223f01a0
languageName: node
linkType: hard
@ -1505,6 +1505,69 @@ __metadata:
languageName: node
linkType: hard
"@fullcalendar/common@npm:~5.8.0":
version: 5.8.0
resolution: "@fullcalendar/common@npm:5.8.0"
dependencies:
tslib: ^2.1.0
checksum: 3f385053214bf00a3ae8080d203ffd226e91e4642237e6d72cb9b15510785e2e0678f7716068677e43553f869fd7db5990eea68d2403aeea7df1c81ed3a41bd8
languageName: node
linkType: hard
"@fullcalendar/core@npm:^5.8.0, @fullcalendar/core@npm:~5.8.0":
version: 5.8.0
resolution: "@fullcalendar/core@npm:5.8.0"
dependencies:
"@fullcalendar/common": ~5.8.0
preact: ^10.0.5
tslib: ^2.1.0
checksum: e8da63d0c6e242f5df812370db53d1fdfc403472f1b4210fae54b4a4abf22ddc9744a1779506786cf61c5b344cb902e24e1db00d7eae6dea88a0b854b315fae1
languageName: node
linkType: hard
"@fullcalendar/daygrid@npm:^5.8.0, @fullcalendar/daygrid@npm:~5.8.0":
version: 5.8.0
resolution: "@fullcalendar/daygrid@npm:5.8.0"
dependencies:
"@fullcalendar/common": ~5.8.0
tslib: ^2.1.0
checksum: a07fe810cbb41a7a4651a8843171f2e1565a175ac3b032d54ce18e8e63e3f6df61700def34adc13299e5375704fb8d998c1547c61c4a9aee1a4f3c79e162896e
languageName: node
linkType: hard
"@fullcalendar/interaction@npm:^5.8.0":
version: 5.8.0
resolution: "@fullcalendar/interaction@npm:5.8.0"
dependencies:
"@fullcalendar/common": ~5.8.0
tslib: ^2.1.0
checksum: 2813c959fe506366bba5c7b8152e3fc2073edaf0075a7451a1dc210abc971f35b086857811cdd27979364fc584db64c878d9db318212539fc76036184c099e1c
languageName: node
linkType: hard
"@fullcalendar/timegrid@npm:^5.8.0":
version: 5.8.0
resolution: "@fullcalendar/timegrid@npm:5.8.0"
dependencies:
"@fullcalendar/common": ~5.8.0
"@fullcalendar/daygrid": ~5.8.0
tslib: ^2.1.0
checksum: 516450e97421e5da508a61ca12f80918e935afe16285bd8e5281e9f2ef9265d2f63b46b4d5d073ca6f15a1a19bbb5011dead0011a66d56ccea939b0df7d81595
languageName: node
linkType: hard
"@fullcalendar/vue3@npm:^5.8.0":
version: 5.8.0
resolution: "@fullcalendar/vue3@npm:5.8.0"
dependencies:
"@fullcalendar/core": ~5.8.0
tslib: ^2.1.0
peerDependencies:
vue: ^3.0.11
checksum: 4496e4eb608e2552f9a8916fc9cd28734c703b1b8c94af12774f61e79e5dcf7a587261cde4555012a644fdb7ae3bde1a35882ee879108b30f3583308f8cda6c2
languageName: node
linkType: hard
"@fullhuman/postcss-purgecss@npm:^4.0.3":
version: 4.0.3
resolution: "@fullhuman/postcss-purgecss@npm:4.0.3"
@ -1576,12 +1639,12 @@ __metadata:
languageName: node
linkType: hard
"@heroicons/vue@npm:^1.0.1":
version: 1.0.1
resolution: "@heroicons/vue@npm:1.0.1"
"@heroicons/vue@npm:^1.0.2":
version: 1.0.2
resolution: "@heroicons/vue@npm:1.0.2"
peerDependencies:
vue: ">= 3"
checksum: b4cdf185c63da610a124064a6c1a6cf09e0861ea6bef9a5a2fcb2bef42a944af9686bd38c88593b897e922ef1d387d84dcabcec3bfab087b2d846d0a19077367
checksum: 113430f32a2bdcbcd1946bea8dde48b2ed6ce2dd030bf49a30241c31d1194fd25699652e4c0e944b22e59fff2a3e42410d56b59336ab21d7ffb04aa722b084b0
languageName: node
linkType: hard
@ -1987,12 +2050,12 @@ __metadata:
languageName: node
linkType: hard
"@tinymce/tinymce-vue@npm:^4.0.3":
version: 4.0.3
resolution: "@tinymce/tinymce-vue@npm:4.0.3"
"@tinymce/tinymce-vue@npm:^4.0.4":
version: 4.0.4
resolution: "@tinymce/tinymce-vue@npm:4.0.4"
peerDependencies:
vue: ^3.0.0
checksum: 873e2af8cf3570de0d9a80fbd30cbb853d1f2849a74d6f516a09bbadc6a8973aeee435e733c448760ab33ff8bff20d8bc43ed14b2e72d7dc34033aa5114950d1
checksum: 038db8355b25cfb756501dad7b0b2eea02243e8a7815e74a25516134e080aa80684a33100a316728578e164e7b431895ee114983474a0dadd7277343e90344cc
languageName: node
linkType: hard
@ -2474,10 +2537,10 @@ __metadata:
languageName: node
linkType: hard
"@types/zen-observable@npm:^0.8.2":
version: 0.8.2
resolution: "@types/zen-observable@npm:0.8.2"
checksum: f48643c09a5fb00503d5b5c156779870bc5c96c4cc7f3d0f643619752a04eed784de6a37c9121e284d2cdd8ec70e3e00a73613797f009f37dbe6795ffb9607c5
"@types/zen-observable@npm:0.8.3":
version: 0.8.3
resolution: "@types/zen-observable@npm:0.8.3"
checksum: ec75e17c7737e509e5b580fbeda853d8d54392281fba614be0fb86c97c517dc148ef8473b4cd45e547f2492af1c5104ce27fbd58dbded6e6e205122148e344d7
languageName: node
linkType: hard
@ -2758,29 +2821,29 @@ __metadata:
languageName: node
linkType: hard
"@vue/apollo-composable@npm:^4.0.0-alpha.12":
version: 4.0.0-alpha.12
resolution: "@vue/apollo-composable@npm:4.0.0-alpha.12"
"@vue/apollo-composable@npm:^4.0.0-alpha.13":
version: 4.0.0-alpha.13
resolution: "@vue/apollo-composable@npm:4.0.0-alpha.13"
dependencies:
throttle-debounce: ^2.3.0
vue-demi: ^0.4.0
vue-demi: ^0.9.1
peerDependencies:
"@apollo/client": ^3.2.1
"@vue/composition-api": ^1.0.0-beta.16
graphql: ^14.5.8
vue: ^2.6.10
checksum: 72af446e168ba95289d36988a00b1dbe1ed462e67a86ab158578c11453f494197fdb4e6fb3c56cb27d6722a0c4eba6d9bf2ca138deb8ca7e49911eed0bbdedec
graphql: ^15.3.0
vue: ^3.1.0
checksum: c6817c62a4c58284119479e1f980814c56a36df8bb55c65b9ab30708f65126731f0a4bd5bfbe55d5e40f720f66f0880f7e15dbdbf7bb3f7721b508b2aeab2f99
languageName: node
linkType: hard
"@vue/apollo-option@npm:^4.0.0-alpha.11":
version: 4.0.0-alpha.11
resolution: "@vue/apollo-option@npm:4.0.0-alpha.11"
"@vue/apollo-option@npm:^4.0.0-alpha.13":
version: 4.0.0-alpha.13
resolution: "@vue/apollo-option@npm:4.0.0-alpha.13"
dependencies:
throttle-debounce: ^2.3.0
peerDependencies:
"@apollo/client": ^3.2.1
checksum: a203c22b30a3d415b7543fd18b915dd9e8d2c57bde79fc82c90d3a9b67ea0523b74b09d0a10e5d96d5bcfd8623a1265174c5c02830cd38af060497543b880b34
vue: ^3.1.0
checksum: be90929cdcabd0d1a1145bfba50dae5fbe7c490f08a9e8d6e984a1767738b9f4636cbebd24702647418342822041469a104563d921aeeccc0fa7f263738b9ff7
languageName: node
linkType: hard
@ -3389,21 +3452,21 @@ __metadata:
languageName: node
linkType: hard
"@vuelidate/core@npm:^2.0.0-alpha.19":
version: 2.0.0-alpha.19
resolution: "@vuelidate/core@npm:2.0.0-alpha.19"
"@vuelidate/core@npm:^2.0.0-alpha.21":
version: 2.0.0-alpha.21
resolution: "@vuelidate/core@npm:2.0.0-alpha.21"
dependencies:
vue-demi: ^0.9.1
checksum: 4cbb3524be38a78f16aa844f82d4aa4fa702b6bb44ba906babcc243fba751c4ab9712cf61b29462b7605ab53c2013ab0f52923910d65f9bde51d9e7d9c25c969
checksum: 42d83abf6cec87be529579e7f2b0f13649ce0845687d16170c0fb7b3a05fe4480fc38fdcbc39557b5fe12f124d5b658d527b7a6f91bd26ed72a9b7cda351e77e
languageName: node
linkType: hard
"@vuelidate/validators@npm:^2.0.0-alpha.17":
version: 2.0.0-alpha.17
resolution: "@vuelidate/validators@npm:2.0.0-alpha.17"
"@vuelidate/validators@npm:^2.0.0-alpha.18":
version: 2.0.0-alpha.18
resolution: "@vuelidate/validators@npm:2.0.0-alpha.18"
dependencies:
vue-demi: ^0.9.1
checksum: eb9eb26634681ddd7c684023ef314df3c9da3eae1045aa7d1ae5a6a40fddec8e2df8efd1c748f872e34b3b3cd7a9bd69a5ea9bb2997f912955725b1a230b6fa3
checksum: c7d9a63a5da1a1ba7786ce933fc6ebd38e51e5c83b5cfb4ba6cb1dbc3851570e51a155ab0dc130659826fd7cbc7e95e5a61a99e1728af683099d491c72eae864
languageName: node
linkType: hard
@ -4652,12 +4715,12 @@ __metadata:
languageName: node
linkType: hard
"autoprefixer@npm:^10.2.6":
version: 10.2.6
resolution: "autoprefixer@npm:10.2.6"
"autoprefixer@npm:^10.3.0":
version: 10.3.0
resolution: "autoprefixer@npm:10.3.0"
dependencies:
browserslist: ^4.16.6
caniuse-lite: ^1.0.30001230
caniuse-lite: ^1.0.30001243
colorette: ^1.2.2
fraction.js: ^4.1.1
normalize-range: ^0.1.2
@ -4666,7 +4729,7 @@ __metadata:
postcss: ^8.1.0
bin:
autoprefixer: bin/autoprefixer
checksum: 805414d4efe4f25c6162edc65ad999235ea28cf11b6a1ed838b055ef1f777368dd16c978b44d0b48bb96a3420948d26da27066d5caa4f81bcee1946e9a269532
checksum: f733fb0487bf1dbb37e28becb47df4decdd056dad7094c672533a2a0550add58e179488263b05b12e39d8b59e5386ee827d50b90025f08e6af71e1dbc62e5fb6
languageName: node
linkType: hard
@ -6109,13 +6172,20 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001219, caniuse-lite@npm:^1.0.30001230":
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001219":
version: 1.0.30001238
resolution: "caniuse-lite@npm:1.0.30001238"
checksum: 10dcc7059a44fc535f65131a9cb7f0e1a1187e488e5ddaa1a8ecacb5bfd5f2299d29d63bd5ee1385acf97de1f593e5cc97321b00c7a73e76627e706507fe06c0
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001243":
version: 1.0.30001243
resolution: "caniuse-lite@npm:1.0.30001243"
checksum: 0d6330d2279c9ec2b58cf5154ec80eeea6bca861825a791f037c644e36cf28a19db32a35a66ac989ee026b7d19ffc0eb3ad78fbc8512f7433b0caa1964de4999
languageName: node
linkType: hard
"canvg@npm:^3.0.6":
version: 3.0.7
resolution: "canvg@npm:3.0.7"
@ -6204,12 +6274,17 @@ __metadata:
version: 0.0.0-use.local
resolution: "chamilo@workspace:."
dependencies:
"@apollo/client": ^3.4.0-rc.15
"@apollo/client": ^3.4.0-rc.18
"@babel/eslint-parser": ^7.14.7
"@babel/plugin-transform-runtime": ^7.14.5
"@fancyapps/fancybox": ^3.5.7
"@fullcalendar/core": ^5.8.0
"@fullcalendar/daygrid": ^5.8.0
"@fullcalendar/interaction": ^5.8.0
"@fullcalendar/timegrid": ^5.8.0
"@fullcalendar/vue3": ^5.8.0
"@headlessui/vue": ^1.3.0
"@heroicons/vue": ^1.0.1
"@heroicons/vue": ^1.0.2
"@mdi/font": ^5.9.55
"@popperjs/core": ^2.9.2
"@quasar/extras": latest
@ -6218,7 +6293,7 @@ __metadata:
"@tailwindcss/line-clamp": ^0.2.1
"@tailwindcss/typography": ^0.4.1
"@tailwindcss/ui": ^0.7.2
"@tinymce/tinymce-vue": ^4.0.3
"@tinymce/tinymce-vue": ^4.0.4
"@types/lodash": ^4.14.171
"@uppy/core": ^1.19.2
"@uppy/dashboard": ^1.20.2
@ -6229,16 +6304,16 @@ __metadata:
"@uppy/vue": ^0.2.5
"@uppy/webcam": ^1.8.12
"@uppy/xhr-upload": ^1.7.5
"@vue/apollo-composable": ^4.0.0-alpha.12
"@vue/apollo-option": ^4.0.0-alpha.11
"@vue/apollo-composable": ^4.0.0-alpha.13
"@vue/apollo-option": ^4.0.0-alpha.13
"@vue/cli": ^4.5.13
"@vue/cli-plugin-babel": ~4.5.13
"@vue/cli-plugin-eslint": ~4.5.13
"@vue/cli-service": ~4.5.13
"@vue/compiler-sfc": ^3.1.4
"@vuelidate/core": ^2.0.0-alpha.19
"@vuelidate/validators": ^2.0.0-alpha.17
autoprefixer: ^10.2.6
"@vuelidate/core": ^2.0.0-alpha.21
"@vuelidate/validators": ^2.0.0-alpha.18
autoprefixer: ^10.3.0
axios: ^0.21.1
babel: ^6.23.0
babel-plugin-transform-builtin-extend: ^1.1.2
@ -6265,13 +6340,12 @@ __metadata:
flag-icon-css: ^3.5.0
free-jqgrid: "https://github.com/chamilo/jqGrid.git#bs4"
full-icu: ^1.3.4
fullcalendar: ^5.8.0
glob-all: ^3.2.1
graphql: ^15.5.1
graphql-tag: ^2.12.5
highlight.js: ^11.1.0
hljs: ^6.2.3
html2canvas: ^1.0.0-rc.7
html2canvas: ^1.1.0
image-map-resizer: ^1.0.10
jquery: ^3.6.0
jquery-ui: ^1.12.1
@ -6282,7 +6356,7 @@ __metadata:
jsplumb: ^2.15.6
linkifyjs: 3.0.0-beta.3
litepicker: ^2.0.11
luxon: ^1.27.0
luxon: ^1.28.0
mathjax: ^2.7.9
mediaelement: ^4.2.16
mediaelement-plugins: "https://github.com/chamilo/mediaelement-plugins"
@ -6304,7 +6378,7 @@ __metadata:
purgecss-webpack-plugin: ^4.0.3
pwstrength-bootstrap: ^3.1.0
qtip2: ^3.0.3
quasar: 2.0.1
quasar: 2.0.2
readmore-js: ^2.2.1
sass: ^1.35.2
sass-loader: ^11.1.1
@ -9904,13 +9978,6 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"fullcalendar@npm:^5.8.0":
version: 5.8.0
resolution: "fullcalendar@npm:5.8.0"
checksum: 99d03fc7e4027494f5c17310f5e7ac9905be15fb930aa16c9d57a6f84589454528ef35aa5dec63b4ce68f9901dc24e781ac8a4dbb31457dafc645f6eb95650af
languageName: node
linkType: hard
"function-bind@npm:^1.1.1":
version: 1.1.1
resolution: "function-bind@npm:1.1.1"
@ -10781,7 +10848,7 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"html2canvas@npm:^1.0.0-rc.5, html2canvas@npm:^1.0.0-rc.7":
"html2canvas@npm:^1.0.0-rc.5":
version: 1.0.0-rc.7
resolution: "html2canvas@npm:1.0.0-rc.7"
dependencies:
@ -10790,6 +10857,15 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"html2canvas@npm:^1.1.0":
version: 1.1.0
resolution: "html2canvas@npm:1.1.0"
dependencies:
css-line-break: 1.1.1
checksum: e3631dfcdeb8c2559fc51944939362920243f711ba6012392cbcfcf63f43d3099131a804cde91e53192a737f2a5199604bc094f03fa817958aa2d547ef7bcd97
languageName: node
linkType: hard
"htmlparser2@npm:^6.1.0":
version: 6.1.0
resolution: "htmlparser2@npm:6.1.0"
@ -12755,10 +12831,10 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"luxon@npm:^1.27.0":
version: 1.27.0
resolution: "luxon@npm:1.27.0"
checksum: c60f73b6b94bdd4e43c731133aa746388b907a26a5a426478c2520b263bec1dae4dc6e269a3410374789551309c65af5d245fae4cef61b72c3ad64a4c3e8b2b9
"luxon@npm:^1.28.0":
version: 1.28.0
resolution: "luxon@npm:1.28.0"
checksum: db7638087b89527c721a9f308a4ec0ed4e95183ebcf03079c0be827a3455d2d70e674d9708d84758e0cc93b486cc2a34c50649b106778bc788285c43e223c7b7
languageName: node
linkType: hard
@ -15818,6 +15894,13 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"preact@npm:^10.0.5":
version: 10.5.14
resolution: "preact@npm:10.5.14"
checksum: 1cb6f0eecd0f1de15621efae40f86790dac5a5eb68ca2a02790685c234055fc6efe60def719a0a90b747ed35b1b5099fc7a3e33cf0d4972bf9b1e3895cf02efa
languageName: node
linkType: hard
"prelude-ls@npm:^1.2.1":
version: 1.2.1
resolution: "prelude-ls@npm:1.2.1"
@ -16178,10 +16261,10 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"quasar@npm:2.0.1":
version: 2.0.1
resolution: "quasar@npm:2.0.1"
checksum: b1a0ac1e0be808910781be40b64a5b9c95079942808df7aab0c0a1ab22b3795ccf714185f03ade6c4f083642e11de17eb34946f085a6ec6f0152c0d609779bbf
"quasar@npm:2.0.2":
version: 2.0.2
resolution: "quasar@npm:2.0.2"
checksum: ce632dc5a5e7082fde14d3d08d98915f3b25e9cb2b3ec2fa36f81f414bf7f54070efc5f165e46d29409e20cfe416566aa60c8818aabd2f1db555a494155679b9
languageName: node
linkType: hard
@ -19531,17 +19614,6 @@ typescript@~4.1.5:
languageName: node
linkType: hard
"vue-demi@npm:^0.4.0":
version: 0.4.5
resolution: "vue-demi@npm:0.4.5"
peerDependencies:
vue: ^2.6.0 || >=3.0.0-rc.1
bin:
vue-demi-fix: scripts/postinstall.js
checksum: b315dfebdaf970f64fc546c3f137fa728e67442b48063e90f46309666cb7f90ac664674814a8dd178561c9f28d1a121588733c29c0351231bc7da492f08c88c4
languageName: node
linkType: hard
"vue-demi@npm:^0.9.1":
version: 0.9.1
resolution: "vue-demi@npm:0.9.1"
@ -20583,17 +20655,17 @@ typescript@~4.1.5:
languageName: node
linkType: hard
"zen-observable-ts@npm:^1.0.0":
version: 1.0.0
resolution: "zen-observable-ts@npm:1.0.0"
"zen-observable-ts@npm:^1.1.0":
version: 1.1.0
resolution: "zen-observable-ts@npm:1.1.0"
dependencies:
"@types/zen-observable": ^0.8.2
zen-observable: ^0.8.15
checksum: 285d473b5aefeabdeb434fedbcf4698f286d807bb1aece10a6e6372f30f996fb169fd8a8ee729b24a0ea0f723fde967dd2459f0396bdd377d3d101f846ccf45e
"@types/zen-observable": 0.8.3
zen-observable: 0.8.15
checksum: daae0a5afd658f699e0dca8ede85caad61a5aa42f39f8053beb940bd17dd60c0e63ffc90435ccea1bcd243a65aa3780d115482a3e025a9dd64bf18ee8eea52a7
languageName: node
linkType: hard
"zen-observable@npm:^0.8.0, zen-observable@npm:^0.8.15":
"zen-observable@npm:0.8.15, zen-observable@npm:^0.8.0":
version: 0.8.15
resolution: "zen-observable@npm:0.8.15"
checksum: 7d155f8a75b9314f9f31e70a31edcd897b0e8a1313737502ab84a573e49d2c333b738e415c156334a6e910c363ce546b59fa7921eff61440285caa99c843df74

Loading…
Cancel
Save