SettingsRepository::updateSetting()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 8
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 10
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Repository;
6
7
use App\Entity\Settings;
8
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
9
use Doctrine\Persistence\ManagerRegistry;
10
11
/**
12
 * @method Settings|null find($id, $lockMode = null, $lockVersion = null)
13
 * @method Settings|null findOneBy(array $criteria, array $orderBy = null)
14
 * @method Settings[]    findAll()
15
 * @method Settings[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
16
 */
17
final class SettingsRepository extends ServiceEntityRepository
18
{
19
    /**
20
     * @var CurrencyRepository
21
     */
22
    private $currency;
23
24
    public function __construct(ManagerRegistry $registry, CurrencyRepository $currency)
25
    {
26
        parent::__construct($registry, Settings::class);
27
        $this->currency = $currency;
28
    }
29
30
    public function findAllAsArray(): array
31
    {
32
        $settings = $this->findAll();
33
34
        $settingsArray = [];
35
        foreach ($settings as $setting) {
36
            if ('currency_id' !== $setting->getSettingName()) {
37
                $settingsArray[$setting->getSettingName()] = $setting->getSettingValue();
38
            } else {
39
                $currency = $this->currency->find((int) $setting->getSettingValue());
40
                if (!$currency) {
41
                    $currency = $this->currency->findOneBy(['code' => 'USD']);
42
                }
43
                $settingsArray['currency'] = $currency;
44
            }
45
        }
46
47
        return $settingsArray;
48
    }
49
50
    public function updateSetting(string $setting_name, ?string $setting_value = ''): void
51
    {
52
        $this->createQueryBuilder('i')
53
            ->update('App:Settings', 's')
54
            ->set('s.setting_value', '?1')
55
            ->where('s.setting_name = ?2')
56
            ->setParameter(1, $setting_value)
57
            ->setParameter(2, $setting_name)
58
            ->getQuery()
59
            ->execute();
60
    }
61
62
    public function updateSettings(array $settings): void
63
    {
64
        foreach ($settings as $setting_name => $setting_value) {
65
            if ('currency' === $setting_name) {
66
                $this->updateSetting('currency_id', (string) ($setting_value->getId()));
67
            } else {
68
                $this->updateSetting($setting_name, (string) $setting_value);
69
            }
70
        }
71
    }
72
}
73