ServerSettingsRepository   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 10
eloc 25
dl 0
loc 46
ccs 0
cts 24
cp 0
rs 10
c 1
b 0
f 1

3 Methods

Rating   Name   Duplication   Size   Complexity  
A removeSettingItems() 0 5 3
A getExistsSettings() 0 8 2
A saveSettings() 0 27 5
1
<?php
2
3
namespace Gameap\Repositories;
4
5
use Gameap\Models\Server;
6
use Gameap\Models\ServerSetting;
7
8
class ServerSettingsRepository extends Repository
9
{
10
    public function saveSettings(Server $server, array $settings): void
11
    {
12
        $existsSettings = $this->getExistsSettings($server);
13
14
        $saveSettings = [];
15
        foreach ($settings as $setting) {
16
            if (empty($setting['name']) || !isset($setting['value'])) {
17
                continue;
18
            }
19
20
            $saveSettings[$setting['name']] = $setting['value'];
21
22
            if (array_key_exists($setting['name'], $existsSettings)) {
23
                $existsSettings[$setting['name']]->value = $setting['value'];
24
                $existsSettings[$setting['name']]->save();
25
            } else {
26
                $serverSetting = new ServerSetting();
27
28
                $serverSetting->server_id = $server->id;
29
                $serverSetting->name      = $setting['name'];
30
                $serverSetting->value     = $setting['value'];
31
                $serverSetting->save();
32
                $existsSettings[$setting['name']] = $serverSetting;
33
            }
34
        }
35
36
        $this->removeSettingItems($server, $saveSettings);
37
    }
38
39
    private function getExistsSettings(Server $server): array
40
    {
41
        $existsSettings = [];
42
        foreach ($server->settings as $setting) {
43
            $existsSettings[$setting->name] = $setting;
44
        }
45
46
        return $existsSettings;
47
    }
48
49
    private function removeSettingItems(Server $server, $settings): void
50
    {
51
        foreach ($server->settings as $setting) {
52
            if (!array_key_exists($setting['name'], $settings)) {
53
                $setting->delete();
54
            }
55
        }
56
    }
57
}
58