Bez popisu

userData.php 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <?php
  2. use NSL\Notices;
  3. class NextendSocialUserData {
  4. /** @var array */
  5. private $userData;
  6. /** @var NextendSocialUser */
  7. private $socialUser;
  8. /** @var NextendSocialProvider */
  9. private $provider;
  10. /** @var WP_Error */
  11. private $errors;
  12. private $isCustomRegisterFlow = false;
  13. /**
  14. * NextendSocialUserData constructor.
  15. *
  16. * @param $userData
  17. * @param $socialUser
  18. * @param $provider
  19. *
  20. * @throws NSLContinuePageRenderException
  21. */
  22. public function __construct($userData, $socialUser, $provider) {
  23. $this->userData = $userData;
  24. $this->socialUser = $socialUser;
  25. $this->provider = $provider;
  26. $askExtraData = apply_filters('nsl_registration_require_extra_input', false, $this->userData);
  27. if ($askExtraData) {
  28. $registerFlowPage = NextendSocialLogin::getRegisterFlowPage();
  29. if ($registerFlowPage !== false) {
  30. if (!is_page($registerFlowPage)) {
  31. if (get_permalink() !== get_permalink($registerFlowPage)) {
  32. wp_redirect(add_query_arg(array(
  33. 'loginSocial' => $this->provider->getId()
  34. ), get_permalink($registerFlowPage)));
  35. exit;
  36. }
  37. }
  38. $this->isCustomRegisterFlow = true;
  39. } else if (NextendSocialLogin::$WPLoginCurrentView == 'login' && get_option('users_can_register')) {
  40. wp_redirect(add_query_arg(array(
  41. 'loginSocial' => $this->provider->getId()
  42. ), NextendSocialLogin::getRegisterUrl()));
  43. exit;
  44. }
  45. $this->errors = new WP_Error();
  46. $this->userData = apply_filters('nsl_registration_validate_extra_input', $this->userData, $this->errors);
  47. /**
  48. * It is not a submit or there is an error
  49. */
  50. if (!$this->isPost() || $this->errors->get_error_code() != '') {
  51. $this->displayForm();
  52. }
  53. }
  54. $this->errors = new WP_Error();
  55. $this->userData = apply_filters('nsl_registration_user_data', $this->userData, $this->provider, $this->errors);
  56. if ($this->errors->get_error_code() != '') {
  57. $this->provider->deleteLoginPersistentData();
  58. if ($this->errors->get_error_message() != '') {
  59. Notices::addError($this->errors->get_error_message());
  60. }
  61. wp_redirect(NextendSocialLogin::enableNoticeForUrl(site_url('wp-login.php')));
  62. exit();
  63. }
  64. }
  65. public function toArray() {
  66. return $this->userData;
  67. }
  68. public function isPost() {
  69. return isset($_POST['submit']);
  70. }
  71. /**
  72. * @throws NSLContinuePageRenderException
  73. */
  74. public function displayForm() {
  75. NextendSocialLogin::removeLoginFormAssets();
  76. if ($this->isCustomRegisterFlow) {
  77. add_shortcode('nextend_social_login_register_flow', array(
  78. $this,
  79. 'customRegisterFlowShortcode'
  80. ));
  81. throw new NSLContinuePageRenderException('CUSTOM_REGISTER_FLOW');
  82. } else {
  83. /**
  84. * Jetpack removes our "Register" button in our Register flow, so we need to remove their scripts from there.
  85. * @url https://wordpress.org/plugins/jetpack/
  86. */
  87. if (defined('JETPACK__PLUGIN_FILE')) {
  88. if (class_exists('Jetpack_SSO') && method_exists('Jetpack_SSO', 'get_instance')) {
  89. remove_action('login_enqueue_scripts', array(
  90. Jetpack_SSO::get_instance(),
  91. 'login_enqueue_scripts'
  92. ));
  93. }
  94. }
  95. if (!function_exists('login_header')) {
  96. if (NextendSocialLogin::$WPLoginCurrentView == 'register-bp') {
  97. if (class_exists('NextendSocialLoginPRO', false)) {
  98. remove_action('bp_before_account_details_fields', 'NextendSocialLoginPRO::bp_register_form');
  99. remove_action('bp_before_register_page', 'NextendSocialLoginPRO::bp_register_form');
  100. remove_action('bp_after_register_page', 'NextendSocialLoginPRO::bp_register_form');
  101. }
  102. add_action('bp_before_register_page', array(
  103. $this,
  104. 'bp_before_register_page'
  105. ));
  106. add_action('bp_after_register_page', array(
  107. $this,
  108. 'bp_after_register_page'
  109. ));
  110. throw new NSLContinuePageRenderException('BuddyPress');
  111. } else if (defined('THEME_MY_LOGIN_PATH')) {
  112. add_shortcode('theme-my-login', array(
  113. $this,
  114. 'render_registration_form_tml'
  115. ));
  116. throw new NSLContinuePageRenderException('THEME_MY_LOGIN');
  117. }
  118. require_once(dirname(__FILE__) . '/compat-wp-login.php');
  119. }
  120. login_header(__('Registration Form'), '<p class="message register">' . __('Register For This Site') . '</p>', $this->errors);
  121. echo $this->render_registration_form();
  122. login_footer('user_login');
  123. exit;
  124. }
  125. }
  126. public function customRegisterFlowShortcode() {
  127. $errors = $this->errors;
  128. if (is_wp_error($errors)) {
  129. $html = array();
  130. if ($errors->get_error_messages()) {
  131. foreach ($errors->get_error_messages() as $error) {
  132. $html[] = '<div class="error">' . $error . '</div>';
  133. }
  134. }
  135. if (!empty($html)) {
  136. 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>';
  137. echo '<div class="nsl-messages">' . implode('', $html) . '</div>';
  138. }
  139. }
  140. $this->errors = array();
  141. return $this->render_registration_form();
  142. }
  143. public function render_registration_form() {
  144. if ($this->isCustomRegisterFlow) {
  145. $postUrl = add_query_arg(array(
  146. 'loginSocial' => $this->provider->getId()
  147. ), get_permalink(NextendSocialLogin::getRegisterFlowPage()));
  148. } else if (strpos(NextendSocialLogin::$WPLoginCurrentView, 'register') === 0) {
  149. $postUrl = add_query_arg(array(
  150. 'loginSocial' => $this->provider->getId()
  151. ), NextendSocialLogin::getRegisterUrl());
  152. } else {
  153. $postUrl = add_query_arg('loginSocial', $this->provider->getId(), NextendSocialLogin::getLoginUrl('login_post'));
  154. }
  155. ob_start();
  156. ?>
  157. <form name="registerform" id="registerform" action="<?php echo esc_url($postUrl); ?>" method="post">
  158. <input type="hidden" name="submit" value="1"/>
  159. <?php do_action('nsl_registration_form_start', $this->userData, $this->provider); ?>
  160. <?php do_action('nsl_registration_form_end', $this->userData, $this->provider); ?>
  161. <br class="clear"/>
  162. <p class="submit"><input type="submit" name="wp-submit" id="wp-submit"
  163. class="button button-primary button-large" value="<?php echo esc_attr_x('Register', 'Register form submit button label', 'nextend-facebook-connect'); ?>"/>
  164. </p>
  165. </form>
  166. <?php
  167. return ob_get_clean();
  168. }
  169. public function render_registration_form_tml() {
  170. ob_start();
  171. ?>
  172. <div class="tml tml-register" id="theme-my-login">
  173. <?php
  174. $registerMessage = Theme_My_Login_Template::get_action_template_message('register');
  175. if (!empty($registerMessage)) {
  176. $before_message = '<p class="message">';
  177. $after_message = '</p>';
  178. echo $before_message . $registerMessage . $after_message;
  179. }
  180. $wp_error = $this->errors;
  181. if (is_wp_error($wp_error)) {
  182. if ($wp_error->get_error_code()) {
  183. $errors = '';
  184. $messages = '';
  185. foreach ($wp_error->get_error_codes() as $code) {
  186. $severity = $wp_error->get_error_data($code);
  187. foreach ($wp_error->get_error_messages($code) as $error) {
  188. if ('message' == $severity) {
  189. $messages .= ' ' . $error . "<br />\n";
  190. } else {
  191. $errors .= ' ' . $error . "<br />\n";
  192. }
  193. }
  194. }
  195. if (!empty($errors)) {
  196. echo '<p class="error">' . apply_filters('login_errors', $errors) . "</p>\n";
  197. }
  198. if (!empty($messages)) {
  199. echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
  200. }
  201. }
  202. }
  203. $this->errors = array();
  204. echo $this->render_registration_form();
  205. ?>
  206. </div>
  207. <?php
  208. return ob_get_clean();
  209. }
  210. public function bp_before_register_page() {
  211. ob_start();
  212. }
  213. public function bp_after_register_page() {
  214. ob_end_clean();
  215. $wp_error = $this->errors;
  216. if (is_wp_error($wp_error)) {
  217. if ($wp_error->get_error_code()) {
  218. $errors = '';
  219. $messages = '';
  220. foreach ($wp_error->get_error_codes() as $code) {
  221. $severity = $wp_error->get_error_data($code);
  222. foreach ($wp_error->get_error_messages($code) as $error) {
  223. if ('message' == $severity) {
  224. $messages .= ' ' . $error . "<br />\n";
  225. } else {
  226. $errors .= ' ' . $error . "<br />\n";
  227. }
  228. }
  229. }
  230. $html = '';
  231. if (!empty($errors)) {
  232. $html .= '<div class="error">' . apply_filters('login_errors', $errors) . "</div>\n";
  233. }
  234. if (!empty($messages)) {
  235. $html .= '<div class="message">' . apply_filters('login_messages', $messages) . "</div>\n";
  236. }
  237. if (!empty($html)) {
  238. ?>
  239. <div id="signup_form" class="standard-form">
  240. <div>
  241. <?php echo $html; ?>
  242. </div>
  243. </div>
  244. <?php
  245. }
  246. }
  247. }
  248. $this->errors = array();
  249. echo $this->render_registration_form();
  250. }
  251. }