diff --git a/Controller/PersonController.php b/Controller/PersonController.php index dbaa81e3f..89bb858c2 100644 --- a/Controller/PersonController.php +++ b/Controller/PersonController.php @@ -29,7 +29,22 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class PersonController extends Controller -{ +{ + public function getCFGroup() + { + $cFGroup = null; + + $em = $this->getDoctrine()->getManager(); + $cFDefaultGroup = $em->getRepository("ChillCustomFieldsBundle:CustomFieldsDefaultGroup") + ->findOneByEntity("Chill\PersonBundle\Entity\Person"); + + if($cFDefaultGroup) { + $cFGroup = $cFDefaultGroup->getCustomFieldsGroup(); + } + + return $cFGroup; + } + public function viewAction($person_id) { $person = $this->_getPerson($person_id); @@ -39,7 +54,8 @@ class PersonController extends Controller } return $this->render('ChillPersonBundle:Person:view.html.twig', - array("person" => $person)); + array("person" => $person, + "cFGroup" => $this->getCFGroup())); } public function editAction($person_id) @@ -51,9 +67,10 @@ class PersonController extends Controller } $form = $this->createForm(new PersonType(), $person, - array('action' => $this->generateUrl('chill_person_general_update', - array('person_id' => $person_id) - ) + array( + "action" => $this->generateUrl('chill_person_general_update', + array("person_id" => $person_id)), + "cFGroup" => $this->getCFGroup() ) ); @@ -69,7 +86,8 @@ class PersonController extends Controller return $this->createNotFoundException(); } - $form = $this->createForm(new PersonType(), $person); + $form = $this->createForm(new PersonType(), $person, + array("cFGroup" => $this->getCFGroup())); if ($request->getMethod() === 'POST') { $form->handleRequest($request); diff --git a/DataFixtures/ORM/LoadPeople.php b/DataFixtures/ORM/LoadPeople.php index 60d8d83d8..485bdcb71 100644 --- a/DataFixtures/ORM/LoadPeople.php +++ b/DataFixtures/ORM/LoadPeople.php @@ -82,7 +82,8 @@ class LoadPeople extends AbstractFixture implements OrderedFixtureInterface { 'Genre' => $sex, 'Email' => "Email d'un ami: roger@tt.com", 'CountryOfBirth' => 'France', - 'Nationality' => 'Russie' + 'Nationality' => 'Russie', + 'CFData' => array() ); $p = new Person(); diff --git a/Entity/Person.php b/Entity/Person.php index aa546d364..2bfa5889b 100644 --- a/Entity/Person.php +++ b/Entity/Person.php @@ -2,6 +2,25 @@ namespace Chill\PersonBundle\Entity; +/* + * Chill is a software for social workers + * + * Copyright (C) 2014, Champs Libres Cooperative SCRLFS, + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + use Symfony\Component\Validator\ExecutionContextInterface; use Chill\MainBundle\Entity\Country; @@ -74,8 +93,12 @@ class Person { */ private $proxyHistoryOpenState = false; - - + + /** + * The array where customfields data is stored + * @var array + */ + private $cFData; public function __construct(\DateTime $opening = null) { $this->history = new \Doctrine\Common\Collections\ArrayCollection(); @@ -450,6 +473,32 @@ class Person { public function getLabel() { return $this->getSurname()." ".$this->getName(); } + + + /** + * Set cFData + * + * @param array $cFData + * + * @return Report + */ + public function setCFData($cFData) + { + $this->cFData = $cFData; + + return $this; + } + + /** + * Get cFData + * + * @return array + */ + public function getCFData() + { + return $this->cFData; + } + public function __toString() { return $this->getLabel(); diff --git a/Form/PersonType.php b/Form/PersonType.php index 589a1bb8d..d95fa364b 100644 --- a/Form/PersonType.php +++ b/Form/PersonType.php @@ -1,5 +1,24 @@ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + namespace Chill\PersonBundle\Form; use Symfony\Component\Form\AbstractType; @@ -34,6 +53,14 @@ class PersonType extends AbstractType 'required' => false )) ; + + if($options['cFGroup']) { + $builder + ->add('cFData', 'custom_field', + array('attr' => array('class' => 'only-label'), 'group' => $options['cFGroup'])) + ; + } + } /** @@ -44,6 +71,14 @@ class PersonType extends AbstractType $resolver->setDefaults(array( 'data_class' => 'Chill\PersonBundle\Entity\Person' )); + + $resolver->setRequired(array( + 'cFGroup' + )); + + $resolver->setAllowedTypes(array( + 'cFGroup' => array('null', 'Chill\CustomFieldsBundle\Entity\CustomFieldsGroup') + )); } /** diff --git a/Resources/config/doctrine/Person.orm.yml b/Resources/config/doctrine/Person.orm.yml index 0c6f3f4c0..4d93758d4 100644 --- a/Resources/config/doctrine/Person.orm.yml +++ b/Resources/config/doctrine/Person.orm.yml @@ -34,6 +34,8 @@ Chill\PersonBundle\Entity\Person: proxyHistoryOpenState: type: boolean name: proxy_open + cFData: + type: array manyToOne: countryOfBirth: targetEntity: Chill\MainBundle\Entity\Country diff --git a/Resources/views/Person/view.html.twig b/Resources/views/Person/view.html.twig index 90641002b..a208d5752 100644 --- a/Resources/views/Person/view.html.twig +++ b/Resources/views/Person/view.html.twig @@ -88,9 +88,27 @@ This view should receive those arguments:

{{ 'views.Person.view.contact'|trans }}

-
{{ 'views.Person.view.email'|trans }}
-
{{ person.email}} 
+
{{ 'views.Person.view.email'|trans }}
+
{{ person.email}} 
+{{ include(edit_tmp_name, edit_tmp_args) }} + +{% if cFGroup %} +
+ {% for customField in cFGroup.customFields %} + {% if customField.type == 'title' %} + {{ chill_custom_field_widget(person.cFData , customField) }} + {% else %} +
{{ chill_custom_field_label(customField) }}
+
{{ chill_custom_field_widget(person.cFData , customField) }}
+ {% endif %} + {% endfor %} +
+ + {{ include(edit_tmp_name, edit_tmp_args) }} + +{% endif %} + {% endblock %}