68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\b\io;
 | |
| 
 | |
| use nur\A;
 | |
| 
 | |
| /**
 | |
|  * Class CacheManager: un gestionnaire de cache permettant de désactiver la mise
 | |
|  * en cache d'une valeur dans le cadre d'une session.
 | |
|  *
 | |
|  * en effet, si on désactive le cache, il doit être réactivé après que la valeur
 | |
|  * est calculée, pour éviter qu'une valeur soit calculée encore et encore dans
 | |
|  * une session de travail
 | |
|  */
 | |
| class CacheManager {
 | |
|   function __construct(?array $includes=null, ?array $excludes=null) {
 | |
|     $this->caches = [];
 | |
|     $this->defaultCache = true;
 | |
|     $this->includes = $includes;
 | |
|     $this->excludes = $excludes;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @var array tableau {id => cache} indiquant si l'élément id doit être mis en
 | |
|    * cache
 | |
|    */
 | |
|   protected array $caches;
 | |
| 
 | |
|   /**
 | |
|    * @var bool valeur par défaut de cache si la valeur n'est pas trouvée dans
 | |
|    * $caches
 | |
|    */
 | |
|   protected bool $defaultCache;
 | |
| 
 | |
|   /**
 | |
|    * @var array|null groupes à toujours inclure dans le cache. pour les
 | |
|    * identifiants de ces groupe, {@link self::shouldCache()} retourne toujours
 | |
|    * true.
 | |
|    *
 | |
|    * $excludes est prioritaire par rapport à $includes
 | |
|    */
 | |
|   protected ?array $includes;
 | |
| 
 | |
|   /**
 | |
|    * @var array|null groupes à exclure de la mise en cache. la mise en cache est
 | |
|    * toujours calculée pour les identifiants de ces groupes.
 | |
|    */
 | |
|   protected ?array $excludes;
 | |
| 
 | |
|   function setNoCache(bool $noCache=true, bool $reset=true): self {
 | |
|     if ($reset) $this->caches = [];
 | |
|     $this->defaultCache = !$noCache;
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   function shouldCache(string $id, ?string $groupId=null, bool $reset=true): bool {
 | |
|     if ($groupId !== null) {
 | |
|       $includes = $this->includes;
 | |
|       $shouldInclude = $includes !== null && in_array($groupId, $includes);
 | |
|       $excludes = $this->excludes;
 | |
|       $shouldExclude = $excludes !== null && in_array($groupId, $excludes);
 | |
|       if ($shouldInclude && !$shouldExclude) return true;
 | |
|     }
 | |
|     $cache = A::get($this->caches, $id, $this->defaultCache);
 | |
|     $this->caches[$id] = $reset?: $cache;
 | |
|     return $cache;
 | |
|   }
 | |
| }
 |