. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Select\Order; use Espo\Core\Select\SearchParams; use InvalidArgumentException; /** * Order parameters. * * @immutable */ class Params { //private bool $forbidComplexExpressions = false; private bool $forceDefault = false; /** @var mixed */ private $orderBy = null; /** @var SearchParams::ORDER_ASC|SearchParams::ORDER_DESC|null */ private $order = null; private function __construct() {} /** * @param array{ * forceDefault?: bool, * orderBy?: ?string, * order?: SearchParams::ORDER_ASC|SearchParams::ORDER_DESC|null, * } $params */ public static function fromAssoc(array $params): self { $object = new self(); //$object->forbidComplexExpressions = $params['forbidComplexExpressions'] ?? false; $object->forceDefault = $params['forceDefault'] ?? false; $object->orderBy = $params['orderBy'] ?? null; $object->order = $params['order'] ?? null; foreach ($params as $key => $value) { if (!property_exists($object, $key)) { throw new InvalidArgumentException("Unknown parameter '{$key}'."); } } if ($object->orderBy && !is_string($object->orderBy)) { throw new InvalidArgumentException("Bad orderBy."); } /** @var ?string $order */ $order = $object->order; if ( $order && $order !== SearchParams::ORDER_ASC && $order !== SearchParams::ORDER_DESC ) { throw new InvalidArgumentException("Bad order."); } return $object; } /*public function forbidComplexExpressions(): bool { return $this->forbidComplexExpressions; }*/ /** * Force default order. */ public function forceDefault(): bool { return $this->forceDefault; } /** * An order-By field. */ public function getOrderBy(): ?string { /** @var ?string */ return $this->orderBy; } /** * An order direction. * * @return SearchParams::ORDER_ASC|SearchParams::ORDER_DESC|null */ public function getOrder(): ?string { return $this->order; } }