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;
}
}
|