2021-11-30 11:43:34 +01:00

208 lines
6.5 KiB
PHP

<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\PersonBundle\DataFixtures\ORM;
use Chill\CustomFieldsBundle\CustomFields\CustomFieldChoice;
use Chill\CustomFieldsBundle\CustomFields\CustomFieldText;
use Chill\CustomFieldsBundle\CustomFields\CustomFieldTitle;
use Chill\CustomFieldsBundle\Entity\CustomField;
use Chill\CustomFieldsBundle\Entity\CustomFieldsDefaultGroup;
use Chill\CustomFieldsBundle\Entity\CustomFieldsGroup;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Entity\Person;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use RuntimeException;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class LoadCustomFields extends AbstractFixture implements
OrderedFixtureInterface,
ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
private $container;
/**
* @var CustomField
*/
private $customFieldChoice;
/**
* @var CustomField
*/
private $customFieldText;
/**
* @var TranslatableStringHelper
*/
private $translatableStringHelper;
/**
* @var TranslatorInterface
*/
private $translator;
/**
* LoadCustomFields constructor.
*/
public function __construct(
TranslatableStringHelper $translatableStringHelper,
TranslatorInterface $translator
) {
$this->translatableStringHelper = $translatableStringHelper;
$this->translator = $translator;
}
//put your code here
public function getOrder()
{
return 10003;
}
public function load(ObjectManager $manager)
{
$this->loadFields($manager);
$this->loadData($manager);
$manager->flush();
}
public function setContainer(?ContainerInterface $container = null)
{
if (null === $container) {
throw new RuntimeException('The given container should not be null');
}
$this->container = $container;
}
private function createCustomFieldChoice()
{
return new CustomFieldChoice(
$this->translator,
$this->container->get('templating'),
$this->translatableStringHelper
);
}
private function createCustomFieldText()
{
return new CustomFieldText(
$this->container->get('request_stack'),
$this->container->get('templating'),
$this->translatableStringHelper
);
}
private function loadData(ObjectManager $manager)
{
$personIds = $this->container->get('doctrine.orm.entity_manager')
->createQuery('SELECT person.id FROM ChillPersonBundle:Person person')
->getScalarResult();
// get possible values for cfGroup
$choices = array_map(
static function ($a) { return $a['slug']; },
$this->customFieldChoice->getOptions()['choices']
);
// create faker
$faker = \Faker\Factory::create('fr_FR');
// select a set of people and add data
foreach ($personIds as $id) {
// add info on 1 person on 2
if (rand(0, 1) === 1) {
/** @var Person $person */
$person = $manager->getRepository(Person::class)->find($id);
$person->setCFData([
'remarques' => $this->createCustomFieldText()
->serialize($faker->text(rand(150, 250)), $this->customFieldText),
'document-d-identite' => $this->createCustomFieldChoice()
->serialize([$choices[array_rand($choices)]], $this->customFieldChoice),
]);
}
}
}
private function loadFields(ObjectManager $manager)
{
$cfGroup = (new CustomFieldsGroup())
->setEntity(Person::class)
->setName(['fr' => 'Données']);
$manager->persist($cfGroup);
// make this group default for Person::class
$manager->persist(
(new CustomFieldsDefaultGroup())
->setCustomFieldsGroup($cfGroup)
->setEntity(Person::class)
);
// create title field
$customField0 = (new CustomField())
->setActive(true)
->setName(['fr' => 'Données personnalisées'])
->setSlug('personal-data')
->setOrdering(10)
->setType('title')
->setOptions([CustomFieldTitle::TYPE => CustomFieldTitle::TYPE_TITLE])
->setCustomFieldsGroup($cfGroup);
$manager->persist($customField0);
// create text field
$this->customFieldText = (new CustomField())
->setActive(true)
->setName(['fr' => 'Remarques'])
->setSlug('remarques')
->setOrdering(20)
->setType('text')
->setOptions(['maxLength' => 5000])
->setCustomFieldsGroup($cfGroup);
$manager->persist($this->customFieldText);
// create choice field
$this->customFieldChoice = (new CustomField())
->setActive(true)
->setName(['fr' => "Document d'identité"])
->setSlug('document-d-identite')
->setOrdering(30)
->setType('choice')
->setCustomFieldsGroup($cfGroup)
->setOptions([
'multiple' => true,
'other' => false,
'expanded' => true,
'active' => true,
'slug' => 'document-d-identite',
'choices' => [
[
'name' => ['fr' => "Carte d'identité"],
'active' => true,
'slug' => 'carte-d-identite',
],
[
'name' => ['fr' => 'Passeport'],
'active' => true,
'slug' => 'passeport',
],
[
'name' => ['fr' => 'Titre de séjour'],
'active' => true,
'slug' => 'passeport',
],
],
]);
$manager->persist($this->customFieldChoice);
}
}