$args */ public static function allowsChange(string $ability, array $args): bool { if ($ability === self::UNDO) { $entry = Journal::get((int) ($args['id'] ?? 0)); return $entry !== null && in_array((string) $entry['ability'], self::WRITES, true); } return in_array($ability, self::WRITES, true); } public static function catalog(): array { $out = []; $disabled = Catalog::disabled(); foreach (Catalog::all() as $ability) { if (self::allows($ability->name) && !in_array($ability->name, $disabled, true) && $ability->allowed([])) { $out[] = $ability->describe(); } } return $out; } public static function begin(): void { if (self::$active) { return; } self::$active = true; add_filter('user_has_cap', [self::class, 'limit'], PHP_INT_MAX); } public static function end(): void { if (!self::$active) { return; } self::$active = false; remove_filter('user_has_cap', [self::class, 'limit'], PHP_INT_MAX); } public static function active(): bool { return self::$active; } /** * @param array $allcaps * @return array */ public static function limit(mixed $allcaps): array { $caps = is_array($allcaps) ? $allcaps : []; foreach (self::DENIED_CAPABILITIES as $capability) { $caps[$capability] = false; } return $caps; } }