49 lines
1.6 KiB
PHP
49 lines
1.6 KiB
PHP
<?php
|
|
namespace nur\mapper\base;
|
|
|
|
use nur\A;
|
|
use nur\mapper\base\oobd\IOobdManager;
|
|
|
|
class mark_utils {
|
|
static function compute($item, ?array $keys): string {
|
|
$item = A::with($item);
|
|
if ($keys === null) $keys = array_keys($item);
|
|
$parts = [];
|
|
foreach ($keys as $key) {
|
|
$part = A::get($item, $key);
|
|
if (is_array($part)) {
|
|
$part = "[".self::compute($part, null)."]";
|
|
} else {
|
|
$part = strval($part);
|
|
}
|
|
$parts[] = $part;
|
|
}
|
|
return sha1(implode("|", $parts));
|
|
}
|
|
|
|
static function set_use_marks(IOobdManager $manager, ?string $prefix=null, bool $shared=true): void {
|
|
$manager->setOvalue("mark:$prefix:have_marks", true, $shared);
|
|
}
|
|
|
|
static function is_use_marks(IOobdManager $manager, ?string $prefix=null): bool {
|
|
return boolval($manager->getOvalue("mark:$prefix:have_marks"));
|
|
}
|
|
|
|
static function set_use_keys_for_item_marked(IOobdManager $manager, ?array $keys, ?string $prefix=null): void {
|
|
$manager->setOvalue("mark:$prefix:keys", $keys);
|
|
}
|
|
|
|
static function set_item_marked(IOobdManager $manager, $item, ?string $prefix=null, bool $shared=true): void {
|
|
$keys = $manager->getOvalue("mark:$prefix:keys");
|
|
$mark = self::compute($item, $keys);
|
|
$manager->setOvalue("mark:$prefix:marks:$mark", true, $shared);
|
|
$manager->setOvalue("mark:$prefix:have_marks", true, $shared);
|
|
}
|
|
|
|
static function is_item_marked(IOobdManager $manager, $item, ?string $prefix=null): bool {
|
|
$keys = $manager->getOvalue("mark:$prefix:keys");
|
|
$mark = self::compute($item, $keys);
|
|
return boolval($manager->getOvalue("mark:$prefix:marks:$mark"));
|
|
}
|
|
}
|