diff --git a/.env b/.env
deleted file mode 100644
index 619f471ca..000000000
--- a/.env
+++ /dev/null
@@ -1,64 +0,0 @@
-##
-## Manually dump .env files in .env.local.php with
-## `$ composer symfony:dump-env prod`
-##
-
-## Project environment
-APP_ENV=dev
-
-## Enable debug
-APP_DEBUG=true
-
-## Locale
-LOCALE=fr
-
-## Framework secret
-APP_SECRET=ThisTokenIsNotSoSecretChangeIt
-
-## Symfony/swiftmailer
-MAILER_TRANSPORT=smtp
-MAILER_HOST=smtp
-MAILER_PORT=1025
-MAILER_CRYPT=
-MAILER_AUTH=
-MAILER_USER=
-MAILER_PASSWORD=
-MAILER_URL=${MAILER_TRANSPORT}://${MAILER_HOST}:${MAILER_PORT}?encryption=${MAILER_CRYPT}&auth_mode=${MAILER_AUTH}&username=${MAILER_USER}&password=${MAILER_PASSWORD}
-
-## Notifications
-NOTIFICATION_HOST=localhost:8001
-NOTIFICATION_FROM_EMAIL=admin@chill.social
-NOTIFICATION_FROM_NAME=Chill
-
-## Gelf
-GELF_HOST=gelf
-GELF_PORT=12201
-
-## OVH OpenStack Storage User/Role
-OS_USERNAME=
-OS_PASSWORD=
-OS_TENANT_ID=
-OS_REGION_NAME=GRA
-OS_AUTH_URL=https://auth.cloud.ovh.net/v2.0/
-
-## OVH OpenStack Storage Container
-ASYNC_UPLOAD_TEMP_URL_KEY=
-ASYNC_UPLOAD_TEMP_URL_BASE_PATH=
-ASYNC_UPLOAD_TEMP_URL_CONTAINER=
-
-## Redis Cache
-REDIS_HOST=redis
-REDIS_PORT=6379
-REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
-
-## Twilio
-TWILIO_SID=~
-TWILIO_SECRET=~
-
-## DOCKER IMAGES REGISTRY
-#IMAGE_PHP=
-#IMAGE_NGINX=
-
-## DOCKER IMAGES VERSION
-#VERSION=test
-VERSION=prod
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b00be8bc..8e718317c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,27 @@ and this project adheres to
## Unreleased
+* fix normalisation of accompanying course requestor api (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/378)
+* [person] add a returnPath when clicking on some Person or ThirdParty badge (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/427)
+* [person] accompanying course work: fix on-the-fly update of thirdParty
+* [on-the-fly] close modal only after validation
+* [person] correct thirdparty PATCH url + add email and altnames in AddPerson and serializer (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/433)
+* change order for accompanying course work list
+* [Documents]: List view adapted to display more information (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/414)
+* [person]: style fix in parcours listing per person. (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/432)
+* [household]: display address of current household (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/415)
+* ajoute un ordre dans les localisation (api)
+* [pick entity]: fix translations in modal (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/419)
+* [homepage_widget]: fix translation on emergency badge (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/440)
+* [person]: create person and household added to button dropdown (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/454)
+* display full address in address.text in normalization. Adapt AddressRenderBox
+* [address]: Correction residential address 'depuis le' (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/459)
+* [Documents]: List view adapted to display more information (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/414)
+
+## Test releases
+
+### test release 2021-02-01
+
* renommer "dossier numéro" en "parcours numéro" dans les résultats de recherche
* renomme date de début en date d'ouverture dans le formulaire parcours
* [homepage widget] improve content tables, improve counter pluralization with style on number
@@ -19,7 +40,7 @@ and this project adheres to
* [parcours]: validation + message for closing parcours adjusted.
* [household]: household composition double edit button replaced by a delete action (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/426)
[fast_actions] improve fast-actions buttons override mechanism, fix https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/413
-[homepage widget] add vue homepage_widget with asynchone loading, give a global view resume of the user concerned actions, notifications, etc.
+[homepage widget] add vue homepage_widget with asynchone loading, give a global view resume of the user concerned actions, notifications, etc.
* [person]: Comment on marital status is possible even if marital status is not defined (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/421)
* [parcours]: In the list of person results the requestor is not displayed if defined as anonymous (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/424)
* [bugfix]: modal closes and newly created person/thirdparty is selected when multiple persons/thirdparties are created through the modal (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/429)
@@ -27,10 +48,7 @@ and this project adheres to
* [workflow][notification] improve how notifications and workflows are 'attached' to entities: contextual list, counter, buttons and vue modal
* [AddAddress] disable multiselect search, and rely only on most pertinent Cities and Street computed backend
* [fast_actions] improve fast-actions buttons override mechanism, fix https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/413
-* [homepage widget] add vue homepage_widget with asynchone loading, give a global view resume of the user concerned actions, notifications, etc.
-
-
-## Test releases
+* [homepage widget] add vue homepage_widget with asynchone loading, give a global view resume of the user concerned actions, notifications, etc.
### test release 2021-01-31
@@ -79,7 +97,7 @@ and this project adheres to
* [popover] add popover html popup mechanism (used by workflow breadcrumb)
* [templates] improve updatedBy macro in item metadatas
* [parcours]: bug fix when comment is pinned all other comments remain in the collection (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/385)
-* [workflow]
+* [workflow]
* add My workflow section with my opened subscriptions
* apply workflow on documents, accompanyingCourseWork and Evaluations
* [wopi-link] a new vue component allow to open wopi link in a fullscreen chill-themed modal
diff --git a/phpstan-deprecations.neon b/phpstan-deprecations.neon
index bc372e96b..7489d4d80 100644
--- a/phpstan-deprecations.neon
+++ b/phpstan-deprecations.neon
@@ -408,24 +408,6 @@ parameters:
count: 1
path: src/Bundle/ChillCustomFieldsBundle/Form/CustomFieldsGroupType.php
- -
- message:
- """
- #^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
- Use getReachableCircles$#
- """
- count: 1
- path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
-
- -
- message:
- """
- #^Parameter \\$translator of method Chill\\\\DocStoreBundle\\\\Controller\\\\DocumentPersonController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
- since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
- """
- count: 1
- path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
-
-
message:
"""
@@ -927,15 +909,6 @@ parameters:
count: 1
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php
- -
- message:
- """
- #^Parameter \\$trans of method Chill\\\\PersonBundle\\\\Controller\\\\AccompanyingCourseWorkController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
- since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
- """
- count: 1
- path: src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php
-
-
message:
"""
diff --git a/src/Bundle/ChillActivityBundle/Controller/ActivityController.php b/src/Bundle/ChillActivityBundle/Controller/ActivityController.php
index d46136173..3858979ef 100644
--- a/src/Bundle/ChillActivityBundle/Controller/ActivityController.php
+++ b/src/Bundle/ChillActivityBundle/Controller/ActivityController.php
@@ -220,7 +220,7 @@ final class ActivityController extends AbstractController
$this->entityManager->persist($entity);
$this->entityManager->flush();
- if ($form->has('gendocTemplateId') && '' !== $form['gendocTemplateId']) {
+ if ($form->has('gendocTemplateId') && null !== $form['gendocTemplateId']->getData()) {
return $this->redirectToRoute(
'chill_docgenerator_generate_from_template',
[
@@ -437,7 +437,7 @@ final class ActivityController extends AbstractController
$this->entityManager->persist($entity);
$this->entityManager->flush();
- if ($form->has('gendocTemplateId') && '' !== $form['gendocTemplateId']) {
+ if ($form->has('gendocTemplateId') && null !== $form['gendocTemplateId']->getData()) {
return $this->redirectToRoute(
'chill_docgenerator_generate_from_template',
[
diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig
index fadf7ff14..3a4749f3c 100644
--- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig
+++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/_list_item.html.twig
@@ -68,7 +68,7 @@
{% if acp.requestoranonymous == false %}
{% if (acp.requestorPerson is not null and acp.requestorPerson.id != person.id) or acp.requestorThirdParty is not null %}
diff --git a/src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkVoter.php b/src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkVoter.php
index 279873fe5..039baafaa 100644
--- a/src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkVoter.php
+++ b/src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkVoter.php
@@ -11,17 +11,23 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Security\Authorization;
+use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Security;
use UnexpectedValueException;
+use function get_class;
use function in_array;
class AccompanyingPeriodWorkVoter extends Voter
{
+ public const CREATE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_CREATE';
+
public const SEE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_SEE';
+ public const UPDATE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_UPDATE';
+
private Security $security;
public function __construct(Security $security)
@@ -31,8 +37,14 @@ class AccompanyingPeriodWorkVoter extends Voter
protected function supports($attribute, $subject): bool
{
- return $subject instanceof AccompanyingPeriodWork
- && in_array($attribute, $this->getRoles(), true);
+ return
+ (
+ $subject instanceof AccompanyingPeriodWork
+ && in_array($attribute, $this->getRoles(), true)
+ ) || (
+ $subject instanceof AccompanyingPeriod
+ && in_array($attribute, [self::SEE, self::CREATE], true)
+ );
}
/**
@@ -41,13 +53,28 @@ class AccompanyingPeriodWorkVoter extends Voter
*/
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
- switch ($attribute) {
- case self::SEE:
- return $this->security->isGranted(AccompanyingPeriodVoter::SEE, $subject->getAccompanyingPeriod());
+ if ($subject instanceof AccompanyingPeriodWork) {
+ switch ($attribute) {
+ case self::SEE:
+ return $this->security->isGranted(AccompanyingPeriodVoter::SEE_DETAILS, $subject->getAccompanyingPeriod());
- default:
- throw new UnexpectedValueException("attribute {$attribute} is not supported");
+ default:
+ throw new UnexpectedValueException("attribute {$attribute} is not supported");
+ }
+ } elseif ($subject instanceof AccompanyingPeriod) {
+ switch ($attribute) {
+ case self::SEE:
+ return $this->security->isGranted(AccompanyingPeriodVoter::SEE_DETAILS, $subject);
+
+ default:
+ throw new UnexpectedValueException(sprintf(
+ "attribute {$attribute} is not supported on instance %s",
+ AccompanyingPeriod::class
+ ));
+ }
}
+
+ throw new UnexpectedValueException(sprintf("attribute {$attribute} on instance %s is not supported", get_class($subject)));
}
private function getRoles(): array
diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
index 6288663e2..e91748de8 100644
--- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
+++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
@@ -91,6 +91,7 @@ class PersonJsonNormalizer implements
'deathdate',
'center',
'altNames',
+ 'email',
];
$fields = array_filter(
@@ -161,6 +162,11 @@ class PersonJsonNormalizer implements
}
}
+ break;
+
+ case 'email':
+ $person->setEmail($data[$item]);
+
break;
}
}
@@ -189,6 +195,7 @@ class PersonJsonNormalizer implements
'centers' => $this->normalizer->normalize($this->centerResolverManager->resolveCenters($person), $format, $context),
'phonenumber' => $person->getPhonenumber(),
'mobilenumber' => $person->getMobilenumber(),
+ 'email' => $person->getEmail(),
'altNames' => $this->normalizeAltNames($person->getAltNames()),
'gender' => $person->getGender(),
'current_household_address' => $this->normalizer->normalize($person->getCurrentHouseholdAddress(), $format, $context),
diff --git a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php
index fc19b6590..02cedaad8 100644
--- a/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php
+++ b/src/Bundle/ChillPersonBundle/Service/DocGenerator/AccompanyingPeriodContext.php
@@ -241,7 +241,8 @@ class AccompanyingPeriodContext implements
public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity, array $contextGenerationData): void
{
$doc = new AccompanyingCourseDocument();
- $doc->setTitle($this->translatableStringHelper->localize($template->getName()))
+ $doc->setTemplate($template)
+ ->setTitle($this->translatableStringHelper->localize($template->getName()))
->setDate(new DateTime())
->setDescription($this->translatableStringHelper->localize($template->getName()))
->setCourse($entity)
diff --git a/src/Bundle/ChillPersonBundle/Tests/Controller/HouseholdApiControllerTest.php b/src/Bundle/ChillPersonBundle/Tests/Controller/HouseholdApiControllerTest.php
index 419179077..08034978e 100644
--- a/src/Bundle/ChillPersonBundle/Tests/Controller/HouseholdApiControllerTest.php
+++ b/src/Bundle/ChillPersonBundle/Tests/Controller/HouseholdApiControllerTest.php
@@ -21,6 +21,7 @@ use Chill\PersonBundle\Entity\Household\HouseholdMember;
use Chill\PersonBundle\Entity\Person;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
+use RuntimeException;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\Request;
use function array_map;
@@ -58,10 +59,16 @@ final class HouseholdApiControllerTest extends WebTestCase
$centerA = $em->getRepository(Center::class)->findOneBy(['name' => 'Center A']);
$nbReference = $em->createQueryBuilder()->select('count(ar)')->from(AddressReference::class, 'ar')
->getQuery()->getSingleScalarResult();
+
+ if (0 === $nbReference) {
+ throw new RuntimeException('any reference found. Add a reference in database to perform this test');
+ }
+
$reference = $em->createQueryBuilder()->select('ar')->from(AddressReference::class, 'ar')
->setFirstResult(random_int(0, $nbReference))
->setMaxResults(1)
->getQuery()->getSingleResult();
+
$p = new Person();
$p->setFirstname('test')->setLastName('test lastname')
->setGender(Person::BOTH_GENDER)
@@ -79,6 +86,7 @@ final class HouseholdApiControllerTest extends WebTestCase
[HouseholdMember::class, $m->getId()],
[User::class, $p->getId()],
[Household::class, $h->getId()],
+ [Person::class, $p->getId()],
];
yield [$reference->getId(), $h->getId()];
diff --git a/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php b/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php
index a459c3c18..6c78d817d 100644
--- a/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php
+++ b/src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php
@@ -129,20 +129,27 @@ final class AccompanyingPeriodTest extends \PHPUnit\Framework\TestCase
$this->assertNull($period->getPinnedComment());
$period->setPinnedComment($comment);
+
$this->assertSame($period->getPinnedComment(), $comment);
- $this->assertSame($period, $comment->getAccompanyingPeriod());
- $this->assertEquals(0, count($period->getComments()), 'The initial comment should not appears in the list of comments');
+ $this->assertNull($comment->getAccompanyingPeriod());
+ $this->assertEquals(0, count($period->getComments()));
$period->setPinnedComment($replacingComment);
+
$this->assertSame($period->getPinnedComment(), $replacingComment);
- $this->assertSame($period, $replacingComment->getAccompanyingPeriod());
- $this->assertEquals(0, count($period->getComments()), 'The initial comment should not appears in the list of comments');
- $this->assertNull($comment->getAccompanyingPeriod());
+ $this->assertNull($replacingComment->getAccompanyingPeriod());
+ $this->assertSame($period, $comment->getAccompanyingPeriod());
+ $this->assertEquals(1, count($period->getComments()));
+ $this->assertContains($comment, $period->getComments());
$period->setPinnedComment(null);
+
$this->assertNull($period->getPinnedComment());
- $this->assertNull($replacingComment->getAccompanyingPeriod());
- $this->assertEquals(0, count($period->getComments()), 'The initial comment should not appears in the list of comments');
+ $this->assertSame($period, $comment->getAccompanyingPeriod());
+ $this->assertSame($period, $replacingComment->getAccompanyingPeriod());
+ $this->assertEquals(2, count($period->getComments()));
+ $this->assertContains($comment, $period->getComments());
+ $this->assertContains($replacingComment, $period->getComments());
}
public function testRequestor()
diff --git a/src/Bundle/ChillPersonBundle/Validator/Constraints/Household/HouseholdMembershipSequentialValidator.php b/src/Bundle/ChillPersonBundle/Validator/Constraints/Household/HouseholdMembershipSequentialValidator.php
index 89a9ba9a9..c357cb138 100644
--- a/src/Bundle/ChillPersonBundle/Validator/Constraints/Household/HouseholdMembershipSequentialValidator.php
+++ b/src/Bundle/ChillPersonBundle/Validator/Constraints/Household/HouseholdMembershipSequentialValidator.php
@@ -36,7 +36,7 @@ class HouseholdMembershipSequentialValidator extends ConstraintValidator
public function validate($person, Constraint $constraint)
{
if (!$person instanceof Person) {
- throw new UnexpectedTypeException($constraint, Person::class);
+ throw new UnexpectedTypeException($person, Person::class);
}
$participations = $person->getHouseholdParticipationsShareHousehold();
diff --git a/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml b/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml
index ecafb367e..aded38b4a 100644
--- a/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml
+++ b/src/Bundle/ChillPersonBundle/translations/messages+intl-icu.fr.yaml
@@ -98,6 +98,7 @@ household:
from: Depuis
to: Jusqu'au
person history: Ménages
+ As member: En tant que
household_composition:
Since: >-
diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml
index d3f6078ad..60cf842af 100644
--- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml
+++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml
@@ -124,7 +124,7 @@ address_country_code: Code pays
'Alreay existing person': 'Dossiers déjà encodés'
'Add the person': 'Ajouter la personne'
'Add the person and create an accompanying period': "Créer la personne & créer une période d'accompagnement"
-'Add the person and create an household': "Créer la personne & créer un ménage"
+'Add the person and create a household': "Créer la personne & créer un ménage"
Show person: Voir le dossier de la personne
'Confirm the creation': 'Confirmer la création'
'You will create this person': 'Vous allez créer le dossier suivant'
@@ -211,7 +211,7 @@ No requestor: Pas de demandeur
No resources: "Pas d'interlocuteurs privilégiés"
Persons associated: Usagers concernés
Referrer: Référent
-Some peoples does not belong to any household currently. Add them to an household soon: Certaines personnes n'appartiennent à aucun ménage actuellement. Renseignez leur appartenance à un ménage dès que possible.
+Some peoples does not belong to any household currently. Add them to an household soon: Certaines personnes n'appartiennent à aucun ménage actuellement. Renseignez leur ménage dès que possible.
Add to household now: Ajouter à un ménage
Any resource for this accompanying course: Aucun interlocuteur privilégié pour ce parcours
course.draft: Brouillon
@@ -557,7 +557,7 @@ household_composition:
numberOfChildren: Nombre d'enfants mineurs au sein du ménage
Household composition: Composition du ménage
Composition added: Information sur la composition familiale ajoutée
- Currently no composition: Aucune composition famiale renseignée.
+ Currently no composition: Aucune composition familiale renseignée.
Add a composition: Ajouter une composition familiale
Update composition: Modifier la composition familiale
diff --git a/src/Bundle/ChillTaskBundle/Entity/SingleTask.php b/src/Bundle/ChillTaskBundle/Entity/SingleTask.php
index 67be85edc..2d9e3abcb 100644
--- a/src/Bundle/ChillTaskBundle/Entity/SingleTask.php
+++ b/src/Bundle/ChillTaskBundle/Entity/SingleTask.php
@@ -17,8 +17,8 @@ use DateTimeImmutable;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
-use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Serializer\Annotation as Serializer;
+use Symfony\Component\Validator\Constraints as Assert;
/**
* SingleTask.
{{ 'notification.comments_list'|trans }}
- + {% if notification.comments|length > 0 %}{{ 'Write a new comment'|trans }}
- + {{ form_start(appendCommentForm) }} {{ form_errors(appendCommentForm) }} {{ form_widget(appendCommentForm.content) }} + {{ form_errors(appendCommentForm.content) }}