File: VisitProperties.php

package info (click to toggle)
matomo 5.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 95,068 kB
  • sloc: php: 289,425; xml: 127,249; javascript: 112,130; python: 202; sh: 178; makefile: 20; sql: 10
file content (132 lines) | stat: -rw-r--r-- 3,315 bytes parent folder | download
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
<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link    https://matomo.org
 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 */

namespace Piwik\Tracker\Visit;

/**
 * Holds temporary data for tracking requests.
 */
class VisitProperties
{
    /**
     * Information about the current visit. This array holds the column values that will be inserted or updated
     * in the `log_visit` table, or the values for the last known visit of the current visitor. These properties
     * can be modified during request processing.
     *
     * @var array
     */
    private $visitInfo = [];

    /**
     * Holds the initial visit properties information about the current visit, this data is not changed during request processing.
     *
     * @var array
     */
    private $visitInfoImmutableProperties = [];


    public function __construct(array $visitInfo = [])
    {
        $this->visitInfo = $visitInfo;
        $this->visitInfoImmutableProperties = $visitInfo;
    }

    /**
     * Returns a visit property, or `null` if none is set.
     *
     * @param string $name The property name.
     *
     * @return mixed
     */
    public function getProperty($name)
    {
        return isset($this->visitInfo[$name]) ? $this->visitInfo[$name] : null;
    }

    /**
     * Returns all visit properties by reference.
     *
     * @return array
     */
    public function &getProperties(): array
    {
        return $this->visitInfo;
    }

    /**
     * Sets a visit property.
     *
     * @param string $name The property name.
     * @param mixed $value The property value.
     *
     */
    public function setProperty($name, $value): void
    {
        $this->visitInfo[$name] = $value;
    }

    /**
     * Unsets all visit properties.
     *
     */
    public function clearProperties(): void
    {
        $this->visitInfo = [];
    }

    /**
     * Sets all visit properties.
     *
     * @param array $properties
     *
     */
    public function setProperties(array $properties): void
    {
        $this->visitInfo = $properties;
    }

    /**
     * Set the initial values of a property.
     * The immutable value remains unchanged throughout request processing and can be access with getImmutableProperty()
     * The mutable value can be updated at any time with setProperty() and accessed via getProperty()
     *
     * @param mixed $value
     *
     */
    public function initializeProperty(string $name, $value): void
    {
        if (isset($this->visitInfoImmutableProperties[$name])) {
            throw new \Exception(sprintf('The property %s has already been initialized', $name));
        }
        $this->visitInfoImmutableProperties[$name] = $value;
        $this->setProperty($name, $value);
    }

    /**
     * Returns a visit property, unmodified by request processors. Returns `null` if not set.
     *
     * @param string $name The property name.
     *
     * @return mixed|null
     */
    public function getImmutableProperty(string $name)
    {
        return $this->visitInfoImmutableProperties[$name] ?? null;
    }

    /**
     * Returns all immutable visit properties
     *
     * @return array
     */
    public function getImmutableProperties(): array
    {
        return $this->visitInfoImmutableProperties;
    }
}