Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / http-foundation / Session / Storage / MetadataBag.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\HttpFoundation\Session\Storage;
13
14 use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
15
16 /**
17  * Metadata container.
18  *
19  * Adds metadata to the session.
20  *
21  * @author Drak <drak@zikula.org>
22  */
23 class MetadataBag implements SessionBagInterface
24 {
25     const CREATED = 'c';
26     const UPDATED = 'u';
27     const LIFETIME = 'l';
28
29     /**
30      * @var string
31      */
32     private $name = '__metadata';
33
34     /**
35      * @var string
36      */
37     private $storageKey;
38
39     /**
40      * @var array
41      */
42     protected $meta = array(self::CREATED => 0, self::UPDATED => 0, self::LIFETIME => 0);
43
44     /**
45      * Unix timestamp.
46      *
47      * @var int
48      */
49     private $lastUsed;
50
51     /**
52      * @var int
53      */
54     private $updateThreshold;
55
56     /**
57      * @param string $storageKey      The key used to store bag in the session
58      * @param int    $updateThreshold The time to wait between two UPDATED updates
59      */
60     public function __construct($storageKey = '_sf2_meta', $updateThreshold = 0)
61     {
62         $this->storageKey = $storageKey;
63         $this->updateThreshold = $updateThreshold;
64     }
65
66     /**
67      * {@inheritdoc}
68      */
69     public function initialize(array &$array)
70     {
71         $this->meta = &$array;
72
73         if (isset($array[self::CREATED])) {
74             $this->lastUsed = $this->meta[self::UPDATED];
75
76             $timeStamp = time();
77             if ($timeStamp - $array[self::UPDATED] >= $this->updateThreshold) {
78                 $this->meta[self::UPDATED] = $timeStamp;
79             }
80         } else {
81             $this->stampCreated();
82         }
83     }
84
85     /**
86      * Gets the lifetime that the session cookie was set with.
87      *
88      * @return int
89      */
90     public function getLifetime()
91     {
92         return $this->meta[self::LIFETIME];
93     }
94
95     /**
96      * Stamps a new session's metadata.
97      *
98      * @param int $lifetime Sets the cookie lifetime for the session cookie. A null value
99      *                      will leave the system settings unchanged, 0 sets the cookie
100      *                      to expire with browser session. Time is in seconds, and is
101      *                      not a Unix timestamp.
102      */
103     public function stampNew($lifetime = null)
104     {
105         $this->stampCreated($lifetime);
106     }
107
108     /**
109      * {@inheritdoc}
110      */
111     public function getStorageKey()
112     {
113         return $this->storageKey;
114     }
115
116     /**
117      * Gets the created timestamp metadata.
118      *
119      * @return int Unix timestamp
120      */
121     public function getCreated()
122     {
123         return $this->meta[self::CREATED];
124     }
125
126     /**
127      * Gets the last used metadata.
128      *
129      * @return int Unix timestamp
130      */
131     public function getLastUsed()
132     {
133         return $this->lastUsed;
134     }
135
136     /**
137      * {@inheritdoc}
138      */
139     public function clear()
140     {
141         // nothing to do
142     }
143
144     /**
145      * {@inheritdoc}
146      */
147     public function getName()
148     {
149         return $this->name;
150     }
151
152     /**
153      * Sets name.
154      *
155      * @param string $name
156      */
157     public function setName($name)
158     {
159         $this->name = $name;
160     }
161
162     private function stampCreated($lifetime = null)
163     {
164         $timeStamp = time();
165         $this->meta[self::CREATED] = $this->meta[self::UPDATED] = $this->lastUsed = $timeStamp;
166         $this->meta[self::LIFETIME] = (null === $lifetime) ? ini_get('session.cookie_lifetime') : $lifetime;
167     }
168 }