summaryrefslogtreecommitdiffstats
path: root/library/Icinga/Web/Announcement/AnnouncementCookie.php
blob: 6d23872834c68ec15d0826d62f6b7155b9f15609 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/* Icinga Web 2 | (c) 2016 Icinga Development Team | GPLv2+ */

namespace Icinga\Web\Announcement;

use Icinga\Util\Json;
use Icinga\Web\Cookie;

/**
 * Handle acknowledged announcements via cookie
 */
class AnnouncementCookie extends Cookie
{
    /**
     * Array of hashes representing acknowledged announcements
     *
     * @var string[]
     */
    protected $acknowledged = array();

    /**
     * ETag of the last known announcements.ini
     *
     * @var string
     */
    protected $etag;

    /**
     * Timestamp of the next active acknowledgement, if any
     *
     * @var int|null
     */
    protected $nextActive;

    /**
     * AnnouncementCookie constructor
     */
    public function __construct()
    {
        parent::__construct('icingaweb2-announcements');
        $this->setExpire(2147483648);
        if (isset($_COOKIE['icingaweb2-announcements'])) {
            $cookie = json_decode($_COOKIE['icingaweb2-announcements'], true);
            if ($cookie !== null) {
                if (isset($cookie['acknowledged'])) {
                    $this->setAcknowledged($cookie['acknowledged']);
                }
                if (isset($cookie['etag'])) {
                    $this->setEtag($cookie['etag']);
                }
                if (isset($cookie['next'])) {
                    $this->setNextActive($cookie['next']);
                }
            }
        }
    }

    /**
     * Get the hashes of the acknowledged announcements
     *
     * @return  string[]
     */
    public function getAcknowledged()
    {
        return $this->acknowledged;
    }

    /**
     * Set the hashes of the acknowledged announcements
     *
     * @param   string[] $acknowledged
     *
     * @return  $this
     */
    public function setAcknowledged(array $acknowledged)
    {
        $this->acknowledged = $acknowledged;
        return $this;
    }

    /**
     * Get the ETag
     *
     * @return  string
     */
    public function getEtag()
    {
        return $this->etag;
    }

    /**
     * Set the ETag
     *
     * @param   string $etag
     *
     * @return  $this
     */
    public function setEtag($etag)
    {
        $this->etag = $etag;
        return $this;
    }

    /**
     * Get the timestamp of the next active announcement
     *
     * @return ?int
     */
    public function getNextActive()
    {
        return $this->nextActive;
    }

    /**
     * Set the timestamp of the next active announcement
     *
     * @param ?int $nextActive
     *
     * @return  $this
     */
    public function setNextActive(?int $nextActive)
    {
        $this->nextActive = $nextActive;
        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function getValue()
    {
        return Json::encode(array(
            'acknowledged'  => $this->getAcknowledged(),
            'etag'          => $this->getEtag(),
            'next'          => $this->getNextActive()
        ));
    }
}