table_name = $wpdb->prefix . 'sodino_banners'; } public function getAll() { global $wpdb; $results = $wpdb->get_results("SELECT * FROM {$this->table_name} ORDER BY priority DESC, id ASC", ARRAY_A); $banners = []; foreach ($results as $result) { $banners[] = new Banner($result); } return $banners; } public function getById($id) { global $wpdb; $result = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$this->table_name} WHERE id = %d", $id), ARRAY_A); return $result ? new Banner($result) : null; } public function getEnabled() { global $wpdb; $results = $wpdb->get_results("SELECT * FROM {$this->table_name} WHERE status = 1 ORDER BY priority DESC, id ASC", ARRAY_A); $banners = []; foreach ($results as $result) { $banners[] = new Banner($result); } return $banners; } public function save(Banner $banner) { global $wpdb; $data = $banner->toArray(); unset($data['id'], $data['created_at']); if ($banner->id) { $result = $wpdb->update($this->table_name, $data, ['id' => $banner->id]); if ($result === false) { return false; } $this->clearCache(); return $banner->id; } $result = $wpdb->insert($this->table_name, $data); if ($result === false) { return false; } $this->clearCache(); return $wpdb->insert_id; } public function delete($id) { global $wpdb; $result = $wpdb->delete($this->table_name, ['id' => $id]); $this->clearCache(); return $result; } public function incrementImpression($id) { global $wpdb; $wpdb->query($wpdb->prepare("UPDATE {$this->table_name} SET impressions = impressions + 1 WHERE id = %d", $id)); $this->clearCache(); } public function incrementClick($id) { global $wpdb; $wpdb->query($wpdb->prepare("UPDATE {$this->table_name} SET clicks = clicks + 1 WHERE id = %d", $id)); $this->clearCache(); } public function clearCache() { $version = microtime(true); update_option('sodino_banners_cache_version', $version, false); wp_cache_set('version', $version, 'sodino_banners'); if (function_exists('wp_cache_flush_group')) { wp_cache_flush_group('sodino_banners'); } } }