[UTIL] Update bitmap base class, making using easier
This commit is contained in:
parent
a248f23cef
commit
ffcf909bda
@ -21,7 +21,7 @@ namespace App\Core;
|
||||
|
||||
use App\Util\Bitmap;
|
||||
|
||||
abstract class NoteScope extends Bitmap
|
||||
class NoteScope extends Bitmap
|
||||
{
|
||||
public const PUBLIC = 1;
|
||||
public const SITE = 2;
|
||||
|
@ -32,7 +32,7 @@ namespace App\Core;
|
||||
|
||||
use App\Util\Bitmap;
|
||||
|
||||
abstract class UserRoles extends Bitmap
|
||||
class UserRoles extends Bitmap
|
||||
{
|
||||
public const ADMIN = 1;
|
||||
public const MODERATOR = 2;
|
||||
|
@ -25,28 +25,53 @@ abstract class Bitmap
|
||||
{
|
||||
public static $consts = null;
|
||||
|
||||
public static function bitmapToStrings(int $r): array
|
||||
public static function _do(int $r, bool $instance)
|
||||
{
|
||||
$init = $r;
|
||||
$class = get_called_class();
|
||||
if ($instance) {
|
||||
$obj = new $class;
|
||||
} else {
|
||||
$vals = [];
|
||||
}
|
||||
|
||||
if (self::$consts == null) {
|
||||
self::$consts = (new \ReflectionClass($class))->getConstants();
|
||||
unset(self::$consts['PREFIX']);
|
||||
}
|
||||
|
||||
foreach (self::$consts as $c => $v) {
|
||||
if (($r & $v) !== 0) {
|
||||
$b = ($r & $v) !== 0;
|
||||
if ($instance) {
|
||||
$obj->{$c} = $b;
|
||||
}
|
||||
if ($b) {
|
||||
$r -= $v;
|
||||
if (!$instance) {
|
||||
$vals[] = $class::PREFIX . $c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($r != 0) {
|
||||
Log::error('Bitmap to array conversion failed');
|
||||
throw new ServerException("Bug in bitmap conversion for class {$class} from value {$init}");
|
||||
}
|
||||
|
||||
if ($instance) {
|
||||
return $obj;
|
||||
} else {
|
||||
return $vals;
|
||||
}
|
||||
}
|
||||
|
||||
public static function create(int $r): self
|
||||
{
|
||||
return self::_do($r, true);
|
||||
}
|
||||
|
||||
public static function toArray(int $r): array
|
||||
{
|
||||
return self::_do($r, false);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user