Example #1
0
function ts_fab_shortcode($atts)
{
    extract(shortcode_atts(array('authorid' => '', 'tabs' => '', 'avatar' => ''), $atts));
    if ($authorid) {
        $authorid = absint($authorid);
    } else {
        return;
    }
    // List of allowed tabs
    $default_tabs = ts_fab_default_tabs();
    // default tabs
    $additional_tabs = array_keys(ts_fab_additional_tabs());
    // additional tabs
    $allowed_tabs = array_merge($default_tabs, $additional_tabs);
    // all tabs
    if ($tabs) {
        $selected_tabs = explode(',', $tabs);
        foreach ($selected_tabs as $selected_tab) {
            // Remove empty spaces
            $selected_tab = str_replace(' ', '', $selected_tab);
            // If tab name is one of allowed tab names, add it to $show_tabs array
            if (in_array($selected_tab, $allowed_tabs)) {
                $show_tabs[] = $selected_tab;
            }
        }
    }
    // Check if photo needs to be above text
    if ('above' == $avatar) {
        $float_attr = 'above';
    } else {
        $float_attr = 'floated';
    }
    // If no tabs are passed, use the ones set in Tabs Settings in plugin settings page
    if (!isset($show_tabs)) {
        $show_tabs = array_keys(ts_fab_get_tabs_settings(), 1);
    }
    $a = rand(100, 999);
    $b = rand(100, 999);
    $c = rand(100, 999);
    return ts_fab_construct_fab('shortcode-' . $a . '-' . $b . '-' . $c, $authorid, $show_tabs, $float_attr);
}
/**
 * Construct Fanciest Author Box
 * Used as helper function, to generate Fanciest Author Box before or after posts, as shortcode, widget or template tag
 *
 * @since 1.0
 */
