Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
10 / 10 |
CRAP | |
100.00% |
41 / 41 |
AbstractSession | |
100.00% |
1 / 1 |
|
100.00% |
10 / 10 |
20 | |
100.00% |
41 / 41 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
addDataMapper | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
addGlobalDataMapper | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
addKeyDataMapper | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
set | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
mapValueToSessionData | |
100.00% |
1 / 1 |
3 | |
100.00% |
6 / 6 |
|||
get | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
mapValueFromSessionData | |
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
|||
anonymous function | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
clear | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php declare(strict_types = 1); | |
/** | |
* Copyright (c) 2016 Holger Woltersdorf & Contributors | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
*/ | |
namespace IceHawk\Session; | |
use IceHawk\Session\Interfaces\MapsSessionData; | |
/** | |
* Class AbstractSession | |
* @package IceHawk\Session | |
*/ | |
abstract class AbstractSession | |
{ | |
/** @var array */ | |
private $sessionData; | |
/** @var array|MapsSessionData[] */ | |
private $keyDataMappers; | |
/** @var array|MapsSessionData[] */ | |
private $globalDataMappers; | |
public function __construct( array &$sessionData ) | |
{ | |
$this->sessionData = &$sessionData; | |
$this->keyDataMappers = []; | |
$this->globalDataMappers = []; | |
} | |
final public function addDataMapper( MapsSessionData $dataMapper, array $keys = [] ) | |
{ | |
if ( empty($keys) ) | |
{ | |
$this->addGlobalDataMapper( $dataMapper ); | |
} | |
else | |
{ | |
foreach ( array_unique( $keys ) as $key ) | |
{ | |
$this->addKeyDataMapper( $dataMapper, $key ); | |
} | |
} | |
} | |
private function addGlobalDataMapper( MapsSessionData $dataMapper ) | |
{ | |
if ( !in_array( $dataMapper, $this->globalDataMappers ) ) | |
{ | |
$this->globalDataMappers[] = $dataMapper; | |
} | |
} | |
private function addKeyDataMapper( MapsSessionData $dataMapper, string $key ) | |
{ | |
if ( isset($this->keyDataMappers[ $key ]) ) | |
{ | |
if ( !in_array( $dataMapper, $this->keyDataMappers[ $key ] ) ) | |
{ | |
$this->keyDataMappers[ $key ][] = $dataMapper; | |
} | |
} | |
else | |
{ | |
$this->keyDataMappers[ $key ] = [$dataMapper]; | |
} | |
} | |
final protected function set( string $key, $value ) | |
{ | |
$this->sessionData[ $key ] = $this->mapValueToSessionData( $key, $value ); | |
} | |
private function mapValueToSessionData( string $key, $value ) | |
{ | |
$keyDataMappers = $this->keyDataMappers[ $key ] ?? []; | |
/** @var MapsSessionData $keyDataMapper */ | |
foreach ( $keyDataMappers as $keyDataMapper ) | |
{ | |
$value = $keyDataMapper->toSessionData( $value ); | |
} | |
foreach ( $this->globalDataMappers as $globalDataMapper ) | |
{ | |
$value = $globalDataMapper->toSessionData( $value ); | |
} | |
return $value; | |
} | |
final protected function get( string $key ) | |
{ | |
return $this->mapValueFromSessionData( $key ); | |
} | |
private function mapValueFromSessionData( string $key ) | |
{ | |
if ( $this->isset( $key ) ) | |
{ | |
$value = $this->sessionData[ $key ]; | |
$globalDataMappers = array_reverse( $this->globalDataMappers ); | |
$keyDataMappers = array_reverse( $this->keyDataMappers[ $key ] ?? [] ); | |
/** @var MapsSessionData $globalDataMapper */ | |
foreach ( $globalDataMappers as $globalDataMapper ) | |
{ | |
$value = $globalDataMapper->fromSessionData( $value ); | |
} | |
/** @var MapsSessionData $keyDataMapper */ | |
foreach ( $keyDataMappers as $keyDataMapper ) | |
{ | |
$value = $keyDataMapper->fromSessionData( $value ); | |
} | |
return $value; | |
} | |
return null; | |
} | |
final protected function isset( string $key ) : bool | |
{ | |
return isset($this->sessionData[ $key ]); | |
} | |
final protected function unset( string $key ) | |
{ | |
unset($this->sessionData[ $key ]); | |
} | |
public function clear() | |
{ | |
$this->sessionData = []; | |
} | |
} |