PluginProbe ʕ •ᴥ•ʔ
WP Job Manager / 2.4.6
WP Job Manager v2.4.6
2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.1.3 1.10.0 1.11.0 1.11.1 1.12.0 1.12.1 1.13.0 1.14.0 1.15.0 1.16.0 1.16.1 1.17.0 1.18.0 1.19.0 1.2.0 1.20.0 1.20.1 1.21.0 1.21.1 1.21.2 1.21.3 1.21.4 1.22.0 1.22.1 1.22.2 1.22.3 1.23.0 1.23.1 1.23.10 1.23.11 1.23.12 1.23.13 1.23.2 1.23.3 1.23.4 1.23.5 1.23.6 1.23.7 1.23.8 1.23.9 1.24.0 1.24.0.1 1.25.0 1.25.0.1 1.25.1 1.25.1.1 1.25.2 1.25.2.1 1.25.3 1.25.3.1 1.26.0 1.26.0.1 1.26.1 1.26.1.1 1.26.2 1.26.2.1 1.27.0 1.27.0.1 1.28.0 1.28.0.1 1.29.0 1.29.0.1 1.29.1 1.29.1.1 1.29.2 1.29.2.1 1.29.3 1.29.3.1 1.3.0 1.3.1 1.30.0 1.30.0.1 1.30.1 1.30.1.1 1.30.2 1.30.2.1 1.31.0 1.31.0.1 1.31.1 1.31.1.1 1.31.2 1.31.3 1.32.0 1.32.1 1.32.2 1.32.3 1.33.0 1.33.1 1.33.2 1.33.3 1.33.4 1.33.5 1.34.0 1.34.1 1.34.2 1.34.3 1.34.4 1.34.5 1.35.0 1.35.1 1.35.2 1.35.3 1.36.0 1.36.1 1.36.2 1.37.0 1.38.0 1.38.1 1.39.0 1.4.0 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.7.1 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 1.9.1 1.9.2 1.9.3 2.0.0 2.1.0 2.1.1 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.4.1
wp-job-manager / includes / ui / class-redirect-message.php
wp-job-manager / includes / ui Last commit date
class-modal-dialog.php 2 years ago class-notice.php 2 years ago class-redirect-message.php 2 years ago class-ui-elements.php 2 weeks ago class-ui-settings.php 2 years ago class-ui.php 2 years ago
class-redirect-message.php
139 lines
1 <?php
2 /**
3 * Frontend redirect messages.
4 *
5 * @package wp-job-manager
6 * @since 2.2.0
7 */
8
9 namespace WP_Job_Manager\UI;
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit; // Exit if accessed directly.
13 }
14
15 /**
16 * Redirect after an action is finished and make sure a message can displayed on the next page load.
17 *
18 * Stores the messages in a transient with an ID, and passes along the ID as a query string to the redirected URL.
19 *
20 * @since 2.2.0
21 *
22 * @internal This API is still under development and subject to change.
23 * @access private
24 */
25 class Redirect_Message {
26
27 const DEFAULT_QUERY_VAR = 'message';
28 const TRANSIENT_PREFIX = 'wpjm_message_';
29
30 /**
31 * Redirect to a URL with a message to be displayed on the next page load.
32 *
33 * @param string $url URL to redirect to.
34 * @param string $message Optional message to be displayed on the next page load.
35 * @param string $query_var A query variable added to the redirect URL, referencing the message transient.
36 */
37 public static function redirect( $url, $message = null, $query_var = '' ) {
38 if ( empty( $query_var ) ) {
39 $query_var = self::DEFAULT_QUERY_VAR;
40 }
41
42 if ( ! empty( $message ) ) {
43 $url = add_query_arg( [ $query_var => self::set_transient_message( $message ) ], $url );
44 }
45 wp_safe_redirect( $url );
46 exit;
47 }
48
49 /**
50 * Get a message set during the previous redirect.
51 *
52 * @param string $query_var Optional namespace for the message.
53 *
54 * @return string|null Message content if there is one.
55 */
56 public static function get_message( $query_var = '' ) {
57
58 if ( empty( $query_var ) ) {
59 $query_var = self::DEFAULT_QUERY_VAR;
60 }
61
62 //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- No action is performed.
63 $key = sanitize_key( wp_unslash( $_GET[ $query_var ] ?? null ) );
64
65 if ( ! $key ) {
66 return null;
67 }
68
69 $content = self::get_transient_message( $key );
70
71 if ( ! $content ) {
72 return null;
73 }
74
75 $content .= self::add_inline_script( $query_var );
76
77 UI::ensure_styles();
78
79 return $content;
80 }
81
82 /**
83 * Add a message for the next page load.
84 *
85 * @param string $message Message to be displayed on the next page load.
86 *
87 * @return string Transient key.
88 */
89 private static function set_transient_message( $message ) {
90 $key = uniqid();
91
92 set_transient( self::TRANSIENT_PREFIX . $key, $message, 10 * MINUTE_IN_SECONDS );
93
94 return $key;
95 }
96
97 /**
98 * Get a message for the given transient key, and optionally delete the transient.
99 *
100 * @param string $key Transient key.
101 * @param bool $delete Whether to delete the message after retrieving it.
102 *
103 * @return string|null Message to be displayed on the next page load.
104 */
105 private static function get_transient_message( $key, $delete = true ) {
106 $content = get_transient( self::TRANSIENT_PREFIX . $key );
107
108 if ( ! is_string( $content ) ) {
109 return null;
110 }
111
112 if ( $delete ) {
113 delete_transient( self::TRANSIENT_PREFIX . $key );
114 }
115
116 return $content;
117 }
118
119 /**
120 * Add a small script to remove the redirect message query var from the URL upon page load.
121 *
122 * @param string $query_var Query var to remove.
123 *
124 * @return string Script HTML.
125 */
126 private static function add_inline_script( $query_var ) {
127 $query_var = esc_js( $query_var );
128 return <<<HTML
129 <script>
130 const url = new URL( location.href );
131 url.searchParams.delete('{$query_var}');
132 history.replaceState(null, '', url)
133
134 </script>
135 HTML;
136 }
137
138 }
139