Merge branch 'issue394_address_confidential' into 'master'

confidential address

See merge request Chill-Projet/chill-bundles!299
This commit is contained in:
Julien Fastré 2022-01-27 16:08:58 +00:00
commit 7c6c8de456
27 changed files with 222 additions and 73 deletions

View File

@ -11,12 +11,21 @@ and this project adheres to
## Unreleased ## Unreleased
<!-- write down unreleased development here --> <!-- write down unreleased development here -->
* [main] increase length of 4 Address fields (change to TEXT, no size limits) (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/277)
* [main] Add confidential option for address, in edit and view (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/165)
* [person] name suggestions within create person form when person is created departing from a search input (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/377)
## Test releases
### test release 2021-01-26
* [parcours] comments truncated if too long + link added (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/406) * [parcours] comments truncated if too long + link added (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/406)
* [person]: possibility to add person resources (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/382) * [person]: possibility to add person resources (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/382)
* [person ressources]: module added * [person ressources]: module added
* [person]: possibility to add person resources (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/382) * [parcours] bugfix if deathdate is not defined (eg. for a thirdparty) parcours is still displayed. Gave error before.
* dispatching list
## Test releases
### test release 2022-01-24 ### test release 2022-01-24

View File

@ -29,9 +29,13 @@ use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
final class ActivityVoterTest extends KernelTestCase final class ActivityVoterTest extends KernelTestCase
{ {
use PrepareActivityTrait; use PrepareActivityTrait;
use PrepareCenterTrait; use PrepareCenterTrait;
use PreparePersonTrait; use PreparePersonTrait;
use PrepareScopeTrait; use PrepareScopeTrait;
use PrepareUserTrait; use PrepareUserTrait;
/** /**

View File

@ -42,10 +42,16 @@ class Address
*/ */
private $buildingName; private $buildingName;
/**
* @ORM\Column(type="boolean")
* @Groups({"write"})
*/
private bool $confidential = false;
/** /**
* @var string|null * @var string|null
* *
* @ORM\Column(type="string", length=16, nullable=true) * @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"write"}) * @Groups({"write"})
*/ */
private $corridor; private $corridor;
@ -78,7 +84,7 @@ class Address
/** /**
* @var string|null * @var string|null
* *
* @ORM\Column(type="string", length=16, nullable=true) * @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"write"}) * @Groups({"write"})
*/ */
private $flat; private $flat;
@ -86,7 +92,7 @@ class Address
/** /**
* @var string|null * @var string|null
* *
* @ORM\Column(type="string", length=16, nullable=true) * @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"write"}) * @Groups({"write"})
*/ */
private $floor; private $floor;
@ -143,7 +149,7 @@ class Address
/** /**
* @var string|null * @var string|null
* *
* @ORM\Column(type="string", length=16, nullable=true) * @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"write"}) * @Groups({"write"})
*/ */
private $steps; private $steps;
@ -192,6 +198,7 @@ class Address
return (new Address()) return (new Address())
->setAddressReference($original->getAddressReference()) ->setAddressReference($original->getAddressReference())
->setBuildingName($original->getBuildingName()) ->setBuildingName($original->getBuildingName())
->setConfidential($original->getConfidential())
->setCorridor($original->getCorridor()) ->setCorridor($original->getCorridor())
->setCustoms($original->getCustoms()) ->setCustoms($original->getCustoms())
->setDistribution($original->getDistribution()) ->setDistribution($original->getDistribution())
@ -229,6 +236,11 @@ class Address
return $this->buildingName; return $this->buildingName;
} }
public function getConfidential(): bool
{
return $this->confidential;
}
public function getCorridor(): ?string public function getCorridor(): ?string
{ {
return $this->corridor; return $this->corridor;
@ -369,6 +381,13 @@ class Address
return $this; return $this;
} }
public function setConfidential(bool $confidential): self
{
$this->confidential = $confidential;
return $this;
}
public function setCorridor(?string $corridor): self public function setCorridor(?string $corridor): self
{ {
$this->corridor = $corridor; $this->corridor = $corridor;

View File

@ -20,10 +20,9 @@ use Doctrine\ORM\Mapping as ORM;
class CommentEmbeddable class CommentEmbeddable
{ {
/** /**
* @var string
* @ORM\Column(type="text", nullable=true) * @ORM\Column(type="text", nullable=true)
*/ */
private $comment; private ?string $comment;
/** /**
* @var DateTime * @var DateTime
@ -39,10 +38,7 @@ class CommentEmbeddable
*/ */
private $userId; private $userId;
/** public function getComment(): ?string
* @return string
*/
public function getComment()
{ {
return $this->comment; return $this->comment;
} }
@ -68,9 +64,6 @@ class CommentEmbeddable
return empty($this->getComment()); return empty($this->getComment());
} }
/**
* @param string $comment
*/
public function setComment(?string $comment) public function setComment(?string $comment)
{ {
$this->comment = $comment; $this->comment = $comment;

View File

@ -37,6 +37,7 @@ use function count;
class EntityWorkflow implements TrackCreationInterface, TrackUpdateInterface class EntityWorkflow implements TrackCreationInterface, TrackUpdateInterface
{ {
use TrackCreationTrait; use TrackCreationTrait;
use TrackUpdateTrait; use TrackUpdateTrait;
/** /**

View File

@ -24,6 +24,7 @@ use Doctrine\ORM\Mapping as ORM;
class EntityWorkflowComment implements TrackCreationInterface, TrackUpdateInterface class EntityWorkflowComment implements TrackCreationInterface, TrackUpdateInterface
{ {
use TrackCreationTrait; use TrackCreationTrait;
use TrackUpdateTrait; use TrackUpdateTrait;
/** /**

View File

@ -1,21 +1,19 @@
require('./blur.scss'); require('./blur.scss');
var toggleBlur = function(e){ document.querySelectorAll('.confidential').forEach(function (el) {
let i = document.createElement('i');
var btn = e.target; const classes = ['fa', 'fa-eye', 'toggle'];
i.classList.add(...classes);
btn.previousElementSibling.classList.toggle("blur"); el.appendChild(i);
btn.classList.toggle("fa-eye"); const toggleBlur = function(e) {
btn.classList.toggle("fa-eye-slash"); for (let child of el.children) {
if (!child.classList.contains('toggle')) {
} child.classList.toggle('blur');
}
var infos = document.getElementsByClassName("confidential"); }
for(var i=0; i < infos.length; i++){ i.classList.toggle('fa-eye');
infos[i].insertAdjacentHTML('beforeend', '<i class="fa fa-eye toggle" aria-hidden="true"></i>'); i.classList.toggle('fa-eye-slash');
} }
i.addEventListener('click', toggleBlur);
var toggles = document.getElementsByClassName("toggle"); toggleBlur();
for(var i=0; i < toggles.length; i++){ });
toggles[i].addEventListener("click", toggleBlur);
}

View File

@ -562,6 +562,7 @@ export default {
this.entity.loaded.cities = []; this.entity.loaded.cities = [];
this.entity.loaded.countries = []; this.entity.loaded.countries = [];
this.entity.selected.confidential = this.context.edit ? this.entity.address.confidential : false;
this.entity.selected.isNoAddress = (this.context.edit && this.entity.address.text === '') ? true : false; this.entity.selected.isNoAddress = (this.context.edit && this.entity.address.text === '') ? true : false;
this.entity.selected.country = this.context.edit ? this.entity.address.country : {}; this.entity.selected.country = this.context.edit ? this.entity.address.country : {};
@ -593,6 +594,7 @@ export default {
{ {
console.log('apply changes'); console.log('apply changes');
let newAddress = { let newAddress = {
'confidential': this.entity.selected.confidential,
'isNoAddress': this.entity.selected.isNoAddress, 'isNoAddress': this.entity.selected.isNoAddress,
'street': this.entity.selected.isNoAddress ? '' : this.entity.selected.address.street, 'street': this.entity.selected.isNoAddress ? '' : this.entity.selected.address.street,
'streetNumber': this.entity.selected.isNoAddress ? '' : this.entity.selected.address.streetNumber, 'streetNumber': this.entity.selected.isNoAddress ? '' : this.entity.selected.address.streetNumber,

View File

@ -6,7 +6,6 @@
<input class="form-control" <input class="form-control"
type="text" type="text"
name="floor" name="floor"
maxlength=16
:placeholder="$t('floor')" :placeholder="$t('floor')"
v-model="floor"/> v-model="floor"/>
<label for="floor">{{ $t('floor') }}</label> <label for="floor">{{ $t('floor') }}</label>
@ -15,7 +14,6 @@
<input class="form-control" <input class="form-control"
type="text" type="text"
name="corridor" name="corridor"
maxlength=16
:placeholder="$t('corridor')" :placeholder="$t('corridor')"
v-model="corridor"/> v-model="corridor"/>
<label for="corridor">{{ $t('corridor') }}</label> <label for="corridor">{{ $t('corridor') }}</label>
@ -24,7 +22,6 @@
<input class="form-control" <input class="form-control"
type="text" type="text"
name="steps" name="steps"
maxlength=16
:placeholder="$t('steps')" :placeholder="$t('steps')"
v-model="steps"/> v-model="steps"/>
<label for="steps">{{ $t('steps') }}</label> <label for="steps">{{ $t('steps') }}</label>
@ -33,7 +30,6 @@
<input class="form-control" <input class="form-control"
type="text" type="text"
name="flat" name="flat"
maxlength=16
:placeholder="$t('flat')" :placeholder="$t('flat')"
v-model="flat"/> v-model="flat"/>
<label for="flat">{{ $t('flat') }}</label> <label for="flat">{{ $t('flat') }}</label>

View File

@ -17,12 +17,22 @@
<div class="row my-3"> <div class="row my-3">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="form-check">
<input type="checkbox"
class="form-check-input"
id="isConfidential"
v-model="isConfidential"
:value="valueConfidential" />
<label class="form-check-label" for="isConfidential">
{{ $t('isConfidential') }}
</label>
</div>
<div class="form-check"> <div class="form-check">
<input type="checkbox" <input type="checkbox"
class="form-check-input" class="form-check-input"
id="isNoAddress" id="isNoAddress"
v-model="isNoAddress" v-model="isNoAddress"
v-bind:value="value" /> :value="value" />
<label class="form-check-label" for="isNoAddress"> <label class="form-check-label" for="isNoAddress">
{{ $t('isNoAddress') }} {{ $t('isNoAddress') }}
</label> </label>
@ -118,7 +128,8 @@ export default {
emits: ['getCities', 'getReferenceAddresses'], emits: ['getCities', 'getReferenceAddresses'],
data() { data() {
return { return {
value: false value: false,
valueConfidential: false,
} }
}, },
computed: { computed: {
@ -134,6 +145,14 @@ export default {
addressMap() { addressMap() {
return this.entity.addressMap; return this.entity.addressMap;
}, },
isConfidential: {
set(value) {
this.entity.selected.confidential = value;
},
get() {
return this.entity.selected.confidential;
}
},
isNoAddress: { isNoAddress: {
set(value) { set(value) {
console.log('isNoAddress value', value); console.log('isNoAddress value', value);

View File

@ -18,6 +18,7 @@ const addressMessages = {
other_address: 'Autre adresse', other_address: 'Autre adresse',
create_address: 'Adresse inconnue. Cliquez ici pour créer une nouvelle adresse', create_address: 'Adresse inconnue. Cliquez ici pour créer une nouvelle adresse',
isNoAddress: 'Pas d\'adresse complète', isNoAddress: 'Pas d\'adresse complète',
isConfidential: 'Adresse confidentielle',
street: 'Nom de rue', street: 'Nom de rue',
streetNumber: 'Numéro', streetNumber: 'Numéro',
floor: 'Étage', floor: 'Étage',

View File

@ -1,22 +1,26 @@
<template> <template>
<div class="confidential" v-on:click="toggleBlur"> <div :class="classes">
<div class="confidential-content blur"> <div class="confidential-content" :class="{ 'blur': isBlurred }">
<slot name="confidential-content"></slot> <slot name="confidential-content"></slot>
</div> </div>
<i class="fa fa-eye toggle" aria-hidden="true"></i> <div>
<i class="fa fa-eye toggle" aria-hidden="true" @click="toggleBlur"></i>
</div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
name: "Confidential", name: "Confidential",
data() {
return {
isBlurred: true,
};
},
methods : { methods : {
toggleBlur: function(e){ toggleBlur() {
if(e.target.matches('.toggle')){ console.log('toggle blur');
e.target.previousElementSibling.classList.toggle("blur"); this.isBlurred = !this.isBlurred;
e.target.classList.toggle("fa-eye");
e.target.classList.toggle("fa-eye-slash");
}
}, },
} }
} }
@ -39,4 +43,4 @@ export default {
-moz-filter: blur(5px); -moz-filter: blur(5px);
filter: blur(5px); filter: blur(5px);
} }
</style> </style>

View File

@ -1,26 +1,58 @@
<template> <template>
<component :is="component" class="chill-entity entity-address my-3"> <component :is="component" class="chill-entity entity-address my-3">
<component :is="component" class="address" :class="multiline"> <component :is="component" class="address" :class="multiline">
<div v-if="isMultiline === true">
<p v-for="(l, i) in address.lines" :key="`line-${i}`"> <div v-if="isConfidential">
{{ l }} <confidential>
</p> <template v-slot:confidential-content>
<div v-if="isMultiline === true">
<p v-for="(l, i) in address.lines" :key="`line-${i}`">
{{ l }}
</p>
</div>
<div v-else>
<p v-if="address.text"
class="street">
{{ address.text }}
</p>
<p v-if="address.postcode"
class="postcode">
{{ address.postcode.code }} {{ address.postcode.name }}
</p>
<p v-if="address.country"
class="country">
{{ address.country.name.fr }}
</p>
</div>
</template>
</confidential>
</div> </div>
<div v-else>
<p v-if="address.text" <div v-if="!isConfidential">
class="street"> <div v-if="isMultiline === true">
{{ address.text }} <p v-for="(l, i) in address.lines" :key="`line-${i}`">
</p> {{ l }}
<p v-if="address.postcode" </p>
class="postcode"> </div>
{{ address.postcode.code }} {{ address.postcode.name }} <div v-else>
</p> <p v-if="address.text"
<p v-if="address.country" class="street">
class="country"> {{ address.text }}
{{ address.country.name.fr }} </p>
</p> <p v-if="address.postcode"
class="postcode">
{{ address.postcode.code }} {{ address.postcode.name }}
</p>
<p v-if="address.country"
class="country">
{{ address.country.name.fr }}
</p>
</div>
</div> </div>
</component> </component>
<!-- <div v-if="isMultiline === true" class="address-more"> <!-- <div v-if="isMultiline === true" class="address-more">
@ -78,8 +110,14 @@
</template> </template>
<script> <script>
import Confidential from 'ChillMainAssets/vuejs/_components/Confidential.vue';
export default { export default {
name: 'AddressRenderBox', name: 'AddressRenderBox',
components: {
Confidential
},
props: { props: {
address: { address: {
type: Object type: Object
@ -100,6 +138,9 @@ export default {
multiline() { multiline() {
//console.log(this.isMultiline, typeof this.isMultiline); //console.log(this.isMultiline, typeof this.isMultiline);
return this.isMultiline === true ? "multiline" : ""; return this.isMultiline === true ? "multiline" : "";
},
isConfidential() {
return this.address.confidential;
} }
} }
}; };

View File

@ -59,7 +59,7 @@
must be shown in such list must be shown in such list
#} #}
{%- if render == 'list' -%} {%- if render == 'list' -%}
<li class="chill-entity entity-address"> <li class="chill-entity entity-address {% if address.confidential %}confidential{% endif %}">
{% if options['with_picto'] %} {% if options['with_picto'] %}
<i class="fa fa-li fa-map-marker"></i> <i class="fa fa-li fa-map-marker"></i>
{% endif %} {% endif %}
@ -68,7 +68,7 @@
{%- endif -%} {%- endif -%}
{%- if render == 'inline' -%} {%- if render == 'inline' -%}
<span class="chill-entity entity-address"> <span class="chill-entity entity-address {% if address.confidential %}confidential{% endif %}">
{% if options['with_picto'] %} {% if options['with_picto'] %}
<i class="fa fa-fw fa-map-marker"></i> <i class="fa fa-fw fa-map-marker"></i>
{% endif %} {% endif %}
@ -77,7 +77,7 @@
{%- endif -%} {%- endif -%}
{%- if render == 'bloc' -%} {%- if render == 'bloc' -%}
<div class="chill-entity entity-address"> <div class="chill-entity entity-address {% if address.confidential %}confidential{% endif %}">
{% if options['has_no_address'] == true and address.isNoAddress == true %} {% if options['has_no_address'] == true and address.isNoAddress == true %}
{% if address.postCode is not empty %} {% if address.postCode is not empty %}
<div class="address{% if options['multiline'] %} multiline{% endif %}{% if options['with_delimiter'] %} delimiter{% endif %}"> <div class="address{% if options['multiline'] %} multiline{% endif %}{% if options['with_delimiter'] %} delimiter{% endif %}">

View File

@ -45,6 +45,7 @@ class AddressNormalizer implements ContextAwareNormalizerInterface, NormalizerAw
'extra', 'extra',
'validFrom' => DateTimeInterface::class, 'validFrom' => DateTimeInterface::class,
'validTo' => DateTimeInterface::class, 'validTo' => DateTimeInterface::class,
'confidential',
]; ];
private AddressRender $addressRender; private AddressRender $addressRender;
@ -83,6 +84,7 @@ class AddressNormalizer implements ContextAwareNormalizerInterface, NormalizerAw
'buildingName' => $address->getBuildingName(), 'buildingName' => $address->getBuildingName(),
'distribution' => $address->getDistribution(), 'distribution' => $address->getDistribution(),
'extra' => $address->getExtra(), 'extra' => $address->getExtra(),
'confidential' => $address->getConfidential(),
'lines' => $this->addressRender->renderLines($address), 'lines' => $this->addressRender->renderLines($address),
]; ];

View File

@ -44,7 +44,9 @@ use function count;
final class ExportManagerTest extends KernelTestCase final class ExportManagerTest extends KernelTestCase
{ {
use PrepareCenterTrait; use PrepareCenterTrait;
use PrepareScopeTrait; use PrepareScopeTrait;
use PrepareUserTrait; use PrepareUserTrait;
private Prophet $prophet; private Prophet $prophet;

View File

@ -34,8 +34,11 @@ use function in_array;
final class AuthorizationHelperTest extends KernelTestCase final class AuthorizationHelperTest extends KernelTestCase
{ {
use PrepareCenterTrait; use PrepareCenterTrait;
use PrepareScopeTrait; use PrepareScopeTrait;
use PrepareUserTrait; use PrepareUserTrait;
use ProphecyTrait; use ProphecyTrait;
protected function setUp(): void protected function setUp(): void

View File

@ -0,0 +1,44 @@
<?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.
*/
declare(strict_types=1);
namespace Chill\Migrations\Main;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Alter some address fields + add confidential field on Address.
*/
final class Version20220124085957 extends AbstractMigration
{
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_main_address DROP confidential');
$this->addSql('ALTER TABLE chill_main_address ALTER corridor TYPE VARCHAR(16)');
$this->addSql('ALTER TABLE chill_main_address ALTER flat TYPE VARCHAR(16)');
$this->addSql('ALTER TABLE chill_main_address ALTER floor TYPE VARCHAR(16)');
$this->addSql('ALTER TABLE chill_main_address ALTER steps TYPE VARCHAR(16)');
}
public function getDescription(): string
{
return 'Alter some address fields + add confidential field on Address';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_main_address ADD confidential BOOLEAN DEFAULT FALSE');
$this->addSql('ALTER TABLE chill_main_address ALTER floor TYPE TEXT');
$this->addSql('ALTER TABLE chill_main_address ALTER corridor TYPE TEXT');
$this->addSql('ALTER TABLE chill_main_address ALTER steps TYPE TEXT');
$this->addSql('ALTER TABLE chill_main_address ALTER flat TYPE TEXT');
}
}

View File

@ -33,6 +33,7 @@ use Symfony\Component\Validator\Constraints as Assert;
class HouseholdComposition implements TrackCreationInterface, TrackUpdateInterface class HouseholdComposition implements TrackCreationInterface, TrackUpdateInterface
{ {
use TrackCreationTrait; use TrackCreationTrait;
use TrackUpdateTrait; use TrackUpdateTrait;
/** /**

View File

@ -34,6 +34,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
class PersonResource implements TrackCreationInterface, TrackUpdateInterface class PersonResource implements TrackCreationInterface, TrackUpdateInterface
{ {
use TrackCreationTrait; use TrackCreationTrait;
use TrackUpdateTrait; use TrackUpdateTrait;
/** /**

View File

@ -151,14 +151,14 @@
{% if accompanyingCourse.requestorPerson is not null %} {% if accompanyingCourse.requestorPerson is not null %}
<h4 class="item-key">{{ 'Requestor'|trans }}</h4> <h4 class="item-key">{{ 'Requestor'|trans }}</h4>
{% if accompanyingCourse.requestorAnonymous %} {% if accompanyingCourse.requestorAnonymous %}
<div class="confidential"><p class="blur">{{ _self.insert_onthefly('person', accompanyingCourse.requestorPerson) }}</p></div> <div class="confidential"><p>{{ _self.insert_onthefly('person', accompanyingCourse.requestorPerson) }}</p></div>
{% else %} {% else %}
{{ _self.insert_onthefly('person', accompanyingCourse.requestorPerson) }} {{ _self.insert_onthefly('person', accompanyingCourse.requestorPerson) }}
{% endif %} {% endif %}
{% elseif accompanyingCourse.requestorThirdParty is not null %} {% elseif accompanyingCourse.requestorThirdParty is not null %}
<h4 class="item-key">{{ 'Requestor'|trans }}</h4> <h4 class="item-key">{{ 'Requestor'|trans }}</h4>
{% if accompanyingCourse.requestorAnonymous %} {% if accompanyingCourse.requestorAnonymous %}
<div class="confidential"><p class="blur">{{ _self.insert_onthefly('thirdparty', accompanyingCourse.requestorThirdParty) }}</p></div> <div class="confidential"><p>{{ _self.insert_onthefly('thirdparty', accompanyingCourse.requestorThirdParty) }}</p></div>
{% else %} {% else %}
{{ _self.insert_onthefly('thirdparty', accompanyingCourse.requestorThirdParty) }} {{ _self.insert_onthefly('thirdparty', accompanyingCourse.requestorThirdParty) }}
{% endif %} {% endif %}

View File

@ -29,6 +29,7 @@ use function count;
class AccompanyingPeriodResourceNormalizer implements DenormalizerAwareInterface, DenormalizerInterface class AccompanyingPeriodResourceNormalizer implements DenormalizerAwareInterface, DenormalizerInterface
{ {
use DenormalizerAwareTrait; use DenormalizerAwareTrait;
use ObjectToPopulateTrait; use ObjectToPopulateTrait;
private ResourceRepository $repository; private ResourceRepository $repository;

View File

@ -33,6 +33,7 @@ use function is_array;
class AccompanyingPeriodWorkDenormalizer implements ContextAwareDenormalizerInterface, DenormalizerAwareInterface class AccompanyingPeriodWorkDenormalizer implements ContextAwareDenormalizerInterface, DenormalizerAwareInterface
{ {
use DenormalizerAwareTrait; use DenormalizerAwareTrait;
use ObjectToPopulateTrait; use ObjectToPopulateTrait;
public const GROUP_CREATE = 'accompanying_period_work:create'; public const GROUP_CREATE = 'accompanying_period_work:create';

View File

@ -40,7 +40,9 @@ class PersonJsonNormalizer implements
NormalizerInterface NormalizerInterface
{ {
use DenormalizerAwareTrait; use DenormalizerAwareTrait;
use NormalizerAwareTrait; use NormalizerAwareTrait;
use ObjectToPopulateTrait; use ObjectToPopulateTrait;
private CenterResolverManagerInterface $centerResolverManager; private CenterResolverManagerInterface $centerResolverManager;

View File

@ -29,7 +29,9 @@ use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
final class PersonVoterTest extends KernelTestCase final class PersonVoterTest extends KernelTestCase
{ {
use PrepareCenterTrait; use PrepareCenterTrait;
use PrepareScopeTrait; use PrepareScopeTrait;
use PrepareUserTrait; use PrepareUserTrait;
/** /**

View File

@ -28,7 +28,9 @@ use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
final class ReportVoterTest extends KernelTestCase final class ReportVoterTest extends KernelTestCase
{ {
use PrepareCenterTrait; use PrepareCenterTrait;
use PrepareScopeTrait; use PrepareScopeTrait;
use PrepareUserTrait; use PrepareUserTrait;
/** /**

View File

@ -99,7 +99,7 @@
<div class="item-col"> <div class="item-col">
{% if options['isConfidential'] %} {% if options['isConfidential'] %}
<div class="confidential"> <div class="confidential">
<div class="confidential-content blur"> <div class="confidential-content">
<ul class="list-content fa-ul"> <ul class="list-content fa-ul">
<li> <li>
{{ thirdparty.getAddress|chill_entity_render_box({ {{ thirdparty.getAddress|chill_entity_render_box({