92 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace BookStack\Activity;
 | |
| 
 | |
| use BookStack\Entities\Models\Bookshelf;
 | |
| use BookStack\Entities\Models\Entity;
 | |
| use BookStack\Entities\Models\Page;
 | |
| 
 | |
| class WatchLevels
 | |
| {
 | |
|     /**
 | |
|      * Default level, No specific option set
 | |
|      * Typically not a stored status
 | |
|      */
 | |
|     const DEFAULT = -1;
 | |
| 
 | |
|     /**
 | |
|      * Ignore all notifications.
 | |
|      */
 | |
|     const IGNORE = 0;
 | |
| 
 | |
|     /**
 | |
|      * Watch for new content.
 | |
|      */
 | |
|     const NEW = 1;
 | |
| 
 | |
|     /**
 | |
|      * Watch for updates and new content
 | |
|      */
 | |
|     const UPDATES = 2;
 | |
| 
 | |
|     /**
 | |
|      * Watch for comments, updates and new content.
 | |
|      */
 | |
|     const COMMENTS = 3;
 | |
| 
 | |
|     /**
 | |
|      * Get all the possible values as an option_name => value array.
 | |
|      * @returns array<string, int>
 | |
|      */
 | |
|     public static function all(): array
 | |
|     {
 | |
|         $options = [];
 | |
|         foreach ((new \ReflectionClass(static::class))->getConstants() as $name => $value) {
 | |
|             $options[strtolower($name)] = $value;
 | |
|         }
 | |
| 
 | |
|         return $options;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the watch options suited for the given entity.
 | |
|      * @returns array<string, int>
 | |
|      */
 | |
|     public static function allSuitedFor(Entity $entity): array
 | |
|     {
 | |
|         $options = static::all();
 | |
| 
 | |
|         if ($entity instanceof Page) {
 | |
|             unset($options['new']);
 | |
|         } elseif ($entity instanceof Bookshelf) {
 | |
|             return [];
 | |
|         }
 | |
| 
 | |
|         return $options;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Convert the given name to a level value.
 | |
|      * Defaults to default value if the level does not exist.
 | |
|      */
 | |
|     public static function levelNameToValue(string $level): int
 | |
|     {
 | |
|         return static::all()[$level] ?? static::DEFAULT;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Convert the given int level value to a level name.
 | |
|      * Defaults to 'default' level name if not existing.
 | |
|      */
 | |
|     public static function levelValueToName(int $level): string
 | |
|     {
 | |
|         foreach (static::all() as $name => $value) {
 | |
|             if ($level === $value) {
 | |
|                 return $name;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return 'default';
 | |
|     }
 | |
| }
 |