Domnovi popravki
Deploy to Test Server / deploy (push) Failing after 58s

This commit is contained in:
Mark Poljanšek committed 2025-11-20 22:01:53 +01:00
1 parent d77be150d9
commit 5210c9d2e6
11 files changed
+732 -284

No files matched your search

+203 -142
View File
@@ -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