Add extra fields types in profile (WIP) + add tests

pull/4020/head
Julio 5 years ago
parent c7999a410b
commit c902dc5f90
  1. 2
      src/CoreBundle/Entity/ExtraField.php
  2. 90
      src/CoreBundle/Form/ProfileType.php
  3. 5
      src/CoreBundle/Repository/ExtraFieldRepository.php
  4. 5
      src/CoreBundle/Repository/ExtraFieldValuesRepository.php
  5. 2
      tests/CoreBundle/Repository/ExtraFieldRepositoryTest.php
  6. 2
      tests/CoreBundle/Repository/ExtraFieldValuesRepositoryTest.php

@ -14,8 +14,6 @@ use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Class ExtraField.
*
* @ORM\Entity
* @ORM\Table(name="extra_field")
*

@ -15,6 +15,9 @@ use Chamilo\CoreBundle\Repository\ExtraFieldValuesRepository;
use Chamilo\CoreBundle\Repository\LanguageRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\LocaleType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
@ -32,9 +35,14 @@ class ProfileType extends AbstractType
private LanguageRepository $languageRepository;
private ExtraFieldValuesRepository $extraFieldValuesRepository;
private Security $security;
public function __construct(LanguageRepository $languageRepository, ExtraFieldValuesRepository $extraFieldValuesRepository, ExtraFieldRepository $extraFieldRepository, Security $security)
{
private ExtraFieldRepository $extraFieldRepository;
public function __construct(
LanguageRepository $languageRepository,
ExtraFieldValuesRepository $extraFieldValuesRepository,
ExtraFieldRepository $extraFieldRepository,
Security $security
) {
$this->languageRepository = $languageRepository;
$this->extraFieldValuesRepository = $extraFieldValuesRepository;
$this->extraFieldRepository = $extraFieldRepository;
@ -110,8 +118,8 @@ class ProfileType extends AbstractType
return;
}
$extraFields = $this->extraFieldRepository->getExtraFields();
$values = $this->extraFieldValuesRepository->getExtraFieldValuesFromItem($user);
$extraFields = $this->extraFieldRepository->getExtraFields(ExtraField::USER_FIELD_TYPE);
$values = $this->extraFieldValuesRepository->getExtraFieldValuesFromItem($user, ExtraField::USER_FIELD_TYPE);
$data = [];
foreach ($values as $value) {
@ -121,24 +129,76 @@ class ProfileType extends AbstractType
foreach ($extraFields as $extraField) {
$text = $extraField->getDisplayText();
$variable = $extraField->getVariable();
$value = $data[$extraField->getVariable()] ?? '';
// @todo
/*switch ($extraField->getFieldType()) {
switch ($extraField->getFieldType()) {
case \ExtraField::FIELD_TYPE_DATETIME:
$builder->add($variable, DateTimeType::class, [
'label' => $text,
'required' => false,
'by_reference' => false,
'mapped' => false,
'data' => $value,
]);
break;
case \ExtraField::FIELD_TYPE_DATE:
$builder->add($variable, DateType::class, [
'label' => $text,
'required' => false,
'by_reference' => false,
'mapped' => false,
'data' => $value,
]);
break;
case \ExtraField::FIELD_TYPE_TEXTAREA:
case \ExtraField::FIELD_TYPE_TEXT:
$builder->add($variable, TextType::class, [
'label' => $text,
'required' => false,
'by_reference' => false,
'mapped' => false,
'data' => $value,
]);
break;
}*/
case \ExtraField::FIELD_TYPE_CHECKBOX:
case \ExtraField::FIELD_TYPE_RADIO:
case \ExtraField::FIELD_TYPE_SELECT:
case \ExtraField::FIELD_TYPE_SELECT_MULTIPLE:
$options = $extraField->getOptions();
$choices = [];
foreach ($options as $option) {
$choices[$option->getDisplayText()] = $option->getValue();
}
$builder->add($variable, TextType::class, [
'label' => $text,
'required' => false,
'by_reference' => false,
'mapped' => false,
'data' => $value,
]);
$params = [
'label' => $text,
'required' => false,
'by_reference' => false,
'mapped' => false,
'data' => $value,
'choices' => $choices,
];
if (\ExtraField::FIELD_TYPE_CHECKBOX === $extraField->getFieldType()) {
$params['expanded'] = true;
$params['multiple'] = true;
}
if (\ExtraField::FIELD_TYPE_SELECT === $extraField->getFieldType()) {
$params['expanded'] = false;
$params['multiple'] = false;
}
if (\ExtraField::FIELD_TYPE_SELECT_MULTIPLE === $extraField->getFieldType()) {
$params['expanded'] = false;
$params['multiple'] = true;
}
$builder->add($variable, ChoiceType::class, $params);
break;
}
}
$builder->addEventListener(

@ -20,13 +20,14 @@ class ExtraFieldRepository extends ServiceEntityRepository
/**
* @return ExtraField[]
*/
public function getExtraFields()
public function getExtraFields(int $type)
{
$qb = $this->createQueryBuilder('f');
$qb
->where(
$qb->expr()->andX(
$qb->expr()->eq('f.visibleToSelf', true)
$qb->expr()->eq('f.visibleToSelf', true),
$qb->expr()->eq('f.fieldType', $type)
)
)
;

@ -57,14 +57,15 @@ class ExtraFieldValuesRepository extends ServiceEntityRepository
/**
* @return ExtraFieldValues[]
*/
public function getExtraFieldValuesFromItem(User $user)
public function getExtraFieldValuesFromItem(User $user, int $type)
{
$qb = $this->createQueryBuilder('v');
$qb
->innerJoin('v.field', 'f')
->andWhere('v.itemId = :id')
->andWhere(
$qb->expr()->eq('f.visibleToSelf', true)
$qb->expr()->eq('f.visibleToSelf', true),
$qb->expr()->eq('f.fieldType', $type)
)
->setParameter(
'id',

@ -39,7 +39,7 @@ class ExtraFieldRepositoryTest extends AbstractApiTest
public function testGetExtraFields(): void
{
$repo = self::getContainer()->get(ExtraFieldRepository::class);
$this->assertNotNull($repo->getExtraFields());
$this->assertNotNull($repo->getExtraFields(ExtraField::USER_FIELD_TYPE));
}
public function testCreateExtraFieldSavedSearch(): void

@ -75,7 +75,7 @@ class ExtraFieldValuesRepositoryTest extends AbstractApiTest
$extraFieldValue = $repo->updateItemData($field, $user, 'test');
$items = $repo->getExtraFieldValuesFromItem($user);
$items = $repo->getExtraFieldValuesFromItem($user, ExtraField::USER_FIELD_TYPE);
$this->assertNotNull($items);
$this->assertNotNull($extraFieldValue);

Loading…
Cancel
Save