PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.16
OttoKit: All-in-One Automation Platform v1.1.16
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 7 months ago assets 6 months ago languages 7 months ago src 6 months ago autoloader.php 3 years ago changelog.txt 6 months ago functions.php 6 months ago readme.txt 6 months ago suretriggers.php 6 months ago tailwind.config.js 6 months ago
functions.php
300 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 $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">';
99 $rating_html .= '<span class="star-rating" role="img" aria-label="5 out of 5 stars">';
100 for ( $i = 1; $i <= 5; $i++ ) {
101 $rating_html .= '<span class="star star-full" aria-hidden="true"></span>';
102 }
103 $rating_html .= '</span>';
104 $rating_html .= '<span class="screen-reader-text">Rate this plugin</span>';
105 $rating_html .= '</a>';
106 $links[] = $rating_html;
107 }
108 return $links;
109 }
110
111 /**
112 * Enqueue rating styles for plugin meta row.
113 */
114 add_action( 'admin_enqueue_scripts', 'suretriggers_enqueue_rating_styles' );
115
116 /**
117 * Enqueue CSS styles for 5-star rating display.
118 * Following modular CSS organization best practices.
119 *
120 * @return void
121 */
122 function suretriggers_enqueue_rating_styles() {
123 // Only enqueue on plugins page where rating is displayed.
124 $screen = get_current_screen();
125 if ( $screen && 'plugins' === $screen->id ) {
126 wp_enqueue_style(
127 'suretriggers-rating',
128 plugin_dir_url( SURE_TRIGGERS_FILE ) . 'assets/css/st-rating.css',
129 [],
130 defined( 'SURE_TRIGGERS_VER' ) ? SURE_TRIGGERS_VER : '1.0.0'
131 );
132 }
133 }
134
135 /**
136 * SureTrigger Trigger Button shortcode.
137 *
138 * @param array $atts Attributes.
139 * @param null $content Content.
140 * @return string|bool
141 */
142 function suretrigger_button( $atts, $content = null ) {
143 $atts = shortcode_atts(
144 [
145 'id' => 0,
146 'button_label' => __( 'Click here', 'suretriggers' ),
147 'user_redirect_url' => '',
148 'visitor_redirect_url' => '',
149 'button_class' => 'suretrigger_button',
150 'button_id' => 'suretrigger_button',
151 'click_loading_label' => __( 'Clicking...', 'suretriggers' ),
152 'after_clicked_label' => __( 'Clicked!!', 'suretriggers' ),
153 'click_once' => 'true',
154 'cookie_duration' => '15',
155 ],
156 $atts,
157 'trigger_button'
158 );
159 ob_start();
160 $user_id = get_current_user_id();
161 ?>
162
163 <form method="post" class="suretrigger_button_form" id="suretrigger_button_form_<?php echo esc_attr( (string) $atts['id'] ); ?>">
164 <input type="hidden" name="st_trigger_id" value="<?php echo esc_attr( (string) $atts['id'] ); ?>" />
165 <input type="hidden" name="st_nonce" value="<?php echo esc_attr( wp_create_nonce( 'suretrigger_form' ) ); ?>"/>
166 <input type="hidden" name="st_login_url" value="<?php echo esc_attr( $atts['user_redirect_url'] ); ?>"/>
167 <input type="hidden" name="st_non_login_url" value="<?php echo esc_attr( $atts['visitor_redirect_url'] ); ?>"/>
168 <input type="hidden" name="st_click" value="<?php echo esc_attr( $atts['click_once'] ); ?>"/>
169 <input type="hidden" name="st_button_label" value="<?php echo esc_attr( $atts['button_label'] ); ?>"/>
170 <input type="hidden" name="st_loading_label" value="<?php echo esc_attr( $atts['click_loading_label'] ); ?>"/>
171 <input type="hidden" name="st_clicked_label" value="<?php echo esc_attr( $atts['after_clicked_label'] ); ?>"/>
172 <input type="hidden" name="action" value="handle_trigger_button_click"/>
173 <input type="hidden" name="st_cookie_duration" value="<?php echo esc_attr( $atts['cookie_duration'] ); ?>"/>
174 <input type="hidden" name="st_user_id" value="<?php echo esc_attr( (string) $user_id ); ?>"/>
175 <?php
176 global $post;
177 if ( ! empty( $post ) && is_object( $post ) && isset( $post->ID ) && isset( $post->post_title ) ) {
178 ?>
179 <input type="hidden" name="st_button_post_id" value="<?php echo esc_attr( $post->ID ); ?>"/>
180 <input type="hidden" name="st_button_post_title" value="<?php echo esc_attr( $post->post_title ); ?>"/>
181 <?php
182 }
183 $cookie_name = 'st_trigger_button_clicked_' . esc_attr( (string) $atts['id'] );
184 if ( isset( $_COOKIE[ $cookie_name ] ) && 'yes_' . $user_id == $_COOKIE[ $cookie_name ] ) {
185 ?>
186 <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>
187 <?php
188 } else {
189 ?>
190 <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>
191 <?php
192 }
193 ?>
194 </form>
195
196 <?php
197 return ob_get_clean();
198 }
199 add_shortcode( 'st_trigger_button', 'suretrigger_button' );
200
201 /**
202 * SureTrigger Trigger Button custom style.
203 *
204 * @return void
205 */
206 function suretrigger_button_custom_style() {
207 wp_enqueue_style( 'st-trigger-button-style', SURE_TRIGGERS_URL . 'assets/css/st-trigger-button.css', [], SURE_TRIGGERS_VER );
208 wp_enqueue_script( 'st-trigger-button-script', SURE_TRIGGERS_URL . 'assets/js/st-trigger-button.js', [], SURE_TRIGGERS_VER, true );
209 wp_localize_script( 'st-trigger-button-script', 'st_ajax_object', [ 'ajax_url' => admin_url( 'admin-ajax.php' ) ] );
210 }
211 add_action( 'wp_enqueue_scripts', 'suretrigger_button_custom_style' );
212
213 /**
214 * SureTrigger Trigger Button action.
215 *
216 * @return void
217 */
218 function suretrigger_trigger_button_action() {
219
220 // Trigger the custom hook before ajax response.
221 do_action( 'st_trigger_button_before_click_hook' );
222
223 if ( ! isset( $_POST['st_nonce'] ) || ! wp_verify_nonce( wp_strip_all_tags( $_POST['st_nonce'] ), 'suretrigger_form' ) ) {
224 wp_send_json_error( [ 'error' => 'Invalid nonce' ] );
225 }
226
227 if ( is_user_logged_in() ) {
228 $user_id = get_current_user_id();
229
230 if ( isset( $_POST['st_trigger_id'] ) && ! empty( $_POST['st_trigger_id'] ) ) {
231
232 $st_trigger_id = sanitize_text_field( $_POST['st_trigger_id'] );
233
234 $cookie_duration = isset( $_POST['st_cookie_duration'] ) ? sanitize_text_field( $_POST['st_cookie_duration'] ) : '';
235 $st_click = isset( $_POST['st_click'] ) ? sanitize_text_field( $_POST['st_click'] ) : '';
236
237 $post_data = [];
238
239 if ( isset( $_POST['st_button_post_id'] ) ) {
240 $post_data['parent_post_id'] = sanitize_text_field( $_POST['st_button_post_id'] );
241 }
242
243 if ( isset( $_POST['st_button_post_title'] ) ) {
244 $post_data['parent_post_title'] = sanitize_text_field( $_POST['st_button_post_title'] );
245 }
246 do_action( 'st_trigger_button_action', $st_trigger_id, $user_id, sanitize_text_field( $cookie_duration ), $st_click, $post_data );
247
248 if ( isset( $_POST['st_login_url'] ) && ! empty( $_POST['st_login_url'] ) ) {
249 wp_send_json_success( esc_url_raw( $_POST['st_login_url'] ) );
250 }
251 }
252 } else {
253 if ( isset( $_POST['st_non_login_url'] ) && ! empty( $_POST['st_non_login_url'] ) ) {
254 wp_send_json_success( esc_url_raw( $_POST['st_non_login_url'] ) );
255 } else {
256 wp_send_json_success( wp_login_url() );
257 }
258 }
259
260 // Trigger the custom hook after ajax response.
261 do_action( 'st_trigger_button_after_click_hook' );
262
263 wp_die();
264 }
265 add_action( 'wp_ajax_handle_trigger_button_click', 'suretrigger_trigger_button_action' );
266 add_action( 'wp_ajax_nopriv_handle_trigger_button_click', 'suretrigger_trigger_button_action' );
267
268 /**
269 * SureTrigger Trigger Button set cookie.
270 *
271 * @param int $st_trigger_id Trigger ID.
272 * @param int $user_id User ID.
273 * @param int $cookie_duration Cookie Duration.
274 *
275 * @return void
276 */
277 function st_trigger_button_set_cookie( $st_trigger_id, $user_id, $cookie_duration ) {
278 // Set the cookie.
279 $cookie_name = 'st_trigger_button_clicked_' . $st_trigger_id;
280 $cookie_value = 'yes_' . $user_id;
281 if ( isset( $cookie_duration ) ) {
282 $expiration = time() + 60 * 60 * 24 * intval( $cookie_duration ); // Set the expiration time as per user requested.
283 } else {
284 $expiration = time() + 60 * 60 * 24 * 15;
285 }
286
287 if ( ! defined( 'COOKIEPATH' ) ) {
288 define( 'COOKIEPATH', '/' );
289 }
290
291 if ( ! defined( 'COOKIE_DOMAIN' ) ) {
292 define( 'COOKIE_DOMAIN', false );
293 }
294
295 $secure = is_ssl();
296 setcookie( $cookie_name, $cookie_value, $expiration, COOKIEPATH, COOKIE_DOMAIN, $secure, true ); // phpcs:ignore
297
298 }
299 add_action( 'st_trigger_button_set_cookie', 'st_trigger_button_set_cookie', 10, 3 );
300