* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * Object-Cache * @author f0o * @copyright 2015 f0o, LibreNMS * @license GPL * @package LibreNMS * @subpackage Cache */ class ObjCache implements ArrayAccess { private $data = array(); private $obj = ""; /** * Initialize ObjCache * @param string $obj Name of Object * @return void */ public function __construct( $obj ) { global $config; $this->obj = $obj; if( isset($GLOBALS['_ObjCache'][$obj]) ) { $this->data = $GLOBALS['_ObjCacheSkell'][$obj]; } else { if( !is_array($GLOBALS['_ObjCacheSkell']) ) { $GLOBALS['_ObjCacheSkell'] = array(); } if( !is_array($GLOBALS['_ObjCache']) ) { $GLOBALS['_ObjCache'] = array(); } if( file_exists($config['install_dir'].'/includes/caches/'.$obj.'.inc.php') ) { $data = array(); include($config['install_dir'].'/includes/caches/'.$obj.'.inc.php'); $this->data = $data; $GLOBALS['_ObjCacheSkell'][$obj] = $this->data; if( !is_array($GLOBALS['_ObjCache'][$obj]) ) { $GLOBALS['_ObjCache'][$obj] = $this->data; } } } } /** * Check if data exists * @param string $obj Name of Data-Object * @return boolean */ public function offsetExists( $obj ) { if( isset($this->data[$obj]) ) { return true; } return false; } /** * Get Data-Object * @param string $obj Name of Data-Object * @return mixed */ public function offsetGet( $obj ) { if( isset($this->data[$obj]) ) { if( isset($this->data[$obj]['value']) ) { return $this->data[$obj]['value']; } elseif( isset($GLOBALS['_ObjCache'][$this->obj][$obj]['value']) ) { return $GLOBALS['_ObjCache'][$this->obj][$obj]['value']; } else { $GLOBALS['_ObjCache'][$this->obj][$obj]['value'] = dbFetchCell($this->data[$obj]['query'],$this->data[$obj]['params']); return $GLOBALS['_ObjCache'][$this->obj][$obj]['value']; } } } /** * Overrides internal Cache-Object * @param string $obj Name of Data-Object * @param mixed $value Value * @return boolean */ public function offsetSet( $obj, $value ) { if( !is_array($this->data[$obj]) ) { $this->data[$obj] = array(); } $this->data[$obj]['value'] = $value; return $this->data[$obj]['value']; } /** * Reset Data-Object * @param string $obj Name of Data-Object * @return mixed */ public function offsetUnset( $obj ) { unset($this->data[$obj]['value']); return true; } }