This commit is contained in:
1 parent
d77be150d9
commit
5210c9d2e6
11 files changed
+732
-284
No files matched your search
+203
-142
@@ -105,6 +105,12 @@ class WheelOfFortune {
|
||||
add_action('plugins_loaded', array($this, 'load_textdomain'));
|
||||
register_activation_hook(WHEEL_OF_FORTUNE_PLUGIN_FILE, array($this, 'activate'));
|
||||
register_deactivation_hook(WHEEL_OF_FORTUNE_PLUGIN_FILE, array($this, 'deactivate'));
|
||||
|
||||
// --- CRON: filter in akcija vedno aktivna ---
|
||||
add_filter('cron_schedules', array($this, 'add_custom_cron_schedules'));
|
||||
add_action('wof_daily_spin_event', array($this, 'execute_daily_spin_cron'));
|
||||
// ------------------------------------------
|
||||
|
||||
add_action('admin_menu', array($this, 'admin_menu'));
|
||||
add_action('rest_api_init', array($this, 'register_rest_routes'));
|
||||
add_shortcode('wheel_of_fortune', array($this, 'shortcode'));
|
||||
@@ -125,8 +131,10 @@ class WheelOfFortune {
|
||||
add_action('wp_ajax_wheel_get_product', array($this, 'ajax_get_product'));
|
||||
add_action('wp_ajax_wheel_test_email', array($this, 'ajax_test_email'));
|
||||
add_action('wp_ajax_wheel_get_prizes', array($this, 'ajax_get_prizes'));
|
||||
add_action('wp_ajax_ajax_update_wheel_product_spins', array($this, 'ajax_update_wheel_product_spins'));
|
||||
add_action('wp_ajax_wof_delete_wheel_product', array($this, 'ajax_delete_wheel_product'));
|
||||
add_action('wp_ajax_wof_update_wheel_product_spins', array($this, 'ajax_update_wheel_product_spins'));
|
||||
add_action('wp_ajax_wheel_migrate_try_again', array($this, 'ajax_migrate_try_again'));
|
||||
add_action('wp_ajax_wheel_reset_spins_wheel', array($this, 'ajax_reset_spins_wheel'));
|
||||
|
||||
// Vključi testno skripto za kupone
|
||||
if (is_admin()) {
|
||||
@@ -226,35 +234,22 @@ class WheelOfFortune {
|
||||
}
|
||||
|
||||
public function activate() {
|
||||
error_log("Wheel of Fortune: Aktivacija plugina...");
|
||||
$this->create_database_tables();
|
||||
$this->run_migration();
|
||||
$this->set_default_options();
|
||||
$this->add_default_prizes();
|
||||
|
||||
// Debug: Preveri, ali se tabela za kolesa ustvari
|
||||
global $wpdb;
|
||||
$wheels_table = $wpdb->prefix . 'wof_wheels';
|
||||
$wheel_products_table = $wpdb->prefix . 'wheel_of_fortune_products';
|
||||
|
||||
$wheels_exists = $wpdb->get_var("SHOW TABLES LIKE '$wheels_table'") == $wheels_table;
|
||||
$products_exists = $wpdb->get_var("SHOW TABLES LIKE '$wheel_products_table'") == $wheel_products_table;
|
||||
|
||||
error_log("=== ACTIVATION DEBUG ===");
|
||||
error_log("Wheels table exists: " . ($wheels_exists ? 'YES' : 'NO'));
|
||||
error_log("Products table exists: " . ($products_exists ? 'YES' : 'NO'));
|
||||
|
||||
if (!$wheels_exists) {
|
||||
error_log('Wheel of Fortune: Wheels table was not created properly during activation.');
|
||||
} else {
|
||||
error_log('Wheel of Fortune: Wheels table created successfully.');
|
||||
// Dodaj cron opravilo za dnevne spine
|
||||
if (!wp_next_scheduled('wheel_daily_spins_cron')) {
|
||||
wp_schedule_event(time(), 'wheel_daily', 'wheel_daily_spins_cron');
|
||||
}
|
||||
|
||||
flush_rewrite_rules();
|
||||
error_log("Wheel of Fortune: Aktivacija končana.");
|
||||
// Izvedi migracijo za is_try_again stolpec
|
||||
$this->migrate_add_is_try_again_column();
|
||||
}
|
||||
|
||||
public function deactivate() {
|
||||
wp_clear_scheduled_hook('wof_daily_spin_event');
|
||||
error_log("Wheel of Fortune: Cron job 'wof_daily_spin_event' cleared.");
|
||||
flush_rewrite_rules();
|
||||
}
|
||||
|
||||
@@ -296,7 +291,6 @@ class WheelOfFortune {
|
||||
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
name varchar(255) NOT NULL,
|
||||
slug varchar(100) NOT NULL,
|
||||
has_daily_spin tinyint(1) NOT NULL DEFAULT 0,
|
||||
created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY slug (slug)
|
||||
@@ -320,7 +314,6 @@ class WheelOfFortune {
|
||||
name varchar(255) NOT NULL,
|
||||
description text DEFAULT '',
|
||||
probability float NOT NULL,
|
||||
daily_spin_probability float DEFAULT NULL,
|
||||
is_active tinyint(1) NOT NULL DEFAULT 1,
|
||||
image_url varchar(255) DEFAULT '',
|
||||
email_subject varchar(255) DEFAULT '',
|
||||
@@ -328,6 +321,7 @@ class WheelOfFortune {
|
||||
redemption_code varchar(100) DEFAULT '',
|
||||
is_discount tinyint(1) NOT NULL DEFAULT 0,
|
||||
discount_value float DEFAULT 0,
|
||||
is_try_again tinyint(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (id),
|
||||
KEY wheel_id (wheel_id)
|
||||
) $charset_collate;";
|
||||
@@ -387,6 +381,29 @@ class WheelOfFortune {
|
||||
} else {
|
||||
error_log("Wheel of Fortune: Tabela $wheel_products_table uspešno ustvarjena.");
|
||||
}
|
||||
|
||||
// Migracija: dodaj stolpec is_try_again v obstoječe tabele
|
||||
$this->migrate_add_is_try_again_column();
|
||||
}
|
||||
|
||||
private function migrate_add_is_try_again_column() {
|
||||
global $wpdb;
|
||||
$table_prizes = $wpdb->prefix . 'wheel_prizes';
|
||||
|
||||
// Preveri, če stolpec is_try_again že obstaja
|
||||
$column_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_prizes LIKE 'is_try_again'");
|
||||
|
||||
if (empty($column_exists)) {
|
||||
// Dodaj stolpec is_try_again
|
||||
$result = $wpdb->query("ALTER TABLE $table_prizes ADD COLUMN is_try_again tinyint(1) NOT NULL DEFAULT 0");
|
||||
if ($result !== false) {
|
||||
error_log("Wheel of Fortune: Stolpec is_try_again uspešno dodan v tabelo $table_prizes");
|
||||
} else {
|
||||
error_log("Wheel of Fortune: Napaka pri dodajanju stolpca is_try_again v tabelo $table_prizes");
|
||||
}
|
||||
} else {
|
||||
error_log("Wheel of Fortune: Stolpec is_try_again že obstaja v tabeli $table_prizes");
|
||||
}
|
||||
}
|
||||
|
||||
private function run_migration() {
|
||||
@@ -539,11 +556,26 @@ class WheelOfFortune {
|
||||
array($this, 'edit_wheel_page')
|
||||
);
|
||||
|
||||
// Dodam podstran za nastavitve
|
||||
add_submenu_page(
|
||||
'wof-wheels',
|
||||
__('Settings', 'wheel-of-fortune'),
|
||||
__('Settings', 'wheel-of-fortune'),
|
||||
'manage_options',
|
||||
'wof-settings',
|
||||
array($this, 'settings_page')
|
||||
);
|
||||
|
||||
// Statistika in uporabniki
|
||||
add_submenu_page('wof-wheels', __('Statistics', 'wheel-of-fortune'), __('Statistics', 'wheel-of-fortune'), 'manage_options', 'wof-stats', array($this, 'stats_page'));
|
||||
add_submenu_page('wof-wheels', __('Users & Spins', 'wheel-of-fortune'), __('Users & Spins', 'wheel-of-fortune'), 'manage_options', 'wof-users', array($this, 'users_page'));
|
||||
}
|
||||
|
||||
// Dodam funkcijo za prikaz strani z nastavitvami
|
||||
public function settings_page() {
|
||||
require_once WHEEL_OF_FORTUNE_PLUGIN_DIR . 'admin/settings-page.php';
|
||||
}
|
||||
|
||||
public function wheels_page() {
|
||||
require_once WHEEL_OF_FORTUNE_PLUGIN_DIR . 'admin/wheels-page.php';
|
||||
}
|
||||
@@ -578,65 +610,29 @@ class WheelOfFortune {
|
||||
}
|
||||
|
||||
$wheel_id = $request->get_param('wheel_id');
|
||||
$spin_type = $request->get_param('spin_type') === 'daily' ? 'daily' : 'paid'; // NOVO
|
||||
|
||||
if (empty($wheel_id)) {
|
||||
return new WP_Error('no_wheel_id', __('Wheel ID is missing.', 'wheel-of-fortune'), ['status' => 400]);
|
||||
}
|
||||
|
||||
global $wpdb;
|
||||
$wheels_table = $wpdb->prefix . 'wof_wheels';
|
||||
$wheel_data = $wpdb->get_row($wpdb->prepare("SELECT has_daily_spin FROM $wheels_table WHERE id = %d", $wheel_id), ARRAY_A);
|
||||
|
||||
$spins_left = 0;
|
||||
$is_eligible_for_daily = false;
|
||||
|
||||
// Preverjanje za DNEVNI SPIN
|
||||
if ($spin_type === 'daily') {
|
||||
if (!empty($wheel_data) && $wheel_data['has_daily_spin']) {
|
||||
$last_spin_meta_key = '_wof_last_daily_spin_' . $wheel_id;
|
||||
$last_spin_timestamp = get_user_meta($user_id, $last_spin_meta_key, true);
|
||||
|
||||
if (empty($last_spin_timestamp) || strtotime('today') > $last_spin_timestamp) {
|
||||
$is_eligible_for_daily = true;
|
||||
}
|
||||
}
|
||||
if (!$is_eligible_for_daily) {
|
||||
return new WP_Error('daily_spin_used', __('You have already used your free daily spin today.', 'wheel-of-fortune'), ['status' => 403]);
|
||||
}
|
||||
}
|
||||
// Preverjanje za PLAČAN SPIN
|
||||
else {
|
||||
$spins_table = $wpdb->prefix . 'wheel_spins';
|
||||
$user_spins = $wpdb->get_row($wpdb->prepare("SELECT spins_available FROM $spins_table WHERE user_id = %d AND wheel_id = %d", $user_id, $wheel_id));
|
||||
$spins_left = $user_spins ? intval($user_spins->spins_available) : 0;
|
||||
|
||||
if ($spins_left <= 0) {
|
||||
return new WP_Error('no_spins', __('You have no spins left.', 'wheel-of-fortune'), ['status' => 403]);
|
||||
}
|
||||
$spins_table = $wpdb->prefix . 'wheel_spins';
|
||||
$user_spins = $wpdb->get_row($wpdb->prepare("SELECT spins_available FROM $spins_table WHERE user_id = %d AND wheel_id = %d", $user_id, $wheel_id));
|
||||
$spins = $user_spins ? intval($user_spins->spins_available) : 0;
|
||||
|
||||
if ($spins <= 0) {
|
||||
return new WP_Error('no_spins', __('You have no spins left.', 'wheel-of-fortune'), ['status' => 403]);
|
||||
}
|
||||
|
||||
// Nadaljuj z logiko vrtenja
|
||||
$prizes = $this->get_wheel_prizes($wheel_id, $is_eligible_for_daily);
|
||||
$prizes = $this->get_wheel_prizes($wheel_id);
|
||||
if (empty($prizes)) {
|
||||
return new WP_Error('no_prizes', __('No prizes available.', 'wheel-of-fortune'), ['status' => 500]);
|
||||
}
|
||||
|
||||
// Uporabi delujočo logiko za izbiro nagrade
|
||||
$prize = $this->select_random_prize($prizes);
|
||||
$new_spins = $spins - 1;
|
||||
|
||||
// Zmanjšaj spine ali zabeleži dnevni spin
|
||||
if ($spin_type === 'daily') {
|
||||
$last_spin_meta_key = '_wof_last_daily_spin_' . $wheel_id;
|
||||
update_user_meta($user_id, $last_spin_meta_key, time());
|
||||
// Pridobimo trenutno število spinov za response
|
||||
$spins_table = $wpdb->prefix . 'wheel_spins';
|
||||
$user_spins_obj = $wpdb->get_row($wpdb->prepare("SELECT spins_available FROM $spins_table WHERE user_id = %d AND wheel_id = %d", $user_id, $wheel_id));
|
||||
$new_spins = $user_spins_obj ? intval($user_spins_obj->spins_available) : 0;
|
||||
} else {
|
||||
$new_spins = $spins_left - 1;
|
||||
$spins_table = $wpdb->prefix . 'wheel_spins';
|
||||
$wpdb->update($spins_table, ['spins_available' => $new_spins, 'last_spin_date' => current_time('mysql')], ['user_id' => $user_id, 'wheel_id' => $wheel_id]);
|
||||
}
|
||||
$wpdb->update($spins_table, ['spins_available' => $new_spins, 'last_spin_date' => current_time('mysql')], ['user_id' => $user_id, 'wheel_id' => $wheel_id]);
|
||||
|
||||
$log_table = $wpdb->prefix . 'wheel_log';
|
||||
$wpdb->insert($log_table, ['user_id' => $user_id, 'wheel_id' => $wheel_id, 'prize_id' => $prize['id'], 'spin_date' => current_time('mysql'), 'redeemed' => 0]);
|
||||
@@ -659,37 +655,26 @@ class WheelOfFortune {
|
||||
}
|
||||
}
|
||||
|
||||
if (get_option('wheel_send_emails', true)) {
|
||||
// Pošlji email samo, če ni "try again" nagrada
|
||||
if (get_option('wheel_send_emails', true) && (!isset($prize['is_try_again']) || $prize['is_try_again'] != 1)) {
|
||||
$this->send_prize_email($user_id, $prize);
|
||||
}
|
||||
|
||||
$response_data = [
|
||||
'prize' => $prize,
|
||||
'degree' => $degree,
|
||||
'remaining_spins' => $new_spins,
|
||||
$response_data = [
|
||||
'prize' => $prize,
|
||||
'degree' => $degree,
|
||||
'remaining_spins' => $new_spins,
|
||||
'discount_code' => $redemption_code,
|
||||
'spin_type' => $spin_type
|
||||
'is_try_again' => isset($prize['is_try_again']) ? (int)$prize['is_try_again'] : 0
|
||||
];
|
||||
|
||||
return new WP_REST_Response(['success' => true, 'data' => $response_data], 200);
|
||||
}
|
||||
|
||||
public function get_wheel_prizes($wheel_id = 1, $is_daily_spin = false) {
|
||||
public function get_wheel_prizes($wheel_id = 1) {
|
||||
global $wpdb;
|
||||
$table_name = $wpdb->prefix . 'wheel_prizes';
|
||||
$prizes = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE wheel_id = %d AND is_active = 1 ORDER BY id ASC", $wheel_id), ARRAY_A);
|
||||
|
||||
if ($is_daily_spin) {
|
||||
foreach ($prizes as &$prize) {
|
||||
// Če je daily_spin_probability nastavljena, jo uporabi. Sicer uporabi standardno.
|
||||
if (isset($prize['daily_spin_probability']) && $prize['daily_spin_probability'] !== null) {
|
||||
$prize['probability'] = $prize['daily_spin_probability'];
|
||||
}
|
||||
}
|
||||
unset($prize); // Prekini referenco
|
||||
}
|
||||
|
||||
return $prizes;
|
||||
return $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE wheel_id = %d AND is_active = 1 ORDER BY id ASC", $wheel_id), ARRAY_A);
|
||||
}
|
||||
|
||||
private function select_random_prize($prizes) {
|
||||
@@ -795,23 +780,11 @@ class WheelOfFortune {
|
||||
$spins_left = $wpdb->get_var($wpdb->prepare("SELECT spins_available FROM $spins_table WHERE user_id = %d AND wheel_id = %d", $user_id, $wheel_id));
|
||||
$spins_left = ($spins_left === null) ? 0 : (int)$spins_left;
|
||||
|
||||
// Preveri, ali je dnevni spin na voljo
|
||||
$daily_spin_available = false;
|
||||
if (isset($wheel['has_daily_spin']) && $wheel['has_daily_spin']) {
|
||||
$last_spin_meta_key = '_wof_last_daily_spin_' . $wheel_id;
|
||||
$last_spin_timestamp = get_user_meta($user_id, $last_spin_meta_key, true);
|
||||
|
||||
if (empty($last_spin_timestamp) || strtotime('today') > $last_spin_timestamp) {
|
||||
$daily_spin_available = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Definiramo polje za prevode, da bo dostopno v PHP in JS
|
||||
$l10n = [
|
||||
'spin_button' => __('SPIN', 'wheel-of-fortune'),
|
||||
'spinning' => __('Spinning...', 'wheel-of-fortune'),
|
||||
'no_spins_left' => __('No More Spins', 'wheel-of-fortune'),
|
||||
'free_daily_spin' => __('FREE DAILY SPIN', 'wheel-of-fortune'),
|
||||
'congratulations' => __('Congratulations!', 'wheel-of-fortune'),
|
||||
'you_won' => __('You won:', 'wheel-of-fortune'),
|
||||
'close' => __('Close', 'wheel-of-fortune'),
|
||||
@@ -825,7 +798,6 @@ class WheelOfFortune {
|
||||
'nonce' => wp_create_nonce('wp_rest'),
|
||||
'wheel_id' => $wheel_id,
|
||||
'spins_left' => $spins_left,
|
||||
'daily_spin_available' => $daily_spin_available,
|
||||
'prizes' => $prizes,
|
||||
'l10n' => $l10n // Uporabimo definirano polje
|
||||
));
|
||||
@@ -899,7 +871,8 @@ class WheelOfFortune {
|
||||
$text_paths = '';
|
||||
|
||||
// Generate segments and text paths
|
||||
$segment_colors = ['#00dfe9', '#ff00c4', '#0cf101'];
|
||||
// Updated segment color palette
|
||||
$segment_colors = ['#ff3131', '#7ed957', '#8c52ff', '#ff914d', '#1da3e7'];
|
||||
for ($i = 0; $i < $num_prizes; $i++) {
|
||||
$prize = $prizes[$i];
|
||||
$start_angle = $i * $angle;
|
||||
@@ -999,13 +972,13 @@ class WheelOfFortune {
|
||||
$name = isset($_POST['name']) ? sanitize_text_field($_POST['name']) : '';
|
||||
$description = isset($_POST['description']) ? sanitize_textarea_field($_POST['description']) : '';
|
||||
$probability = isset($_POST['probability']) ? floatval($_POST['probability']) : 0;
|
||||
$daily_spin_probability = isset($_POST['daily_spin_probability']) && $_POST['daily_spin_probability'] !== '' ? floatval($_POST['daily_spin_probability']) : null;
|
||||
$is_active = isset($_POST['is_active']) ? intval($_POST['is_active']) : 0;
|
||||
$redemption_code = isset($_POST['redemption_code']) ? sanitize_text_field($_POST['redemption_code']) : '';
|
||||
$is_discount = isset($_POST['is_discount']) ? intval($_POST['is_discount']) : 0;
|
||||
$email_subject = isset($_POST['email_subject']) ? sanitize_text_field($_POST['email_subject']) : '';
|
||||
$email_template = isset($_POST['email_template']) ? wp_kses_post($_POST['email_template']) : '';
|
||||
$discount_value = isset($_POST['discount_value']) ? floatval($_POST['discount_value']) : 0;
|
||||
$is_try_again = isset($_POST['is_try_again']) ? intval($_POST['is_try_again']) : 0;
|
||||
|
||||
if (empty($name)) {
|
||||
wp_send_json_error(['message' => __('Prize name is required.', 'wheel-of-fortune')]);
|
||||
@@ -1019,10 +992,6 @@ class WheelOfFortune {
|
||||
wp_send_json_error(['message' => __('Probability must be between 0 and 1.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
if ($daily_spin_probability !== null && ($daily_spin_probability < 0 || $daily_spin_probability > 1)) {
|
||||
wp_send_json_error(['message' => __('Daily spin probability must be between 0 and 1.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
global $wpdb;
|
||||
$table_name = $wpdb->prefix . 'wheel_prizes';
|
||||
|
||||
@@ -1031,16 +1000,16 @@ class WheelOfFortune {
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'probability' => $probability,
|
||||
'daily_spin_probability' => $daily_spin_probability,
|
||||
'is_active' => $is_active,
|
||||
'redemption_code' => $redemption_code,
|
||||
'is_discount' => $is_discount,
|
||||
'email_subject' => $email_subject,
|
||||
'email_template' => $email_template,
|
||||
'discount_value' => $discount_value,
|
||||
'is_try_again' => $is_try_again,
|
||||
];
|
||||
|
||||
$format = ['%d', '%s', '%s', '%f', '%f', '%d', '%s', '%d', '%s', '%s', '%f'];
|
||||
$format = ['%d', '%s', '%s', '%f', '%d', '%s', '%d', '%s', '%s', '%f', '%d'];
|
||||
|
||||
if ($prize_id > 0) {
|
||||
$result = $wpdb->update($table_name, $data, ['id' => $prize_id], $format, ['%d']);
|
||||
@@ -1345,7 +1314,8 @@ class WheelOfFortune {
|
||||
update_post_meta($coupon_id, 'usage_limit_per_user', '1');
|
||||
update_post_meta($coupon_id, 'customer_email', array($user->user_email));
|
||||
update_post_meta($coupon_id, 'description', __('Wheel of Fortune', 'wheel-of-fortune'));
|
||||
|
||||
// Nastavi veljavnost 10 dni
|
||||
update_post_meta($coupon_id, 'date_expires', strtotime('+10 days'));
|
||||
return $coupon_id;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
@@ -1373,12 +1343,9 @@ class WheelOfFortune {
|
||||
$coupon->set_usage_limit(1);
|
||||
$coupon->set_usage_limit_per_user(1);
|
||||
$coupon->set_email_restrictions(array($user->user_email));
|
||||
|
||||
// Dodatna nastavitev
|
||||
$coupon->set_date_expires(strtotime('+30 days'));
|
||||
|
||||
// Nastavi veljavnost 10 dni
|
||||
$coupon->set_date_expires(strtotime('+10 days'));
|
||||
$coupon_id = $coupon->save();
|
||||
|
||||
// Preveri, ali je kupon res ustvarjen
|
||||
if ($coupon_id) {
|
||||
$verification_id = wc_get_coupon_id_by_code($code);
|
||||
@@ -1395,7 +1362,6 @@ class WheelOfFortune {
|
||||
// Metoda 4: Neposredno vstavljanje v podatkovno bazo
|
||||
try {
|
||||
global $wpdb;
|
||||
|
||||
// Ustvari nov post tipa shop_coupon
|
||||
$wpdb->insert(
|
||||
$wpdb->posts,
|
||||
@@ -1410,9 +1376,7 @@ class WheelOfFortune {
|
||||
'post_date_gmt' => current_time('mysql', 1)
|
||||
)
|
||||
);
|
||||
|
||||
$coupon_id = $wpdb->insert_id;
|
||||
|
||||
if ($coupon_id) {
|
||||
// Dodaj meta podatke za kupon
|
||||
$meta_data = array(
|
||||
@@ -1422,9 +1386,10 @@ class WheelOfFortune {
|
||||
'usage_limit' => '1',
|
||||
'usage_limit_per_user' => '1',
|
||||
'customer_email' => serialize(array($user->user_email)),
|
||||
'description' => __('Wheel of Fortune', 'wheel-of-fortune')
|
||||
'description' => __('Wheel of Fortune', 'wheel-of-fortune'),
|
||||
// Nastavi veljavnost 10 dni
|
||||
'date_expires' => strtotime('+10 days')
|
||||
);
|
||||
|
||||
foreach ($meta_data as $meta_key => $meta_value) {
|
||||
$wpdb->insert(
|
||||
$wpdb->postmeta,
|
||||
@@ -1435,7 +1400,6 @@ class WheelOfFortune {
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return $coupon_id;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
@@ -1456,8 +1420,9 @@ class WheelOfFortune {
|
||||
$coupon->set_usage_limit(1);
|
||||
$coupon->set_usage_limit_per_user(1);
|
||||
$coupon->set_email_restrictions(array($user->user_email));
|
||||
// Nastavi veljavnost 10 dni
|
||||
$coupon->set_date_expires(strtotime('+10 days'));
|
||||
$coupon_id = $coupon->save();
|
||||
|
||||
if ($coupon_id) {
|
||||
return $coupon_id;
|
||||
}
|
||||
@@ -1478,6 +1443,12 @@ class WheelOfFortune {
|
||||
* @param array $prize The prize details array.
|
||||
*/
|
||||
public function send_prize_email($user_id, $prize) {
|
||||
// Ne pošlji emaila, če je nagrada "try again"
|
||||
if (isset($prize['is_try_again']) && $prize['is_try_again'] == 1) {
|
||||
wheel_of_fortune_debug_log("send_prize_email: Email ni poslan za 'try again' nagrado: {$prize['name']}");
|
||||
return;
|
||||
}
|
||||
|
||||
$user = get_userdata($user_id);
|
||||
if (!$user) {
|
||||
wheel_of_fortune_debug_log("send_prize_email: Uporabnik z ID {$user_id} ni bil najden.");
|
||||
@@ -1599,33 +1570,123 @@ class WheelOfFortune {
|
||||
}
|
||||
|
||||
public function ajax_delete_wheel_product() {
|
||||
check_ajax_referer('wof_delete_wheel_product');
|
||||
check_ajax_referer('wof_delete_wheel_product', '_ajax_nonce');
|
||||
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_send_json_error(__('Nimaš dovoljenja.', 'wheel-of-fortune'));
|
||||
wp_send_json_error(['message' => __('You do not have permission to perform this action.', 'wheel-of-fortune')]);
|
||||
}
|
||||
global $wpdb;
|
||||
|
||||
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||
|
||||
// Debug informacije
|
||||
error_log("=== AJAX DELETE WHEEL PRODUCT DEBUG ===");
|
||||
error_log("POST data: " . print_r($_POST, true));
|
||||
error_log("ID to delete: " . $id);
|
||||
if (!$id) {
|
||||
wp_send_json_error(['message' => __('Invalid ID.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
if ($id > 0) {
|
||||
$table = $wpdb->prefix . 'wheel_of_fortune_products';
|
||||
error_log("Table: " . $table);
|
||||
|
||||
$result = $wpdb->delete($table, ['id' => $id], ['%d']);
|
||||
error_log("Delete result: " . $result);
|
||||
error_log("Last SQL query: " . $wpdb->last_query);
|
||||
error_log("Last SQL error: " . $wpdb->last_error);
|
||||
|
||||
if ($result !== false) {
|
||||
wp_send_json_success();
|
||||
global $wpdb;
|
||||
$table_name = $wpdb->prefix . 'wheel_of_fortune_products';
|
||||
|
||||
$result = $wpdb->delete($table_name, ['id' => $id]);
|
||||
|
||||
if ($result !== false) {
|
||||
wp_send_json_success(['message' => __('Product deleted successfully.', 'wheel-of-fortune')]);
|
||||
} else {
|
||||
wp_send_json_error(['message' => __('Failed to delete product.', 'wheel-of-fortune')]);
|
||||
}
|
||||
}
|
||||
|
||||
public function ajax_migrate_try_again() {
|
||||
check_ajax_referer('wheel_admin_nonce', '_ajax_nonce');
|
||||
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_send_json_error(['message' => __('You do not have permission to perform this action.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
$this->migrate_add_is_try_again_column();
|
||||
|
||||
wp_send_json_success(['message' => __('Migration completed successfully. The is_try_again column has been added to the database.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
public function ajax_reset_spins_wheel() {
|
||||
check_ajax_referer('wheel_admin_nonce', '_ajax_nonce');
|
||||
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_send_json_error(['message' => __('You do not have permission to perform this action.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
$wheel_id = isset($_POST['wheel_id']) ? intval($_POST['wheel_id']) : 0;
|
||||
|
||||
if (!$wheel_id) {
|
||||
wp_send_json_error(['message' => __('Wheel ID is required.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
global $wpdb;
|
||||
$wheels_table = $wpdb->prefix . 'wof_wheels';
|
||||
$spins_table = $wpdb->prefix . 'wheel_spins';
|
||||
|
||||
// Preveri, če kolo obstaja
|
||||
$wheel_exists = $wpdb->get_var($wpdb->prepare("SELECT id FROM $wheels_table WHERE id = %d", $wheel_id));
|
||||
|
||||
if (!$wheel_exists) {
|
||||
wp_send_json_error(['message' => __('Selected wheel does not exist.', 'wheel-of-fortune')]);
|
||||
}
|
||||
|
||||
// Ponastavi spine na 0 za vse uporabnike na tem kolesu
|
||||
$result = $wpdb->update(
|
||||
$spins_table,
|
||||
array('spins_available' => 0),
|
||||
array('wheel_id' => $wheel_id),
|
||||
array('%d'),
|
||||
array('%d')
|
||||
);
|
||||
|
||||
if ($result !== false) {
|
||||
wp_send_json_success([
|
||||
'message' => sprintf(__('All spins for wheel ID %d have been successfully reset to 0.', 'wheel-of-fortune'), $wheel_id),
|
||||
'affected_users' => $result
|
||||
]);
|
||||
} else {
|
||||
wp_send_json_error(['message' => __('An error occurred while resetting spins.', 'wheel-of-fortune')]);
|
||||
}
|
||||
}
|
||||
|
||||
// --- NOVE METODE ZA CRON ---
|
||||
public function add_custom_cron_schedules($schedules) {
|
||||
// Lahko pustiš custom interval, če ga uporabljaš še kje drugje, sicer ni potreben
|
||||
// $schedules['every_2_minutes'] = array(
|
||||
// 'interval' => 120,
|
||||
// 'display' => __('Every 2 minutes', 'wheel-of-fortune')
|
||||
// );
|
||||
return $schedules;
|
||||
}
|
||||
|
||||
public function execute_daily_spin_cron() {
|
||||
wheel_of_fortune_debug_log('CRON: "wof_daily_spin_event" triggered.');
|
||||
$wheel_id = get_option('wof_daily_spin_wheel_id');
|
||||
if (empty($wheel_id)) {
|
||||
wheel_of_fortune_debug_log('CRON: No wheel selected for daily spin. Aborting.');
|
||||
return;
|
||||
}
|
||||
$users = get_users(array('fields' => 'ID'));
|
||||
wheel_of_fortune_debug_log('CRON: Found ' . count($users) . ' users to process for wheel ID ' . $wheel_id);
|
||||
foreach ($users as $user_id) {
|
||||
$last_given_meta_key = '_wof_daily_spin_last_given_' . $wheel_id;
|
||||
$last_given_timestamp = get_user_meta($user_id, $last_given_meta_key, true);
|
||||
// Sprememba: 24 ur (23*HOUR_IN_SECONDS)
|
||||
if (empty($last_given_timestamp) || (time() - $last_given_timestamp > 23 * HOUR_IN_SECONDS)) {
|
||||
$ok = wheel_of_fortune_add_spins($user_id, 1, $wheel_id);
|
||||
if ($ok) {
|
||||
update_user_meta($user_id, $last_given_meta_key, time());
|
||||
wheel_of_fortune_debug_log("CRON: Assigned spin to user $user_id for wheel $wheel_id. Result: " . var_export($ok, true));
|
||||
} else {
|
||||
wheel_of_fortune_debug_log("CRON: Failed to assign spin to user $user_id for wheel $wheel_id.");
|
||||
}
|
||||
} else {
|
||||
wheel_of_fortune_debug_log("CRON: User $user_id already received a spin recently. Skipping.");
|
||||
}
|
||||
}
|
||||
wp_send_json_error(__('Napaka pri brisanju.', 'wheel-of-fortune'));
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
}
|
||||
|
||||
// Initialize plugin
|
||||
|
||||
Reference in new issue
Block a user