Files
kupshop/bundles/External/PompoBundle/Util/Incomaker/PompoContactXMLElement.php
2025-08-02 16:30:27 +02:00

128 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
namespace External\PompoBundle\Util\Incomaker;
use External\PompoBundle\Util\Configuration;
use KupShop\IncomakerBundle\Util\XMLElements\ContactXMLElement;
use Query\Operator;
class PompoContactXMLElement extends ContactXMLElement
{
private Configuration $configuration;
public function __construct(Configuration $configuration)
{
$this->configuration = $configuration;
}
protected function getUsers(): array
{
$users = parent::getUsers();
// nafetchovat dodatecna data pro pompo
if ($this->configuration->isPompo()) {
$this->fetchUsersCards($users);
$this->fetchUsersChildren($users);
$this->fetchUserDRSId($users);
}
return $users;
}
protected function getCustomFields(array &$user)
{
$customFields = parent::getCustomFields($user);
foreach ($user['cards'] ?? [] as $i => $card) {
$customFields['card_code_'.$i] = ['key' => 'card', 'group' => 'card'.$i, 'value' => $card['code']];
$customFields['card_isActive_'.$i] = ['key' => 'isActive', 'group' => 'card'.$i, 'value' => $card['active']];
}
foreach ($user['children'] ?? [] as $i => $child) {
try {
$birthdate = (new \DateTime($child['date_birth']))->format('Y-m-d');
} catch (\Throwable $e) {
$birthdate = '';
}
$customFields['child_name_'.$i] = ['key' => 'name', 'group' => 'child'.$i, 'value' => $child['name']];
$customFields['child_birthday_'.$i] = ['key' => 'birthday', 'group' => 'child'.$i, 'value' => $birthdate];
$customFields['child_gender_'.$i] = ['key' => 'gender', 'group' => 'child'.$i, 'value' => $child['gender']];
}
$customFields['pompoId'] = ['key' => 'pompoId', 'value' => $user['pompoId'] ?? null];
unset($user['cards'], $user['children'], $user['pompoId']);
return $customFields;
}
/**
* Nafetchuje deti k uzivatelum.
*/
private function fetchUsersChildren(array &$users): void
{
$userIds = array_map(function ($x) { return $x['id']; }, $users);
$qb = sqlQueryBuilder()
->select('id_user, name, gender, date_birth')
->from('users_family')
->where(Operator::inIntArray($userIds, 'id_user'));
$children = [];
foreach ($qb->execute() as $item) {
$children[$item['id_user']][] = $item;
}
foreach ($users as &$user) {
$user['children'] = $children[$user['id']] ?? [];
}
}
/**
* Nafetchuje zakaznicke karty k uzivatelum.
*/
private function fetchUsersCards(array &$users): void
{
$userIds = array_map(function ($x) { return $x['id']; }, $users);
$qb = sqlQueryBuilder()
->select('id_user, code, active')
->from('user_cards')
->where(Operator::inIntArray($userIds, 'id_user'));
$cards = [];
foreach ($qb->execute() as $item) {
$cards[$item['id_user']][] = $item;
}
foreach ($users as &$user) {
$user['cards'] = $cards[$user['id']] ?? [];
}
}
/**
* Nafetchuje cislo zakaznika (id_drs).
*/
private function fetchUserDRSId(array &$users): void
{
$userIds = array_map(function ($x) { return $x['id']; }, $users);
$qb = sqlQueryBuilder()
->select('id_drs, id_user')
->from('drs_users')
->where(Operator::inIntArray($userIds, 'id_user'));
$pompoIds = [];
foreach ($qb->execute() as $item) {
$pompoIds[$item['id_user']] = $item['id_drs'];
}
foreach ($users as &$user) {
$user['pompoId'] = $pompoIds[$user['id']] ?? null;
}
}
}