3 namespace BookStack\Sorting;
5 use BookStack\Activity\Models\Loggable;
6 use BookStack\Entities\Models\Book;
8 use Illuminate\Database\Eloquent\Collection;
9 use Illuminate\Database\Eloquent\Model;
10 use Illuminate\Database\Eloquent\Relations\HasMany;
14 * @property string $name
15 * @property string $sequence
16 * @property Carbon $created_at
17 * @property Carbon $updated_at
19 class SortSet extends Model implements Loggable
22 * @return SortSetOperation[]
24 public function getOperations(): array
26 return SortSetOperation::fromSequence($this->sequence);
30 * @param SortSetOperation[] $options
32 public function setOperations(array $options): void
34 $values = array_map(fn (SortSetOperation $opt) => $opt->value, $options);
35 $this->sequence = implode(',', $values);
38 public function logDescriptor(): string
40 return "({$this->id}) {$this->name}";
43 public function getUrl(): string
45 return url("/settings/sorting/sets/{$this->id}");
48 public function books(): HasMany
50 return $this->hasMany(Book::class);
53 public static function allByName(): Collection
55 return static::query()
57 ->orderBy('name', 'asc')