function wsl_get_bp_user_custom_avatar($html, $args)
 {
     //Buddypress component should be enabled
     if (!wsl_is_component_enabled('buddypress')) {
         return $html;
     }
     //Check if avatars display is enabled
     if (!get_option('wsl_settings_users_avatars')) {
         return $html;
     }
     //Check arguments
     if (is_array($args)) {
         //User Object
         if (!empty($args['object']) and strtolower($args['object']) == 'user') {
             //User Identifier
             if (!empty($args['item_id']) and is_numeric($args['item_id'])) {
                 $user_id = $args['item_id'];
                 //Only Overwrite gravatars
                 # https://wordpress.org/support/topic/buddypress-avatar-overwriting-problem?replies=1
                 if (bp_get_user_has_avatar($user_id)) {
                     return $html;
                 }
                 $wsl_avatar = wsl_get_user_custom_avatar($user_id);
                 //Retrieve Avatar
                 if ($wsl_avatar) {
                     $img_class = 'class="' . (!empty($args['class']) ? $args['class'] . ' ' : '') . 'avatar-wordpress-social-login" ';
                     $img_width = !empty($args['width']) ? 'width="' . $args['width'] . '" ' : 'width="' . bp_core_avatar_full_width() . '" ';
                     $img_height = !empty($args['height']) ? 'height="' . $args['height'] . '" ' : 'height="' . bp_core_avatar_full_height() . '" ';
                     $img_alt = !empty($args['alt']) ? 'alt="' . esc_attr($args['alt']) . '" ' : '';
                     //Replace
                     $wsl_html = preg_replace('#<img[^>]+>#i', '<img src="' . $wsl_avatar . '" ' . $img_alt . $img_class . $img_height . $img_width . '/>', $html);
                     // HOOKABLE:
                     return apply_filters('wsl_hook_alter_get_bp_user_custom_avatar', $wsl_html, $user_id, $wsl_avatar, $html, $args);
                 }
             }
         }
     }
     return $html;
 }
 function test_component_bouncer_enabled()
 {
     $this->assertTrue(wsl_is_component_enabled('bouncer'));
 }
