diff --git a/src/Core/NoteScope.php b/src/Core/NoteScope.php index f545646254..48efc0422d 100644 --- a/src/Core/NoteScope.php +++ b/src/Core/NoteScope.php @@ -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; diff --git a/src/Core/UserRoles.php b/src/Core/UserRoles.php index a3c6ba2486..ec2db38269 100644 --- a/src/Core/UserRoles.php +++ b/src/Core/UserRoles.php @@ -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; diff --git a/src/Util/Bitmap.php b/src/Util/Bitmap.php index 7b4ba7f4ac..d84f698272 100644 --- a/src/Util/Bitmap.php +++ b/src/Util/Bitmap.php @@ -25,20 +25,31 @@ 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(); - $vals = []; + 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; - $vals[] = $class::PREFIX . $c; + if (!$instance) { + $vals[] = $class::PREFIX . $c; + } } } @@ -47,6 +58,20 @@ abstract class Bitmap throw new ServerException("Bug in bitmap conversion for class {$class} from value {$init}"); } - return $vals; + 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); } }