/
Context.php
133 lines (121 loc) · 2.64 KB
/
Context.php
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
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\App\Http;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Serialize\Serializer\Json;
/**
* Context data for requests
*/
class Context
{
/**
* Currency cache context
*/
const CONTEXT_CURRENCY = 'current_currency';
/**
* Data storage
*
* @var array
*/
protected $data = [];
/**
* @var array
*/
protected $default = [];
/**
* @var Json
*/
private $serializer;
/**
* @param array $data
* @param array $default
* @param Json|null $serializer
*/
public function __construct(array $data = [], array $default = [], Json $serializer = null)
{
$this->data = $data;
$this->default = $default;
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
}
/**
* Data setter
*
* @param string $name
* @param mixed $value
* @param mixed $default
* @return \Magento\Framework\App\Http\Context
*/
public function setValue($name, $value, $default)
{
if ($default !== null) {
$this->default[$name] = $default;
}
$this->data[$name] = $value;
return $this;
}
/**
* Unset data from vary array
*
* @param string $name
* @return null
*/
public function unsValue($name)
{
unset($this->data[$name]);
return $this;
}
/**
* Data getter
*
* @param string $name
* @return mixed|null
*/
public function getValue($name)
{
return $this->data[$name] ?? ($this->default[$name] ?? null);
}
/**
* Return all data
*
* @return array
*/
public function getData()
{
$data = [];
foreach ($this->data as $name => $value) {
if ($value && $value != $this->default[$name]) {
$data[$name] = $value;
}
}
return $data;
}
/**
* Return vary string to be used as a part of page cache identifier
*
* @return string|null
*/
public function getVaryString()
{
$data = $this->getData();
if (!empty($data)) {
ksort($data);
return sha1($this->serializer->serialize($data));
}
return null;
}
/**
* Get data and default data in "key-value" format
*
* @return array
*/
public function toArray()
{
return [
'data' => $this->data,
'default' => $this->default
];
}
}