diff --git a/public/main/inc/ajax/extra_field.ajax.php b/public/main/inc/ajax/extra_field.ajax.php index 3b739db034..ac8be867be 100644 --- a/public/main/inc/ajax/extra_field.ajax.php +++ b/public/main/inc/ajax/extra_field.ajax.php @@ -35,6 +35,29 @@ switch ($action) { ); } break; + case 'delete_tag': + header('Content-Type: application/json'); + $tagId = $_REQUEST['tag_id'] ?? 0; + $tagRepo = Container::getTagRepository(); + $extraFieldRepo = Container::getExtraFieldRepository(); + $tag = $tagRepo->find($tagId); + + if (empty($tag)) { + echo json_encode(['items' => []]); + exit; + } + + $user = api_get_user_entity(); + $tagRepo = Container::getTagRepository(); + $deleted = $tagRepo->deleteTagFromUser($user, $tag); + if ($deleted) { + echo json_encode(['ok' => 1]); + exit; + } else { + echo json_encode(['error' => 1]); + exit; + } + break; case 'search_tags': header('Content-Type: application/json'); $tag = isset($_REQUEST['q']) ? (string) $_REQUEST['q'] : ''; @@ -52,7 +75,7 @@ switch ($action) { $result = []; foreach ($tags as $tag) { $result[] = [ - 'id' => $tag->getTag(), + 'id' => $tag->getId(), 'text' => $tag->getTag(), ]; } diff --git a/src/CoreBundle/Form/ExtraFieldType.php b/src/CoreBundle/Form/ExtraFieldType.php index f1d934674a..df42fcd457 100644 --- a/src/CoreBundle/Form/ExtraFieldType.php +++ b/src/CoreBundle/Form/ExtraFieldType.php @@ -102,15 +102,20 @@ class ExtraFieldType extends AbstractType if (ExtraField::USER_FIELD_TYPE === $extraFieldType) { $class = 'select2_user_rel_tag'; $tags = $this->tagRepository->getTagsByUser($extraField, $item); + $choices = []; + $choicesAttributes = []; foreach ($tags as $tag) { $stringTag = $tag->getTag(); if (empty($stringTag)) { continue; } $choices[$stringTag] = $stringTag; + $choicesAttributes[$stringTag] = ['data-id' => $tag->getId()]; } + $defaultOptions['choices'] = $choices; + $defaultOptions['choice_attr'] = $choicesAttributes; $defaultOptions['data'] = $choices; } @@ -200,31 +205,34 @@ class ExtraFieldType extends AbstractType } /*$builder->addEventListener( - FormEvents::PRE_SET_DATA, + FormEvents::POST_SET_DATA, function (FormEvent $event) use ($item, $extraFields): void { $data = $event->getData(); foreach ($extraFields as $extraField) { - $newValue = $data[$extraField->getVariable()] ?? ''; + $newValue = $data[$extraField->getVariable()] ?? null; if (!empty($newValue)) { - if (\ExtraField::FIELD_TYPE_DATE === $extraField->getFieldType()) { - var_dump($newValue); - exit; - } - if (\ExtraField::FIELD_TYPE_DATETIME === $extraField->getFieldType()) { + if (\ExtraField::FIELD_TYPE_TAG === $extraField->getFieldType()) { + $formItem = $event->getForm()->get($extraField->getVariable()); + $formItem->setData($newValue); } } } } );*/ + $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($item, $extraFields): void { $data = $event->getData(); foreach ($extraFields as $extraField) { $newValue = $data[$extraField->getVariable()] ?? null; - if (\ExtraField::FIELD_TYPE_TAG === $extraField->getFieldType()) { + $formItem = $event->getForm()->get($extraField->getVariable()); + $options = $formItem->getConfig()->getOptions(); + $options['choices'] = $newValue; + $event->getForm()->add($extraField->getVariable(), ChoiceType::class, $options); + foreach ($newValue as $tag) { $this->tagRepository->addTagToUser($extraField, $item, $tag); } diff --git a/src/CoreBundle/Repository/TagRepository.php b/src/CoreBundle/Repository/TagRepository.php index 44c525ac5f..e9e45c1239 100644 --- a/src/CoreBundle/Repository/TagRepository.php +++ b/src/CoreBundle/Repository/TagRepository.php @@ -105,4 +105,26 @@ class TagRepository extends ServiceEntityRepository return $user; } + + public function deleteTagFromUser(User $user, Tag $tag): bool + { + $em = $this->getEntityManager(); + + $userRelTags = $user->getUserRelTags()->filter( + function ($element) use ($tag) { + return $tag->getId() === $element->getTag()->getId(); + } + ); + + if ($userRelTags->count() > 0 && $userRelTags->first()) { + $tag->setCount($tag->getCount() - 1); + $em->persist($tag); + $em->remove($userRelTags->first()); + $em->flush(); + + return true; + } + + return false; + } } diff --git a/src/CoreBundle/Resources/views/Account/edit.html.twig b/src/CoreBundle/Resources/views/Account/edit.html.twig index 56768cbbd3..51bb43a50f 100644 --- a/src/CoreBundle/Resources/views/Account/edit.html.twig +++ b/src/CoreBundle/Resources/views/Account/edit.html.twig @@ -1,16 +1,23 @@ {% extends "@ChamiloCore/Layout/layout_one_col.html.twig" %} {% block content %} - - - {% autoescape false %}