94 lines
2.6 KiB
PHP
94 lines
2.6 KiB
PHP
<?php
|
|
namespace Sodino\Repositories;
|
|
|
|
use Sodino\Models\Banner;
|
|
|
|
/**
|
|
* Banner Repository
|
|
*/
|
|
class BannerRepository {
|
|
private $table_name;
|
|
|
|
public function __construct() {
|
|
global $wpdb;
|
|
$this->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;
|
|
return $wpdb->query($wpdb->prepare("UPDATE {$this->table_name} SET impressions = impressions + 1 WHERE id = %d", $id));
|
|
}
|
|
|
|
public function incrementClick($id) {
|
|
global $wpdb;
|
|
return $wpdb->query($wpdb->prepare("UPDATE {$this->table_name} SET clicks = clicks + 1 WHERE id = %d", $id));
|
|
}
|
|
|
|
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');
|
|
}
|
|
}
|
|
}
|