- Implemented a new Banner model to represent banner data. - Created a BannerRepository for database interactions related to banners. - Developed a BannerService to handle business logic for banners. - Added admin views for listing and adding banners. - Integrated banner hooks for frontend rendering and click tracking. - Created frontend styles and scripts for banner display and interaction. - Updated database migrations to include a new banners table. - Enhanced AdminController to manage banner actions and pages.
102 lines
3.6 KiB
PHP
102 lines
3.6 KiB
PHP
<?php
|
|
// Prevent direct access
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Database migrations for Sodino plugin
|
|
*/
|
|
|
|
function sodino_create_tables() {
|
|
global $wpdb;
|
|
|
|
$charset_collate = $wpdb->get_charset_collate();
|
|
|
|
// Rules table
|
|
$rules_table = $wpdb->prefix . 'sodino_rules';
|
|
$rules_sql = "CREATE TABLE $rules_table (
|
|
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
|
name varchar(255) NOT NULL,
|
|
conditions longtext NOT NULL,
|
|
actions longtext NOT NULL,
|
|
priority int(11) NOT NULL DEFAULT 10,
|
|
usage_limit int(11) NOT NULL DEFAULT 0,
|
|
user_roles varchar(255) DEFAULT '',
|
|
start_date datetime NULL,
|
|
end_date datetime NULL,
|
|
enabled tinyint(1) DEFAULT 1,
|
|
condition_type varchar(100) DEFAULT NULL,
|
|
condition_value varchar(255) DEFAULT NULL,
|
|
action_type varchar(100) DEFAULT NULL,
|
|
action_value varchar(255) DEFAULT NULL,
|
|
created_at datetime DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id)
|
|
) $charset_collate;";
|
|
|
|
// Events table
|
|
$events_table = $wpdb->prefix . 'sodino_events';
|
|
$events_sql = "CREATE TABLE $events_table (
|
|
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
|
event_type varchar(100) NOT NULL,
|
|
product_id mediumint(9) DEFAULT NULL,
|
|
variation_id mediumint(9) DEFAULT NULL,
|
|
user_id bigint(20) DEFAULT NULL,
|
|
session_id varchar(255) DEFAULT NULL,
|
|
rule_id mediumint(9) DEFAULT NULL,
|
|
value decimal(10,2) DEFAULT 0,
|
|
discount_value decimal(10,2) DEFAULT 0,
|
|
metadata longtext DEFAULT NULL,
|
|
created_at datetime DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id)
|
|
) $charset_collate;";
|
|
|
|
// Upsell table
|
|
$upsell_table = $wpdb->prefix . 'sodino_upsells';
|
|
$upsell_sql = "CREATE TABLE $upsell_table (
|
|
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
|
title varchar(255) NOT NULL,
|
|
trigger_type varchar(50) NOT NULL,
|
|
trigger_value varchar(255) NOT NULL,
|
|
target_product_id bigint(20) NOT NULL DEFAULT 0,
|
|
discount_type varchar(50) DEFAULT 'percentage',
|
|
discount_value decimal(10,2) DEFAULT 0,
|
|
status tinyint(1) DEFAULT 1,
|
|
priority int(11) NOT NULL DEFAULT 10,
|
|
created_at datetime DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id)
|
|
) $charset_collate;";
|
|
|
|
// Banner table
|
|
$banner_table = $wpdb->prefix . 'sodino_banners';
|
|
$banner_sql = "CREATE TABLE $banner_table (
|
|
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
|
title varchar(255) NOT NULL,
|
|
content_type varchar(50) NOT NULL DEFAULT 'image',
|
|
content_value longtext NOT NULL,
|
|
link_url varchar(255) DEFAULT NULL,
|
|
position varchar(50) NOT NULL DEFAULT 'top',
|
|
display_type varchar(50) NOT NULL DEFAULT 'inline',
|
|
start_time datetime DEFAULT NULL,
|
|
end_time datetime DEFAULT NULL,
|
|
user_target varchar(50) NOT NULL DEFAULT 'all',
|
|
device_target varchar(50) NOT NULL DEFAULT 'all',
|
|
priority int(11) NOT NULL DEFAULT 10,
|
|
status tinyint(1) NOT NULL DEFAULT 1,
|
|
impressions bigint(20) NOT NULL DEFAULT 0,
|
|
clicks bigint(20) NOT NULL DEFAULT 0,
|
|
created_at datetime DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id)
|
|
) $charset_collate;";
|
|
|
|
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
|
dbDelta($rules_sql);
|
|
dbDelta($events_sql);
|
|
dbDelta($upsell_sql);
|
|
dbDelta($banner_sql);
|
|
|
|
// Add version option
|
|
update_option('sodino_db_version', '1.3');
|
|
} |