value; $label = ''; if (str_ends_with($key, '_asc')) { $key = substr($key, 0, -4); $label = trans('settings.sort_rule_op_asc'); } elseif (str_ends_with($key, '_desc')) { $key = substr($key, 0, -5); $label = trans('settings.sort_rule_op_desc'); } $label = trans('settings.sort_rule_op_' . $key) . ' ' . $label; return trim($label); } public function getSortFunction(): callable { $camelValue = Str::camel($this->value); return SortSetOperationComparisons::$camelValue(...); } /** * @return SortRuleOperation[] */ public static function allExcluding(array $operations): array { $all = SortRuleOperation::cases(); $filtered = array_filter($all, function (SortRuleOperation $operation) use ($operations) { return !in_array($operation, $operations); }); return array_values($filtered); } /** * Create a set of operations from a string sequence representation. * (values seperated by commas). * @return SortRuleOperation[] */ public static function fromSequence(string $sequence): array { $strOptions = explode(',', $sequence); $options = array_map(fn ($val) => SortRuleOperation::tryFrom($val), $strOptions); return array_filter($options); } }