| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- <?php
- use NSL\Notices;
- class NextendSocialUserData {
- /** @var array */
- private $userData;
- /** @var NextendSocialUser */
- private $socialUser;
- /** @var NextendSocialProvider */
- private $provider;
- /** @var WP_Error */
- private $errors;
- private $isCustomRegisterFlow = false;
- /**
- * NextendSocialUserData constructor.
- *
- * @param $userData
- * @param $socialUser
- * @param $provider
- *
- * @throws NSLContinuePageRenderException
- */
- public function __construct($userData, $socialUser, $provider) {
- $this->userData = $userData;
- $this->socialUser = $socialUser;
- $this->provider = $provider;
- $askExtraData = apply_filters('nsl_registration_require_extra_input', false, $this->userData);
- if ($askExtraData) {
- $registerFlowPage = NextendSocialLogin::getRegisterFlowPage();
- if ($registerFlowPage !== false) {
- if (!is_page($registerFlowPage)) {
- if (get_permalink() !== get_permalink($registerFlowPage)) {
- wp_redirect(add_query_arg(array(
- 'loginSocial' => $this->provider->getId()
- ), get_permalink($registerFlowPage)));
- exit;
- }
- }
- $this->isCustomRegisterFlow = true;
- } else if (NextendSocialLogin::$WPLoginCurrentView == 'login' && get_option('users_can_register')) {
- wp_redirect(add_query_arg(array(
- 'loginSocial' => $this->provider->getId()
- ), NextendSocialLogin::getRegisterUrl()));
- exit;
- }
- $this->errors = new WP_Error();
- $this->userData = apply_filters('nsl_registration_validate_extra_input', $this->userData, $this->errors);
- /**
- * It is not a submit or there is an error
- */
- if (!$this->isPost() || $this->errors->get_error_code() != '') {
- $this->displayForm();
- }
- }
- $this->errors = new WP_Error();
- $this->userData = apply_filters('nsl_registration_user_data', $this->userData, $this->provider, $this->errors);
- if ($this->errors->get_error_code() != '') {
- $this->provider->deleteLoginPersistentData();
- if ($this->errors->get_error_message() != '') {
- Notices::addError($this->errors->get_error_message());
- }
- wp_redirect(NextendSocialLogin::enableNoticeForUrl(site_url('wp-login.php')));
- exit();
- }
- }
- public function toArray() {
- return $this->userData;
- }
- public function isPost() {
- return isset($_POST['submit']);
- }
- /**
- * @throws NSLContinuePageRenderException
- */
- public function displayForm() {
- NextendSocialLogin::removeLoginFormAssets();
- if ($this->isCustomRegisterFlow) {
- add_shortcode('nextend_social_login_register_flow', array(
- $this,
- 'customRegisterFlowShortcode'
- ));
- throw new NSLContinuePageRenderException('CUSTOM_REGISTER_FLOW');
- } else {
- /**
- * Jetpack removes our "Register" button in our Register flow, so we need to remove their scripts from there.
- * @url https://wordpress.org/plugins/jetpack/
- */
- if (defined('JETPACK__PLUGIN_FILE')) {
- if (class_exists('Jetpack_SSO') && method_exists('Jetpack_SSO', 'get_instance')) {
- remove_action('login_enqueue_scripts', array(
- Jetpack_SSO::get_instance(),
- 'login_enqueue_scripts'
- ));
- }
- }
- if (!function_exists('login_header')) {
- if (NextendSocialLogin::$WPLoginCurrentView == 'register-bp') {
- if (class_exists('NextendSocialLoginPRO', false)) {
- remove_action('bp_before_account_details_fields', 'NextendSocialLoginPRO::bp_register_form');
- remove_action('bp_before_register_page', 'NextendSocialLoginPRO::bp_register_form');
- remove_action('bp_after_register_page', 'NextendSocialLoginPRO::bp_register_form');
- }
- add_action('bp_before_register_page', array(
- $this,
- 'bp_before_register_page'
- ));
- add_action('bp_after_register_page', array(
- $this,
- 'bp_after_register_page'
- ));
- throw new NSLContinuePageRenderException('BuddyPress');
- } else if (defined('THEME_MY_LOGIN_PATH')) {
- add_shortcode('theme-my-login', array(
- $this,
- 'render_registration_form_tml'
- ));
- throw new NSLContinuePageRenderException('THEME_MY_LOGIN');
- }
- require_once(dirname(__FILE__) . '/compat-wp-login.php');
- }
- login_header(__('Registration Form'), '<p class="message register">' . __('Register For This Site') . '</p>', $this->errors);
- echo $this->render_registration_form();
- login_footer('user_login');
- exit;
- }
- }
- public function customRegisterFlowShortcode() {
- $errors = $this->errors;
- if (is_wp_error($errors)) {
- $html = array();
- if ($errors->get_error_messages()) {
- foreach ($errors->get_error_messages() as $error) {
- $html[] = '<div class="error">' . $error . '</div>';
- }
- }
- if (!empty($html)) {
- echo '<style>.nsl-messages .error{background-color: #e2401c;border-left: .6180469716em solid rgba(0,0,0,.15);padding: 1em 1.618em;margin-bottom: 2.617924em;color:#fff;}</style>';
- echo '<div class="nsl-messages">' . implode('', $html) . '</div>';
- }
- }
- $this->errors = array();
- return $this->render_registration_form();
- }
- public function render_registration_form() {
- if ($this->isCustomRegisterFlow) {
- $postUrl = add_query_arg(array(
- 'loginSocial' => $this->provider->getId()
- ), get_permalink(NextendSocialLogin::getRegisterFlowPage()));
- } else if (strpos(NextendSocialLogin::$WPLoginCurrentView, 'register') === 0) {
- $postUrl = add_query_arg(array(
- 'loginSocial' => $this->provider->getId()
- ), NextendSocialLogin::getRegisterUrl());
- } else {
- $postUrl = add_query_arg('loginSocial', $this->provider->getId(), NextendSocialLogin::getLoginUrl('login_post'));
- }
- ob_start();
- ?>
- <form name="registerform" id="registerform" action="<?php echo esc_url($postUrl); ?>" method="post">
- <input type="hidden" name="submit" value="1"/>
- <?php do_action('nsl_registration_form_start', $this->userData, $this->provider); ?>
- <?php do_action('nsl_registration_form_end', $this->userData, $this->provider); ?>
- <br class="clear"/>
- <p class="submit"><input type="submit" name="wp-submit" id="wp-submit"
- class="button button-primary button-large" value="<?php echo esc_attr_x('Register', 'Register form submit button label', 'nextend-facebook-connect'); ?>"/>
- </p>
- </form>
- <?php
- return ob_get_clean();
- }
- public function render_registration_form_tml() {
- ob_start();
- ?>
- <div class="tml tml-register" id="theme-my-login">
- <?php
- $registerMessage = Theme_My_Login_Template::get_action_template_message('register');
- if (!empty($registerMessage)) {
- $before_message = '<p class="message">';
- $after_message = '</p>';
- echo $before_message . $registerMessage . $after_message;
- }
- $wp_error = $this->errors;
- if (is_wp_error($wp_error)) {
- if ($wp_error->get_error_code()) {
- $errors = '';
- $messages = '';
- foreach ($wp_error->get_error_codes() as $code) {
- $severity = $wp_error->get_error_data($code);
- foreach ($wp_error->get_error_messages($code) as $error) {
- if ('message' == $severity) {
- $messages .= ' ' . $error . "<br />\n";
- } else {
- $errors .= ' ' . $error . "<br />\n";
- }
- }
- }
- if (!empty($errors)) {
- echo '<p class="error">' . apply_filters('login_errors', $errors) . "</p>\n";
- }
- if (!empty($messages)) {
- echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
- }
- }
- }
- $this->errors = array();
- echo $this->render_registration_form();
- ?>
- </div>
- <?php
- return ob_get_clean();
- }
- public function bp_before_register_page() {
- ob_start();
- }
- public function bp_after_register_page() {
- ob_end_clean();
- $wp_error = $this->errors;
- if (is_wp_error($wp_error)) {
- if ($wp_error->get_error_code()) {
- $errors = '';
- $messages = '';
- foreach ($wp_error->get_error_codes() as $code) {
- $severity = $wp_error->get_error_data($code);
- foreach ($wp_error->get_error_messages($code) as $error) {
- if ('message' == $severity) {
- $messages .= ' ' . $error . "<br />\n";
- } else {
- $errors .= ' ' . $error . "<br />\n";
- }
- }
- }
- $html = '';
- if (!empty($errors)) {
- $html .= '<div class="error">' . apply_filters('login_errors', $errors) . "</div>\n";
- }
- if (!empty($messages)) {
- $html .= '<div class="message">' . apply_filters('login_messages', $messages) . "</div>\n";
- }
- if (!empty($html)) {
- ?>
- <div id="signup_form" class="standard-form">
- <div>
- <?php echo $html; ?>
- </div>
- </div>
- <?php
- }
- }
- }
- $this->errors = array();
- echo $this->render_registration_form();
- }
- }
|