src/Enum/Admin/RolesEnum.php line 7

  1. <?php
  2. namespace App\Enum\Admin;
  3. use App\Enum\Common\EnumToArray;
  4. enum RolesEnumstring
  5. {
  6.     use EnumToArray;
  7.     case ROLE_SUPER_ADMIN 'ROLE_SUPER_ADMIN';
  8.     case ROLE_ADMIN 'ROLE_ADMIN';
  9.     case ROLE_USER 'ROLE_USER';
  10.     public function weight(): int
  11.     {
  12.         return match($this) {
  13.             self::ROLE_SUPER_ADMIN => 1000,
  14.             self::ROLE_ADMIN => 100,
  15.             self::ROLE_USER => 10,
  16.         };
  17.     }
  18.     public static function sortTextRoles(array &$textRoles): void
  19.     {
  20.         usort($textRoles, static function (string $textRole1string $textRole2) {
  21.             $role1 self::tryFrom($textRole1);
  22.             $role2 self::tryFrom($textRole2);
  23.             if ($role1 === null && $role2 === null) {
  24.                 return strcmp($textRole1$textRole2);
  25.             }
  26.             if ($role1 === null) {
  27.                 return 1;
  28.             }
  29.             if ($role2 === null) {
  30.                 return -1;
  31.             }
  32.             if ($role1->weight() < $role2->weight()) {
  33.                 return -1;
  34.             }
  35.             if ($role1->weight() > $role2->weight()) {
  36.                 return 1;
  37.             }
  38.             return 0;
  39.         });
  40.     }
  41. }