PluginProbe
Loginizer / trunk
Loginizer vtrunk
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
← All changes | functions.php +690 -190 1.0.2 → trunk View file →
@@ -1,190 +1,690 @@
1 -<?php
2 -
3 -// Get the client IP
4 -function lz_getip(){
5 - if(isset($_SERVER["REMOTE_ADDR"])){
6 - return $_SERVER["REMOTE_ADDR"];
7 - }elseif(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
8 - return $_SERVER["HTTP_X_FORWARDED_FOR"];
9 - }elseif(isset($_SERVER["HTTP_CLIENT_IP"])){
10 - return $_SERVER["HTTP_CLIENT_IP"];
11 - }
12 -}
13 -
14 -// Execute a select query and return an array
15 -function lz_selectquery($query, $array = 0){
16 - global $wpdb;
17 -
18 - $result = $wpdb->get_results($query, 'ARRAY_A');
19 -
20 - if(empty($array)){
21 - return current($result);
22 - }else{
23 - return $result;
24 - }
25 -}
26 -
27 -// Check if an IP is valid
28 -function lz_valid_ip($ip){
29 -
30 - if(!ip2long($ip)){
31 - return false;
32 - }
33 - return true;
34 -}
35 -
36 -// Check if a field is posted via POST else return default value
37 -function lz_optpost($name, $default = ''){
38 -
39 - if(!empty($_POST[$name])){
40 - return lz_inputsec(lz_htmlizer(trim($_POST[$name])));
41 - }
42 -
43 - return $default;
44 -}
45 -
46 -// Check if a field is posted via GET else return default value
47 -function lz_optget($name, $default = ''){
48 -
49 - if(!empty($_GET[$name])){
50 - return lz_inputsec(lz_htmlizer(trim($_GET[$name])));
51 - }
52 -
53 - return $default;
54 -}
55 -
56 -// Check if a field is posted via GET or POST else return default value
57 -function lz_optreq($name, $default = ''){
58 -
59 - if(!empty($_REQUEST[$name])){
60 - return lz_inputsec(lz_htmlizer(trim($_REQUEST[$name])));
61 - }
62 -
63 - return $default;
64 -}
65 -
66 -function lz_inputsec($string){
67 -
68 - if(!get_magic_quotes_gpc()){
69 -
70 - $string = addslashes($string);
71 -
72 - }else{
73 -
74 - $string = stripslashes($string);
75 - $string = addslashes($string);
76 -
77 - }
78 -
79 - // This is to replace ` which can cause the command to be executed in exec()
80 - $string = str_replace('`', '\`', $string);
81 -
82 - return $string;
83 -
84 -}
85 -
86 -function lz_htmlizer($string){
87 -
88 - $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
89 -
90 - $string = preg_replace('/(&amp;#(\d{1,7}|x[0-9a-fA-F]{1,6});)/e', 'entity_check(\\2);', $string);
91 -
92 - return $string;
93 -
94 -}
95 -
96 -// Check if a checkbox is selected
97 -function lz_is_checked($post){
98 -
99 - if(!empty($_POST[$post])){
100 - return true;
101 - }
102 - return false;
103 -}
104 -
105 -// Reoort an error
106 -function lz_report_error($error = array()){
107 -
108 - if(empty($error)){
109 - return true;
110 - }
111 -
112 - $error_string = '<b>Please fix the below error(s) :</b> <br />';
113 -
114 - foreach($error as $ek => $ev){
115 - $error_string .= '* '.$ev.'<br />';
116 - }
117 -
118 - echo '<div id="message" class="error"><p>'
119 - . __($error_string, 'loginizer')
120 - . '</p></div>';
121 -}
122 -
123 -// Report a notice
124 -function lz_report_notice($notice = array()){
125 -
126 - global $wp_version;
127 -
128 - if(empty($notice)){
129 - return true;
130 - }
131 -
132 - // Which class do we have to use ?
133 - if(version_compare($wp_version, '3.8', '<')){
134 - $notice_class = 'updated';
135 - }else{
136 - $notice_class = 'updated';
137 - }
138 -
139 - $notice_string = '<b>Please check the below notice(s) :</b> <br />';
140 -
141 - foreach($notice as $ek => $ev){
142 - $notice_string .= '* '.$ev.'<br />';
143 - }
144 -
145 - echo '<div id="message" class="'.$notice_class.'"><p>'
146 - . __($notice_string, 'loginizer')
147 - . '</p></div>';
148 -}
149 -
150 -// Convert an objext to array
151 -function lz_objectToArray($d){
152 -
153 - if(is_object($d)){
154 - $d = get_object_vars($d);
155 - }
156 -
157 - if(is_array($d)){
158 - return array_map(__FUNCTION__, $d); // recursive
159 - }elseif(is_object($d)){
160 - return lz_objectToArray($d);
161 - }else{
162 - return $d;
163 - }
164 -}
165 -
166 -// Sanitize variables
167 -function lz_sanitize_variables($variables = array()){
168 -
169 - if(is_array($variables)){
170 - foreach($variables as $k => $v){
171 - $variables[$k] = trim($v);
172 - $variables[$k] = escapeshellcmd($v);
173 - }
174 - }else{
175 - $variables = escapeshellcmd(trim($variables));
176 - }
177 -
178 - return $variables;
179 -}
180 -
181 -// Is multisite ?
182 -function lz_is_multisite() {
183 -
184 - if(function_exists('get_site_option') && function_exists('is_multisite') && is_multisite()){
185 - return true;
186 - }
187 -
188 - return false;
189 -}
190 -
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 + /* translators: %s: This OR is used as a separator for Either login through username OR use social login */
462 + $or_translated = __('OR', 'loginizer');
463 +
464 + // HTML of the divider in case the buttons are below the login fields
465 + if(!empty($divider_pos) && $divider_pos == 'above'){
466 + $social_buttons .= '<div class="loginizer-social-divider">'.esc_html($or_translated).'</div><br>';
467 + }
468 +
469 + include_once LOGINIZER_DIR . '/main/login-providers.php';
470 +
471 + // This is used to decide weather we will use Login with or Register with
472 + $current_hook = current_action();
473 + $register_hooks = ['register_form', 'woocommerce_register_form'];
474 +
475 + foreach($providers as $provider => $settings){
476 + if(empty($settings['enabled']) || empty($settings['tested'])){
477 + continue;
478 + }
479 +
480 + // Filters Pro Only Auth
481 + if(!empty($loginizer_login_providers[$provider]['premium']) && !defined('LOGINIZER_PREMIUM')){
482 + continue;
483 + }
484 +
485 + $name = $loginizer_login_providers[$provider]['name'];
486 + $color = $loginizer_login_providers[$provider]['color'];
487 +
488 + $btn_style = 'default';
489 + if(!empty($provider_settings[$provider]['button_style'])){
490 + $btn_style = $provider_settings[$provider]['button_style'];
491 + }
492 +
493 + // TODO:: Improve the comment here
494 + // The image is named based on button style as Facebook has different images for different style
495 + // And if some more social options are added they could have the same behaviour too.
496 + $img_url = LOGINIZER_URL .'/assets/images/social/'.$provider.'.png';
497 + if('default' !== $btn_style){
498 + if(file_exists(LOGINIZER_DIR .'/assets/images/social/'.$provider.'-'.$btn_style.'.png')){
499 + $img_url = LOGINIZER_URL .'/assets/images/social/'.$provider.'-'.$btn_style.'.png';
500 + }
501 + }
502 +
503 + $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;') .'">
504 + <div class="loginizer-social-btn-logo">
505 + <img src="'.esc_url($img_url).'" height="24" alt="'.esc_attr($name).' Icon"/>
506 + </div>';
507 +
508 + if(in_array($current_hook, $register_hooks)){
509 + /* translators: %s: This is for social login so the complete text would be Register With [Brand Name], eg Register With Google */
510 + $button_text = esc_html__('Register With', 'loginizer');
511 + } else {
512 + /* translators: %s: This is for social login so the complete text would be Login With [Brand Name], eg Login With Google */
513 + $button_text = esc_html__('Login With', 'loginizer');
514 + }
515 +
516 + // Button text in case of full button
517 + if(!empty($loginizer['social_settings']) && $style === 'full'){
518 + $social_buttons .= '<div class="loginizer-social-btn-text">'.esc_html($button_text).' <strong>'.esc_html($name).'</strong>
519 + </div>';
520 + }
521 +
522 + $social_buttons .= '</div>';
523 + }
524 +
525 + if(empty($social_buttons)){
526 + $social_buttons .= esc_html__('No Auth Provider configured', 'loginizer');
527 + }
528 +
529 + // HTML of the divider in case the buttons are above the login fields
530 + if(!empty($divider_pos) && $divider_pos == 'below'){
531 + $social_buttons .= '<br><div class="loginizer-social-divider">'.esc_html($or_translated).'</div>';
532 + }
533 +
534 + $social_buttons .= '</div>';
535 + loginizer_add_social_js($page_type);
536 +
537 + if($return){
538 + return $social_buttons;
539 + }
540 +
541 + echo wp_kses($social_buttons, [
542 + 'div' => ['class' => true, 'id' => true, 'style' => true, 'onclick' => true],
543 + 'img' => ['src' => true, 'height' => true, 'alt' => true, 'width' => true],
544 + 'strong' => true,
545 + ]);
546 +}
547 +
548 +function loginizer_add_social_js($page_type){
549 + global $loginizer;
550 +
551 + if(wp_script_is('loginizer-social-js') || loginizer_is_blacklisted() || !empty($loginizer['social_script_added'])){
552 + return;
553 + }
554 +
555 + $loginizer['social_script_added'] = false;
556 + $func = 'append';
557 + if(!empty($loginizer['social_settings']) && !empty($loginizer['social_settings'][$page_type]['button_position']) && strpos($loginizer['social_settings'][$page_type]['button_position'], 'above') !== FALSE){
558 + $func = 'prepend';
559 + }
560 +
561 + $target_window = 'same';
562 + if(isset($_GET['interim-login']) && $_GET['interim-login'] == 1){
563 + $target_window = 'popup';
564 + } elseif(!empty($loginizer['social_settings']['general']['target_window'])){
565 + $target_window = $loginizer['social_settings']['general']['target_window'];
566 + }
567 +
568 + $social_nonce = wp_create_nonce('loginizer_social_check');
569 +
570 + wp_register_script('loginizer-social-js', '', ['jquery'], LOGINIZER_VERSION, ['strategy' => false, 'in_footer' => true]);
571 + wp_enqueue_script('loginizer-social-js');
572 + wp_add_inline_script('loginizer-social-js', '
573 +
574 +
575 +
576 + let lz_form = document.querySelectorAll("#loginform, #registerform, .woocommerce-form-login, .woocommerce-form-register, #front-login-form, #setupform"),
577 + lz_social_btns = document.querySelectorAll("#lz-social-login-btns"),
578 + lz_target_window = "'.esc_html($target_window).'",
579 + lz_is_interim = "'.(!empty($_GET['interim-login']) ? '&interim-login=0' : '').'"; // as for interim it should only open a popup
580 +
581 + if(lz_target_window == "same"){
582 + 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>";
583 + loader += "<div id=\"loginizer-social-loader-wrap\"><div class=\"loginizer-social-loader\"></div></div>";
584 +
585 + jQuery("body").append(loader);
586 + }
587 +
588 +
589 + lz_social_btns.forEach((btns) => {
590 + btns.style.display="flex";
591 + });
592 +
593 + if(lz_form.length > 0){
594 + lz_form.forEach((form, index) => {
595 + if (lz_social_btns[index]) {
596 + lz_social_btns[index].style.display="flex";
597 + form.'.esc_html($func).'(lz_social_btns[index]);
598 + }
599 + });
600 + }
601 +
602 + function loginizer_auth_popup(provider, isAPI) {
603 + let target_url = "'.esc_url(wp_login_url()).'?social_security='.esc_html($social_nonce).'&lz_social_provider=" + provider+lz_is_interim;
604 +
605 + if(isAPI){
606 + target_url += "&lz_api=1";
607 + }
608 +
609 + let redirect_to = "'.(!empty($_GET['redirect_to']) ? wp_validate_redirect(esc_url($_GET['redirect_to'])) : '') .'";
610 +
611 + if(redirect_to.length){
612 + target_url += "&ref="+redirect_to;
613 + } else {
614 + target_url += "&ref='.esc_url((is_ssl() ? 'https://' : 'http://').$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']).'"
615 + }
616 +
617 + if(lz_target_window == "same"){
618 + jQuery("#loginizer-social-loader-wrap").css("display", "flex");
619 +
620 + window.location.href = target_url;
621 +
622 + return;
623 + }
624 +
625 + let screen_x = window.screenX !== undefined ? window.screenX : window.screenLeft,
626 + screen_y = window.screenY !== undefined ? window.screenY : window.screenTop,
627 + outer_width = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth,
628 + outer_height = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22,
629 + target_width = 600,
630 + target_height = 600,
631 + right = parseInt(screen_y + (outerHeight - target_height) / 2.5, 10),
632 + left = parseInt(screen_x + (outerWidth - target_width) / 2, 10),
633 + attributes = [];
634 +
635 + if(target_width !== null){
636 + attributes.push("width=" + target_width);
637 + }
638 + if(target_height !== null){
639 + attributes.push("height=" + target_height);
640 + }
641 + attributes.push("left=" + left);
642 + attributes.push("top=" + right);
643 + attributes.push("scrollbars=1");
644 +
645 + var auth_window = window.open(target_url, "authWindow", attributes.join(","));
646 +
647 + if(window.focus){
648 + auth_window.focus();
649 + }
650 + return false;
651 + }'
652 + );
653 +
654 + $loginizer['social_script_added'] = true;
655 +
656 +}
657 +
658 +function loginizer_social_btn_login($return = false, $id = ''){
659 + if(!loginizer_is_blacklisted()){
660 + loginizer_social_btn($return, 'login');
661 + }
662 +}
663 +
664 +function loginizer_get_social_error(){
665 + global $loginizer;
666 +
667 + // If we already have the error set
668 + if(!empty($loginizer['social_errors'])){
669 + return;
670 + }
671 +
672 + if(empty($_COOKIE) || empty($_COOKIE['lz_social_error'])){
673 + return;
674 + }
675 +
676 + $error_identifier = sanitize_text_field(wp_unslash($_COOKIE['lz_social_error']));
677 + $social_errors = get_site_transient($error_identifier);
678 +
679 + if(empty($social_errors['errors'])){
680 + return;
681 + }
682 +
683 + // Setting error data
684 + $loginizer['retries_left'] = $social_errors['retries_left'];
685 + $loginizer['social_errors'] = $social_errors['errors'];
686 +
687 + // Cleaning the error data
688 + delete_site_transient($error_identifier); // Deleting the data
689 + //setcookie('lz_social_error', '', time() - 300, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true); // have to delete
690 +}