PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.21
OttoKit: All-in-One Automation Platform v1.1.21
1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / functions.php
suretriggers Last commit date
app 3 months ago assets 5 months ago languages 7 months ago src 3 months ago autoloader.php 3 years ago changelog.txt 3 months ago functions.php 5 months ago readme.txt 3 months ago suretriggers.php 3 months ago tailwind.config.js 6 months ago
functions.php
355 lines
1 <?php
2 /**
3 * Global AutomatePlug Functions.
4 *
5 * @package Automateplug
6 */
7
8 /**
9 * Get or prepare user id.
10 *
11 * @return int
12 */
13 function ap_get_current_user_id() {
14
15 $user_id = get_current_user_id();
16
17 if ( $user_id ) {
18 return $user_id;
19 }
20
21 if ( ! session_id() ) { //phpcs:ignore
22 session_start(); //phpcs:ignore
23 }
24
25 if ( isset( $_SESSION['ap_user_identifier'] ) ) {
26 return $_SESSION['ap_user_identifier']; //phpcs:ignore
27 }
28
29 $ap_user_id = wp_rand( 1000000000, 9999999999 );
30 $_SESSION['ap_user_identifier'] = $ap_user_id; //phpcs:ignore
31
32 return $_SESSION['ap_user_identifier']; //phpcs:ignore
33
34 }
35
36 /**
37 * Get or prepare user id.
38 *
39 * @param string $email user email.
40 *
41 * @return int|bool
42 */
43 function ap_get_user_id_from_email( $email ) {
44
45 if ( empty( $email ) || ! email_exists( $email ) ) {
46 return false;
47 }
48
49 $get_user = get_user_by( 'email', $email );
50 if ( ! $get_user instanceof WP_User ) {
51 return false;
52 }
53 return intval( $get_user->ID );
54
55 }
56
57 add_action(
58 'in_admin_header',
59 function () {
60 if ( isset( $_GET['page'] ) && 'suretriggers' === sanitize_text_field( $_GET['page'] ) ) { // phpcs:ignore
61 remove_all_actions( 'admin_notices' );
62 remove_all_actions( 'all_admin_notices' );
63 }
64 },
65 999
66 );
67
68 add_action( 'wp_login', 'suretrigger_capture_login_time', 10, 2 );
69
70 /**
71 * Login time.
72 *
73 * @param string $user_login user login.
74 * @param object $user user.
75 * @return void
76 */
77 function suretrigger_capture_login_time( $user_login, $user ) {
78 if ( ! property_exists( $user, 'ID' ) ) {
79 return;
80 }
81 update_user_meta( $user->ID, 'st_last_login', time() );
82 }
83
84 /**
85 * Add 5-star rating display to plugin row.
86 */
87 add_filter( 'plugin_row_meta', 'suretriggers_add_plugin_rating', 10, 2 );
88
89 /**
90 * Add 5-star rating to plugin meta row.
91 *
92 * @param array $links An array of the plugin's metadata.
93 * @param string $file Path to the plugin file relative to the plugins directory.
94 * @return array Modified array of plugin metadata.
95 */
96 function suretriggers_add_plugin_rating( $links, $file ) {
97 if ( plugin_basename( SURE_TRIGGERS_FILE ) === $file ) {
98 // Check if user has already clicked the rating (stored in user meta).
99 $user_id = get_current_user_id();
100 $rating_clicked = get_user_meta( $user_id, 'suretriggers_rating_clicked', true );
101
102 // If rating has been clicked, don't show it.
103 if ( $rating_clicked ) {
104 return $links;
105 }
106
107 $rating_html = '<span class="suretriggers-rating-wrapper" id="suretriggers-rating-wrapper">';
108 $rating_html .= '<a href="https://wordpress.org/support/plugin/suretriggers/reviews/" target="_blank" class="suretriggers-rating-link" title="Rate this plugin" aria-label="Rate SureTriggers 5 stars on WordPress.org">';
109 $rating_html .= '<span class="star-rating" role="img" aria-label="5 out of 5 stars">';
110 for ( $i = 1; $i <= 5; $i++ ) {
111 $rating_html .= '<span class="star star-full" aria-hidden="true"></span>';
112 }
113 $rating_html .= '</span>';
114 $rating_html .= '<span class="screen-reader-text">Rate this plugin</span>';
115 $rating_html .= '</a>';
116 $rating_html .= '</span>';
117 $links[] = $rating_html;
118 }
119 return $links;
120 }
121
122 /**
123 * Enqueue rating styles for plugin meta row.
124 */
125 add_action( 'admin_enqueue_scripts', 'suretriggers_enqueue_rating_styles' );
126
127 /**
128 * Enqueue CSS styles for 5-star rating display.
129 * Following modular CSS organization best practices.
130 *
131 * @return void
132 */
133 function suretriggers_enqueue_rating_styles() {
134 // Only enqueue on plugins page where rating is displayed.
135 $screen = get_current_screen();
136 if ( $screen && 'plugins' === $screen->id ) {
137 wp_enqueue_style(
138 'suretriggers-rating',
139 plugin_dir_url( SURE_TRIGGERS_FILE ) . 'assets/css/st-rating.css',
140 [],
141 defined( 'SURE_TRIGGERS_VER' ) ? SURE_TRIGGERS_VER : '1.0.0'
142 );
143
144 wp_enqueue_script(
145 'suretriggers-rating-js',
146 plugin_dir_url( SURE_TRIGGERS_FILE ) . 'assets/js/st-rating.js',
147 [ 'jquery' ],
148 defined( 'SURE_TRIGGERS_VER' ) ? SURE_TRIGGERS_VER : '1.0.0',
149 true
150 );
151
152 // Localize script with AJAX URL and nonce.
153 wp_localize_script(
154 'suretriggers-rating-js',
155 'suretriggers_rating_ajax',
156 [
157 'ajax_url' => admin_url( 'admin-ajax.php' ),
158 'nonce' => wp_create_nonce( 'suretriggers_rating_nonce' ),
159 ]
160 );
161 }
162 }
163
164 /**
165 * Handle AJAX request to mark rating as clicked.
166 */
167 add_action( 'wp_ajax_suretriggers_rating_clicked', 'suretriggers_handle_rating_clicked' );
168
169 /**
170 * Mark rating as clicked for current user.
171 *
172 * @return void
173 */
174 function suretriggers_handle_rating_clicked() {
175 // Check if nonce is set and verify it.
176 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'suretriggers_rating_nonce' ) ) {
177 wp_die( 'Security check failed' );
178 }
179
180 // Mark rating as clicked for current user.
181 $user_id = get_current_user_id();
182 if ( $user_id ) {
183 update_user_meta( $user_id, 'suretriggers_rating_clicked', true );
184 wp_send_json_success( 'Rating marked as clicked' );
185 } else {
186 wp_send_json_error( 'User not logged in' );
187 }
188 }
189
190 /**
191 * SureTrigger Trigger Button shortcode.
192 *
193 * @param array $atts Attributes.
194 * @param null $content Content.
195 * @return string|bool
196 */
197 function suretrigger_button( $atts, $content = null ) {
198 $atts = shortcode_atts(
199 [
200 'id' => 0,
201 'button_label' => __( 'Click here', 'suretriggers' ),
202 'user_redirect_url' => '',
203 'visitor_redirect_url' => '',
204 'button_class' => 'suretrigger_button',
205 'button_id' => 'suretrigger_button',
206 'click_loading_label' => __( 'Clicking...', 'suretriggers' ),
207 'after_clicked_label' => __( 'Clicked!!', 'suretriggers' ),
208 'click_once' => 'true',
209 'cookie_duration' => '15',
210 ],
211 $atts,
212 'trigger_button'
213 );
214 ob_start();
215 $user_id = get_current_user_id();
216 ?>
217
218 <form method="post" class="suretrigger_button_form" id="suretrigger_button_form_<?php echo esc_attr( (string) $atts['id'] ); ?>">
219 <input type="hidden" name="st_trigger_id" value="<?php echo esc_attr( (string) $atts['id'] ); ?>" />
220 <input type="hidden" name="st_nonce" value="<?php echo esc_attr( wp_create_nonce( 'suretrigger_form' ) ); ?>"/>
221 <input type="hidden" name="st_login_url" value="<?php echo esc_attr( $atts['user_redirect_url'] ); ?>"/>
222 <input type="hidden" name="st_non_login_url" value="<?php echo esc_attr( $atts['visitor_redirect_url'] ); ?>"/>
223 <input type="hidden" name="st_click" value="<?php echo esc_attr( $atts['click_once'] ); ?>"/>
224 <input type="hidden" name="st_button_label" value="<?php echo esc_attr( $atts['button_label'] ); ?>"/>
225 <input type="hidden" name="st_loading_label" value="<?php echo esc_attr( $atts['click_loading_label'] ); ?>"/>
226 <input type="hidden" name="st_clicked_label" value="<?php echo esc_attr( $atts['after_clicked_label'] ); ?>"/>
227 <input type="hidden" name="action" value="handle_trigger_button_click"/>
228 <input type="hidden" name="st_cookie_duration" value="<?php echo esc_attr( $atts['cookie_duration'] ); ?>"/>
229 <input type="hidden" name="st_user_id" value="<?php echo esc_attr( (string) $user_id ); ?>"/>
230 <?php
231 global $post;
232 if ( ! empty( $post ) && is_object( $post ) && isset( $post->ID ) && isset( $post->post_title ) ) {
233 ?>
234 <input type="hidden" name="st_button_post_id" value="<?php echo esc_attr( $post->ID ); ?>"/>
235 <input type="hidden" name="st_button_post_title" value="<?php echo esc_attr( $post->post_title ); ?>"/>
236 <?php
237 }
238 $cookie_name = 'st_trigger_button_clicked_' . esc_attr( (string) $atts['id'] );
239 if ( isset( $_COOKIE[ $cookie_name ] ) && 'yes_' . $user_id == $_COOKIE[ $cookie_name ] ) {
240 ?>
241 <button type="button" class="<?php echo esc_attr( $atts['button_class'] ); ?>" id="<?php echo esc_attr( $atts['button_id'] ); ?>"><?php echo esc_html( $atts['after_clicked_label'] ); ?></button>
242 <?php
243 } else {
244 ?>
245 <button type="button" class="<?php echo esc_attr( $atts['button_class'] ); ?>" id="<?php echo esc_attr( $atts['button_id'] ); ?>" onclick="st_trigger_ajax(this);return false;"><?php echo esc_html( $atts['button_label'] ); ?></button>
246 <?php
247 }
248 ?>
249 </form>
250
251 <?php
252 return ob_get_clean();
253 }
254 add_shortcode( 'st_trigger_button', 'suretrigger_button' );
255
256 /**
257 * SureTrigger Trigger Button custom style.
258 *
259 * @return void
260 */
261 function suretrigger_button_custom_style() {
262 wp_enqueue_style( 'st-trigger-button-style', SURE_TRIGGERS_URL . 'assets/css/st-trigger-button.css', [], SURE_TRIGGERS_VER );
263 wp_enqueue_script( 'st-trigger-button-script', SURE_TRIGGERS_URL . 'assets/js/st-trigger-button.js', [], SURE_TRIGGERS_VER, true );
264 wp_localize_script( 'st-trigger-button-script', 'st_ajax_object', [ 'ajax_url' => admin_url( 'admin-ajax.php' ) ] );
265 }
266 add_action( 'wp_enqueue_scripts', 'suretrigger_button_custom_style' );
267
268 /**
269 * SureTrigger Trigger Button action.
270 *
271 * @return void
272 */
273 function suretrigger_trigger_button_action() {
274
275 // Trigger the custom hook before ajax response.
276 do_action( 'st_trigger_button_before_click_hook' );
277
278 if ( ! isset( $_POST['st_nonce'] ) || ! wp_verify_nonce( wp_strip_all_tags( $_POST['st_nonce'] ), 'suretrigger_form' ) ) {
279 wp_send_json_error( [ 'error' => 'Invalid nonce' ] );
280 }
281
282 if ( is_user_logged_in() ) {
283 $user_id = get_current_user_id();
284
285 if ( isset( $_POST['st_trigger_id'] ) && ! empty( $_POST['st_trigger_id'] ) ) {
286
287 $st_trigger_id = sanitize_text_field( $_POST['st_trigger_id'] );
288
289 $cookie_duration = isset( $_POST['st_cookie_duration'] ) ? sanitize_text_field( $_POST['st_cookie_duration'] ) : '';
290 $st_click = isset( $_POST['st_click'] ) ? sanitize_text_field( $_POST['st_click'] ) : '';
291
292 $post_data = [];
293
294 if ( isset( $_POST['st_button_post_id'] ) ) {
295 $post_data['parent_post_id'] = sanitize_text_field( $_POST['st_button_post_id'] );
296 }
297
298 if ( isset( $_POST['st_button_post_title'] ) ) {
299 $post_data['parent_post_title'] = sanitize_text_field( $_POST['st_button_post_title'] );
300 }
301 do_action( 'st_trigger_button_action', $st_trigger_id, $user_id, sanitize_text_field( $cookie_duration ), $st_click, $post_data );
302
303 if ( isset( $_POST['st_login_url'] ) && ! empty( $_POST['st_login_url'] ) ) {
304 wp_send_json_success( esc_url_raw( $_POST['st_login_url'] ) );
305 }
306 }
307 } else {
308 if ( isset( $_POST['st_non_login_url'] ) && ! empty( $_POST['st_non_login_url'] ) ) {
309 wp_send_json_success( esc_url_raw( $_POST['st_non_login_url'] ) );
310 } else {
311 wp_send_json_success( wp_login_url() );
312 }
313 }
314
315 // Trigger the custom hook after ajax response.
316 do_action( 'st_trigger_button_after_click_hook' );
317
318 wp_die();
319 }
320 add_action( 'wp_ajax_handle_trigger_button_click', 'suretrigger_trigger_button_action' );
321 add_action( 'wp_ajax_nopriv_handle_trigger_button_click', 'suretrigger_trigger_button_action' );
322
323 /**
324 * SureTrigger Trigger Button set cookie.
325 *
326 * @param int $st_trigger_id Trigger ID.
327 * @param int $user_id User ID.
328 * @param int $cookie_duration Cookie Duration.
329 *
330 * @return void
331 */
332 function st_trigger_button_set_cookie( $st_trigger_id, $user_id, $cookie_duration ) {
333 // Set the cookie.
334 $cookie_name = 'st_trigger_button_clicked_' . $st_trigger_id;
335 $cookie_value = 'yes_' . $user_id;
336 if ( isset( $cookie_duration ) ) {
337 $expiration = time() + 60 * 60 * 24 * intval( $cookie_duration ); // Set the expiration time as per user requested.
338 } else {
339 $expiration = time() + 60 * 60 * 24 * 15;
340 }
341
342 if ( ! defined( 'COOKIEPATH' ) ) {
343 define( 'COOKIEPATH', '/' );
344 }
345
346 if ( ! defined( 'COOKIE_DOMAIN' ) ) {
347 define( 'COOKIE_DOMAIN', false );
348 }
349
350 $secure = is_ssl();
351 setcookie( $cookie_name, $cookie_value, $expiration, COOKIEPATH, COOKIE_DOMAIN, $secure, true ); // phpcs:ignore
352
353 }
354 add_action( 'st_trigger_button_set_cookie', 'st_trigger_button_set_cookie', 10, 3 );
355