| 
<?phpnamespace 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 = [];
 }
 }
 
 |