PluginProbe ʕ •ᴥ•ʔ
Elementor Website Builder – more than just a page builder / 3.5.0-beta4
Elementor Website Builder – more than just a page builder v3.5.0-beta4
4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.22.0-dev1 4.0.0-beta3 3.22.0-dev2 4.0.0-beta4 3.22.0-dev3 4.0.0-beta5 3.22.0-dev4 4.0.0-dev1 3.22.0-dev5 4.0.0-dev2 3.22.0-dev6 4.0.0-dev3 3.22.1 4.0.0-dev4 3.22.2 4.0.0-dev5 3.22.3 4.0.1 3.23.0 4.0.2 3.23.0-beta1 3.23.0-beta2 3.23.0-beta3 3.23.0-beta4 3.23.0-beta5 3.23.0-beta6 3.23.0-dev1 3.23.0-dev2 3.23.0-dev3 3.23.0-dev4 3.23.0-dev5 3.23.0-dev6 3.23.1 3.23.2 3.23.3 3.23.4 3.24.0 3.24.0-beta1 3.24.0-beta2 3.24.0-beta3 3.24.0-dev1 3.24.0-dev2 3.24.0-dev3 3.24.1 3.24.2 3.24.3 3.24.4 3.24.5 3.24.6 3.24.7 3.24.8 3.25.0 3.25.0-beta1 3.25.0-beta2 3.25.0-beta3 3.25.0-dev1 3.25.0-dev2 3.25.0-dev3 3.25.1 3.25.10 3.25.11 3.25.2 3.25.3 3.25.4 3.25.5 3.25.6 3.25.7 3.25.8 3.25.9 3.26.0 3.26.0-beta1 3.26.0-beta2 3.26.0-beta3 3.26.0-beta4 3.26.0-beta5 3.26.0-dev1 3.26.0-dev2 3.26.0-dev3 3.26.0-dev4 3.26.0-dev5 3.26.1 3.26.2 3.26.3 3.26.4 3.26.5 3.27.0 3.27.0-beta1 3.27.0-beta2 3.27.0-dev1 3.27.0-dev2 3.27.1 3.27.2 3.27.3 3.27.4 3.27.5 3.27.6 3.27.7 3.28.0 3.28.0-beta1 3.28.0-beta2 3.28.0-beta3 3.28.0-dev1 3.28.0-dev2 3.28.0-dev3 3.28.1 3.28.2 3.28.3 3.28.4 3.29.0 3.29.0-beta1 trunk 3.29.0-beta2 3.0.0 3.29.0-beta3 3.0.1 3.29.0-beta4 3.0.10 3.29.0-dev1 3.0.11 3.29.0-dev2 3.0.12 3.29.0-dev3 3.0.13 3.29.0-dev4 3.0.14 3.29.1 3.0.15 3.29.2 3.0.16 3.3.0 3.0.2 3.3.1 3.0.3 3.30.0 3.0.4 3.30.0-beta1 3.0.5 3.30.0-beta2 3.0.6 3.30.0-beta3 3.0.7 3.30.0-dev1 3.0.8 3.30.0-dev2 3.0.8.1 3.30.0-dev3 3.0.9 3.30.1 3.1.0 3.30.2 3.1.0-beta1 3.30.3 3.1.0-beta2 3.30.4 3.1.0-beta3 3.31.0 3.1.0-beta4 3.31.0-beta1 3.1.0-dev1 3.31.0-beta2 3.1.0-dev2 3.31.0-dev1 3.1.0-dev3 3.31.0-dev2 3.1.1 3.31.1 3.1.2 3.31.2 3.1.3 3.31.3 3.1.4 3.31.4 3.10.0 3.31.5 3.10.0-dev1 3.32.0 3.10.1 3.32.0-beta1 3.10.2 3.32.0-beta2 3.11.0 3.32.0-beta3 3.11.0-beta1 3.32.0-dev1 3.11.0-beta2 3.32.0-dev2 3.11.0-beta3 3.32.0-dev3 3.11.0-dev1 3.32.1 3.11.0-dev2 3.32.2 3.11.0-dev3 3.32.3 3.11.1 3.32.4 3.11.2 3.32.5 3.11.3 3.33.0 3.11.4 3.33.0-beta1 3.11.5 3.33.0-beta2 3.12.0 3.33.0-beta3 3.12.1 3.33.0-beta4 3.12.2 3.33.0-dev1 3.13.0 3.33.0-dev2 3.13.0-beta1 3.33.0-dev3 3.13.0-beta2 3.33.0-dev4 3.13.0-beta3 3.33.1 3.13.0-dev3 3.33.2 3.13.0-dev4 3.33.3 3.13.1 3.33.4 3.13.2 3.33.5 3.13.3 3.33.6 3.13.4 3.34.0 3.14.0 3.34.0-beta1 3.14.0-beta1 3.34.0-beta2 3.14.0-beta2 3.34.0-beta3 3.14.0-beta3 3.34.0-dev1 3.14.0-beta4 3.34.0-dev2 3.14.0-beta5 3.34.1 3.14.1 3.34.2 3.15.0 3.34.3 3.15.1 3.34.4 3.15.2 3.35.0 3.15.3 3.35.0-beta1 3.16.0 3.35.0-beta2 3.16.0-beta3 3.35.0-beta3 3.16.0-beta4 3.35.0-beta4 3.16.0-dev1 3.35.0-dev1 3.16.0-dev2 3.35.0-dev2 3.16.1 3.35.0-dev3 3.16.2 3.35.0-dev4 3.16.3 3.35.1 3.16.4 3.35.2 3.16.5 3.35.3 3.16.6 3.35.4 3.17.0 3.35.5 3.17.0-dev2 3.35.6 3.17.0-dev3 3.35.7 3.17.0-dev4 3.35.8 3.17.1 3.35.9 3.17.2 3.4.0 3.17.3 3.4.0-dev7 3.18.0 3.4.0-dev8 3.18.0-beta1 3.4.0-dev9 3.18.0-beta2 3.4.1 3.18.0-beta3 3.4.2 3.18.0-beta4 3.4.3 3.18.0-dev1 3.4.4 3.18.1 3.4.5 3.18.2 3.4.6 3.18.3 3.4.7 3.19.0 3.4.8 3.19.0-beta1 3.5.0 3.19.0-beta2 3.5.0-beta1 3.19.0-beta3 3.5.0-beta2 3.19.0-beta4 3.5.0-beta3 3.19.0-beta5 3.5.0-beta4 3.19.0-beta6 3.5.0-beta5 3.19.0-dev1 3.5.0-beta7 3.19.0-dev2 3.5.0-beta8 3.19.0-dev3 3.5.0-dev8 3.19.0-dev4 3.5.0-dev9 3.19.0-dev5 3.5.1 3.19.0-dev6 3.5.2 3.19.1 3.5.3 3.19.2 3.5.4 3.19.3 3.5.5 3.19.4 3.5.6 3.2.0 3.6.0 3.2.1 3.6.0-beta1 3.2.2 3.6.0-beta2 3.2.3 3.6.0-beta3 3.2.4 3.6.0-beta4 3.2.5 3.6.0-beta5 3.20.0 3.6.0-dev1 3.20.0-beta1 3.6.0-dev10 3.20.0-beta2 3.6.1 3.20.0-beta3 3.6.2 3.20.0-beta4 3.6.3 3.20.0-dev1 3.6.4 3.20.0-dev2 3.6.5 3.20.0-dev3 3.6.6 3.20.0-dev4 3.6.7 3.20.1 3.6.8 3.20.2 3.7.0 3.20.3 3.7.0-beta1 3.20.4 3.7.0-beta2 3.21.0 3.7.0-beta3 3.21.0-beta1 3.7.0-beta4 3.21.0-beta2 3.7.0-dev1 3.21.0-beta3 3.7.1 3.21.0-dev1 3.7.2 3.21.0-dev2 3.7.3 3.21.0-dev3 3.7.4 3.21.1 3.7.5 3.21.2 3.7.6 3.21.3 3.7.7 3.21.4 3.7.8 3.21.5 3.8.0 3.21.6 3.8.0-beta1 3.21.7 3.8.0-beta2 3.21.8 3.8.0-beta3 3.22.0 3.8.1 3.22.0-beta1 3.9.0 3.22.0-beta2 3.9.1 3.22.0-beta3 3.9.2 3.22.0-beta4 4.0.0 3.22.0-beta5 4.0.0-beta1 3.22.0-beta6 4.0.0-beta2
elementor / includes / user.php
elementor / includes Last commit date
admin-templates 4 years ago base 4 years ago controls 4 years ago editor-templates 4 years ago elements 4 years ago interfaces 6 years ago libraries 5 years ago managers 4 years ago settings 4 years ago template-library 4 years ago widgets 4 years ago api.php 4 years ago autoloader.php 4 years ago beta-testers.php 6 years ago compatibility.php 4 years ago conditions.php 6 years ago db.php 5 years ago embed.php 4 years ago fonts.php 4 years ago frontend.php 4 years ago heartbeat.php 7 years ago maintenance-mode.php 4 years ago maintenance.php 4 years ago plugin.php 4 years ago preview.php 4 years ago rollback.php 4 years ago shapes.php 6 years ago stylesheet.php 4 years ago tracker.php 4 years ago user.php 4 years ago utils.php 4 years ago
user.php
295 lines
1 <?php
2 namespace Elementor;
3
4 use Elementor\Core\Common\Modules\Ajax\Module as Ajax;
5
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit; // Exit if accessed directly.
8 }
9
10 /**
11 * Elementor user.
12 *
13 * Elementor user handler class is responsible for checking if the user can edit
14 * with Elementor and displaying different admin notices.
15 *
16 * @since 1.0.0
17 */
18 class User {
19
20 /**
21 * The admin notices key.
22 */
23 const ADMIN_NOTICES_KEY = 'elementor_admin_notices';
24
25 const INTRODUCTION_KEY = 'elementor_introduction';
26
27 const BETA_TESTER_META_KEY = 'elementor_beta_tester';
28
29 /**
30 * API URL.
31 *
32 * Holds the URL of the Beta Tester Opt-in API.
33 *
34 * @since 1.0.0
35 * @access private
36 *
37 * @var string API URL.
38 */
39 const BETA_TESTER_API_URL = 'https://my.elementor.com/api/v1/beta_tester/';
40
41 /**
42 * Init.
43 *
44 * Initialize Elementor user.
45 *
46 * @since 1.0.0
47 * @access public
48 * @static
49 */
50 public static function init() {
51 add_action( 'wp_ajax_elementor_set_admin_notice_viewed', [ __CLASS__, 'ajax_set_admin_notice_viewed' ] );
52 add_action( 'admin_post_elementor_set_admin_notice_viewed', [ __CLASS__, 'ajax_set_admin_notice_viewed' ] );
53
54 add_action( 'elementor/ajax/register_actions', [ __CLASS__, 'register_ajax_actions' ] );
55 }
56
57 /**
58 * @since 2.1.0
59 * @access public
60 * @static
61 */
62 public static function register_ajax_actions( Ajax $ajax ) {
63 $ajax->register_ajax_action( 'introduction_viewed', [ __CLASS__, 'set_introduction_viewed' ] );
64 $ajax->register_ajax_action( 'beta_tester_signup', [ __CLASS__, 'register_as_beta_tester' ] );
65 }
66
67 /**
68 * Is current user can edit.
69 *
70 * Whether the current user can edit the post.
71 *
72 * @since 1.0.0
73 * @access public
74 * @static
75 *
76 * @param int $post_id Optional. The post ID. Default is `0`.
77 *
78 * @return bool Whether the current user can edit the post.
79 */
80 public static function is_current_user_can_edit( $post_id = 0 ) {
81 $post = get_post( $post_id );
82
83 if ( ! $post ) {
84 return false;
85 }
86
87 if ( 'trash' === get_post_status( $post_id ) ) {
88 return false;
89 }
90
91 if ( ! self::is_current_user_can_edit_post_type( $post->post_type ) ) {
92 return false;
93 }
94
95 $post_type_object = get_post_type_object( $post->post_type );
96
97 if ( ! isset( $post_type_object->cap->edit_post ) ) {
98 return false;
99 }
100
101 $edit_cap = $post_type_object->cap->edit_post;
102 if ( ! current_user_can( $edit_cap, $post_id ) ) {
103 return false;
104 }
105
106 if ( intval( get_option( 'page_for_posts' ) ) === $post_id ) {
107 return false;
108 }
109
110 return true;
111 }
112
113 /**
114 * Is current user can access elementor.
115 *
116 * Whether the current user role is not excluded by Elementor Settings.
117 *
118 * @since 2.1.7
119 * @access public
120 * @static
121 *
122 * @return bool True if can access, False otherwise.
123 */
124 public static function is_current_user_in_editing_black_list() {
125 $user = wp_get_current_user();
126 $exclude_roles = get_option( 'elementor_exclude_user_roles', [] );
127
128 $compare_roles = array_intersect( $user->roles, $exclude_roles );
129 if ( ! empty( $compare_roles ) ) {
130 return false;
131 }
132
133 return true;
134 }
135
136 /**
137 * Is current user can edit post type.
138 *
139 * Whether the current user can edit the given post type.
140 *
141 * @since 1.9.0
142 * @access public
143 * @static
144 *
145 * @param string $post_type the post type slug to check.
146 *
147 * @return bool True if can edit, False otherwise.
148 */
149 public static function is_current_user_can_edit_post_type( $post_type ) {
150 if ( ! self::is_current_user_in_editing_black_list() ) {
151 return false;
152 }
153
154 if ( ! Utils::is_post_type_support( $post_type ) ) {
155 return false;
156 }
157
158 $post_type_object = get_post_type_object( $post_type );
159
160 if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) {
161 return false;
162 }
163
164 return true;
165 }
166
167 /**
168 * Get user notices.
169 *
170 * Retrieve the list of notices for the current user.
171 *
172 * @since 2.0.0
173 * @access private
174 * @static
175 *
176 * @return array A list of user notices.
177 */
178 private static function get_user_notices() {
179 return get_user_meta( get_current_user_id(), self::ADMIN_NOTICES_KEY, true );
180 }
181
182 /**
183 * Is user notice viewed.
184 *
185 * Whether the notice was viewed by the user.
186 *
187 * @since 1.0.0
188 * @access public
189 * @static
190 *
191 * @param int $notice_id The notice ID.
192 *
193 * @return bool Whether the notice was viewed by the user.
194 */
195 public static function is_user_notice_viewed( $notice_id ) {
196 $notices = self::get_user_notices();
197
198 if ( empty( $notices ) || empty( $notices[ $notice_id ] ) ) {
199 return false;
200 }
201
202 return true;
203 }
204
205 /**
206 * Set admin notice as viewed.
207 *
208 * Flag the user admin notice as viewed using an authenticated ajax request.
209 *
210 * Fired by `wp_ajax_elementor_set_admin_notice_viewed` action.
211 *
212 * @since 1.0.0
213 * @access public
214 * @static
215 */
216 public static function ajax_set_admin_notice_viewed() {
217 if ( empty( $_REQUEST['notice_id'] ) ) {
218 wp_die();
219 }
220
221 $notices = self::get_user_notices();
222 if ( empty( $notices ) ) {
223 $notices = [];
224 }
225
226 $notices[ $_REQUEST['notice_id'] ] = 'true';
227 update_user_meta( get_current_user_id(), self::ADMIN_NOTICES_KEY, $notices );
228
229 if ( ! wp_doing_ajax() ) {
230 wp_safe_redirect( admin_url() );
231 die;
232 }
233
234 wp_die();
235 }
236
237 /**
238 * @since 2.1.0
239 * @access public
240 * @static
241 */
242 public static function set_introduction_viewed( array $data ) {
243 $user_introduction_meta = self::get_introduction_meta();
244
245 $user_introduction_meta[ $data['introductionKey'] ] = true;
246
247 update_user_meta( get_current_user_id(), self::INTRODUCTION_KEY, $user_introduction_meta );
248 }
249
250 public static function register_as_beta_tester( array $data ) {
251 update_user_meta( get_current_user_id(), self::BETA_TESTER_META_KEY, true );
252 $response = wp_safe_remote_post(
253 self::BETA_TESTER_API_URL,
254 [
255 'timeout' => 25,
256 'body' => [
257 'api_version' => ELEMENTOR_VERSION,
258 'site_lang' => get_bloginfo( 'language' ),
259 'beta_tester_email' => $data['betaTesterEmail'],
260 ],
261 ]
262 );
263
264 $response_code = (int) wp_remote_retrieve_response_code( $response );
265
266 if ( 200 === $response_code ) {
267 self::set_introduction_viewed( [
268 'introductionKey' => Beta_Testers::BETA_TESTER_SIGNUP,
269 ] );
270 }
271 }
272
273 /**
274 * @param string $key
275 *
276 * @return array|mixed|string
277 * @since 2.1.0
278 * @access public
279 * @static
280 */
281 public static function get_introduction_meta( $key = '' ) {
282 $user_introduction_meta = get_user_meta( get_current_user_id(), self::INTRODUCTION_KEY, true );
283
284 if ( ! $user_introduction_meta ) {
285 $user_introduction_meta = [];
286 }
287
288 if ( $key ) {
289 return empty( $user_introduction_meta[ $key ] ) ? '' : $user_introduction_meta[ $key ];
290 }
291
292 return $user_introduction_meta;
293 }
294 }
295