PluginProbe
Loginizer / 2.0.7
Loginizer v2.0.7
2.1.0 2.0.9 2.0.8 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 trunk 1.0 1.0.1 1.0.2 1.1.0 1.1.1 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 All 74 releases
loginizer / functions.php

functions.php in Loginizer 2.0.7, at functions.php

674 lines 20.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if(!defined('ABSPATH')){
4 die('HACKING ATTEMPT!');
5 }
6
7 include_once(LOGINIZER_DIR.'/lib/IPv6/IPv6.php');
8 include_once(LOGINIZER_DIR .'/common.php');
9
10 // Execute a select query and return an array
11 function lz_selectquery($query, $array = 0){
12 global $wpdb;
13
14 $result = $wpdb->get_results($query, 'ARRAY_A');
15
16 if(empty($array)){
17 return current($result);
18 }else{
19 return $result;
20 }
21 }
22
23 // Check if a field is posted via POST else return default value
24 function lz_optpost($name, $default = ''){
25
26 if(!empty($_POST[$name])){
27 return lz_inputsec(lz_htmlizer(trim($_POST[$name])));
28 }
29
30 return $default;
31 }
32
33 // Check if a field is posted via GET else return default value
34 function lz_optget($name, $default = ''){
35
36 if(!empty($_GET[$name])){
37 return lz_inputsec(lz_htmlizer(trim($_GET[$name])));
38 }
39
40 return $default;
41 }
42
43 // Check if a field is posted via GET or POST else return default value
44 function lz_optreq($name, $default = ''){
45
46 if(!empty($_REQUEST[$name])){
47 return lz_inputsec(lz_htmlizer(trim($_REQUEST[$name])));
48 }
49
50 return $default;
51 }
52
53 // For filling in posted values
54 function lz_POSTval($name, $default = ''){
55
56 return (!empty($_POST) ? (!isset($_POST[$name]) ? '' : esc_html($_POST[$name])) : $default);
57
58 }
59
60 function lz_POSTchecked($name, $default = false, $submit_name = ''){
61
62 if(!empty($submit_name)){
63 $post_to_check = isset($_POST[$submit_name]) ? $_POST[$submit_name] : '';
64 }else{
65 $post_to_check = $_POST;
66 }
67
68 return (!empty($post_to_check) ? (isset($_POST[$name]) ? 'checked="checked"' : '') : (!empty($default) ? 'checked="checked"' : ''));
69
70 }
71
72 function lz_POSTselect($name, $value, $default = false){
73
74 if(empty($_POST)){
75 if(!empty($default)){
76 return 'selected="selected"';
77 }
78 }else{
79 if(isset($_POST[$name])){
80 if(trim($_POST[$name]) == $value){
81 return 'selected="selected"';
82 }
83 }
84 }
85
86 }
87
88 function lz_POSTradio($name, $val, $default = null){
89
90 return (!empty($_POST) ? (@$_POST[$name] == $val ? 'checked="checked"' : '') : (!is_null($default) && $default == $val ? 'checked="checked"' : ''));
91
92 }
93
94 function lz_inputsec($string){
95
96 $string = addslashes($string);
97
98 // This is to replace ` which can cause the command to be executed in exec()
99 $string = str_replace('`', '\`', $string);
100
101 return $string;
102
103 }
104
105 function lz_htmlizer($string){
106
107 $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
108
109 preg_match_all('/(&amp;#(\d{1,7}|x[0-9a-fA-F]{1,6});)/', $string, $matches);//r_print($matches);
110
111 foreach($matches[1] as $mk => $mv){
112 $tmp_m = lz_entity_check($matches[2][$mk]);
113 $string = str_replace($matches[1][$mk], $tmp_m, $string);
114 }
115
116 return $string;
117
118 }
119
120 function lz_entity_check($string){
121
122 //Convert Hexadecimal to Decimal
123 $num = ((substr($string, 0, 1) === 'x') ? hexdec(substr($string, 1)) : (int) $string);
124
125 //Squares and Spaces - return nothing
126 $string = (($num > 0x10FFFF || ($num >= 0xD800 && $num <= 0xDFFF) || $num < 0x20) ? '' : '&#'.$num.';');
127
128 return $string;
129
130 }
131
132 // Check if a checkbox is selected
133 function lz_is_checked($post){
134
135 if(!empty($_POST[$post])){
136 return true;
137 }
138 return false;
139 }
140
141 // Reoort an error
142 function lz_report_error($error = array()){
143
144 if(empty($error)){
145 return true;
146 }
147
148 $error_string = '<b>'.__('Please fix the below error(s)', 'loginizer').' :</b> <br />';
149
150 foreach($error as $ek => $ev){
151 $error_string .= '* '.$ev.'<br />';
152 }
153
154 echo '<div id="message" class="error"><p>'
155 . $error_string
156 . '</p></div>';
157 }
158
159 // Report a notice
160 function lz_report_notice($notice = array()){
161
162 global $wp_version;
163
164 if(empty($notice)){
165 return true;
166 }
167
168 // Which class do we have to use ?
169 if(version_compare($wp_version, '3.8', '<')){
170 $notice_class = 'updated';
171 }else{
172 $notice_class = 'updated';
173 }
174
175 $notice_string = '<b>'.__('Please check the below notice(s)', 'loginizer').' :</b> <br />';
176
177 foreach($notice as $ek => $ev){
178 $notice_string .= '* '.$ev.'<br />';
179 }
180
181 echo '<div id="message" class="'.$notice_class.'"><p>'
182 . $notice_string
183 . '</p></div>';
184 }
185
186 // Convert an objext to array
187 function lz_objectToArray($d){
188
189 if(is_object($d)){
190 $d = get_object_vars($d);
191 }
192
193 if(is_array($d)){
194 return array_map(__FUNCTION__, $d); // recursive
195 }elseif(is_object($d)){
196 return lz_objectToArray($d);
197 }else{
198 return $d;
199 }
200 }
201
202 // Sanitize variables
203 function lz_sanitize_variables($variables = array()){
204
205 if(is_array($variables)){
206 foreach($variables as $k => $v){
207 $variables[$k] = trim($v);
208 $variables[$k] = escapeshellcmd($v);
209 }
210 }else{
211 $variables = escapeshellcmd(trim($variables));
212 }
213
214 return $variables;
215 }
216
217 // Is multisite ?
218 function lz_is_multisite() {
219
220 if(function_exists('get_site_option') && function_exists('is_multisite') && is_multisite()){
221 return true;
222 }
223
224 return false;
225 }
226
227 // Generate a random string
228 function lz_RandomString($length = 10){
229 $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
230 $charactersLength = strlen($characters);
231 $randomString = '';
232 for($i = 0; $i < $length; $i++){
233 $randomString .= $characters[rand(0, $charactersLength - 1)];
234 }
235 return $randomString;
236 }
237
238 function lz_print($array){
239
240 echo '<pre>';
241 print_r($array);
242 echo '</pre>';
243
244 }
245
246 function lz_cleanpath($path){
247 $path = str_replace('\\\\', '/', $path);
248 $path = str_replace('\\', '/', $path);
249 $path = str_replace('//', '/', $path);
250 return rtrim($path, '/');
251 }
252
253 // Returns the Numeric Value of results Per Page
254 function lz_get_page($get = 'page', $resperpage = 50){
255
256 $resperpage = (!empty($_REQUEST['reslen']) && is_numeric($_REQUEST['reslen']) ? (int) lz_optreq('reslen') : $resperpage);
257
258 if(lz_optget($get)){
259 $pg = (int) lz_optget($get);
260 $pg = $pg - 1;
261 $page = ($pg * $resperpage);
262 $page = ($page <= 0 ? 0 : $page);
263 }else{
264 $page = 0;
265 }
266 return $page;
267 }
268
269 // Replaces the Variables with the supplied ones
270 function lz_lang_vars_name($str, $array){
271
272 foreach($array as $k => $v){
273
274 $str = str_replace('$'.$k, $v, $str);
275
276 }
277
278 return $str;
279
280 }
281
282 // Check if Loginizer is premium
283 function loginizer_is_premium(){
284 return defined('LOGINIZER_PREMIUM');
285 }
286
287 function loginizer_feature_available($feature = '', $return = 0){
288
289 if(loginizer_is_premium()){
290 return true;
291 }
292
293 $msg = '';
294
295 if(!empty($feature)){
296 $msg .= '<b>'.$feature.'</b> is available in the Pro version of Loginizer. ';
297 }
298
299 $msg .= '<a href="'.LOGINIZER_PRICING_URL.'" target="_blank" style="text-decoration:none; color:green;"><b>Upgrade to Pro</b></a>';
300
301 if(!empty($return)){
302 return $msg;
303 }else{
304 echo '<div style="color:#a94442; background-color:#f2dede; border-color:#ebccd1; padding:15px; margin-bottom:20px; border:1px solid transparent; border-radius:4px;">'.$msg.'</div>';
305 }
306
307 }
308
309 // Checks if the email is valid
310 function lz_valid_email($email){
311
312 return filter_var($email, FILTER_VALIDATE_EMAIL);
313
314 }
315
316 function loginizer_blocked_page($lz_error){
317
318 // We are checking if this is a login page or not
319 if(false === stripos(wp_login_url(), $_SERVER['REQUEST_URI'])){
320 return;
321 }
322
323 echo '<!DOCTYPE html><html><head>
324 <meta name="robots" content="noindex, noarchive">
325 <meta name="referrer" content="strict-origin-when-cross-origin">
326 <meta name="viewport" content="width=device-width, initial-scale=1.0">
327 <title>'.__('You can not access this page', 'loginizer').'</title>
328 <style>html,body{height:100%}
329 .loginizer-blocked-wrapper{display:flex; align-items:center; justify-content:space-between; flex-direction:column; height:100%;} footer{border-top:1px solid #dadada; width:40vh; text-align:center;}</style>
330 </head>
331 <body style="font-family:sans-serif; font-size:calc(15px + 0.390625vw);margin:0;">
332 <div class="loginizer-blocked-wrapper">
333 <div style="margin-top:10em;">
334 <h1 align="center">'.__('You can not access this page', 'loginizer').'</h1>
335 <p align="center">'.wp_kses_post(implode('', $lz_error)).'</p>
336 </div>
337 <footer>';
338 if(!defined('LOGINIZER_PREMIUM')){
339 echo '<p>Powered by Loginizer</p>';
340 } else {
341 echo '<p>Powered by ' . esc_html(get_bloginfo('name')) . '</p>';
342 }
343
344 echo '</footer></div></body></html>';
345 die();
346 }
347
348 function loginizer_social_css($position = 'below'){
349 global $loginizer;
350
351 // Starting the CSS
352 $css = '#lz-social-login-btns{display:none;max-width:350px;width:100%;box-sizing:border-box}.lz-social-login-btns-icon{flex-direction:row;flex-wrap:wrap;gap:8px}.lz-social-login-btns-full{flex-wrap:wrap;}.lz-social-top-padding{padding-top:20px}.lz-social-bottom-padding{padding-bottom:20px}.loginizer-social-button{display:flex;align-items:center;cursor:pointer;margin-bottom:10px;box-sizing:border-box;text-align:center;line-height:1;border:none;outline:none}.lz-social-button-icon{padding:0;width:40px;height:40px}.lz-social-button-icon-circle{border-radius:20px}.lz-social-button-icon-square{border-radius:3px}.lz-social-button-btn{padding:0 12px;width:100%;max-width:400px}.loginizer-social-button img{border-radius:2px;max-width:24px !important;}.loginizer-social-btn-logo{display:flex;padding:8px;align-items:center}.loginizer-social-btn-text{text-align:center;margin-left:15px;padding:10px 0;font-size:16px}';
353
354 // CSS for the divider with the text OR in the middle
355 if(!empty($loginizer['social_settings']) && ($position === 'below' || $position === 'above')){
356 $css .= '.loginizer-social-divider{flex: 1 0 100%; font-size:17px; font-weight:700; margin-bottom:10px; display:flex;align-items:center}.loginizer-social-divider::after,.loginizer-social-divider::before{flex:1;content:"";padding:1px;background-color:#ececec;margin:5px}';
357 }
358
359 wp_register_style('loginizer-social', '', [], LOGINIZER_VERSION);
360 wp_enqueue_style('loginizer-social');
361 wp_add_inline_style('loginizer-social', $css);
362 }
363
364 // Echos the HTML of the Social button
365 function loginizer_social_btn($return = false, $page_type = 'login', $short_atts = []){
366 global $loginizer, $loginizer_login_providers;
367
368 // We don't want to give social login option to blacklisted IP's
369 if(loginizer_is_blacklisted() || !loginizer_can_login()){
370 return;
371 }
372
373 $provider_settings = get_option('loginizer_provider_settings', []);
374 $provider_order = get_option('loginizer_social_order', []); // in what order the icons are to be shown
375
376 $providers = [];
377
378 // Sorting according to the saved order of the providers.
379 if(!empty($provider_order)){
380 foreach($provider_order as $key => $num){
381 if(!empty($provider_settings[$key])){
382 $providers[$key] = $provider_settings[$key];
383 }
384 }
385 } else {
386 $providers = $provider_settings;
387 }
388
389 if(empty($providers)){
390 return;
391 }
392
393 // ------ HTML STARTS HERE -------- //
394
395 $style = 'icon';
396 $shape = 'square';
397 $position = 'below';
398 if(!empty($loginizer['social_settings'])){
399 $social_settings = $loginizer['social_settings'];
400
401 // Setting Button Style
402 if(!empty($social_settings[$page_type]['button_style']) && $social_settings[$page_type]['button_style'] === 'full'){
403 $style = 'full';
404 }
405
406 // Setting Button Shape
407 if(!empty($social_settings[$page_type]['button_shape']) && $social_settings[$page_type]['button_shape'] !== 'square'){
408 $shape = $social_settings[$page_type]['button_shape'];
409 }
410
411 // Setting position
412 if(!empty($social_settings[$page_type]['button_position']) && $social_settings[$page_type]['button_position'] !== 'below'){
413 $position = $social_settings[$page_type]['button_position'];
414 }
415 }
416
417 $container_alignment = isset($loginizer['social_settings'][$page_type]['alignment']) ? $loginizer['social_settings'][$page_type]['alignment'] : 'auto';
418 $button_alignment = isset($loginizer['social_settings'][$page_type]['button_alignment']) ? $loginizer['social_settings'][$page_type]['button_alignment'] : 'center';
419
420 // Shortcode style
421 if(!empty($short_atts['type'])){
422 $style = esc_html($short_atts['type']);
423 }
424
425 // Shortcode Shape square or circle
426 if(!empty($short_atts['shape'])){
427 $shape = esc_html($short_atts['shape']);
428 }
429
430 // Shortcode for Container alignment
431 if(!empty($short_atts['container_alignment'])){
432 $container_alignment = esc_html($short_atts['container_alignment']);
433 }
434
435 // Shortcode for Button alignment
436 if(!empty($short_atts['button_alignment'])){
437 $button_alignment = esc_html($short_atts['button_alignment']);
438 }
439
440 // Setting divider position
441 $divider_pos = '';
442 if(!empty($short_atts['divider']) && $short_atts['divider'] == 'above'){
443 $divider_pos = 'above';
444 }elseif(empty($short_atts) && !empty($loginizer['social_settings']) && $position === 'below_plus'){
445 $divider_pos = 'above';
446 }elseif(!empty($short_atts['divider']) && $short_atts['divider'] == 'below'){
447 $divider_pos = 'below';
448 }elseif(empty($short_atts) && !empty($loginizer['social_settings']) && $position === 'above_plus'){
449 $divider_pos = 'below';
450 }
451
452 loginizer_social_css($divider_pos);
453
454 $padding = [
455 'above' => 'bottom',
456 'below' => 'top'
457 ];
458
459 $social_buttons = '<div id="lz-social-login-btns" class="'.($style == 'icon' ? 'lz-social-login-btns-icon' : 'lz-social-login-btns-full').' '.($position == 'above' || $position == 'below' ? 'lz-social-'.$padding[$position].'-padding' : '').'" style="justify-self:'.esc_attr($container_alignment).'; justify-content:'.esc_attr($button_alignment).';">';
460
461 // HTML of the divider in case the buttons are below the login fields
462 if(!empty($divider_pos) && $divider_pos == 'above'){
463 $social_buttons .= '<div class="loginizer-social-divider">OR</div><br>';
464 }
465
466 include_once LOGINIZER_DIR . '/main/login-providers.php';
467
468 foreach($providers as $provider => $settings){
469 if(empty($settings['enabled']) || empty($settings['tested'])){
470 continue;
471 }
472
473 // Filters Pro Only Auth
474 if(!empty($loginizer_login_providers[$provider]['premium']) && !defined('LOGINIZER_PREMIUM')){
475 continue;
476 }
477
478 $name = $loginizer_login_providers[$provider]['name'];
479 $color = $loginizer_login_providers[$provider]['color'];
480
481 $btn_style = 'default';
482 if(!empty($provider_settings[$provider]['button_style'])){
483 $btn_style = $provider_settings[$provider]['button_style'];
484 }
485
486 // TODO:: Improve the comment here
487 // The image is named based on button style as Facebook has different images for different style
488 // And if some more social options are added they could have the same behaviour too.
489 $img_url = LOGINIZER_URL .'/assets/images/social/'.$provider.'.png';
490 if('default' !== $btn_style){
491 if(file_exists(LOGINIZER_DIR .'/assets/images/social/'.$provider.'-'.$btn_style.'.png')){
492 $img_url = LOGINIZER_URL .'/assets/images/social/'.$provider.'-'.$btn_style.'.png';
493 }
494 }
495
496 $social_buttons .= '<div class="loginizer-social-button '.($style == 'icon' ? 'lz-social-button-icon' : 'lz-social-button-btn').' '.($shape == 'circle' ? 'lz-social-button-icon-circle' : 'lz-social-button-icon-square').'" onclick="loginizer_auth_popup(\''.esc_js($provider).'\', '.esc_js(!empty($settings['loginizer_social_key']) ? true : 0).')" style="'.((!empty($loginizer_login_providers[$provider]['styles']) && !empty($loginizer_login_providers[$provider]['styles'][$btn_style])) ? esc_attr($loginizer_login_providers[$provider]['styles'][$btn_style]) : esc_attr('background-color:'. esc_attr($color)). '; color:#FFF;') .'">
497 <div class="loginizer-social-btn-logo">
498 <img src="'.esc_url($img_url).'" height="24" alt="'.esc_attr($name).' Icon"/>
499 </div>';
500
501 // Button text in case of full button
502 if(!empty($loginizer['social_settings']) && $style === 'full'){
503 $social_buttons .= '<div class="loginizer-social-btn-text">'.esc_html__('Login With', 'loginizer').' <strong>'.esc_html($name).'</strong>
504 </div>';
505 }
506
507 $social_buttons .= '</div>';
508 }
509
510 if(empty($social_buttons)){
511 $social_buttons .= esc_html__('No Auth Provider configured', 'loginizer');
512 }
513
514 // HTML of the divider in case the buttons are above the login fields
515 if(!empty($divider_pos) && $divider_pos == 'below'){
516 $social_buttons .= '<br><div class="loginizer-social-divider">OR</div>';
517 }
518
519 $social_buttons .= '</div>';
520 loginizer_add_social_js($page_type);
521
522 if($return){
523 return $social_buttons;
524 }
525
526 echo wp_kses($social_buttons, [
527 'div' => ['class' => true, 'id' => true, 'style' => true, 'onclick' => true],
528 'img' => ['src' => true, 'height' => true, 'alt' => true, 'width' => true],
529 'strong' => true,
530 ]);
531 }
532
533 function loginizer_add_social_js($page_type){
534 global $loginizer;
535
536 if(wp_script_is('loginizer-social-js') || loginizer_is_blacklisted() || !empty($loginizer['social_script_added'])){
537 return;
538 }
539
540 $loginizer['social_script_added'] = false;
541 $func = 'append';
542 if(!empty($loginizer['social_settings']) && !empty($loginizer['social_settings'][$page_type]['button_position']) && strpos($loginizer['social_settings'][$page_type]['button_position'], 'above') !== FALSE){
543 $func = 'prepend';
544 }
545
546 $target_window = 'same';
547 if(isset($_GET['interim-login']) && $_GET['interim-login'] == 1){
548 $target_window = 'popup';
549 } elseif(!empty($loginizer['social_settings']['general']['target_window'])){
550 $target_window = $loginizer['social_settings']['general']['target_window'];
551 }
552
553 $social_nonce = wp_create_nonce('loginizer_social_check');
554
555 wp_register_script('loginizer-social-js', '', ['jquery'], LOGINIZER_VERSION, ['strategy' => false, 'in_footer' => true]);
556 wp_enqueue_script('loginizer-social-js');
557 wp_add_inline_script('loginizer-social-js', '
558
559
560
561 let lz_form = document.querySelectorAll("#loginform, #registerform, .woocommerce-form-login, .woocommerce-form-register, #front-login-form, #setupform"),
562 lz_social_btns = document.querySelectorAll("#lz-social-login-btns"),
563 lz_target_window = "'.esc_html($target_window).'",
564 lz_is_interim = "'.(!empty($_GET['interim-login']) ? '&interim-login=0' : '').'"; // as for interim it should only open a popup
565
566 if(lz_target_window == "same"){
567 let loader = "<style>#loginizer-social-loader-wrap{display:none; align-items:center; justify-content:center; position:fixed; top:0; left:0; width:100%; height:100vh; background-color:rgba(0, 0, 0, 0.2);} .loginizer-social-loader{width:48px;height:48px;border:5px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:1s linear infinite rotation}@keyframes rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}</style>";
568 loader += "<div id=\"loginizer-social-loader-wrap\"><div class=\"loginizer-social-loader\"></div></div>";
569
570 jQuery("body").append(loader);
571 }
572
573
574 lz_social_btns.forEach((btns) => {
575 btns.style.display="flex";
576 });
577
578 if(lz_form.length > 0){
579 lz_form.forEach((form, index) => {
580 if (lz_social_btns[index]) {
581 lz_social_btns[index].style.display="flex";
582 form.'.esc_html($func).'(lz_social_btns[index]);
583 }
584 });
585 }
586
587 function loginizer_auth_popup(provider, isAPI) {
588 let target_url = "'.esc_url(wp_login_url()).'?social_security='.esc_html($social_nonce).'&lz_social_provider=" + provider+lz_is_interim;
589
590 if(isAPI){
591 target_url += "&lz_api=1";
592 }
593
594 let redirect_to = "'.(!empty($_GET['redirect_to']) ? wp_validate_redirect(esc_url($_GET['redirect_to'])) : '') .'";
595
596 if(redirect_to.length){
597 target_url += "&ref="+redirect_to;
598 } else {
599 target_url += "&ref='.esc_url((is_ssl() ? 'https://' : 'http://').$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']).'"
600 }
601
602 if(lz_target_window == "same"){
603 jQuery("#loginizer-social-loader-wrap").css("display", "flex");
604
605 window.location.href = target_url;
606
607 return;
608 }
609
610 let screen_x = window.screenX !== undefined ? window.screenX : window.screenLeft,
611 screen_y = window.screenY !== undefined ? window.screenY : window.screenTop,
612 outer_width = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth,
613 outer_height = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22,
614 target_width = 600,
615 target_height = 600,
616 right = parseInt(screen_y + (outerHeight - target_height) / 2.5, 10),
617 left = parseInt(screen_x + (outerWidth - target_width) / 2, 10),
618 attributes = [];
619
620 if(target_width !== null){
621 attributes.push("width=" + target_width);
622 }
623 if(target_height !== null){
624 attributes.push("height=" + target_height);
625 }
626 attributes.push("left=" + left);
627 attributes.push("top=" + right);
628 attributes.push("scrollbars=1");
629
630 var auth_window = window.open(target_url, "authWindow", attributes.join(","));
631
632 if(window.focus){
633 auth_window.focus();
634 }
635 return false;
636 }'
637 );
638
639 $loginizer['social_script_added'] = true;
640
641 }
642
643 function loginizer_social_btn_login($return = false, $id = ''){
644 loginizer_social_btn($return, 'login');
645 }
646
647 function loginizer_get_social_error(){
648 global $loginizer;
649
650 // If we already have the error set
651 if(!empty($loginizer['social_errors'])){
652 return;
653 }
654
655 if(empty($_COOKIE) || empty($_COOKIE['lz_social_error'])){
656 return;
657 }
658
659 $error_identifier = sanitize_text_field(wp_unslash($_COOKIE['lz_social_error']));
660 $social_errors = get_site_transient($error_identifier);
661
662 if(empty($social_errors['errors'])){
663 return;
664 }
665
666 // Setting error data
667 $loginizer['retries_left'] = $social_errors['retries_left'];
668 $loginizer['social_errors'] = $social_errors['errors'];
669
670 // Cleaning the error data
671 delete_site_transient($error_identifier); // Deleting the data
672 //setcookie('lz_social_error', '', time() - 300, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true); // have to delete
673 }
674