/**
*  Build required hybridauth configuration for the given provider
*/
function wsl_process_login_build_provider_config($provider)
{
    $config = array();
    $config["base_url"] = WORDPRESS_SOCIAL_LOGIN_HYBRIDAUTH_ENDPOINT_URL;
    $config["providers"] = array();
    $config["providers"][$provider] = array();
    $config["providers"][$provider]["enabled"] = true;
    $config["providers"][$provider]["keys"] = array('id' => null, 'key' => null, 'secret' => null);
    // provider application id ?
    if (get_option('wsl_settings_' . $provider . '_app_id')) {
        $config["providers"][$provider]["keys"]["id"] = get_option('wsl_settings_' . $provider . '_app_id');
    }
    // provider application key ?
    if (get_option('wsl_settings_' . $provider . '_app_key')) {
        $config["providers"][$provider]["keys"]["key"] = get_option('wsl_settings_' . $provider . '_app_key');
    }
    // provider application secret ?
    if (get_option('wsl_settings_' . $provider . '_app_secret')) {
        $config["providers"][$provider]["keys"]["secret"] = get_option('wsl_settings_' . $provider . '_app_secret');
    }
    // set custom endpoint?
    if (in_array(strtolower($provider), array('dribbble'))) {
        $config["providers"][$provider]["endpoint"] = WORDPRESS_SOCIAL_LOGIN_HYBRIDAUTH_ENDPOINT_URL . 'endpoints/' . strtolower($provider) . '.php';
    }
    // set default scope
    if (get_option('wsl_settings_' . $provider . '_app_scope')) {
        $config["providers"][$provider]["scope"] = get_option('wsl_settings_' . $provider . '_app_scope');
    }
    // set custom config for facebook
    if (strtolower($provider) == "facebook") {
        $config["providers"][$provider]["display"] = "popup";
        $config["providers"][$provider]["trustForwarded"] = true;
        // switch to fb::display 'page' if wsl auth in page
        if (get_option('wsl_settings_use_popup') == 2) {
            $config["providers"][$provider]["display"] = "page";
        }
    }
    // set custom config for google
    if (strtolower($provider) == "google") {
        // if contacts import enabled, we request an extra permission 'https://www.google.com/m8/feeds/'
        if (wsl_is_component_enabled('contacts') && get_option('wsl_settings_contacts_import_google') == 1) {
            $config["providers"][$provider]["scope"] .= " https://www.google.com/m8/feeds/";
        }
    }
    $provider_scope = isset($config["providers"][$provider]["scope"]) ? $config["providers"][$provider]["scope"] : '';
    // HOOKABLE: allow to overwrite scopes
    $config["providers"][$provider]["scope"] = apply_filters('wsl_hook_alter_provider_scope', $provider_scope, $provider);
    // HOOKABLE: allow to overwrite hybridauth config for the selected provider
    $config["providers"][$provider] = apply_filters('wsl_hook_alter_provider_config', $config["providers"][$provider], $provider);
    return $config;
}
function wsl_component_networks_basicinsights()
{
    // HOOKABLE:
    do_action("wsl_component_networks_basicinsights_start");
    global $wpdb;
    $sql = "SELECT count( * ) as items FROM `{$wpdb->prefix}users`";
    $rs1 = $wpdb->get_results($sql);
    $sql = "SELECT count( * ) as items FROM `{$wpdb->prefix}usermeta` where meta_key = 'wsl_user'";
    $rs2 = $wpdb->get_results($sql);
    $total_users = (int) $rs1[0]->items;
    $total_users_wsl = (int) $rs2[0]->items;
    $users_conversion = 100 * $total_users_wsl / $total_users;
    if ($total_users_wsl && wsl_is_component_enabled("basicinsights")) {
        ?>
 
<div class="postbox " id="linksubmitdiv"> 
	<div class="inside">
		<div id="submitlink" class="submitbox"> 
			<h3 style="cursor: default;"><?php 
        _wsl_e("Insights", 'wordpress-social-login');
        ?>
</h3>
			<div id="minor-publishing">  
				<div id="misc-publishing-actions">
					<div style="padding:20px;padding-top:0px;"> 
						<h4 style="border-bottom:1px solid #ccc"><?php 
        _wsl_e("Conversions", 'wordpress-social-login');
        ?>
</h4>
						<table width="90%"> 
							<tr>
								<td width="60%"><?php 
        _wsl_e("WP users", 'wordpress-social-login');
        ?>
</td><td><?php 
        echo $total_users;
        ?>
</td>
							</tr>
							<tr>
								<td><?php 
        _wsl_e("WSL users", 'wordpress-social-login');
        ?>
</td><td><?php 
        echo $total_users_wsl;
        ?>
</td>
							</tr>
							<tr>
								<td><?php 
        _wsl_e("Conversions", 'wordpress-social-login');
        ?>
</td><td style="border-top:1px solid #ccc">+<b><?php 
        echo number_format($users_conversion, 2, '.', '');
        ?>
</b> %</td>
							</tr>
						</table>
						<?php 
        $sql = "SELECT meta_value, count( * ) as items FROM `{$wpdb->prefix}usermeta` where meta_key = 'wsl_user' group by meta_value order by items desc ";
        $rs1 = $wpdb->get_results($sql);
        $assets_base_url = WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL . '/assets/img/16x16/';
        ?>
 
						<h4 style="border-bottom:1px solid #ccc"><?php 
        _wsl_e("By provider", 'wordpress-social-login');
        ?>
</h4>
						<table width="90%">
							<?php 
        foreach ($rs1 as $item) {
            if (!$item->meta_value) {
                $item->meta_value = "Unknown";
            }
            ?>
									<tr>
										<td width="60%">
											<img src="<?php 
            echo $assets_base_url . strtolower($item->meta_value) . '.png';
            ?>
" style="vertical-align:top;width:16px;height:16px;" /> <?php 
            echo $item->meta_value;
            ?>
 
										</td>
										<td>
											<?php 
            echo $item->items;
            ?>
										</td>
									</tr>
								<?php 
        }
        ?>
 
							<tr>
								<td align="right">&nbsp;</td><td style="border-top:1px solid #ccc"><b><?php 
        echo $total_users_wsl;
        ?>
</b> <?php 
        _wsl_e("WSL users", 'wordpress-social-login');
        ?>
</td>
							</tr>
						</table> 
						<?php 
        $sql = "SELECT meta_value, count( * ) as items FROM `{$wpdb->prefix}usermeta` where meta_key = 'wsl_user_gender' group by meta_value order by items desc ";
        $rs = $wpdb->get_results($sql);
        ?>
						<h4 style="border-bottom:1px solid #ccc"><?php 
        _wsl_e("By gender", 'wordpress-social-login');
        ?>
</h4>
						<table width="90%">
							<?php 
        foreach ($rs as $item) {
            if (!$item->meta_value) {
                $item->meta_value = "Unknown";
            }
            ?>
									<tr>
										<td width="60%">
											<?php 
            echo ucfirst($item->meta_value);
            ?>
										</td>
										<td>
											<?php 
            echo $item->items;
            ?>
										</td>
									</tr>
								<?php 
        }
        ?>
						</table>
						<?php 
        $sql = "SELECT meta_value, count( * ) as items FROM `{$wpdb->prefix}usermeta` where meta_key = 'wsl_user_age' group by meta_value order by items desc limit 21";
        $rs = $wpdb->get_results($sql);
        ?>
						<h4 style="border-bottom:1px solid #ccc"><?php 
        _wsl_e("By age", 'wordpress-social-login');
        ?>
</h4>
						<table width="90%">
							<?php 
        $t_ages = 0;
        $n_ages = 0;
        foreach ($rs as $item) {
            if (!$item->meta_value) {
                $item->meta_value = "Unknown";
            } else {
                $t_ages += (int) $item->meta_value;
                $n_ages++;
            }
            ?>
									<tr>
										<td width="60%">
											<?php 
            echo $item->meta_value;
            ?>
										</td>
										<td>
											<?php 
            echo $item->items;
            ?>
										</td>
									</tr>
								<?php 
        }
        if ($n_ages) {
            $a_ages = $t_ages / $n_ages;
        }
        ?>
						</td>
						</tr>
						<tr>
							<td align="right">&nbsp;</td><td style="border-top:1px solid #ccc"><b><?php 
        echo number_format($a_ages, 1, '.', '');
        ?>
</b> <?php 
        _wsl_e("yrs in average", 'wordpress-social-login');
        ?>
</td>
						</tr>
						</table>
					</div>
				</div> 
			</div> 
		</div>
	</div>
</div> 
<?php 
    }
    // HOOKABLE:
    do_action("wsl_component_networks_basicinsights_end");
}
function wsl_buddypress_xprofile_mapping($user_id, $provider, $hybridauth_user_profile)
{
    // component Buddypress should be enabled
    if (!wsl_is_component_enabled('buddypress')) {
        return;
    }
    do_action('bp_setup_globals');
    // make sure buddypress is loaded.
    // > is this a legit way to check?
    if (!function_exists('xprofile_set_field_data')) {
        return;
    }
    // check if profiles mapping is enabled
    $wsl_settings_buddypress_enable_mapping = get_option('wsl_settings_buddypress_enable_mapping');
    if ($wsl_settings_buddypress_enable_mapping != 1) {
        return;
    }
    // get current mapping
    $wsl_settings_buddypress_xprofile_map = get_option('wsl_settings_buddypress_xprofile_map');
    $hybridauth_fields = array('identifier', 'profileURL', 'webSiteURL', 'photoURL', 'displayName', 'description', 'firstName', 'lastName', 'gender', 'language', 'age', 'birthDay', 'birthMonth', 'birthYear', 'email', 'phone', 'address', 'country', 'region', 'city', 'zip');
    $hybridauth_user_profile = (array) $hybridauth_user_profile;
    // all check: start mapping process
    if ($wsl_settings_buddypress_xprofile_map) {
        foreach ($wsl_settings_buddypress_xprofile_map as $buddypress_field_id => $field_name) {
            // if data can be found in hybridauth profile
            if (in_array($field_name, $hybridauth_fields)) {
                $value = $hybridauth_user_profile[$field_name];
                xprofile_set_field_data($buddypress_field_id, $user_id, $value);
            }
            // if eq provider
            if ($field_name == 'provider') {
                xprofile_set_field_data($buddypress_field_id, $user_id, $provider);
            }
            // if eq birthDate
            if ($field_name == 'birthDate') {
                $value = str_pad((int) $hybridauth_user_profile['birthYear'], 4, '0', STR_PAD_LEFT) . '-' . str_pad((int) $hybridauth_user_profile['birthMonth'], 2, '0', STR_PAD_LEFT) . '-' . str_pad((int) $hybridauth_user_profile['birthDay'], 2, '0', STR_PAD_LEFT) . ' 00:00:00';
                xprofile_set_field_data($buddypress_field_id, $user_id, $value);
            }
        }
    }
}