Flags.php 2.02 KB
<?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;
        return $flagManager->checkFlag($flag, $defaultValue ? $defaultValue : (isset($flag['has_default']) && $flag['has_default'] ? $flag['default'] : null));
    }

    /**
     * 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);
    }

    /**
     * Checks if the flag exists.
     * 
     * @param string $flag Name of the flag.
     * @param bool $encrypted True, if the passed $flag is an encrypted value.
     * @param string $driver Storage driver.
     * 
     * @return string
     */
    public static function has($flagName, $encrypted = false, $driver = 'cookie'){
        $flagManager = new FlagManager();
        $flag = $flagManager->getFlag($flagName, $encrypted);
        if(!$flag) return null;
        return true;
    }
}