PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / LoginRedirect.php
wp-user-avatar / src Last commit date
Admin 1 month ago AdminBarDashboardAccess 3 years ago Classes 1 week ago ContentProtection 1 month ago Functions 4 months ago Integrations 1 year ago Membership 1 week ago NavigationMenuLinks 2 years ago RegisterActivation 9 months ago ShortcodeParser 1 month ago Themes 2 months ago Widgets 11 months ago lib 3 years ago templates 1 month ago Base.php 2 months ago Cron.php 2 years ago DBTables.php 3 years ago DBUpdates.php 1 month ago LoginRedirect.php 9 months ago RegisterScripts.php 4 months ago eu-vat-rates.json 10 months ago
LoginRedirect.php
319 lines
1 <?php
2
3 namespace ProfilePress\Core;
4
5 use ProfilePress\Core\Admin\SettingsPages\AbstractSettingsPage;
6 use ProfilePress\Core\Membership\Repositories\PlanRepository;
7 use ProfilePress\Custom_Settings_Page_Api;
8
9 class LoginRedirect
10 {
11 const DB_OPTION_NAME = 'ppress_login_redirect_rules';
12
13 public function __construct()
14 {
15 add_filter('ppress_settings_page_submenus_tabs', [$this, 'header_sub_menu_tab']);
16
17 add_action('ppress_admin_settings_submenu_page_general_login-redirect', [$this, 'login_redirect_fields_page']);
18
19 add_action('ppress_register_menu_page_general_login-redirect', function () {
20
21 add_filter('ppress_general_settings_admin_page_title', function () {
22 return esc_html__('Login Redirect', 'wp-user-avatar');
23 });
24
25 add_action('admin_init', [$this, 'save_settings']);
26
27 add_action('admin_enqueue_scripts', [$this, 'enqueue_script']);
28 add_action('admin_footer', [$this, 'js_template']);
29 });
30
31 add_filter('login_redirect', function ($redirect_to, $requested_redirect_to, $user) {
32 return $this->get_login_redirect_url($user, $redirect_to);
33 }, PHP_INT_MAX - 1, 3);
34
35 add_filter('ppress_login_redirect', function ($url, $login_form_id, $user) {
36 return $this->get_login_redirect_url($user, $url);
37 }, PHP_INT_MAX - 1, 3);
38 }
39
40 /**
41 * @param \WP_User $user
42 * @param string $default_url
43 *
44 * @return false|string|null
45 */
46 public function get_login_redirect_url($user, $default_url = '')
47 {
48 if (isset($user->ID)) {
49
50 $user_id = $user->ID;
51
52 $saved_rules = get_option(self::DB_OPTION_NAME, []);
53
54 $membership_plan_rules = ppress_var($saved_rules, 'membership_plan', []);
55
56 $user_role_rules = ppress_var($saved_rules, 'user_role', []);
57
58 if (is_array($membership_plan_rules) && ! empty($membership_plan_rules)) {
59
60 foreach ($membership_plan_rules as $plan_id => $redirect_url_slug) {
61
62 if (ppress_has_active_subscription($user_id, $plan_id)) {
63 return home_url($this->cleanup_redirect_slug($redirect_url_slug));
64 }
65 }
66 }
67
68 if (is_array($user_role_rules) && ! empty($user_role_rules)) {
69
70 $user_roles = $user instanceof \WP_User ? $user->roles : [];
71
72 foreach ($user_role_rules as $user_role => $redirect_url_slug) {
73
74 if (in_array($user_role, $user_roles, true)) {
75 return home_url($this->cleanup_redirect_slug($redirect_url_slug));
76 }
77 }
78 }
79 }
80
81 return $default_url;
82 }
83
84 private function cleanup_redirect_slug($slug)
85 {
86 if (strstr($slug, 'http')) {
87 $slug = str_replace(home_url('/'), '', $slug);
88 }
89
90 return $slug;
91 }
92
93 public function enqueue_script()
94 {
95 wp_enqueue_script(
96 'ppress-login-redirect',
97 PPRESS_ASSETS_URL . '/js/admin/login-redirect.js',
98 ['jquery', 'wp-util']
99 );
100 }
101
102 public function header_sub_menu_tab($tabs)
103 {
104 $tabs[60] = [
105 'parent' => 'general',
106 'id' => 'login-redirect',
107 'label' => esc_html__('Login Redirect', 'wp-user-avatar')
108 ];
109
110 return $tabs;
111 }
112
113 public function save_settings()
114 {
115 if (isset($_POST['ppress_login_redirect_save'])) {
116
117 check_admin_referer('wp-csa-nonce', 'wp_csa_nonce');
118
119 $payload = ['membership_plan' => [], 'user_role' => []];
120
121 if (isset($_POST['ppress_login_redirect']['membership_plan'])) {
122 $payload['membership_plan'] = $this->sanitize_payload($_POST['ppress_login_redirect']['membership_plan']);
123 }
124
125 if (isset($_POST['ppress_login_redirect']['user_role'])) {
126 $payload['user_role'] = $this->sanitize_payload($_POST['ppress_login_redirect']['user_role']);
127 }
128
129 update_option(self::DB_OPTION_NAME, $payload);
130
131 wp_safe_redirect(esc_url_raw(add_query_arg('settings-updated', 'true')));
132 exit;
133 }
134 }
135
136 private function sanitize_payload($bucket)
137 {
138 $val = [];
139
140 foreach ($bucket as $k => $v) {
141 $val[sanitize_text_field($k)] = sanitize_text_field($v);
142 }
143
144 return $val;
145 }
146
147 public function login_redirect_fields_page()
148 {
149 add_filter('wp_cspa_main_content_area', function () {
150 return $this->settings_page_content();
151 });
152
153 add_action('wp_cspa_form_tag', function () {
154 echo 'id="ppress-login-redirect-form"';
155 });
156
157 add_action('wp_cspa_before_post_body_content', function () {
158 echo '<div class="ppress-submit-wrap">';
159 printf('<input type="submit" name="submit" id="ppress-login-redirect-submit-btn" class="button button-primary" value="%s">', esc_html__('Save Changes', 'wp-user-avatar'));
160 echo '</div>';
161 });
162
163 $instance = Custom_Settings_Page_Api::instance();
164 $instance->option_name(self::DB_OPTION_NAME);
165 $instance->page_header(esc_html__('Login Redirect', 'wp-user-avatar'));
166 AbstractSettingsPage::register_core_settings($instance);
167 $instance->build();
168 }
169
170 public static function field_addition_dropdown($saved_rules, $fieldGroup = 'plans')
171 {
172 $lookup = array_keys($saved_rules);
173
174 $user_roles = ppress_get_editable_roles(false);
175
176 $membership_plans = PlanRepository::init()->retrieveAll();
177
178 echo '<select class="ppress-login-redirect-select-field">';
179
180 printf('<option value="">%s</option>', esc_html__('Select...', 'wp-user-avatar'));
181
182 if ($fieldGroup == 'user_roles' && ! empty($user_roles)) {
183 foreach ($user_roles as $user_role_id => $user_role) {
184 printf('<option value="%s"%s>%s</option>', $user_role_id, in_array($user_role_id, $lookup) ? ' disabled' : '', $user_role['name']);
185 }
186 } else {
187 foreach ($membership_plans as $membership_plan) {
188 printf('<option value="%s"%s>%s</option>', $membership_plan->get_id(), in_array($membership_plan->get_id(), $lookup) ? ' disabled' : '', $membership_plan->get_name());
189 }
190 }
191
192 echo '</select>';
193 }
194
195 private function settings_page_content()
196 {
197 $user_roles = ppress_get_editable_roles(false);
198
199 $saved_data = get_option(self::DB_OPTION_NAME, []);
200
201 $membership_plan_saved_rules = ppress_var($saved_data, 'membership_plan', []);
202 $user_role_saved_rules = ppress_var($saved_data, 'user_role', []);
203
204 // we are using some checkout field manager page classes to get the styling. hence the mention of checkout-* classes
205 ob_start();
206 ?>
207 <div class="ppress-login-redirect-rules-wrap" data-redirect-type="membership_plan">
208 <div class="wp-clearfix" id="widgets-right">
209 <div class="widgets-holder-wrap">
210 <div class="widgets-sortables">
211 <div class="sidebar-name">
212 <h2><?php esc_html_e('Login Redirect Based on Membership Plan', 'wp-user-avatar') ?></h2>
213 </div>
214 <div class="sidebar-description">
215 <p class="description"><?php esc_html_e('Add or remove rules that redirect users to specific URLs after login based on their subscribed membership plans.', 'wp-user-avatar') ?></p>
216 </div>
217 <div class="ppress-checkout-fields ppress-login-redirect-items-wrap">
218 <?php foreach ($membership_plan_saved_rules as $plan_id => $redirect_url_slug) : ?>
219 <?php $this->redirect_rule_item(
220 'membership_plan',
221 $plan_id,
222 $redirect_url_slug,
223 ppress_get_plan($plan_id)->get_name()
224 ); ?>
225 <?php endforeach; ?>
226
227 <div class="ppress-no-login-redirect-rule-message">
228 <p><?php esc_html_e('No redirect rule found. Please add one.', 'wp-user-avatar'); ?></p>
229 </div>
230 </div>
231 <div class="ppress-checkout-add-field ppress-login-redirect-add-rule">
232 <p style="text-align:right">
233 <?php self::field_addition_dropdown($membership_plan_saved_rules); ?>
234 <button class="button"><?php esc_html_e('Add Rule', 'wp-user-avatar') ?></button>
235 </p>
236 </div>
237 </div>
238 </div>
239 </div>
240 </div>
241
242 <div style="margin-top: 15px" class="ppress-login-redirect-rules-wrap" data-redirect-type="user_role">
243 <div class="wp-clearfix" id="widgets-right">
244 <div class="widgets-holder-wrap">
245 <div class="widgets-sortables">
246 <div class="sidebar-name">
247 <h2><?php esc_html_e('Login Redirect Based on User Role', 'wp-user-avatar') ?></h2>
248 </div>
249 <div class="sidebar-description">
250 <p class="description"><?php esc_html_e('Add or remove rules that redirect users to specific URLs after login based on their user roles.', 'wp-user-avatar') ?></p>
251 </div>
252 <div class="ppress-checkout-fields ppress-login-redirect-items-wrap">
253 <?php foreach ($user_role_saved_rules as $user_role_id => $redirect_url_slug) : ?>
254 <?php $this->redirect_rule_item(
255 'user_role',
256 $user_role_id,
257 $redirect_url_slug,
258 ppress_var(ppress_var($user_roles, $user_role_id, []), 'name', '')
259 ); ?>
260 <?php endforeach; ?>
261
262 <div class="ppress-no-login-redirect-rule-message">
263 <p><?php esc_html_e('No redirect rule found. Please add one.', 'wp-user-avatar'); ?></p>
264 </div>
265 </div>
266 <div class="ppress-checkout-add-field ppress-login-redirect-add-rule">
267 <p style="text-align:right">
268 <?php self::field_addition_dropdown($user_role_saved_rules, 'user_roles'); ?>
269 <button class="button"><?php esc_html_e('Add Rule', 'wp-user-avatar') ?></button>
270 </p>
271 </div>
272 </div>
273 </div>
274 </div>
275 </div>
276 <input type="hidden" name="ppress_login_redirect_save" value="true">
277 <?php
278
279 return ob_get_clean();
280 }
281
282 public function redirect_rule_item($redirect_type, $redirect_target, $redirect_url_slug, $label)
283 {
284 ?>
285 <div class="ppress-login-redirect--repeater-item" data-redirect-target="<?php echo esc_attr($redirect_target); ?>">
286 <label class="ppress-login-redirect--field-label"><?php echo esc_attr($label); ?></label>
287 <div class="ppress-login-redirect--field-control">
288 <div class="ppress-url-prefix-suffix-field">
289 <div class="ppress-url-prefix-field"><code><?php echo home_url('/'); ?></code></div>
290 <input type="text" name="ppress_login_redirect[<?php echo esc_attr($redirect_type); ?>][<?php echo esc_attr($redirect_target); ?>]" value="<?php echo esc_attr($redirect_url_slug); ?>" placeholder="wp-admin/">
291 <div class="ppress-url-suffix-field">
292 <button type="button" class="ppress-login-redirect--remove-field">
293 <span class="dashicons dashicons-no-alt"></span>
294 </button>
295 </div>
296 </div>
297 </div>
298 </div>
299 <?php
300 }
301
302 public function js_template()
303 {
304 echo '<script type="text/html" id="tmpl-ppress-login-redirect-item">';
305 $this->redirect_rule_item('{{ data.redirect_type }}', '{{ data.redirect_target }}', '', '{{ data.label }}');
306 echo '</script>';
307 }
308
309 public static function get_instance()
310 {
311 static $instance = null;
312
313 if (is_null($instance)) {
314 $instance = new self();
315 }
316
317 return $instance;
318 }
319 }