Passed
Push — develop ( e40e75...c3ce80 )
by Nikita
10:32
created

ServerSettingsRepository::saveSettings()   B

Complexity

Conditions 9
Paths 30

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 22
c 1
b 0
f 0
dl 0
loc 35
rs 8.0555
cc 9
nc 30
nop 2
1
<?php
2
3
namespace Gameap\Repositories;
4
5
use Gameap\Models\Server;
6
use Gameap\Models\ServerSetting;
7
8
class ServerSettingsRepository
9
{
10
    protected $model;
11
12
    protected $gdaemonTaskRepository;
13
14
    public function __construct(Server $server)
15
    {
16
        $this->model = $server;
17
    }
18
19
    /**
20
     * @param Server $server
21
     * @param array $settings
22
     * @throws \Exception
23
     */
24
    public function saveSettings(Server $server, array $settings)
25
    {
26
        $existsSettings = [];
27
        foreach ($server->settings as $setting) {
28
            $existsSettings[$setting->name] = $setting;
29
        }
30
31
        $saveSettings = [];
32
        foreach ($settings as $setting) {
33
            if (empty($setting['name']) || empty($setting['value'])) {
34
                continue;
35
            }
36
37
            $saveSettings[$setting['name']] = $setting['value'];
38
39
            if (array_key_exists($setting['name'], $existsSettings)) {
40
                if (!empty($setting['value'])) {
41
                    $existsSettings[$setting['name']]->value = $setting['value'];
42
                    $existsSettings[$setting['name']]->save();
43
                }
44
            } else {
45
                $serverSetting = new ServerSetting();
46
47
                $serverSetting->server_id = $server->id;
48
                $serverSetting->name = $setting['name'];
49
                $serverSetting->value = $setting['value'];
50
                $serverSetting->save();
51
                $existsSettings[$setting['name']] = $serverSetting;
52
            }
53
        }
54
55
        // Remove items
56
        foreach ($server->settings as $setting) {
57
            if (!array_key_exists($setting['name'], $saveSettings)) {
58
                $setting->delete();
59
            }
60
        }
61
    }
62
63
}