Merge branch 'master' of github.com:chamilo/chamilo-lms

pull/5694/head
Yannick Warnier 1 year ago
commit 972406f182
  1. 2
      assets/css/scorm.scss
  2. 16
      assets/vue/services/messagereluser.js
  3. 60
      assets/vue/views/message/MessageShow.vue
  4. 2
      assets/vue/views/userreluser/UserRelUserAdd.vue
  5. 19
      src/CoreBundle/Entity/MessageRelUser.php
  6. 6
      src/CoreBundle/Entity/MessageTag.php

@ -727,7 +727,7 @@ See https://support.chamilo.org/issues/6976
@apply bg-no-repeat bg-transparent bg-left; @apply bg-no-repeat bg-transparent bg-left;
a.items-list { a.items-list {
@apply py-3 pr-4 relative @apply py-4 pr-10 relative
after:block after:absolute after:bottom-0 after:left-0 after:right-0 after:mr-4 after:border-b after:border-gray-25 after:block after:absolute after:bottom-0 after:left-0 after:right-0 after:mr-4 after:border-b after:border-gray-25
; ;
} }

@ -1,3 +1,15 @@
import makeService from './api'; import makeService from "./api"
import baseService from "./baseService"
export default makeService('message_rel_users'); /**
* @param {string} iri
* @param {Object} params
* @returns {Promise<Object>}
*/
async function update(iri, params) {
return await baseService.put(iri, params)
}
export default makeService("message_rel_users", {
update,
})

