120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\mapper\base\oobd;
 | |
| 
 | |
| use nur\A;
 | |
| use nur\mapper\base\mark_utils;
 | |
| 
 | |
| trait TOobdManager {
 | |
|   /** @var IOobdManager instance partagée */
 | |
|   protected $sharedOobdManager;
 | |
| 
 | |
|   function getSharedOobdManager(): ?IOobdManager {
 | |
|     return $this->sharedOobdManager;
 | |
|   }
 | |
| 
 | |
|   function setSharedOobdManager(IOobdManager $sharedOobdManager): self {
 | |
|     $this->sharedOobdManager = $sharedOobdManager;
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   function ensureSharedOobdManager(): void {
 | |
|     if ($this->sharedOobdManager === null) {
 | |
|       $this->sharedOobdManager = new OobdManager();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   protected $oobdValues;
 | |
| 
 | |
|   protected function _hasOobdValue(string $name): bool {
 | |
|     return A::has($this->oobdValues, $name);
 | |
|   }
 | |
| 
 | |
|   protected function _getOobdValue(string $name, $default) {
 | |
|     return A::get($this->oobdValues, $name, $default);
 | |
|   }
 | |
| 
 | |
|   protected function _setOobdValue(string $name, $value): void {
 | |
|     $this->oobdValues[$name] = $value;
 | |
|   }
 | |
| 
 | |
|   protected function _unsetOobdValue(string $name): void {
 | |
|     unset($this->oobdValues[$name]);
 | |
|   }
 | |
| 
 | |
|   function hasOvalue(string $name): bool {
 | |
|     if ($this->_hasOobdValue($name)) {
 | |
|       return true;
 | |
|     } elseif ($this->sharedOobdManager !== null
 | |
|       && $this->sharedOobdManager->hasOvalue($name)) {
 | |
|       return true;
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   function getOvalue(string $name, $default=null) {
 | |
|     if ($this->_hasOobdValue($name)) {
 | |
|       return $this->_getOobdValue($name, $default);
 | |
|     } elseif ($this->sharedOobdManager !== null
 | |
|       && $this->sharedOobdManager->hasOvalue($name)) {
 | |
|       return $this->sharedOobdManager->getOvalue($name, $default);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   function setOvalue(string $name, $value, bool $shared=true) {
 | |
|     if ($shared && $this->sharedOobdManager !== null) {
 | |
|       return $this->sharedOobdManager->setOvalue($name, $value, false);
 | |
|     } else {
 | |
|       $oldValue = $this->_getOobdValue($name, null);
 | |
|       if (is_bool($value) && $oldValue === true) {
 | |
|         $value = $oldValue;
 | |
|       } else {
 | |
|         $this->_setOobdValue($name, $value);
 | |
|       }
 | |
|       return $value;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   function incOvalue(string $name, bool $shared=true): int {
 | |
|     if ($shared && $this->sharedOobdManager !== null) {
 | |
|       return $this->sharedOobdManager->incOvalue($name, false);
 | |
|     } else {
 | |
|       $value = intval($this->_getOobdValue($name, 0)) + 1;
 | |
|       $this->_setOobdValue($name, $value);
 | |
|       return $value;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   function decOvalue(string $name, bool $shared=true): int {
 | |
|     if ($shared && $this->sharedOobdManager !== null) {
 | |
|       return $this->sharedOobdManager->incOvalue($name, false);
 | |
|     } else {
 | |
|       $value = intval($this->_getOobdValue($name, 0)) - 1;
 | |
|       $this->_setOobdValue($name, $value);
 | |
|       return $value;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   function resetOvalue(string $name, $value=null, bool $shared=true) {
 | |
|     if ($shared && $this->sharedOobdManager !== null) {
 | |
|       return $this->sharedOobdManager->resetOvalue($name, $value, false);
 | |
|     } else {
 | |
|       if ($value === null) $this->_unsetOobdValue($name);
 | |
|       else $this->_setOobdValue($name, $value);
 | |
|       return $value;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   function setUseKeysForItemMarked(?array $keys, ?string $prefix=null): void {
 | |
|     mark_utils::set_use_keys_for_item_marked($this, $keys, $prefix);
 | |
|   }
 | |
| 
 | |
|   function setItemMarked($item, ?string $prefix=null, bool $shared=true): void {
 | |
|     mark_utils::set_item_marked($this, $item, $prefix, $shared);
 | |
|   }
 | |
| 
 | |
|   function isItemMarked($item, ?string $prefix=null): bool {
 | |
|     return mark_utils::is_item_marked($this, $item, $prefix);
 | |
|   }
 | |
| }
 |