nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							159 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							159 lines
						
					
					
						
							4.0 KiB
						
					
					
				| <?php | |
| 
 | |
| /* | |
|  * This file is part of the Symfony package. | |
|  * | |
|  * (c) Fabien Potencier <fabien@symfony.com> | |
|  * | |
|  * For the full copyright and license information, please view the LICENSE | |
|  * file that was distributed with this source code. | |
|  */ | |
| 
 | |
| namespace Symfony\Component\HttpFoundation\Session\Attribute; | |
| 
 | |
| /** | |
|  * This class provides structured storage of session attributes using | |
|  * a name spacing character in the key. | |
|  * | |
|  * @author Drak <drak@zikula.org> | |
|  */ | |
| class NamespacedAttributeBag extends AttributeBag | |
| { | |
|     private $namespaceCharacter; | |
| 
 | |
|     /** | |
|      * @param string $storageKey         Session storage key | |
|      * @param string $namespaceCharacter Namespace character to use in keys | |
|      */ | |
|     public function __construct(string $storageKey = '_sf2_attributes', string $namespaceCharacter = '/') | |
|     { | |
|         $this->namespaceCharacter = $namespaceCharacter; | |
|         parent::__construct($storageKey); | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function has($name) | |
|     { | |
|         // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is | |
|         $attributes = $this->resolveAttributePath($name); | |
|         $name = $this->resolveKey($name); | |
| 
 | |
|         if (null === $attributes) { | |
|             return false; | |
|         } | |
| 
 | |
|         return \array_key_exists($name, $attributes); | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function get($name, $default = null) | |
|     { | |
|         // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is | |
|         $attributes = $this->resolveAttributePath($name); | |
|         $name = $this->resolveKey($name); | |
| 
 | |
|         if (null === $attributes) { | |
|             return $default; | |
|         } | |
| 
 | |
|         return \array_key_exists($name, $attributes) ? $attributes[$name] : $default; | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function set($name, $value) | |
|     { | |
|         $attributes = &$this->resolveAttributePath($name, true); | |
|         $name = $this->resolveKey($name); | |
|         $attributes[$name] = $value; | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function remove($name) | |
|     { | |
|         $retval = null; | |
|         $attributes = &$this->resolveAttributePath($name); | |
|         $name = $this->resolveKey($name); | |
|         if (null !== $attributes && \array_key_exists($name, $attributes)) { | |
|             $retval = $attributes[$name]; | |
|             unset($attributes[$name]); | |
|         } | |
| 
 | |
|         return $retval; | |
|     } | |
| 
 | |
|     /** | |
|      * Resolves a path in attributes property and returns it as a reference. | |
|      * | |
|      * This method allows structured namespacing of session attributes. | |
|      * | |
|      * @param string $name         Key name | |
|      * @param bool   $writeContext Write context, default false | |
|      * | |
|      * @return array | |
|      */ | |
|     protected function &resolveAttributePath($name, $writeContext = false) | |
|     { | |
|         $array = &$this->attributes; | |
|         $name = (0 === strpos($name, $this->namespaceCharacter)) ? substr($name, 1) : $name; | |
| 
 | |
|         // Check if there is anything to do, else return | |
|         if (!$name) { | |
|             return $array; | |
|         } | |
| 
 | |
|         $parts = explode($this->namespaceCharacter, $name); | |
|         if (\count($parts) < 2) { | |
|             if (!$writeContext) { | |
|                 return $array; | |
|             } | |
| 
 | |
|             $array[$parts[0]] = []; | |
| 
 | |
|             return $array; | |
|         } | |
| 
 | |
|         unset($parts[\count($parts) - 1]); | |
| 
 | |
|         foreach ($parts as $part) { | |
|             if (null !== $array && !\array_key_exists($part, $array)) { | |
|                 if (!$writeContext) { | |
|                     $null = null; | |
| 
 | |
|                     return $null; | |
|                 } | |
| 
 | |
|                 $array[$part] = []; | |
|             } | |
| 
 | |
|             $array = &$array[$part]; | |
|         } | |
| 
 | |
|         return $array; | |
|     } | |
| 
 | |
|     /** | |
|      * Resolves the key from the name. | |
|      * | |
|      * This is the last part in a dot separated string. | |
|      * | |
|      * @param string $name | |
|      * | |
|      * @return string | |
|      */ | |
|     protected function resolveKey($name) | |
|     { | |
|         if (false !== $pos = strrpos($name, $this->namespaceCharacter)) { | |
|             $name = substr($name, $pos + 1); | |
|         } | |
| 
 | |
|         return $name; | |
|     } | |
| }
 | |
| 
 |