diff --git a/main/inc/lib/extra_field_value.lib.php b/main/inc/lib/extra_field_value.lib.php index 8b7098ae37..04a6123bfd 100755 --- a/main/inc/lib/extra_field_value.lib.php +++ b/main/inc/lib/extra_field_value.lib.php @@ -125,39 +125,55 @@ class ExtraFieldValue extends Model $extraFieldInfo['id'] ); } else { - /* $old = self::getAllValuesByItemAndField( - $params['item_id'], - $extraFieldInfo['id'] - ); - - $deleteItems = array(); - if (!empty($old)) { - $oldIds = array(); - foreach ($old as $oldItem) { - $oldIds[] = $oldItem['value']; + $em = Database::getManager(); + $tagValues = is_array($value) ? $value : [$value]; + $tags = []; + + foreach ($tagValues as $tagValue) { + $tagsResult = $em->getRepository('ChamiloCoreBundle:Tag')->findBy([ + 'tag' => $tagValue, + 'fieldId' => $extraFieldInfo['id'] + ]); + + if (empty($tagsResult)) { + $tag = new \Chamilo\CoreBundle\Entity\Tag(); + $tag->setCount(0); + $tag->setFieldId($extraFieldInfo['id']); + $tag->setTag($tagValue); + + $tags[] = $tag; + } else { + $tags = array_merge($tags, $tagsResult); } - $deleteItems = array_diff($oldIds, $value); } - foreach ($value as $optionId) { - $newParams = array( - 'item_id' => $params['item_id'], - 'field_id' => $extraFieldInfo['id'], - 'value' => $optionId, - 'comment' => $comment - ); - self::save($newParams); - } + foreach ($tags as $tag) { + $fieldTags = $em->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')->findBy([ + 'fieldId' => $extraFieldInfo['id'], + 'itemId' => $params['item_id'], + 'tagId' => $tag->getId() + ]); - if (!empty($deleteItems)) { - foreach ($deleteItems as $deleteFieldValue) { - self::deleteValuesByHandlerAndFieldAndValue( - $params['item_id'], - $extraFieldInfo['id'], - $deleteFieldValue - ); + foreach ($fieldTags as $fieldTag) { + $em->remove($fieldTag); + + $tag->setCount($tag->getCount() - 1); + $em->persist($tag); + $em->flush(); } - }*/ + + $tag->setCount($tag->getCount() + 1); + $em->persist($tag); + $em->flush(); + + $fieldRelTag = new Chamilo\CoreBundle\Entity\ExtraFieldRelTag(); + $fieldRelTag->setFieldId($extraFieldInfo['id']); + $fieldRelTag->setItemId($params['item_id']); + $fieldRelTag->setTagId($tag->getId()); + + $em->persist($fieldRelTag); + $em->flush(); + } } break; case ExtraField::FIELD_TYPE_FILE_IMAGE: