table_name = $wpdb->prefix . 'sodino_events'; } public function insert(array $data) { global $wpdb; return $wpdb->insert($this->table_name, $data); } public function getEvents(array $filters = []) { global $wpdb; $params = []; $where = $this->buildWhereClauses($filters, $params); $sql = "SELECT * FROM {$this->table_name} WHERE " . implode(' AND ', $where) . " ORDER BY created_at ASC"; return $wpdb->get_results($wpdb->prepare($sql, $params), ARRAY_A); } public function getCount(array $filters = []) { global $wpdb; $params = []; $where = $this->buildWhereClauses($filters, $params); $sql = "SELECT COUNT(*) FROM {$this->table_name} WHERE " . implode(' AND ', $where); return (int) $wpdb->get_var($wpdb->prepare($sql, $params)); } public function getSum($field, array $filters = []) { global $wpdb; if (!in_array($field, ['value', 'discount_value'], true)) { return 0; } $params = []; $where = $this->buildWhereClauses($filters, $params); $sql = "SELECT SUM({$field}) FROM {$this->table_name} WHERE " . implode(' AND ', $where); return floatval($wpdb->get_var($wpdb->prepare($sql, $params))); } public function getRuleUsageCount($rule_id) { global $wpdb; return (int) $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM {$this->table_name} WHERE event_type = %s AND rule_id = %d", 'discount_applied', $rule_id )); } private function buildWhereClauses(array $filters, array &$params) { $where = ['1=1']; if (!empty($filters['event_type'])) { if (is_array($filters['event_type'])) { $placeholders = implode(', ', array_fill(0, count($filters['event_type']), '%s')); $where[] = "event_type IN ($placeholders)"; $params = array_merge($params, $filters['event_type']); } else { $where[] = 'event_type = %s'; $params[] = $filters['event_type']; } } if (!empty($filters['product_ids'])) { $ids = array_map('intval', (array) $filters['product_ids']); $placeholders = implode(', ', array_fill(0, count($ids), '%d')); $where[] = "product_id IN ($placeholders)"; $params = array_merge($params, $ids); } if (!empty($filters['rule_id'])) { $where[] = 'rule_id = %d'; $params[] = intval($filters['rule_id']); } if (!empty($filters['from'])) { $where[] = 'created_at >= %s'; $params[] = $filters['from']; } if (!empty($filters['to'])) { $where[] = 'created_at <= %s'; $params[] = $filters['to']; } return $where; } }