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);
 | 
						|
  }
 | 
						|
}
 |