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;
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
;
}

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

@ -37,7 +37,7 @@
</div>
</template>
<script setup>
import { onMounted, ref, defineEmits } from "vue"
import { onMounted, ref } from "vue"
import { useRoute, useRouter } from "vue-router"
import { useI18n } from "vue-i18n"
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\Validator\Constraints as Assert;
#[ApiResource]
#[ApiResource(
normalizationContext: [
'groups' => ['message_rel_user:read'],
],
denormalizationContext: [
'groups' => ['message_rel_user:write'],
],
)]
#[UniqueEntity(
fields: ['message', 'receiver'],
message: 'This message-receiver relation is already used.',
@ -40,22 +47,24 @@ class MessageRelUser
public const TYPE_TO = 1;
public const TYPE_CC = 2;
#[Groups(['message_rel_user:read'])]
#[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id]
#[ORM\GeneratedValue]
protected ?int $id = null;
#[Groups(['message_rel_user:read'])]
#[ORM\ManyToOne(targetEntity: Message::class, cascade: ['persist'], inversedBy: 'receivers')]
#[ORM\JoinColumn(name: 'message_id', referencedColumnName: 'id', nullable: false)]
protected Message $message;
#[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\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
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)]
protected bool $read;
@ -63,7 +72,7 @@ class MessageRelUser
#[ORM\Column(name: 'receiver_type', type: 'smallint', nullable: false)]
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)]
protected bool $starred;
@ -71,7 +80,7 @@ class MessageRelUser
* @var Collection<int, MessageTag>
*/
#[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\ManyToMany(targetEntity: MessageTag::class, inversedBy: 'messageRelUsers', cascade: ['persist', 'remove'])]
protected Collection $tags;

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

Loading…
Cancel
Save