saveController = ContainerWrapper::getInstance()->get(SegmentSaveController::class); } public function withUserRoleFilter($role) { $this->filterData['segmentType'] = 'userRole'; $this->filterData['wordpressRole'] = $role; return $this; } public function withWooCommerceProductFilter($productId) { $this->filterData['segmentType'] = 'woocommerce'; $this->filterData['action'] = 'purchasedProduct'; $this->filterData['product_id'] = $productId; return $this; } public function withWooCommerceCategoryFilter($categoryId) { $this->filterData['segmentType'] = 'woocommerce'; $this->filterData['action'] = 'purchasedCategory'; $this->filterData['category_id'] = $categoryId; return $this; } public function withWooCommerceNumberOfOrdersFilter() { $this->filterData['segmentType'] = 'woocommerce'; $this->filterData['action'] = 'numberOfOrders'; $this->filterData['number_of_orders_type'] = '='; $this->filterData['number_of_orders_count'] = '1'; $this->filterData['number_of_orders_days'] = '1'; return $this; } public function withWooCommerceTotalSpentFilter(float $amount = 9, int $days = 1) { $this->filterData['segmentType'] = 'woocommerce'; $this->filterData['action'] = 'totalSpent'; $this->filterData['total_spent_type'] = '>'; $this->filterData['total_spent_amount'] = $amount; $this->filterData['total_spent_days'] = $days; return $this; } public function withWooCommerceCustomerCountryFilter(string $countryCode = 'FR') { $this->filterData['segmentType'] = 'woocommerce'; $this->filterData['action'] = 'customerInCountry'; $this->filterData['country_code'] = $countryCode; return $this; } public function create(): SegmentEntity { if (empty($this->filterData['segmentType'])) { $this->withUserRoleFilter('editor'); } $segment = $this->saveController->save(array_merge($this->data, $this->filterData)); if (($this->data['deleted_at'] ?? null) instanceof \DateTimeInterface) { $segment->setDeletedAt($this->data['deleted_at']); $this->entityManager->flush(); } return $segment; } }