Queue::insert()   A
last analyzed

Complexity

Conditions 4
Paths 6

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.2
c 0
b 0
f 0
cc 4
eloc 11
nc 6
nop 2
1
<?php
2
3
namespace Nopolabs\Yabot\Plugins\Queue;
4
5
6
use Nopolabs\Yabot\Message\Message;
7
use Nopolabs\Yabot\Helpers\StorageTrait;
8
use Nopolabs\Yabot\Storage\StorageInterface;
9
10
class Queue
11
{
12
    use StorageTrait;
13
14
    protected $queue;
15
16
    public function __construct(StorageInterface $storage, array $config)
17
    {
18
        $this->setStorageKey($config['storageName'] ?? 'queue');
19
        $this->setStorage($storage);
20
21
        $this->queue = $this->load() ?: [];
22
23
        $this->save($this->queue);
24
    }
25
26
    public function push($element)
27
    {
28
        $this->queue[] = $element;
29
        $this->save($this->queue);
30
    }
31
32
    public function insert($element, $index)
33
    {
34
        $queue = [];
35
        $idx = -1;
36
        foreach ($this->queue as $idx => $el) {
37
            if ($idx === $index) {
38
                $queue[] = $element;
39
            }
40
            $queue[] = $el;
41
        }
42
        if ($idx < $index) {
43
            $queue[] = $element;
44
        }
45
        $this->queue = $queue;
46
        $this->save($this->queue);
47
    }
48
49
    public function next()
50
    {
51
        array_shift($this->queue);
52
        $this->save($this->queue);
53
    }
54
55
    public function remove($element)
56
    {
57
        $queue = [];
58
        foreach ($this->queue as $el) {
59
            if ($el['item'] !== $element['item']) {
60
                $queue[] = $el;
61
            }
62
        }
63
        $this->queue = $queue;
64
        $this->save($this->queue);
65
    }
66
67
    public function clear()
68
    {
69
        $this->queue = [];
70
        $this->save($this->queue);
71
    }
72
73
    public function buildElement(Message $msg, array $matches)
74
    {
75
        return [
76
            'user' => $msg->getUsername(),
77
            'item' => $matches['item'],
78
        ];
79
    }
80
81
    public function getQueue() : array
82
    {
83
        return $this->queue;
84
    }
85
86
    public function getDetails() : array
87
    {
88
        $details = [];
89
90
        foreach ($this->getQueue() as $element) {
91
            $details[] = json_encode($element);
92
        }
93
94
        return $details;
95
    }
96
}