@ -148,6 +148,7 @@ import BaseAutocomplete from "../../components/basecomponents/BaseAutocomplete.v
import { useFormatDate } from "../../composables/formatDate" import { useFormatDate } from "../../composables/formatDate"
import { useMessageRelUserStore } from "../../store/messageRelUserStore" import { useMessageRelUserStore } from "../../store/messageRelUserStore"
import messageTagService from "../../services/messageTagService" import messageTagService from "../../services/messageTagService"
import messageRelUserService from "../../services/messagereluser"
import { useSecurityStore } from "../../store/securityStore" import { useSecurityStore } from "../../store/securityStore"
import BaseCard from "../../components/basecomponents/BaseCard.vue" import BaseCard from "../../components/basecomponents/BaseCard.vue"
import MessageCommunicationParty from "./MessageCommunicationParty.vue" import MessageCommunicationParty from "./MessageCommunicationParty.vue"
@ -186,11 +187,8 @@ store.dispatch("message/load", id).then((responseItem) => {
// Change to read. // Change to read.
if (myReceiver.value && false === myReceiver.value.read) { if (myReceiver.value && false === myReceiver.value.read) {
store messageRelUserService
.dispatch("messagereluser/update", { .update(myReceiver.value["@id"], { read: true })
"@id": myReceiver.value["@id"],
read: true,
})
.then(() => messageRelUserStore.findUnreadCount()) .then(() => messageRelUserStore.findUnreadCount())
} }
}) })
@ -213,11 +211,7 @@ function getTagIndex(tag) {
return myReceiver.value.tags.findIndex((receiverTag) => receiverTag["@id"] === tag["@id"]) return myReceiver.value.tags.findIndex((receiverTag) => receiverTag["@id"] === tag["@id"])
} }
function mapTagsToIds() { function onRemoveTagFromMessage(tag) {
return myReceiver.value.tags.map((receiverTag) => receiverTag["@id"])
}
async function onRemoveTagFromMessage(tag) {
const index = getTagIndex(tag) const index = getTagIndex(tag)
if (index < 0) { if (index < 0) {
@ -226,12 +220,12 @@ async function onRemoveTagFromMessage(tag) {
myReceiver.value.tags.splice(index, 1) myReceiver.value.tags.splice(index, 1)
const newTagIds = mapTagsToIds() messageRelUserService
.update(myReceiver.value["@id"], {
await store.dispatch("messagereluser/update", { tags: myReceiver.value.tags,
"@id": myReceiver.value["@id"], })
tags: newTagIds, .then(({ tags: newTagList }) => (myReceiver.value.tags = newTagList))
}) .catch((e) => console.log(e))
} }
function reply() { function reply() {
@ -264,36 +258,28 @@ async function onSearchTags(query) {
} }
async function onItemSelect({ value }) { async function onItemSelect({ value }) {
const newTag = computed(() => store.state.messagetag.created)
if (!value["@id"]) { if (!value["@id"]) {
try { myReceiver.value.tags.push({
await store.dispatch("messagetag/create", { user: securityStore.user["@id"],
user: securityStore.user["@id"], tag: value.tag,
tag: value.tag, })
})
} catch (e) {
return
}
} else { } else {
const existingIndex = getTagIndex(value) >= 0 const existingIndex = getTagIndex(value) >= 0
if (existingIndex) { if (existingIndex) {
return return
} }
}
foundTag.value = ""
if (myReceiver.value && newTag.value) {
myReceiver.value.tags.push(newTag.value)
const newTagIds = mapTagsToIds() myReceiver.value.tags.push(value)
}
await store.dispatch("messagereluser/update", { messageRelUserService
"@id": myReceiver.value["@id"], .update(myReceiver.value["@id"], {
tags: newTagIds, tags: myReceiver.value.tags,
}) })
} .then(({ tags: newTagList }) => (myReceiver.value.tags = newTagList))
.catch((e) => console.log(e))
foundTag.value = ""
} }
</script> </script>

@ -37,7 +37,7 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { onMounted, ref, defineEmits } from "vue" import { onMounted, ref } from "vue"
import { useRoute, useRouter } from "vue-router" import { useRoute, useRouter } from "vue-router"
import { useI18n } from "vue-i18n" import { useI18n } from "vue-i18n"
import { useNotification } from "../../composables/notification" import { useNotification } from "../../composables/notification"

@ -16,7 +16,14 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource] #[ApiResource(
normalizationContext: [
'groups' => ['message_rel_user:read'],
],
denormalizationContext: [
'groups' => ['message_rel_user:write'],
],
)]
#[UniqueEntity( #[UniqueEntity(
fields: ['message', 'receiver'], fields: ['message', 'receiver'],
message: 'This message-receiver relation is already used.', message: 'This message-receiver relation is already used.',
@ -40,22 +47,24 @@ class MessageRelUser
public const TYPE_TO = 1; public const TYPE_TO = 1;
public const TYPE_CC = 2; public const TYPE_CC = 2;
#[Groups(['message_rel_user:read'])]
#[ORM\Column(name: 'id', type: 'integer')] #[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue] #[ORM\GeneratedValue]
protected ?int $id = null; protected ?int $id = null;
#[Groups(['message_rel_user:read'])]
#[ORM\ManyToOne(targetEntity: Message::class, cascade: ['persist'], inversedBy: 'receivers')] #[ORM\ManyToOne(targetEntity: Message::class, cascade: ['persist'], inversedBy: 'receivers')]
#[ORM\JoinColumn(name: 'message_id', referencedColumnName: 'id', nullable: false)] #[ORM\JoinColumn(name: 'message_id', referencedColumnName: 'id', nullable: false)]
protected Message $message; protected Message $message;
#[Assert\NotNull] #[Assert\NotNull]
#[Groups(['message:read', 'message:write'])] #[Groups(['message:read', 'message:write', 'message_rel_user:read'])]
#[ORM\ManyToOne(targetEntity: User::class, cascade: ['persist'], inversedBy: 'receivedMessages')] #[ORM\ManyToOne(targetEntity: User::class, cascade: ['persist'], inversedBy: 'receivedMessages')]
#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')] #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
protected User $receiver; protected User $receiver;
#[Groups(['message:read', 'message:write'])] #[Groups(['message:read', 'message:write', 'message_rel_user:read', 'message_rel_user:write'])]
#[ORM\Column(name: 'msg_read', type: 'boolean', nullable: false)] #[ORM\Column(name: 'msg_read', type: 'boolean', nullable: false)]
protected bool $read; protected bool $read;
@ -63,7 +72,7 @@ class MessageRelUser
#[ORM\Column(name: 'receiver_type', type: 'smallint', nullable: false)] #[ORM\Column(name: 'receiver_type', type: 'smallint', nullable: false)]
protected int $receiverType; protected int $receiverType;
#[Groups(['message:read', 'message:write'])] #[Groups(['message:read', 'message:write', 'message_rel_user:read', 'message_rel_user:write'])]
#[ORM\Column(name: 'starred', type: 'boolean', nullable: false)] #[ORM\Column(name: 'starred', type: 'boolean', nullable: false)]
protected bool $starred; protected bool $starred;
@ -71,7 +80,7 @@ class MessageRelUser
* @var Collection<int, MessageTag> * @var Collection<int, MessageTag>
*/ */
#[Assert\Valid] #[Assert\Valid]
#[Groups(['message:read'])] #[Groups(['message:read', 'message_rel_user:read', 'message_rel_user:write'])]
#[ORM\JoinTable(name: 'message_rel_user_rel_tags')] #[ORM\JoinTable(name: 'message_rel_user_rel_tags')]
#[ORM\ManyToMany(targetEntity: MessageTag::class, inversedBy: 'messageRelUsers', cascade: ['persist', 'remove'])] #[ORM\ManyToMany(targetEntity: MessageTag::class, inversedBy: 'messageRelUsers', cascade: ['persist', 'remove'])]
protected Collection $tags; protected Collection $tags;

@ -56,21 +56,21 @@ class MessageTag
{ {
use TimestampableTypedEntity; use TimestampableTypedEntity;
#[Groups(['message_tag:read', 'message:read'])] #[Groups(['message_tag:read', 'message:read', 'message_rel_user:read'])]
#[ORM\Column(name: 'id', type: 'integer')] #[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue] #[ORM\GeneratedValue]
protected ?int $id = null; protected ?int $id = null;
#[Assert\NotBlank] #[Assert\NotBlank]
#[Groups(['message_tag:read', 'message_tag:write'])] #[Groups(['message_tag:read', 'message_tag:write', 'message_rel_user:write'])]
#[Gedmo\SortableGroup] #[Gedmo\SortableGroup]
#[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'messageTags')] #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'messageTags')]
#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'cascade')] #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'cascade')]
protected User $user; protected User $user;
#[Assert\NotBlank] #[Assert\NotBlank]
#[Groups(['message_tag:read', 'message_tag:write', 'message:read'])] #[Groups(['message_tag:read', 'message_tag:write', 'message:read', 'message_rel_user:read', 'message_rel_user:write'])]
#[ORM\Column(name: 'tag', type: 'string', nullable: false)] #[ORM\Column(name: 'tag', type: 'string', nullable: false)]
protected string $tag; protected string $tag;

Loading…
Cancel
Save