PluginProbe
Debug Log Viewer / 2.2.3
Debug Log Viewer v2.2.3
2.5 2.5.1 2.5.2 2.4 trunk 1.0.2 1.0.3 1.1 1.1.1 1.2 1.2.1 1.3 1.4 1.4.1 1.4.2 1.4.3 2.0.1 2.0.3 2.0.4 2.0.5 2.1 2.2.3
debug-log-viewer / admin / controllers / ReviewController.php

ReviewController.php in Debug Log Viewer 2.2.3, at admin/controllers/ReviewController.php

126 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace DebugLogViewer\Admin\Controllers;
4
5 if (!defined('ABSPATH')) {
6 exit;
7 // Exit if accessed directly
8 }
9
10 use DebugLogViewer\Admin\Helpers\Constants;
11
12 class ReviewController {
13
14
15 public function isTimeToAskReview() {
16 $user_id = get_current_user_id();
17 if (!$user_id) {
18 return false;
19 }
20
21 // User permanently dismissed
22 if (get_user_meta($user_id, 'dbg_lv_review_dismissed_forever', true)) {
23 return false;
24 }
25
26 $review_time = get_user_meta($user_id, 'dbg_lv_next_schedule_review_notice_time', true);
27 // If review time is not set yet, set it to 1 week from now
28 if (empty($review_time)) {
29 $review_time = time() + Constants::WEEK_IN_SECONDS;
30 add_user_meta($user_id, 'dbg_lv_next_schedule_review_notice_time', $review_time, true);
31 return false;
32 }
33
34 return time() > (int) $review_time;
35 }
36
37 public function renderBanner() {
38 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
39 $url = add_query_arg($_GET, admin_url('admin.php'));
40 $nonce_url_do = wp_nonce_url(
41 add_query_arg('dbg_lv_review', 'do', $url),
42 'dbg_lv_review_action',
43 'dbg_lv_nonce'
44 );
45 $nonce_url_later = wp_nonce_url(
46 add_query_arg('dbg_lv_review', 'later', $url),
47 'dbg_lv_review_action',
48 'dbg_lv_nonce'
49 );
50 $nonce_url_never = wp_nonce_url(
51 add_query_arg('dbg_lv_review', 'never', $url),
52 'dbg_lv_review_action',
53 'dbg_lv_nonce'
54 );
55
56 // Include the review banner template
57 include plugin_dir_path(__FILE__) . '../../front/views/components/review-banner.tpl.php';
58 }
59
60 public function handleUserAction() {
61 // Exit early if no review action is being taken
62 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
63 if (!isset($_GET['dbg_lv_review'])) {
64 return;
65 }
66
67 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
68 if (!isset($_GET['dbg_lv_nonce']) || !wp_verify_nonce($_GET['dbg_lv_nonce'], 'dbg_lv_review_action')) {
69 wp_die('Security check failed', 'Debug Log Viewer');
70 }
71
72 $user_id = get_current_user_id();
73 if (!$user_id) {
74 return;
75 }
76
77 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
78 $review = sanitize_text_field(wp_unslash($_GET['dbg_lv_review']));
79
80 if ($review === 'later') {
81 $this->updateReviewTime($user_id, Constants::TWO_MONTH_IN_SECONDS);
82
83 // Redirect to the same page without the review parameters to refresh the page
84 $redirect_url = remove_query_arg([ 'dbg_lv_review', 'dbg_lv_nonce' ], $this->getCurrentPageUrl());
85 wp_safe_redirect($redirect_url);
86 exit;
87 } elseif ($review === 'do') {
88 $this->updateReviewTime($user_id, Constants::ONE_YEAR_IN_SECONDS);
89
90 // Redirect to WordPress.org reviews
91 wp_redirect('https://wordpress.org/support/plugin/debug-log-viewer/reviews/#new-post?filter=5');
92 exit;
93 } elseif ($review === 'never') {
94 // Permanently suppress the banner for this user
95 update_user_meta($user_id, 'dbg_lv_review_dismissed_forever', '1');
96
97 $redirect_url = remove_query_arg([ 'dbg_lv_review', 'dbg_lv_nonce' ], $this->getCurrentPageUrl());
98 wp_safe_redirect($redirect_url);
99 exit;
100 }
101 }
102
103 private function updateReviewTime( $user_id, $seconds ) {
104 $meta_key = 'dbg_lv_next_schedule_review_notice_time';
105 $new_time = time() + $seconds;
106
107 if (get_user_meta($user_id, $meta_key, true)) {
108 update_user_meta($user_id, $meta_key, $new_time);
109 } else {
110 add_user_meta($user_id, $meta_key, $new_time, true);
111 }
112 }
113
114 private function getCurrentPageUrl() {
115 // Safely get the current admin page URL
116 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
117 $page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';
118
119 if (empty($page)) {
120 return admin_url();
121 }
122
123 return admin_url('admin.php?page=' . $page);
124 }
125 }
126