function ts_fab_construct_fab($context = '', $authorid = '', $show_tabs = array('bio', 'twitter', 'facebook', 'googleplus', 'linkedin', 'latest_posts', 'custom'))
{
    if ($authorid == '') {
        global $authordata;
        $author = $authordata;
    } else {
        $author = get_userdata($authorid);
    }
    $options = ts_fab_get_tabs_settings();
    $display_options = ts_fab_get_display_settings();
    if (isset($display_options['tabs_style']) && $display_options['tabs_style'] == 'icons') {
        $tabs_class = 'ts-fab-icons-only';
    } else {
        $tabs_class = 'ts-fab-icons-text';
    }
    // Set custom tab title, based on whether users can override it
    if (isset($options['custom_tab_override']) && $options['custom_tab_override'] == 1) {
        if (get_user_meta($author->ID, 'ts_fab_custom_tab_title', true)) {
            $custom_title = get_user_meta($author->ID, 'ts_fab_custom_tab_title', true);
        } elseif ($options['custom_tab_title'] != '') {
            $custom_title = $options['custom_tab_title'];
        }
    } elseif (isset($options['custom_tab_title'])) {
        $custom_title = $options['custom_tab_title'];
    }
    $ts_fab = '<!-- Fanciest Author Box v' . FAB_VERSION . ' -->';
    $ts_fab .= '<div id="ts-fab-' . $context . '" class="ts-fab-wrapper ' . $tabs_class . '">';
    // Do not show tabs list if there's only one tab
    if (count($show_tabs) > 1) {
        // Construct tabs list
        $ts_fab .= '<ul class="ts-fab-list">';
        foreach ($show_tabs as $show_tab) {
            // Check if it's a default tab
            if (in_array($show_tab, ts_fab_default_tabs())) {
                switch ($show_tab) {
                    case 'bio':
                        $ts_fab .= '<li class="ts-fab-bio-link"><a href="#ts-fab-bio-' . $context . '">' . __('Bio', 'ts-fab') . '</a></li>';
                        break;
                    case 'twitter':
                        // Check if Twitter tab needs to be shown and user has entered Twitter details
                        if (in_array('twitter', $show_tabs) && get_user_meta($author->ID, 'ts_fab_twitter', true)) {
                            $ts_fab .= '<li class="ts-fab-twitter-link"><a href="#ts-fab-twitter-' . $context . '">Twitter</a></li>';
                        }
                        break;
                    case 'googleplus':
                        // Check if Google+ tab needs to be shown and user has entered Google+ details
                        if (in_array('googleplus', $show_tabs) && get_user_meta($author->ID, 'ts_fab_googleplus', true)) {
                            add_action('wp_print_footer_scripts', 'ts_fab_googleplus_head');
                            $ts_fab .= '<li class="ts-fab-googleplus-link"><a href="#ts-fab-googleplus-' . $context . '">Google+</a></li>';
                        }
                        break;
                    case 'facebook':
                        // Check if Facebook tab needs to be shown and user has entered Facebook details
                        if (in_array('facebook', $show_tabs) && get_user_meta($author->ID, 'ts_fab_facebook', true)) {
                            $ts_fab .= '<li class="ts-fab-facebook-link"><a href="#ts-fab-facebook-' . $context . '">Facebook</a></li>';
                        }
                        break;
                    case 'linkedin':
                        // Check if LinkedIn tab needs to be shown and user has entered LinkedIn details
                        if (in_array('linkedin', $show_tabs) && get_user_meta($author->ID, 'ts_fab_linkedin', true)) {
                            $ts_fab .= '<li class="ts-fab-linkedin-link"><a href="#ts-fab-linkedin-' . $context . '">LinkedIn</a></li>';
                        }
                        break;
                    case 'latest_posts':
                        $ts_fab .= '<li class="ts-fab-latest-posts-link"><a href="#ts-fab-latest-posts-' . $context . '">' . __('Latest Posts', 'ts-fab') . '</a></li>';
                        break;
                    case 'custom':
                        if ($options['custom'] == 1) {
                            if (in_array('custom', $show_tabs)) {
                                if (isset($custom_title)) {
                                    $ts_fab .= '<li class="ts-fab-custom-link"><a href="#ts-fab-custom-' . $context . '">' . strip_tags(stripslashes($custom_title)) . '</a></li>';
                                }
                            }
                        }
                        break;
                }
                // end switch
                // else it's an additional tab
            } else {
                // Tabs added by themes or other plugins
                $additional_tabs = ts_fab_additional_tabs();
                // Check if there are any additional tabs
                if (!empty($additional_tabs)) {
                    foreach ($additional_tabs as $additional_tab_key => $additional_tab_value) {
                        // Check if checkbox for this tab is checked
                        if (isset($options[$additional_tab_key]) && $show_tab == $additional_tab_key) {
                            // Check tab conditional function to determine whether tab should be shown for this user
                            if (isset($additional_tab_value['conditional_callback'])) {
                                // Sets a flag based on what conditional function returns
                                $conditional_function_output = $additional_tab_value['conditional_callback']($author->ID);
                            }
                            // end conditional function check
                            // Show tab if conditional function doesn't return false
                            if (isset($conditional_function_output) && !$conditional_function_output == false) {
                                $ts_fab .= '<li class="ts-fab-' . $additional_tab_key . '-link ts-fab-additional-link"><a href="#ts-fab-' . $additional_tab_key . '-' . $context . '">' . strip_tags(stripslashes($additional_tab_value['name'])) . '</a></li>';
                            }
                            // End conditional flag check
                        }
                        // end check if option is checked
                    }
                    // end foreach
                }
                // end if
            }
        }
        // end foreach
        $ts_fab .= '</ul>';
    }
    // End if only one tab check
    // Construct individual tabs
    $ts_fab .= '<div class="ts-fab-tabs">';
    foreach ($show_tabs as $show_tab) {
        // Check if it's a default tab
        if (in_array($show_tab, ts_fab_default_tabs())) {
            switch ($show_tab) {
                case 'bio':
                    $ts_fab .= ts_fab_show_bio($context, $author->ID);
                    break;
                case 'twitter':
                    // Check if Twitter tab needs to be shown and user has entered Twitter details
                    if (get_user_meta($author->ID, 'ts_fab_twitter', true)) {
                        $ts_fab .= ts_fab_show_twitter($context, $author->ID);
                    }
                    break;
                case 'facebook':
                    // Check if Facebook tab needs to be shown and user has entered Facebook details
                    if (get_user_meta($author->ID, 'ts_fab_facebook', true)) {
                        $ts_fab .= ts_fab_show_facebook($context, $author->ID);
                    }
                    break;
                case 'googleplus':
                    // Check if Google+ tab needs to be shown and user has entered Google+ details
                    if (get_user_meta($author->ID, 'ts_fab_googleplus', true)) {
                        $ts_fab .= ts_fab_show_googleplus($context, $author->ID);
                    }
                    break;
                case 'linkedin':
                    // Check if LinkedIn tab needs to be shown and user has entered LinkedIn details
                    if (get_user_meta($author->ID, 'ts_fab_linkedin', true)) {
                        $ts_fab .= ts_fab_show_linkedin($context, $author->ID);
                    }
                    break;
                case 'latest_posts':
                    $ts_fab .= ts_fab_show_latest_posts($context, $author->ID);
                    break;
                case 'custom':
                    $ts_fab .= ts_fab_show_custom($context, $author->ID);
                    break;
            }
            // end switch
            // else, it's an additional tab
        } else {
            // Tabs added by themes or other plugins
            $additional_tabs = ts_fab_additional_tabs();
            // Check if there are any additional tabs
            if (!empty($additional_tabs)) {
                foreach ($additional_tabs as $additional_tab_key => $additional_tab_value) {
                    if ($show_tab == $additional_tab_key) {
                        // Check tab conditional function to determine whether tab should be shown for this user
                        if (isset($additional_tab_value['conditional_callback'])) {
                            // Sets a flag based on what conditional function returns
                            $conditional_function_output = $additional_tab_value['conditional_callback']($author->ID);
                        }
                        // end conditional function check
                        // Show tab if conditional function doesn't return false
                        if (isset($conditional_function_output) && !$conditional_function_output == false) {
                            $ts_fab .= '
									<div class="ts-fab-tab ts-fab-additional-tab" id="ts-fab-' . $additional_tab_key . '-' . $context . '">';
                            // Additional tab callback function
                            $ts_fab .= $additional_tab_value['callback']();
                            $ts_fab .= '</div>';
                        }
                        // End conditional flag check
                    }
                }
                // end foreach
            }
            // end if
        }
    }
    // end foreach
    $ts_fab .= '
		</div>
	</div>';
    return $ts_fab;
}