nur-sery/nur_src/mapper/base/oobd/TOobdManager.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);
}
}