Merge remote-tracking branch 'origin/master'

pull/5898/head
Angel Fernando Quiroz Campos 11 months ago
commit dd60eaf88a
No known key found for this signature in database
GPG Key ID: B284841AE3E562CD
  1. 1
      assets/vue/services/message.js
  2. 1
      assets/vue/store/messageRelUserStore.js
  3. 15
      assets/vue/views/message/MessageList.vue
  4. 23
      assets/vue/views/message/MessageShow.vue
  5. 2
      src/CoreBundle/Entity/Message.php
  6. 8
      src/CoreBundle/Entity/MessageRelUser.php

@ -18,6 +18,7 @@ async function create(message) {
}
async function countUnreadMessages(params) {
params["exists[receivers.deletedAt]"] = false
const queryParams = new URLSearchParams(params).toString()
return await baseService.get(`/api/messages?${queryParams}`)
}

@ -17,6 +17,7 @@ export const useMessageRelUserStore = defineStore("messageRelUser", {
"receivers.read": false,
"receivers.receiver": securityStore.user["@id"],
"receivers.receiverType": 1,
"exists[receivers.deletedAt]": false,
itemsPerPage: 1,
msgType: MESSAGE_TYPE_INBOX,
status: 0,

@ -149,7 +149,7 @@
<template #body="slotProps">
<BaseAppLink
class="text-primary"
:to="{ name: 'MessageShow', query: { id: slotProps.data['@id'] } }"
:to="{ name: 'MessageShow', query: { id: slotProps.data['@id'], receiverType: showingInbox ? MESSAGE_TYPE_INBOX : MESSAGE_TYPE_SENDER } }"
>
{{ slotProps.data.title }}
</BaseAppLink>
@ -474,6 +474,7 @@ function showInbox() {
page: 1,
"receivers.receiver": securityStore.user["@id"],
"receivers.receiverType": MESSAGE_TYPE_INBOX,
"exists[receivers.deletedAt]": false,
}
loadMessages()
@ -489,6 +490,7 @@ function showInboxByTag(tag) {
itemsPerPage: initialRowsPerPage,
page: 1,
"receivers.receiverType": MESSAGE_TYPE_INBOX,
"exists[receivers.deletedAt]": false,
}
loadMessages()
@ -505,6 +507,7 @@ function showUnread() {
itemsPerPage: initialRowsPerPage,
page: 1,
"receivers.receiverType": MESSAGE_TYPE_INBOX,
"exists[receivers.deletedAt]": false,
}
loadMessages()
@ -518,6 +521,7 @@ function showSent() {
fetchPayload = {
sender: securityStore.user["@id"],
"receivers.receiverType": MESSAGE_TYPE_SENDER,
"exists[receivers.deletedAt]": false,
"order[sendDate]": "desc",
itemsPerPage: initialRowsPerPage,
page: 1,
@ -529,6 +533,7 @@ function showSent() {
function refreshMessages() {
fetchPayload.itemsPerPage = initialRowsPerPage
fetchPayload.page = 1
fetchPayload["exists[receivers.deletedAt]"] = false
loadMessages()
}
@ -553,10 +558,12 @@ function sortingChanged(event) {
loadMessages(true)
}
function findMyReceiver(message) {
function findMyReceiver(message, receiverType = showingInbox.value ? MESSAGE_TYPE_INBOX : MESSAGE_TYPE_SENDER) {
const receivers = [...message.receiversTo, ...message.receiversCc, ...message.receiversSender]
return receivers.find(({ receiver }) => receiver["@id"] === securityStore.user["@id"])
return receivers.find(({ receiver, receiverType: type }) => {
const isSelf = receiver["@id"] === securityStore.user["@id"]
return isSelf && type === receiverType
})
}
async function deleteMessage(message) {

@ -148,6 +148,7 @@ import BaseIcon from "../../components/basecomponents/BaseIcon.vue"
import SectionHeader from "../../components/layout/SectionHeader.vue"
import { useNotification } from "../../composables/notification"
import { useMessageReceiverFormatter } from "../../composables/message/messageFormatter"
import { MESSAGE_TYPE_INBOX } from "../../constants/entity/message"
const confirm = useConfirm()
const { t } = useI18n()
@ -174,22 +175,30 @@ const item = ref(null)
const myReceiver = ref(null)
const notification = useNotification()
const receiverType = route.query.receiverType ? parseInt(route.query.receiverType) : MESSAGE_TYPE_INBOX
store.dispatch("message/load", id).then((responseItem) => {
item.value = responseItem
item.value = responseItem;
myReceiver.value = findMyReceiver(responseItem)
myReceiver.value = findMyReceiver(responseItem, receiverType)
// Change to read.
if (myReceiver.value && false === myReceiver.value.read) {
if (myReceiver.value && !myReceiver.value.read) {
messageRelUserService
.update(myReceiver.value["@id"], { read: true })
.then(() => messageRelUserStore.findUnreadCount())
}
})
function findMyReceiver(message) {
const receivers = [...message.receiversTo, ...message.receiversCc, ...message.receiversSender]
return receivers.find(({ receiver }) => receiver["@id"] === securityStore.user["@id"])
function findMyReceiver(message, receiverType) {
const receivers = [
...message.receiversTo,
...message.receiversCc,
...message.receiversSender
]
return receivers.find(({receiver, receiverType: type}) => {
const isSelf = receiver["@id"] === securityStore.user["@id"]
return isSelf && type === receiverType
})
}
async function deleteMessage(message) {

@ -7,6 +7,7 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
use ApiPlatform\Doctrine\Orm\Filter\ExistsFilter;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Metadata\ApiFilter;
@ -78,6 +79,7 @@ use Symfony\Component\Validator\Constraints as Assert;
properties: ['receivers.read']
)]
#[ApiFilter(SearchOrFilter::class, properties: ['title', 'content'])]
#[ApiFilter(ExistsFilter::class, properties: ['receivers.deletedAt'])]
class Message
{
public const MESSAGE_TYPE_INBOX = 1;

@ -6,6 +6,7 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Doctrine\Orm\Filter\ExistsFilter;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiResource;
@ -39,7 +40,8 @@ use Symfony\Component\Validator\Constraints as Assert;
#[UniqueEntity(
fields: ['message', 'receiver'],
message: 'This message-receiver relation is already used.',
errorPath: 'message'
errorPath: 'message',
groups: ['create']
)]
#[ORM\Table(name: 'message_rel_user')]
#[ORM\UniqueConstraint(name: 'message_receiver', columns: ['message_id', 'user_id', 'receiver_type'])]
@ -55,6 +57,10 @@ use Symfony\Component\Validator\Constraints as Assert;
'tags.tag' => 'exact',
]
)]
#[ApiFilter(
ExistsFilter::class,
properties: ['deletedAt']
)]
class MessageRelUser
{
use SoftDeleteableEntity;

Loading…
Cancel
Save