Commit f62d9cb5 by rajshah

feat: download resource count fix v1.9

parent 9b8b6ef4
......@@ -343,28 +343,34 @@
})(jQuery);
// download count
jQuery(document).ready(function ($) {
$(".btn-resource-download").on("click", function () {
const resourceId = $(this).data("resource-id");
console.log("Resource ID:", resourceId);
$.ajax({
url: download_resource_object.ajax_url,
type: "POST",
data: {
action: "increment_download_count",
resource_id: resourceId,
},
success: function (response) {
console.log("AJAX Response:", response);
if (response.success) {
$("#download-count").text(response.data.new_count);
} else {
console.log("Error:", response.data.message);
}
},
error: function (xhr, status, error) {
console.log("AJAX Error:", error);
},
});
$(".btn-resource-download").on("click", function (e) {
e.preventDefault(); // Prevent default download
const resourceId = $(this).data("resource-id");
const downloadUrl = $(this).attr("href");
console.log("Resource ID:", resourceId);
$.ajax({
url: download_resource_object.ajax_url,
type: "POST",
data: {
action: "increment_download_count",
resource_id: resourceId,
nonce: download_resource_object.nonce,
},
success: function (response) {
console.log("AJAX Response:", response);
if (response.success) {
$("#download-count").text(response.data.new_count);
window.location.href = downloadUrl; // Trigger download
} else {
console.log("Error:", response.data ? response.data.message : "Invalid response");
window.location.href = downloadUrl; // Trigger download even on error
}
},
error: function (xhr, status, error) {
console.log("AJAX Error:", error);
window.location.href = downloadUrl; // Trigger download on AJAX failure
},
});
});
});
\ No newline at end of file
......@@ -406,10 +406,19 @@ function calculate_reading_time($content)
add_action('wp_ajax_increment_download_count', 'increment_download_count');
add_action('wp_ajax_nopriv_increment_download_count', 'increment_download_count');
function increment_download_count()
{
// Verify the AJAX request
function increment_download_count() {
// Prevent unwanted output
ob_start();
// Verify nonce
if (!check_ajax_referer('increment_download_count_nonce', 'nonce', false)) {
ob_end_clean();
wp_send_json_error(['message' => 'Nonce verification failed']);
}
// Verify resource ID
if (!isset($_POST['resource_id']) || !is_numeric($_POST['resource_id'])) {
ob_end_clean();
wp_send_json_error(['message' => 'Invalid resource ID']);
}
......@@ -420,18 +429,28 @@ function increment_download_count()
session_start();
}
// Check if the user has already clicked the button in this session
if (isset($_SESSION['downloaded_resources']) && in_array($resource_id, $_SESSION['downloaded_resources'])) {
wp_send_json_success(['message' => 'Already counted']);
// Initialize session array
if (!isset($_SESSION['downloaded_resources'])) {
$_SESSION['downloaded_resources'] = [];
}
// Check if already counted in this session
if (in_array($resource_id, $_SESSION['downloaded_resources'])) {
ob_end_clean();
wp_send_json_success([
'message' => 'Already counted',
'new_count' => (int) get_post_meta($resource_id, 'download_count', true)
]);
}
// Increment the download count
// Increment download count
$current_count = (int) get_post_meta($resource_id, 'download_count', true);
$new_count = $current_count + 1;
update_post_meta($resource_id, 'download_count', $new_count);
// Store the resource ID in the session to prevent multiple counts
// Store resource ID in session
$_SESSION['downloaded_resources'][] = $resource_id;
ob_end_clean();
wp_send_json_success(['new_count' => $new_count]);
}
\ No newline at end of file
......@@ -50,6 +50,7 @@ function conserve_register_styles()
'download_resource_object',
array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('increment_download_count_nonce'),
)
);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment