filterType = $filterType; $this->action = $action; $this->filterData = $filterData; } public function getData(): ?array { return $this->filterData; } /** * @return mixed|null */ public function getParam(string $name) { return $this->filterData[$name] ?? null; } public function getStringParam(string $name): string { $value = $this->filterData[$name] ?? null; if (!is_string($value)) { throw new InvalidStateException("No string value found in filter data for param $name."); } return $value; } public function getIntParam(string $name): int { $value = $this->filterData[$name] ?? null; if (is_int($value)) { return $value; } if (is_string($value)) { return (int)($value); } throw new InvalidStateException("No compatible integer value found in filter data for param $name."); } public function getArrayParam(string $name): array { $value = $this->getParam($name); if (!is_array($value)) { throw new InvalidStateException("No array value found in filter data for param $name."); } return $value; } public function getFilterType(): ?string { if ($this->filterType) { return $this->filterType; } // When a new column is empty, we try to get the value from serialized data return $this->filterData['segmentType'] ?? null; } public function getAction(): ?string { if ($this->action) { return $this->action; } // When a new column is empty, we try to get the value from serialized data // BC compatibility, the wordpress user role segment didn't have action if ($this->getFilterType() === self::TYPE_USER_ROLE && !isset($this->filterData['action'])) { return UserRole::TYPE; } return $this->filterData['action'] ?? null; } public function getOperator(): ?string { $operator = $this->filterData['operator'] ?? null; if (!$operator) { return $this->getDefaultOperator(); } return $operator; } private function getDefaultOperator(): ?string { if ($this->getFilterType() === self::TYPE_WOOCOMMERCE && $this->getAction() === WooCommerceProduct::ACTION_PRODUCT) { return self::OPERATOR_ANY; } return null; } }