PluginProbe
LoginPress | wp-login Custom Login Page Customizer / 1.4.2
LoginPress | wp-login Custom Login Page Customizer v1.4.2
6.2.5 6.2.4 6.2.3 6.2.2 6.2.1 trunk 1.0.0 1.0.1 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.2 1.0.20 1.0.21 1.0.22 1.0.23 1.0.3 1.0.4 All 118 releases
loginpress / loginpress.php

loginpress.php in LoginPress | wp-login Custom Login Page Customizer 1.4.2, at loginpress.php

617 lines 19.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: LoginPress - Customizing the WordPress Login
4 * Plugin URI: https://WPBrigade.com/wordpress/plugins/loginpress/
5 * Description: LoginPress is the best <code>wp-login</code> Login Page Customizer plugin by <a href="https://wpbrigade.com/">WPBrigade</a> which allows you to completely change the layout of login, register and forgot password forms.
6 * Version: 1.4.2
7 * Author: WPBrigade
8 * Author URI: https://WPBrigade.com/
9 * Text Domain: loginpress
10 * Domain Path: /languages
11 *
12 * @package loginpress
13 * @category Core
14 * @author WPBrigade
15 */
16
17
18 if ( ! class_exists( 'LoginPress' ) ) :
19
20 final class LoginPress {
21
22 /**
23 * @var string
24 */
25 public $version = '1.4.2';
26
27 /**
28 * @var The single instance of the class
29 * @since 1.0.0
30 */
31 protected static $_instance = null;
32
33 /**
34 * @var WP_Session session
35 */
36 public $session = null;
37
38 /**
39 * @var WP_Query $query
40 */
41 public $query = null;
42
43 /**s
44 * @var WP_Countries $countries
45 */
46 public $countries = null;
47
48 /* * * * * * * * * *
49 * Class constructor
50 * * * * * * * * * */
51 public function __construct() {
52
53 $this->define_constants();
54 $this->includes();
55 $this->_hooks();
56
57 }
58
59 /**
60 * Define LoginPress Constants
61 */
62 private function define_constants() {
63
64 $this->define( 'LOGINPRESS_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
65 $this->define( 'LOGINPRESS_DIR_PATH', plugin_dir_path( __FILE__ ) );
66 $this->define( 'LOGINPRESS_DIR_URL', plugin_dir_url( __FILE__ ) );
67 $this->define( 'LOGINPRESS_ROOT_PATH', dirname( __FILE__ ) . '/' );
68 $this->define( 'LOGINPRESS_ROOT_FILE', __FILE__ );
69 $this->define( 'LOGINPRESS_VERSION', $this->version );
70 $this->define( 'LOGINPRESS_FEEDBACK_SERVER', 'https://wpbrigade.com/' );
71 }
72
73 /**
74 * Include required core files used in admin and on the frontend.
75 * @version 1.1.7
76 */
77
78 public function includes() {
79
80 include_once( LOGINPRESS_DIR_PATH . 'include/compatibility.php' );
81 include_once( LOGINPRESS_DIR_PATH . 'custom.php' );
82 include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-setup.php' );
83 include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-ajax.php' );
84 // include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-filter-plugin.php' );
85 include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-developer-hooks.php' );
86 include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-notifications.php' );
87 if ( is_multisite() ) {
88 require_once( LOGINPRESS_DIR_PATH . 'include/class-loginpress-theme-template.php' );
89 }
90
91 $loginpress_setting = get_option( 'loginpress_setting' );
92
93 $loginpress_privacy_policy = isset( $loginpress_setting['enable_privacy_policy'] ) ? $loginpress_setting['enable_privacy_policy'] : 'off';
94 if ( 'off' != $loginpress_privacy_policy ) {
95 include_once( LOGINPRESS_DIR_PATH . 'include/privacy-policy.php' );
96 }
97
98 $login_with_email = isset( $loginpress_setting['login_order'] ) ? $loginpress_setting['login_order'] : 'default';
99 if ( 'default' != $login_with_email ) {
100 include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-login-order.php' );
101 new LoginPress_Login_Order();
102 }
103
104 $enable_reg_pass_field = isset( $loginpress_setting['enable_reg_pass_field'] ) ? $loginpress_setting['enable_reg_pass_field'] : 'off';
105 if ( 'off' != $enable_reg_pass_field ) {
106 include_once( LOGINPRESS_DIR_PATH . 'classes/class-loginpress-custom-password.php' );
107 new LoginPresss_Custom_Password();
108 }
109 }
110
111 /**
112 * Hook into actions and filters
113 * @since 1.0.0
114 * @version 1.2.2
115 */
116 private function _hooks() {
117
118 add_action( 'admin_menu', array( $this, 'register_options_page' ) );
119 add_action( 'plugins_loaded', array( $this, 'textdomain' ) );
120 add_filter( 'plugin_row_meta', array( $this, '_row_meta'), 10, 2 );
121 add_action( 'admin_enqueue_scripts', array( $this, '_admin_scripts' ) );
122 add_action( 'admin_footer', array( $this, 'add_deactive_modal' ) );
123 add_action( 'plugin_action_links', array( $this, 'loginpress_action_links' ), 10, 2 );
124 add_action( 'admin_init', array( $this, 'redirect_optin' ) );
125 add_filter( 'auth_cookie_expiration', array( $this, '_change_auth_cookie_expiration' ), 10, 3 );
126 //add_filter( 'plugins_api', array( $this, 'get_addon_info_' ) , 100, 3 );
127 if ( is_multisite() ) {
128 add_action( 'admin_init', array( $this, 'redirect_loginpress_edit_page' ) );
129 add_action( 'admin_init', array( $this, 'check_loginpress_page' ) );
130 }
131
132 }
133
134 /**
135 * Redirect to Optin page.
136 *
137 * @since 1.0.15
138 */
139 function redirect_optin() {
140
141 // delete_option( '_loginpress_optin' );
142
143 if ( isset( $_POST['loginpress-submit-optout'] ) ) {
144
145 update_option( '_loginpress_optin', 'no' );
146 $this->_send_data( array(
147 'action' => 'Skip',
148 ) );
149
150 } elseif ( isset( $_POST['loginpress-submit-optin'] ) ) {
151
152 update_option( '_loginpress_optin', 'yes' );
153 $fields = array(
154 'action' => 'Activate',
155 'track_mailchimp' => 'yes'
156 );
157 $this->_send_data( $fields );
158
159 } elseif ( ! get_option( '_loginpress_optin' ) && isset( $_GET['page'] ) && ( $_GET['page'] === 'loginpress-settings' || $_GET['page'] === 'loginpress' || $_GET['page'] === 'abw' ) ) {
160
161 wp_redirect( admin_url('admin.php?page=loginpress-optin&redirect-page=' . $_GET['page'] ) );
162 exit;
163 } elseif ( get_option( '_loginpress_optin' ) && ( get_option( '_loginpress_optin' ) == 'yes' || get_option( '_loginpress_optin' ) == 'no' ) && isset( $_GET['page'] ) && $_GET['page'] === 'loginpress-optin' ) {
164 wp_redirect( admin_url( 'admin.php?page=loginpress-settings' ) );
165 exit;
166 }
167 }
168
169
170 /**
171 * Main Instance
172 *
173 * @since 1.0.0
174 * @static
175 * @see loginPress_loader()
176 * @return Main instance
177 */
178 public static function instance() {
179 if ( is_null( self::$_instance ) ) {
180 self::$_instance = new self();
181 }
182 return self::$_instance;
183 }
184
185
186 /**
187 * Load Languages
188 * @since 1.0.0
189 */
190 public function textdomain() {
191
192 $plugin_dir = dirname( plugin_basename( __FILE__ ) ) ;
193 load_plugin_textdomain( 'loginpress', false, $plugin_dir . '/languages/' );
194 }
195
196 /**
197 * Define constant if not already set
198 * @param string $name
199 * @param string|bool $value
200 */
201 private function define( $name, $value ) {
202 if ( ! defined( $name ) ) {
203 define( $name, $value );
204 }
205 }
206
207 /**
208 * Init WPBrigade when WordPress Initialises.
209 */
210 public function init() {
211 // Before init action
212 }
213
214 /**
215 * Create LoginPress Page Template.
216 *
217 * @since 1.1.3
218 */
219 public function check_loginpress_page() {
220
221 // Retrieve the LoginPress admin page option, that was created during the activation process.
222 $option = $this->get_loginpress_page();
223
224 include LOGINPRESS_DIR_PATH . 'include/create-loginpress-page.php';
225 // Retrieve the status of the page, if the option is available.
226 if ( $option ) {
227 $page = get_post( $option );
228 $status = $page->post_status;
229 } else {
230 $status = null;
231 }
232
233 // Check the status of the page. Let's fix it, if the page is missing or in the trash.
234 if ( empty( $status ) || 'trash' === $status ) {
235 new LoginPress_Page_Create();
236 }
237 }
238
239 /**
240 * function for redirect the LoginPress page on editing.
241 *
242 * @since 1.1.3
243 */
244 public function redirect_loginpress_edit_page() {
245 global $pagenow;
246
247 $page = $this->get_loginpress_page();
248
249 if ( ! $page ) {
250 return;
251 }
252
253 $page_url = get_permalink( $page );
254 $page_id = get_post( $page );
255 $page_id = $page->ID;
256
257 // Generate the redirect url.
258 $url = add_query_arg(
259 array(
260 'autofocus[section]' => 'loginpress_panel',
261 'url' => rawurlencode( $page_url ),
262 ),
263 admin_url( 'customize.php' )
264 );
265
266 /* Check current admin page. */
267 if ( $pagenow == 'post.php' && isset( $_GET['post'] ) && $_GET['post'] == $page_id ) {
268 wp_safe_redirect( $url );
269 }
270 }
271
272 /**
273 * Add new page in Apperance to customize Login Page
274 */
275 public function register_options_page() {
276
277 add_submenu_page( null, __( 'Activate', 'loginpress' ), __( 'Activate', 'loginpress' ), 'manage_options', 'loginpress-optin', array( $this, 'render_optin' ) );
278
279 add_theme_page( __( 'LoginPress', 'loginpress' ), __( 'LoginPress', 'loginpress' ), 'manage_options', "abw", '__return_null' );
280 }
281
282
283 /**
284 * Show Opt-in Page.
285 *
286 * @since 1.0.15
287 */
288 function render_optin() {
289 include LOGINPRESS_DIR_PATH . 'include/loginpress-optin-form.php';
290 }
291
292 /**
293 * Wrapper function to send data.
294 * @param [arrays] $args.
295 *
296 * @since 1.0.15
297 * @version 1.0.23
298 */
299 function _send_data( $args ) {
300
301 $cuurent_user = wp_get_current_user();
302 $fields = array(
303 'email' => get_option( 'admin_email' ),
304 'website' => get_site_url(),
305 'action' => '',
306 'reason' => '',
307 'reason_detail' => '',
308 'display_name' => $cuurent_user->display_name,
309 'blog_language' => get_bloginfo( 'language' ),
310 'wordpress_version' => get_bloginfo( 'version' ),
311 'php_version' => PHP_VERSION,
312 'plugin_version' => LOGINPRESS_VERSION,
313 'plugin_name' => 'LoginPress Free',
314 );
315
316 $args = array_merge( $fields, $args );
317 $response = wp_remote_post( LOGINPRESS_FEEDBACK_SERVER, array(
318 'method' => 'POST',
319 'timeout' => 5,
320 'httpversion' => '1.0',
321 'blocking' => true,
322 'headers' => array(),
323 'body' => $args,
324 ) );
325
326 // echo '<pre>'; print_r( $args ); echo '</pre>';
327
328 }
329
330 /**
331 * Session Expiration
332 *
333 * @since 1.0.18
334 * @version 1.3.2
335 */
336 function _change_auth_cookie_expiration( $expiration, $user_id, $remember ) {
337
338 $loginpress_setting = get_option( 'loginpress_setting' );
339 $_expiration = isset( $loginpress_setting['session_expiration'] ) ? intval( $loginpress_setting['session_expiration'] ) : '';
340
341 /**
342 * return the WordPress default $expiration time if LoginPress Session Expiration time set 0 or empty.
343 * @since 1.0.18
344 */
345 if ( empty( $_expiration ) || '0' == $_expiration ) {
346 return $expiration;
347 }
348
349 /**
350 * $filter_role Use filter `loginpress_exclude_role_session` for return the role.
351 * By default it's false and $expiration time will apply on all user.
352 *
353 * @return string/array role name.
354 * @since 1.3.2
355 */
356 $filter_role = apply_filters( 'loginpress_exclude_role_session', false );
357
358 if ( $filter_role ) {
359 $user_roles = get_userdata( $user_id )->roles;
360
361 // if $filter_role is array, return the default $expiration for each defined role.
362 if ( is_array( $filter_role ) ) {
363 foreach ( $filter_role as $role ) {
364 if ( in_array( $role, $user_roles ) ) {
365 return $expiration;
366 }
367 }
368 } else if ( in_array( $filter_role, $user_roles ) ) {
369 return $expiration;
370 }
371 }
372
373 // Convert Duration (minutes) of the expiration period in seconds.
374 $expiration = $_expiration * 60;
375
376 return $expiration;
377 }
378
379 /**
380 * Load JS or CSS files at admin side and enqueue them
381 * @param string tell you the Page ID
382 * @return void
383 */
384 function _admin_scripts( $hook ) {
385
386 if( $hook == 'toplevel_page_loginpress-settings' || $hook == 'loginpress_page_loginpress-addons' || $hook == 'loginpress_page_loginpress-help' || $hook == 'loginpress_page_loginpress-import-export' || $hook == 'loginpress_page_loginpress-license' ) {
387
388 wp_enqueue_style( 'loginpress_stlye', plugins_url( 'css/style.css', __FILE__ ), array(), LOGINPRESS_VERSION );
389 wp_enqueue_script( 'loginpress_js', plugins_url( 'js/admin-custom.js', __FILE__ ), array(), LOGINPRESS_VERSION );
390
391 // Array for localize.
392 $loginpress_localize = array(
393 'plugin_url' => plugins_url(),
394 );
395
396 wp_localize_script( 'loginpress_js', 'loginpress_script', $loginpress_localize );
397 }
398
399 }
400
401 /**
402 * Add rating icon on plugins page.
403 *
404 * @since 1.0.9
405 * @version 1.1.22
406 */
407
408 public function _row_meta( $meta_fields, $file ) {
409
410 if ( $file != 'loginpress/loginpress.php' ) {
411
412 return $meta_fields;
413 }
414
415 echo "<style>.loginpress-rate-stars { display: inline-block; color: #ffb900; position: relative; top: 3px; }.loginpress-rate-stars svg{ fill:#ffb900; } .loginpress-rate-stars svg:hover{ fill:#ffb900 } .loginpress-rate-stars svg:hover ~ svg{ fill:none; } </style>";
416
417 $plugin_rate = "https://wordpress.org/support/plugin/loginpress/reviews/?rate=5#new-post";
418 $plugin_filter = "https://wordpress.org/support/plugin/loginpress/reviews/?filter=5";
419 $svg_xmlns = "https://www.w3.org/2000/svg";
420 $svg_icon = '';
421
422 for ( $i = 0; $i < 5; $i++ ) {
423 $svg_icon .= "<svg xmlns='" . esc_url( $svg_xmlns ) . "' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>";
424 }
425
426 // Set icon for thumbsup.
427 $meta_fields[] = '<a href="' . esc_url( $plugin_filter ) . '" target="_blank"><span class="dashicons dashicons-thumbs-up"></span>' . __( 'Vote!', 'loginpress' ) . '</a>';
428
429 // Set icon for 5-star reviews. v1.1.22
430 $meta_fields[] = "<a href='" . esc_url( $plugin_rate ) . "' target='_blank' title='" . esc_html__( 'Rate', 'loginpress' ) . "'><i class='loginpress-rate-stars'>" . $svg_icon . "</i></a>";
431
432 return $meta_fields;
433 }
434
435 /**
436 * Add deactivate modal layout.
437 */
438 function add_deactive_modal() {
439 global $pagenow;
440
441 if ( 'plugins.php' !== $pagenow ) {
442 return;
443 }
444
445 include LOGINPRESS_DIR_PATH . 'include/deactivate_modal.php';
446 include LOGINPRESS_DIR_PATH . 'include/loginpress-optout-form.php';
447 }
448
449 /**
450 * Plugin activation
451 *
452 * @since 1.0.15
453 * @version 1.0.22
454 */
455 static function plugin_activation() {
456
457 $loginpress_key = get_option( 'loginpress_customization' );
458 $loginpress_setting = get_option( 'loginpress_setting' );
459
460 // Create a key 'loginpress_customization' with empty array.
461 if ( ! $loginpress_key ) {
462 update_option( 'loginpress_customization', array() );
463 }
464
465 // Create a key 'loginpress_setting' with empty array.
466 if ( ! $loginpress_setting ) {
467 update_option( 'loginpress_setting', array() );
468 }
469 }
470
471 static function plugin_uninstallation() {
472
473 $email = get_option( 'admin_email' );
474
475 $fields = array(
476 'email' => $email,
477 'website' => get_site_url(),
478 'action' => 'Uninstall',
479 'reason' => '',
480 'reason_detail' => '',
481 'blog_language' => get_bloginfo( 'language' ),
482 'wordpress_version' => get_bloginfo( 'version' ),
483 'php_version' => PHP_VERSION,
484 'plugin_version' => LOGINPRESS_VERSION,
485 'plugin_name' => 'LoginPress Free',
486 );
487
488 $response = wp_remote_post( LOGINPRESS_FEEDBACK_SERVER, array(
489 'method' => 'POST',
490 'timeout' => 5,
491 'httpversion' => '1.0',
492 'blocking' => false,
493 'headers' => array(),
494 'body' => $fields,
495 ) );
496
497 }
498
499
500
501 /**
502 * Pull the LoginPress page from options.
503 *
504 * @access public
505 * @since 1.1.3
506 * @version 1.1.7
507 */
508 public function get_loginpress_page() {
509
510 $loginpress_setting = get_option( 'loginpress_setting', array() );
511 if ( ! is_array( $loginpress_setting ) && empty( $loginpress_setting ) ) {
512 $loginpress_setting = array();
513 }
514 $page = array_key_exists( 'loginpress_page', $loginpress_setting ) ? get_post( $loginpress_setting['loginpress_page'] ) : false;
515
516 return $page;
517 }
518
519 /**
520 * Add a link to the settings page to the plugins list
521 *
522 * @since 1.0.11
523 */
524 public function loginpress_action_links( $links, $file ) {
525
526 static $this_plugin;
527
528 if ( empty( $this_plugin ) ) {
529
530 $this_plugin = 'loginpress/loginpress.php';
531 }
532
533 if ( $file == $this_plugin ) {
534
535 $settings_link = sprintf( esc_html__( '%1$s Settings %2$s | %3$s Customize %4$s', 'loginpress' ), '<a href="' . admin_url( 'admin.php?page=loginpress-settings' ) . '">', '</a>', '<a href="' . admin_url( 'admin.php?page=loginpress' ) . '">', '</a>' );
536
537
538 if( 'yes' == get_option( '_loginpress_optin' ) ){
539 $settings_link .= sprintf( esc_html__( ' | %1$s Opt Out %2$s ', 'loginpress'), '<a class="opt-out" href="' . admin_url( 'admin.php?page=loginpress-settings' ) . '">', '</a>' );
540 } else {
541 $settings_link .= sprintf( esc_html__( ' | %1$s Opt In %2$s ', 'loginpress'), '<a href="' . admin_url( 'admin.php?page=loginpress-optin&redirect-page=' .'loginpress-settings' ) . '">', '</a>' );
542 }
543
544 array_unshift( $links, $settings_link );
545
546 if ( ! has_action( 'loginpress_pro_add_template' ) ) :
547 $pro_link = sprintf( esc_html__( '%1$s %3$s Upgrade Pro %4$s %2$s', 'loginpress' ), '<a href="https://wpbrigade.com/wordpress/plugins/loginpress-pro/?utm_source=loginpress-lite&utm_medium=plugin-action-link&utm_campaign=pro-upgrade" target="_blank">', '</a>', '<span class="loginpress-dasboard-pro-link">', '</span>' );
548 array_push( $links, $pro_link );
549 endif;
550 }
551
552 return $links;
553 }
554
555 // function get_addon_info_( $api, $action, $args ) {
556
557 // if ( $action == 'plugin_information' && empty( $api ) && ( ! empty( $_GET['lgp'] ) ) ) {
558
559 // $raw_response = wp_remote_post( 'https://wpbrigade.com/loginpress-api/search.php', array(
560 // 'body' => array(
561 // 'slug' => $args->slug
562 // ) )
563 // );
564
565 // if ( is_wp_error( $raw_response ) || $raw_response['response']['code'] != 200 ) {
566 // return false;
567 // }
568
569 // $plugin = unserialize( $raw_response['body'] );
570
571 // $api = new stdClass();
572 // $api->name = $plugin['title'];
573 // $api->version = $plugin['version'];
574 // $api->download_link = $plugin['download_url'];
575 // $api->tested = '10.0';
576
577 // }
578
579 // return $api;
580 // }
581 } // End Of Class.
582 endif;
583
584
585 /**
586 * Returns the main instance of WP to prevent the need to use globals.
587 *
588 * @since 1.0.0
589 * @return LoginPress
590 */
591 function loginPress_loader() {
592 return LoginPress::instance();
593 }
594
595 // Call the function
596 loginPress_loader();
597
598 /**
599 * Create the Object of Custom Login Entites and Settings.
600 *
601 * @since 1.0.0
602 */
603 new LoginPress_Entities();
604 new LoginPress_Settings();
605
606 /**
607 * Create the Object of Remote Notification.
608 *
609 * @since 1.0.9
610 */
611 if (!class_exists('TAV_Remote_Notification_Client')) {
612 require( LOGINPRESS_ROOT_PATH . 'include/class-remote-notification-client.php' );
613 }
614 $notification = new TAV_Remote_Notification_Client( 125, '16765c0902705d62', 'https://wpbrigade.com?post_type=notification' );
615
616 register_activation_hook( __FILE__, array( 'LoginPress', 'plugin_activation' ) );
617 register_uninstall_hook( __FILE__, array( 'LoginPress', 'plugin_uninstallation' ) );