Version 4.2.0

This commit is contained in:
Neo committed 2025-12-19 05:44:59 -08:00
1 parent 0dc2aee5ed
commit 96997ddd8e
2074 files changed
+125454 -55780

No files matched your search

+48 -24
View File
@@ -1,12 +1,11 @@
<?php
/**
* @brief Abstract Storage Class
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
* @license http://www.invisionpower.com/legal/standards/
* @package IPS Community Suite
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @package Invision Community
* @since 07 May 2013
* @version SVN_VERSION_NUMBER
*/
namespace IPS\Data;
@@ -58,7 +57,12 @@ abstract class _Store extends AbstractData
* @brief Log
*/
public $log = array();
/**
* @brief Flag to determine if we should check the validity of the cache via cacheKeys. We always want this to be on unless you have an exceptional reason to bypass the check.
*/
public $cacheCheck = TRUE;
/**
* Load mutiple
* Used so if it is known that several are going to be needed, they can all be loaded into memory at the same time
@@ -110,19 +114,33 @@ abstract class _Store extends AbstractData
try
{
/* If caching is enabled, and this isn't the special map of hashes... */
if ( \IPS\CACHE_METHOD !== 'None' and $key !== 'cacheKeys' )
if ( ( ! \IPS\Data\Cache::i() instanceof \IPS\Data\Cache\None ) and $key !== 'cacheKeys' )
{
/* And exists in the caching engine, and we know the hash of the correct value... */
$cacheKeys = ( isset( $this->cacheKeys ) and is_array( $this->cacheKeys ) ) ? $this->cacheKeys : array();
if ( isset( $cacheKeys[ $key ] ) and isset( \IPS\Data\Cache::i()->$key ) )
{
/* Get it... */
$value = \IPS\Data\Cache::i()->$key;
/* But only use it if the hash matches */
if( \IPS\Login::compareHashes( $cacheKeys[ $key ], md5( json_encode( $value ) ) ) )
if ( $this->cacheCheck === false )
{
if ( isset( \IPS\Data\Cache::i()->$key ) and \IPS\Data\Cache::i()->$key !== NULL )
{
return $value;
/* We accept it may be stale, so return it */
return \IPS\Data\Cache::i()->$key;
}
/* Still here? throw an exception so we get it from the data storage engine */
throw new \OutOfRangeException;
}
else
{
/* It exists in the caching engine, and we know the hash of the correct value... */
$cacheKeys = ( isset( $this->cacheKeys ) and is_array( $this->cacheKeys ) ) ? $this->cacheKeys : array();
if ( isset( $cacheKeys[ $key ] ) and isset( \IPS\Data\Cache::i()->$key ) )
{
/* Get it... */
$value = \IPS\Data\Cache::i()->$key;
/* But only use it if the hash matches */
if( \IPS\Login::compareHashes( $cacheKeys[ $key ], md5( json_encode( $value ) ) ) )
{
return $value;
}
}
}
}
@@ -136,9 +154,9 @@ abstract class _Store extends AbstractData
{
/* Actually get it... */
$value = parent::__get( $key );
/* If caching is enabled, and this isn't the special map of hashes... */
if ( \IPS\CACHE_METHOD !== 'None' and $key !== 'cacheKeys' )
if ( ( ! \IPS\Data\Cache::i() instanceof \IPS\Data\Cache\None ) and $key !== 'cacheKeys' )
{
/* Set it in the caching engine... */
\IPS\Data\Cache::i()->$key = $value;
@@ -166,7 +184,7 @@ abstract class _Store extends AbstractData
parent::__set( $key, $value );
/* If caching is enabled, and this isn't the special map of hashes... */
if ( \IPS\CACHE_METHOD !== 'None' and $key !== 'cacheKeys' )
if ( ( ! \IPS\Data\Cache::i() instanceof \IPS\Data\Cache\None ) and $key !== 'cacheKeys' )
{
/* Then also set it in the cache... */
\IPS\Data\Cache::i()->$key = $value;
@@ -194,15 +212,21 @@ abstract class _Store extends AbstractData
public function __isset( $key )
{
/* If caching is enabled, and this isn't the special map of hashes, try to get it from the cache store... */
if ( \IPS\CACHE_METHOD !== 'None' and $key !== 'cacheKeys' )
if ( ( ! \IPS\Data\Cache::i() instanceof \IPS\Data\Cache\None ) and $key !== 'cacheKeys' )
{
/* Does it exist in the caching engine? */
if ( isset( \IPS\Data\Cache::i()->$key ) )
{
/* Get it... */
$value = \IPS\Data\Cache::i()->$key;
/* But only use it if the hash matches */
if ( $this->cacheCheck === false )
{
/* We accept it may be stale, so return it */
return TRUE;
}
/* Only use it if the hash matches */
$cacheKeys = ( isset( $this->cacheKeys ) and is_array( $this->cacheKeys ) ) ? $this->cacheKeys : array();
if ( isset( $cacheKeys[ $key ] ) and \IPS\Login::compareHashes( $cacheKeys[ $key ], md5( json_encode( $value ) ) ) )
{
@@ -227,7 +251,7 @@ abstract class _Store extends AbstractData
parent::__unset( $key );
/* If caching is enabled, and this isn't the special map of hashes, remove it from the cache store... */
if ( \IPS\CACHE_METHOD !== 'None' and $key !== 'cacheKeys' )
if ( ( ! \IPS\Data\Cache::i() instanceof \IPS\Data\Cache\None ) and $key !== 'cacheKeys' )
{
/* Remove it from the cache store... */
unset( \IPS\Data\Cache::i()->$key );