Flags.php
2.27 KB
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
<?php
namespace BTFlags;
use BTFlags\FlagManager;
class Flags{
/**
* Retrieves the decrypted value of a flag
*
* @param string $flag Name of the flag.
* @param bool $encrypted True, if the passed $flag is an encrypted value.
* @param string $defaultValue Default value of a flag if the flag does not exist in the specified storage driver.
* @param string $driver Storage driver.
*
* @return string
*/
public static function get($flagName, $encrypted = false, $defaultValue, $driver = 'cookie'){
$flagManager = new FlagManager();
$flag = $flagManager->getFlag($flagName, $encrypted);
if(!$flag) return null;
$flagFromStorage = self::findFlagFromStorage($encrypted ? $flagName : $flag['encrypted_name'], $defaultValue ? $defaultValue : (isset($flag['has_default']) && $flag['has_default'] ? $flag['default'] : null), $driver);
if(!$flag['is_filtered']) return $flagFromStorage;
$filteredFlag = null;
if($flag['is_filtered']){
$filteredFlag = array_values(array_filter($flag['accepted_values'], function($value) use ($flagFromStorage, $encrypted){ return $value['encrypted_value'] == $flagFromStorage; }));
}
$filteredValue = array_values(array_filter($flag['accepted_values'], function($value) use ($flag){ return $value['encrypted_value'] == $flag['default']; }));
return $filteredFlag && isset($filteredFlag[0]) ? $filteredFlag[0]['value'] : ($flag['is_encrypted'] && isset($filteredValue[0]['value']) ? $filteredValue[0]['value'] : $flag['default']);
}
/**
* Look for the flag inside the specified storage driver.
*
* @param string $flag Name of the flag.
* @param string $defaultValue Default value of a flag if the flag does not exist in the specified storage driver.
* @param string $driver Storage driver.
*
* @return string
*/
private static function findFlagFromStorage($flag, $defaultValue, $driver){
// Cookie Driver
if($driver == 'cookie') return isset($_GET[$flag]) ? $_GET[$flag] : (isset($_COOKIE[$flag]) ? $_COOKIE[$flag] : $defaultValue);
// Session Driver
return isset($_GET[$flag]) ? $_GET[$flag] : ($_SESSION[$flag] ? $_SESSION[$flag] : $defaultValue);
}
}