<?php
namespace Jackbooted\Config;
use \Jackbooted\DB\DB;
use \Jackbooted\G;
/**
* @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved.
*
* Written by Brett Dutton of Jackbooted Software
* brett at brettdutton dot com
*
* This software is written and distributed under the GNU General Public
* License which means that its source code is freely-distributed and
* available to the general public.
*
* Example
* //Username to use for SMTP authentication
* $this->Username = Config::get( 'gmail.smtp.username', 'brettcraigdutton@gmail.com' );
*
*/
class Config extends \Jackbooted\Util\JB {
// In memory cache of configuration items
private static $configItemsObjects = [];
private static $overrideScope = false;
const INSERT_SQL = "REPLACE INTO tblConfig (fldUserID,fldKey,fldValue) VALUES(?,?,?)";
const SELECT_SQL = "SELECT fldValue FROM tblConfig WHERE fldKey=? AND fldUserID=?";
const GLOBAL_SCOPE = 'GLOBAL';
const USER_SCOPE = 'USER';
public static function setOverrideScope ( $scope=false ) {
self::$overrideScope = $scope;
}
public static function get ( $key, $def='', $scope=self::USER_SCOPE ) {
if ( isset( self::$configItemsObjects[$key] ) ) {
return self::$configItemsObjects[$key];
}
else {
self::getFromDB( $key, $scope );
if ( isset( self::$configItemsObjects[$key] ) ) {
return self::$configItemsObjects[$key];
}
else {
self::$configItemsObjects[$key] = $def;
if ( $def != '' ) {
self::putIntoDB( $key, $def, $scope );
}
return $def;
}
}
}
public static function put ( $key, $value, $scope=self::USER_SCOPE ) {
self::$configItemsObjects[$key] = $value;
self::putIntoDB( $key, $value, $scope );
}
private static function getScope ( $scope=self::USER_SCOPE ) {
if ( self::$overrideScope ) {
$uid = self::$overrideScope;
}
else if ( $scope == self::USER_SCOPE ) {
$uid = G::get( 'fldUserID', self::GLOBAL_SCOPE );
}
else {
$uid = self::GLOBAL_SCOPE;
}
return $uid;
}
private static function putIntoDB ( $key, $value, $scope=self::USER_SCOPE ) {
DB::exec ( DB::DEF, self::INSERT_SQL, [ self::getScope( $scope ), $key, json_encode( $value ) ] );
}
private static function getFromDB( $key, $scope=self::USER_SCOPE ) {
$uid = self::getScope( $scope );
if ( ( $serializedValue = DB::oneValue( DB::DEF, self::SELECT_SQL, [ $key, $uid ] ) ) !== false ) {
self::$configItemsObjects[$key] = json_decode( $serializedValue, true );
}
else if ( $uid !== self::GLOBAL_SCOPE ) {
if ( ( $serializedValue = DB::oneValue( DB::DEF, self::SELECT_SQL, [ $key, self::GLOBAL_SCOPE ] ) ) !== false ) {
self::$configItemsObjects[$key] = json_decode( $serializedValue, true );
}
}
}
public static function clearCache(){
self::$configItemsObjects = [];
}
}
|