PluginProbe
LoginPress | wp-login Custom Login Page Customizer / 1.5.1
LoginPress | wp-login Custom Login Page Customizer v1.5.1
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.5.1, at loginpress.php

620 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.5.1
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.5.1';
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 /**
113 * Hook into actions and filters
114 * @since 1.0.0
115 * @version 1.2.2
116 */
117 private function _hooks() {
118
119 add_action( 'admin_menu', array( $this, 'register_options_page' ) );
120 add_action( 'plugins_loaded', array( $this, 'textdomain' ) );
121 add_filter( 'plugin_row_meta', array( $this, '_row_meta'), 10, 2 );
122 add_action( 'admin_enqueue_scripts', array( $this, '_admin_scripts' ) );
123 add_action( 'admin_footer', array( $this, 'add_deactive_modal' ) );
124 add_action( 'plugin_action_links', array( $this, 'loginpress_action_links' ), 10, 2 );
125 add_action( 'admin_init', array( $this, 'redirect_optin' ) );
126 add_filter( 'auth_cookie_expiration', array( $this, '_change_auth_cookie_expiration' ), 10, 3 );
127 //add_filter( 'plugins_api', array( $this, 'get_addon_info_' ) , 100, 3 );
128 if ( is_multisite() ) {
129 add_action( 'admin_init', array( $this, 'redirect_loginpress_edit_page' ) );
130 add_action( 'admin_init', array( $this, 'check_loginpress_page' ) );
131 }
132
133 }
134
135 /**
136 * Redirect to Optin page.
137 *
138 * @since 1.0.15
139 */
140 function redirect_optin() {
141
142 // delete_option( '_loginpress_optin' );
143
144 if ( isset( $_POST['loginpress-submit-optout'] ) ) {
145
146 update_option( '_loginpress_optin', 'no' );
147 $this->_send_data( array(
148 'action' => 'Skip',
149 ) );
150
151 } elseif ( isset( $_POST['loginpress-submit-optin'] ) ) {
152
153 update_option( '_loginpress_optin', 'yes' );
154 $fields = array(
155 'action' => 'Activate',
156 'track_mailchimp' => 'yes'
157 );
158 $this->_send_data( $fields );
159
160 } elseif ( ! get_option( '_loginpress_optin' ) && isset( $_GET['page'] ) && ( $_GET['page'] === 'loginpress-settings' || $_GET['page'] === 'loginpress' || $_GET['page'] === 'abw' ) ) {
161
162 wp_redirect( admin_url('admin.php?page=loginpress-optin&redirect-page=' . $_GET['page'] ) );
163 exit;
164 } elseif ( get_option( '_loginpress_optin' ) && ( get_option( '_loginpress_optin' ) == 'yes' || get_option( '_loginpress_optin' ) == 'no' ) && isset( $_GET['page'] ) && $_GET['page'] === 'loginpress-optin' ) {
165 wp_redirect( admin_url( 'admin.php?page=loginpress-settings' ) );
166 exit;
167 }
168 }
169
170
171 /**
172 * Main Instance
173 *
174 * @since 1.0.0
175 * @static
176 * @see loginPress_loader()
177 * @return Main instance
178 */
179 public static function instance() {
180 if ( is_null( self::$_instance ) ) {
181 self::$_instance = new self();
182 }
183 return self::$_instance;
184 }
185
186
187 /**
188 * Load Languages
189 * @since 1.0.0
190 */
191 public function textdomain() {
192
193 $plugin_dir = dirname( plugin_basename( __FILE__ ) ) ;
194 load_plugin_textdomain( 'loginpress', false, $plugin_dir . '/languages/' );
195 }
196
197 /**
198 * Define constant if not already set
199 * @param string $name
200 * @param string|bool $value
201 */
202 private function define( $name, $value ) {
203 if ( ! defined( $name ) ) {
204 define( $name, $value );
205 }
206 }
207
208 /**
209 * Init WPBrigade when WordPress Initialises.
210 */
211 public function init() {
212 // Before init action
213 }
214
215 /**
216 * Create LoginPress Page Template.
217 *
218 * @since 1.1.3
219 */
220 public function check_loginpress_page() {
221
222 // Retrieve the LoginPress admin page option, that was created during the activation process.
223 $option = $this->get_loginpress_page();
224
225 include LOGINPRESS_DIR_PATH . 'include/create-loginpress-page.php';
226 // Retrieve the status of the page, if the option is available.
227 if ( $option ) {
228 $page = get_post( $option );
229 $status = $page->post_status;
230 } else {
231 $status = null;
232 }
233
234 // Check the status of the page. Let's fix it, if the page is missing or in the trash.
235 if ( empty( $status ) || 'trash' === $status ) {
236 new LoginPress_Page_Create();
237 }
238 }
239
240 /**
241 * function for redirect the LoginPress page on editing.
242 *
243 * @since 1.1.3
244 */
245 public function redirect_loginpress_edit_page() {
246 global $pagenow;
247
248 $page = $this->get_loginpress_page();
249
250 if ( ! $page ) {
251 return;
252 }
253
254 $page_url = get_permalink( $page );
255 $page_id = get_post( $page );
256 $page_id = $page->ID;
257
258 // Generate the redirect url.
259 $url = add_query_arg(
260 array(
261 'autofocus[section]' => 'loginpress_panel',
262 'url' => rawurlencode( $page_url ),
263 ),
264 admin_url( 'customize.php' )
265 );
266
267 /* Check current admin page. */
268 if ( $pagenow == 'post.php' && isset( $_GET['post'] ) && $_GET['post'] == $page_id ) {
269 wp_safe_redirect( $url );
270 }
271 }
272
273 /**
274 * Add new page in Apperance to customize Login Page
275 */
276 public function register_options_page() {
277
278 add_submenu_page( null, __( 'Activate', 'loginpress' ), __( 'Activate', 'loginpress' ), 'manage_options', 'loginpress-optin', array( $this, 'render_optin' ) );
279
280 add_theme_page( __( 'LoginPress', 'loginpress' ), __( 'LoginPress', 'loginpress' ), 'manage_options', "abw", '__return_null' );
281 }
282
283
284 /**
285 * Show Opt-in Page.
286 *
287 * @since 1.0.15
288 */
289 function render_optin() {
290 include LOGINPRESS_DIR_PATH . 'include/loginpress-optin-form.php';
291 }
292
293 /**
294 * Wrapper function to send data.
295 * @param [arrays] $args.
296 *
297 * @since 1.0.15
298 * @version 1.0.23
299 */
300 function _send_data( $args ) {
301
302 $cuurent_user = wp_get_current_user();
303 $fields = array(
304 'email' => get_option( 'admin_email' ),
305 'website' => get_site_url(),
306 'action' => '',
307 'reason' => '',
308 'reason_detail' => '',
309 'display_name' => $cuurent_user->display_name,
310 'blog_language' => get_bloginfo( 'language' ),
311 'wordpress_version' => get_bloginfo( 'version' ),
312 'php_version' => PHP_VERSION,
313 'plugin_version' => LOGINPRESS_VERSION,
314 'plugin_name' => 'LoginPress Free',
315 );
316
317 $args = array_merge( $fields, $args );
318 $response = wp_remote_post( LOGINPRESS_FEEDBACK_SERVER, array(
319 'method' => 'POST',
320 'timeout' => 5,
321 'httpversion' => '1.0',
322 'blocking' => true,
323 'headers' => array(),
324 'body' => $args,
325 ) );
326
327 // echo '<pre>'; print_r( $args ); echo '</pre>';
328
329 }
330
331 /**
332 * Session Expiration
333 *
334 * @since 1.0.18
335 * @version 1.3.2
336 */
337 function _change_auth_cookie_expiration( $expiration, $user_id, $remember ) {
338
339 $loginpress_setting = get_option( 'loginpress_setting' );
340 $_expiration = isset( $loginpress_setting['session_expiration'] ) ? intval( $loginpress_setting['session_expiration'] ) : '';
341
342 /**
343 * return the WordPress default $expiration time if LoginPress Session Expiration time set 0 or empty.
344 * @since 1.0.18
345 */
346 if ( empty( $_expiration ) || '0' == $_expiration ) {
347 return $expiration;
348 }
349
350 /**
351 * $filter_role Use filter `loginpress_exclude_role_session` for return the role.
352 * By default it's false and $expiration time will apply on all user.
353 *
354 * @return string/array role name.
355 * @since 1.3.2
356 */
357 $filter_role = apply_filters( 'loginpress_exclude_role_session', false );
358
359 if ( $filter_role ) {
360 $user_roles = get_userdata( $user_id )->roles;
361
362 // if $filter_role is array, return the default $expiration for each defined role.
363 if ( is_array( $filter_role ) ) {
364 foreach ( $filter_role as $role ) {
365 if ( in_array( $role, $user_roles ) ) {
366 return $expiration;
367 }
368 }
369 } else if ( in_array( $filter_role, $user_roles ) ) {
370 return $expiration;
371 }
372 }
373
374 // Convert Duration (minutes) of the expiration period in seconds.
375 $expiration = $_expiration * 60;
376
377 return $expiration;
378 }
379
380 /**
381 * Load JS or CSS files at admin side and enqueue them
382 * @param string tell you the Page ID
383 * @return void
384 */
385 function _admin_scripts( $hook ) {
386
387 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' ) {
388
389 wp_enqueue_style( 'loginpress_stlye', plugins_url( 'css/style.css', __FILE__ ), array(), LOGINPRESS_VERSION );
390 wp_enqueue_script( 'loginpress_js', plugins_url( 'js/admin-custom.js', __FILE__ ), array(), LOGINPRESS_VERSION );
391
392 // Array for localize.
393 $loginpress_localize = array(
394 'plugin_url' => plugins_url(),
395 );
396
397 wp_localize_script( 'loginpress_js', 'loginpress_script', $loginpress_localize );
398 }
399
400 }
401
402 /**
403 * Add rating icon on plugins page.
404 *
405 * @since 1.0.9
406 * @version 1.1.22
407 */
408
409 public function _row_meta( $meta_fields, $file ) {
410
411 if ( $file != 'loginpress/loginpress.php' ) {
412
413 return $meta_fields;
414 }
415
416 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>";
417
418 $plugin_rate = "https://wordpress.org/support/plugin/loginpress/reviews/?rate=5#new-post";
419 $plugin_filter = "https://wordpress.org/support/plugin/loginpress/reviews/?filter=5";
420 $svg_xmlns = "https://www.w3.org/2000/svg";
421 $svg_icon = '';
422
423 for ( $i = 0; $i < 5; $i++ ) {
424 $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>";
425 }
426
427 // Set icon for thumbsup.
428 $meta_fields[] = '<a href="' . esc_url( $plugin_filter ) . '" target="_blank"><span class="dashicons dashicons-thumbs-up"></span>' . __( 'Vote!', 'loginpress' ) . '</a>';
429
430 // Set icon for 5-star reviews. v1.1.22
431 $meta_fields[] = "<a href='" . esc_url( $plugin_rate ) . "' target='_blank' title='" . esc_html__( 'Rate', 'loginpress' ) . "'><i class='loginpress-rate-stars'>" . $svg_icon . "</i></a>";
432
433 return $meta_fields;
434 }
435
436 /**
437 * Add deactivate modal layout.
438 */
439 function add_deactive_modal() {
440 global $pagenow;
441
442 if ( 'plugins.php' !== $pagenow ) {
443 return;
444 }
445
446 include LOGINPRESS_DIR_PATH . 'include/deactivate_modal.php';
447 include LOGINPRESS_DIR_PATH . 'include/loginpress-optout-form.php';
448 }
449
450 /**
451 * Plugin activation
452 *
453 * @since 1.0.15
454 * @version 1.0.22
455 */
456 static function plugin_activation() {
457
458 $loginpress_key = get_option( 'loginpress_customization' );
459 $loginpress_setting = get_option( 'loginpress_setting' );
460
461 // Create a key 'loginpress_customization' with empty array.
462 if ( ! $loginpress_key ) {
463 update_option( 'loginpress_customization', array() );
464 }
465
466 // Create a key 'loginpress_setting' with empty array.
467 if ( ! $loginpress_setting ) {
468 update_option( 'loginpress_setting', array() );
469 }
470 }
471
472 static function plugin_uninstallation() {
473
474 $email = get_option( 'admin_email' );
475
476 $fields = array(
477 'email' => $email,
478 'website' => get_site_url(),
479 'action' => 'Uninstall',
480 'reason' => '',
481 'reason_detail' => '',
482 'blog_language' => get_bloginfo( 'language' ),
483 'wordpress_version' => get_bloginfo( 'version' ),
484 'php_version' => PHP_VERSION,
485 'plugin_version' => LOGINPRESS_VERSION,
486 'plugin_name' => 'LoginPress Free',
487 );
488
489 $response = wp_remote_post( LOGINPRESS_FEEDBACK_SERVER, array(
490 'method' => 'POST',
491 'timeout' => 5,
492 'httpversion' => '1.0',
493 'blocking' => false,
494 'headers' => array(),
495 'body' => $fields,
496 ) );
497
498 }
499
500
501
502 /**
503 * Pull the LoginPress page from options.
504 *
505 * @access public
506 * @since 1.1.3
507 * @version 1.1.7
508 */
509 public function get_loginpress_page() {
510
511 $loginpress_setting = get_option( 'loginpress_setting', array() );
512 if ( ! is_array( $loginpress_setting ) && empty( $loginpress_setting ) ) {
513 $loginpress_setting = array();
514 }
515 $page = array_key_exists( 'loginpress_page', $loginpress_setting ) ? get_post( $loginpress_setting['loginpress_page'] ) : false;
516
517 return $page;
518 }
519
520
521 /**
522 * Add a link to the settings page to the plugins list
523 *
524 * @since 1.0.11
525 */
526 public function loginpress_action_links( $links, $file ) {
527
528 static $this_plugin;
529
530 if ( empty( $this_plugin ) ) {
531
532 $this_plugin = 'loginpress/loginpress.php';
533 }
534
535 if ( $file == $this_plugin ) {
536
537 $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>' );
538
539
540 if( 'yes' == get_option( '_loginpress_optin' ) ){
541 $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>' );
542 } else {
543 $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>' );
544 }
545
546 array_unshift( $links, $settings_link );
547
548 if ( ! has_action( 'loginpress_pro_add_template' ) ) :
549 $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>' );
550 array_push( $links, $pro_link );
551 endif;
552 }
553
554 return $links;
555 }
556
557 // function get_addon_info_( $api, $action, $args ) {
558
559 // if ( $action == 'plugin_information' && empty( $api ) && ( ! empty( $_GET['lgp'] ) ) ) {
560
561 // $raw_response = wp_remote_post( 'https://wpbrigade.com/loginpress-api/search.php', array(
562 // 'body' => array(
563 // 'slug' => $args->slug
564 // ) )
565 // );
566
567 // if ( is_wp_error( $raw_response ) || $raw_response['response']['code'] != 200 ) {
568 // return false;
569 // }
570
571 // $plugin = unserialize( $raw_response['body'] );
572
573 // $api = new stdClass();
574 // $api->name = $plugin['title'];
575 // $api->version = $plugin['version'];
576 // $api->download_link = $plugin['download_url'];
577 // $api->tested = '10.0';
578
579 // }
580
581 // return $api;
582 // }
583 } // End Of Class.
584 endif;
585
586
587 /**
588 * Returns the main instance of WP to prevent the need to use globals.
589 *
590 * @since 1.0.0
591 * @return LoginPress
592 */
593 function loginPress_loader() {
594 return LoginPress::instance();
595 }
596
597 // Call the function
598 loginPress_loader();
599
600 /**
601 * Create the Object of Custom Login Entites and Settings.
602 *
603 * @since 1.0.0
604 */
605 new LoginPress_Entities();
606 new LoginPress_Settings();
607
608 /**
609 * Create the Object of Remote Notification.
610 *
611 * @since 1.0.9
612 */
613 if (!class_exists('TAV_Remote_Notification_Client')) {
614 require( LOGINPRESS_ROOT_PATH . 'include/class-remote-notification-client.php' );
615 }
616 $notification = new TAV_Remote_Notification_Client( 125, '16765c0902705d62', 'https://wpbrigade.com?post_type=notification' );
617
618 register_activation_hook( __FILE__, array( 'LoginPress', 'plugin_activation' ) );
619 register_uninstall_hook( __FILE__, array( 'LoginPress', 'plugin_uninstallation' ) );
620