mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-17 04:05:00 +00:00
76 lines
2.4 KiB
PHP
76 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* 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\MainBundle\Form\DataMapper;
|
|
|
|
use Chill\MainBundle\Entity\User;
|
|
use Symfony\Component\Form\DataMapperInterface;
|
|
|
|
final readonly class NotificationFlagDataMapper implements DataMapperInterface
|
|
{
|
|
public function __construct(private array $notificationFlagProviders) {}
|
|
|
|
public function mapDataToForms($viewData, $forms): void
|
|
{
|
|
if (null === $viewData) {
|
|
$viewData = [];
|
|
}
|
|
|
|
$formsArray = iterator_to_array($forms);
|
|
|
|
foreach ($this->notificationFlagProviders as $flagProvider) {
|
|
$flag = $flagProvider->getFlag();
|
|
|
|
if (isset($formsArray[$flag])) {
|
|
$flagForm = $formsArray[$flag];
|
|
|
|
$immediateEmailChecked = in_array(User::NOTIF_FLAG_IMMEDIATE_EMAIL, $viewData[$flag] ?? [], true)
|
|
|| !array_key_exists($flag, $viewData);
|
|
$dailyEmailChecked = in_array(User::NOTIF_FLAG_DAILY_DIGEST, $viewData[$flag] ?? [], true);
|
|
|
|
if ($flagForm->has('immediate_email')) {
|
|
$flagForm->get('immediate_email')->setData($immediateEmailChecked);
|
|
}
|
|
if ($flagForm->has('daily_email')) {
|
|
$flagForm->get('daily_email')->setData($dailyEmailChecked);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function mapFormsToData($forms, &$viewData): void
|
|
{
|
|
$formsArray = iterator_to_array($forms);
|
|
$viewData = [];
|
|
|
|
foreach ($this->notificationFlagProviders as $flagProvider) {
|
|
$flag = $flagProvider->getFlag();
|
|
|
|
if (isset($formsArray[$flag])) {
|
|
$flagForm = $formsArray[$flag];
|
|
$viewData[$flag] = [];
|
|
|
|
if (true === $flagForm['immediate_email']->getData()) {
|
|
$viewData[$flag][] = User::NOTIF_FLAG_IMMEDIATE_EMAIL;
|
|
}
|
|
|
|
if (true === $flagForm['daily_email']->getData()) {
|
|
$viewData[$flag][] = User::NOTIF_FLAG_DAILY_DIGEST;
|
|
}
|
|
|
|
if ([] === $viewData[$flag]) {
|
|
$viewData[$flag][] = User::NOTIF_FLAG_IMMEDIATE_EMAIL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|