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\Factories\HasFactory;
10 use Illuminate\Database\Eloquent\Model;
11 use Illuminate\Database\Eloquent\Relations\HasMany;
15 * @property string $name
16 * @property string $sequence
17 * @property Carbon $created_at
18 * @property Carbon $updated_at
20 class SortRule extends Model implements Loggable
25 * @return SortRuleOperation[]
27 public function getOperations(): array
29 return SortRuleOperation::fromSequence($this->sequence);
33 * @param SortRuleOperation[] $options
35 public function setOperations(array $options): void
37 $values = array_map(fn (SortRuleOperation $opt) => $opt->value, $options);
38 $this->sequence = implode(',', $values);
41 public function logDescriptor(): string
43 return "({$this->id}) {$this->name}";
46 public function getUrl(): string
48 return url("/settings/sorting/rules/{$this->id}");
51 public function books(): HasMany
53 return $this->hasMany(Book::class);
56 public static function allByName(): Collection
58 return static::query()
60 ->orderBy('name', 'asc')