Current File : /home/resuelf/www/wp-content/plugins/starbox/models/Frontend.php
<?php defined('ABSPATH') || die('Cheatin\' uh?'); ?>
<?php

class ABH_Models_Frontend {

    public $author;
    public $details = null;
    public $category = null;
    public $position;
    public $single = true;

    /**
     * Get the html author box
     * @global object $wp_query
     * @return string
     */
    public function getAuthorBox() {
        global $wp_query;

        if (!isset($this->author))
            return;

        $content = '';

        if (isset($this->author) && isset($this->author->ID) ) {

            if(!$this->details) {
                $this->details = array(
                    'abh_use' => 1,
                    'abh_nofollow_social' => 1,
                    'abh_noopener_social' => 0,
                    'abh_noreferrer_social' => 0,
                    // --
                    'abh_title' => "",
                    'abh_company' => "",
                    'abh_company_url' => "",
                    'abh_extra_description' => "",
                    // --
                    'abh_socialtext' => "",
                    'abh_twitter' => "",
                    'abh_facebook' => "",
                    'abh_linkedin' => "",
                    'abh_instagram' => "",
                    'abh_flickr' => "",
                    'abh_pinterest' => "",
                    'abh_tumblr' => "",
                    'abh_youtube' => "",
                    'abh_vimeo' => "",
                    'abh_klout' => "",
                    'abh_gravatar' => "",
                    'abh_theme' => "default",
                    'abh_position' => "default",
                );
            }

            if (!isset($this->author->user_description))
                $this->author->user_description = '';


            if ($this->details['abh_theme'] == 'default')
                $this->details['abh_theme'] = ABH_Classes_Tools::getOption('abh_theme');

            $content .= '
                         <div class="abh_box abh_box_' . $this->position . ' abh_box_' . $this->details['abh_theme'] . '">
                                <ul class="abh_tabs">
                                 <li class="abh_about abh_active"><a href="#abh_about">' . __('About', _ABH_PLUGIN_NAME_) . '</a></li>
                                 <li class="abh_posts"><a href="#abh_posts">' . __('Latest Posts', _ABH_PLUGIN_NAME_) . '</a></li>
                                </ul>
                                <div class="abh_tab_content">' .
                $this->showAuthorDescription() .
                $this->showAuthorPosts() . '
                                </div>
                         </div>';

            return $this->clearTags($content);
        }
        return '';
    }

    /**
     * Get the image for the author
     * @return string
     */
    public function getProfileImage() {
        if (isset($this->details['abh_gravatar']) && $this->details['abh_gravatar'] <> '' && file_exists(_ABH_GRAVATAR_DIR_ . $this->details['abh_gravatar'])) {
            $image =  '<img src="' . _ABH_GRAVATAR_URL_ . $this->details['abh_gravatar'] . '" class="photo" width="' . ABH_IMAGESIZE . '" alt="' . $this->author->display_name . '" />';
        } else {
            $image =  get_avatar($this->author->ID, ABH_IMAGESIZE, '', $this->author->display_name);
        }

        return apply_filters('abh_author_profile_image', $image);

    }

    /**
     * Get the author Title and Description
     * @return string
     */
    private function showAuthorDescription() {

        $rel = array();
        $nofollow = '';
        if(isset($this->details['abh_nofollow_social']) && $this->details['abh_nofollow_social']){
            $rel[] = 'nofollow';
        }
        if(isset($this->details['abh_noopener_social']) && $this->details['abh_noopener_social']){
            $rel[] = 'noopener';
        }
        if(isset($this->details['abh_noreferrer_social']) && $this->details['abh_noreferrer_social']){
            $rel[] = 'noreferrer';
        }

        if(!empty($rel)){
            $nofollow = 'rel="'.join(' ', $rel).'"';
        }

        $content = '
                <section class="' . (($this->single) ? 'vcard author' : '') . ' abh_about_tab abh_tab" ' . (($this->single) ? 'itemscope itemprop="author" itemtype="http://schema.org/Person"' : '') . ' style="display:block">
                    <div class="abh_image" ' . (($this->single) ? 'itemscope itemtype="http://schema.org/ImageObject"' : '') . '>';

        if (ABH_AUTHORLINK) {
            if ($this->author->user_url) {
                $content .= '<a href = "' . $this->author->user_url . '" class="url" target = "_blank" title = "' . $this->author->display_name . '" ' . $nofollow . ' > ' . $this->getProfileImage() . '</a > ';
            } else {
                $content .= '<a href = "' . get_author_posts_url($this->author->ID) . '" class="url" title = "' . $this->author->display_name . '" > ' . $this->getProfileImage() . '</a > ';
            }
        } else {
            $content .= $this->getProfileImage();
        }
        $content .= '</div>
                    <div class="abh_social"> ' . $this->getSocial($this->single) . '</div>
                    <div class="abh_text">
                        <div class="abh_name fn name" ' . (($this->single) ? 'itemprop="name"' : '') . ' ' . ((ABH_Classes_Tools::getOption('abh_titlefontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_titlefontsize') . ' !important;"' : '') . '>' . (ABH_AUTHORLINK ? (($this->author->user_url) ? '<a href="' . $this->author->user_url . '" class="url" target="_blank" ' . $nofollow . '>' . $this->author->display_name . '</a>' : '<a href="' . get_author_posts_url($this->author->ID) . '" class="url">' . $this->author->display_name . '</a>') : $this->author->display_name) . '</div>
                        <div class="abh_job" ' . ((ABH_Classes_Tools::getOption('abh_descfontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_descfontsize') . ' !important;"' : '') . '>' . (($this->details['abh_title'] <> '' && $this->details['abh_company'] <> '') ? '<span class="title" ' . ((ABH_Classes_Tools::getOption('abh_descfontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_descfontsize') . ' !important;"' : '') . '>' . $this->details['abh_title'] . '</span> ' . __('at', _ABH_PLUGIN_NAME_) . ' <span class="org" ' . ((ABH_Classes_Tools::getOption('abh_descfontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_descfontsize') . ' !important;"' : '') . '>' . (($this->details['abh_company_url'] <> '') ? sprintf('<a href="%s" target="_blank">%s</a>', $this->details['abh_company_url'], $this->details['abh_company']) : $this->details['abh_company']) . '</span>' : '') . '</div>
                        <div class="description note abh_description" ' . (($this->single) ? 'itemprop="description"' : '') . ' ' . ((ABH_Classes_Tools::getOption('abh_descfontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_descfontsize') . ' !important;"' : '') . '>' . ((isset($this->details['abh_extra_description']) && $this->details['abh_extra_description'] <> '') ? nl2br($this->details['abh_extra_description']) : nl2br($this->author->user_description)) . '</div>
                    </div>
               </section>';

        return apply_filters('abh_author_description_html', $content);

    }

    /**
     * Get the html author latest posts
     * @return string
     */
    private function showAuthorPosts() {
        $rel = array();
        $nofollow = '';
        if(isset($this->details['abh_nofollow_social']) && $this->details['abh_nofollow_social']){
            $rel[] = 'nofollow';
        }
        if(isset($this->details['abh_noopener_social']) && $this->details['abh_noopener_social']){
            $rel[] = 'noopener';
        }
        if(isset($this->details['abh_noreferrer_social']) && $this->details['abh_noreferrer_social']){
            $rel[] = 'noreferrer';
        }

        if(!empty($rel)){
            $nofollow = 'rel="'.join(' ', $rel).'"';
        }

        $content = '
                <section class="abh_posts_tab abh_tab" >
                    <div class="abh_image">
                      ' . (ABH_AUTHORLINK ? (($this->author->user_url) ? '<a href="' . $this->author->user_url . '" class="url" target="_blank" title="' . $this->author->display_name . '" ' . $nofollow . '>' . $this->getProfileImage() . '</a>' : '<a href="' . get_author_posts_url($this->author->ID) . '" class="url" title="' . $this->author->display_name . '">' . $this->getProfileImage() . '</a>') : $this->getProfileImage()) . '
                    </div>
                    <div class="abh_social"> ' . $this->getSocial() . '</div>
                    <div class="abh_text">
                        <div class="abh_name" ' . ((ABH_Classes_Tools::getOption('abh_titlefontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_titlefontsize') . ' !important;"' : '') . '>' . sprintf(__('Latest posts by %s', _ABH_PLUGIN_NAME_), $this->author->display_name) . ' <span class="abh_allposts">' . (ABH_AUTHORLINK ? '(<a href="' . get_author_posts_url($this->author->ID) . '">' . __('see all', _ABH_PLUGIN_NAME_) . '</a>)' : '') . '</span></div>
                        <div class="abh_description note" >' . $this->getLatestPosts() . '</div>
                    </div>
               </section>';

        return apply_filters('abh_author_latest_posts_html', $content);

    }

    /**
     * Get the social icon for the author
     * @return string
     */
    private function getSocial($itemprop = false) {
        $rel = array();
        $nofollow = '';
        if(isset($this->details['abh_nofollow_social']) && $this->details['abh_nofollow_social']){
            $rel[] = 'nofollow';
        }
        if(isset($this->details['abh_noopener_social']) && $this->details['abh_noopener_social']){
            $rel[] = 'noopener';
        }
        if(isset($this->details['abh_noreferrer_social']) && $this->details['abh_noreferrer_social']){
            $rel[] = 'noreferrer';
        }

        if(!empty($rel)){
            $nofollow = 'rel="'.join(' ', $rel).'"';
        }

        $content = '';
        $count = 0;

        if (isset($this->details['abh_facebook']) && $this->details['abh_facebook'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_facebook'], 'http') === false) ? 'http://facebook.com/' : '') . $this->details['abh_facebook'] . '" title="' . __('Facebook', _ABH_PLUGIN_NAME_) . '" class="abh_facebook" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_twitter']) && $this->details['abh_twitter'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_twitter'], 'http') === false) ? 'http://twitter.com/' : '') . $this->details['abh_twitter'] . '" title="' . __('Twitter', _ABH_PLUGIN_NAME_) . '" class="abh_twitter" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_linkedin']) && $this->details['abh_linkedin'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_linkedin'], 'http') === false) ? 'http://www.linkedin.com/in/' : '') . $this->details['abh_linkedin'] . '" title="' . __('LinkedIn', _ABH_PLUGIN_NAME_) . '" class="abh_linkedin" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_instagram']) && $this->details['abh_instagram'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_instagram'], 'http') === false) ? 'http://instagram.com/' : '') . $this->details['abh_instagram'] . '" title="' . __('Instagram', _ABH_PLUGIN_NAME_) . '" class="abh_instagram" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_flickr']) && $this->details['abh_flickr'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_flickr'], 'http') === false) ? 'http://www.flickr.com/photos/' : '') . $this->details['abh_flickr'] . '" title="' . __('Flickr', _ABH_PLUGIN_NAME_) . '" class="abh_flickr" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_pinterest']) && $this->details['abh_pinterest'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_pinterest'], 'http') === false) ? 'http://pinterest.com/' : '') . $this->details['abh_pinterest'] . '" title="' . __('Pinterest', _ABH_PLUGIN_NAME_) . '" class="abh_pinterest" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_tumblr']) && $this->details['abh_tumblr'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_tumblr'], 'http') === false) ? 'http://' . $this->details['abh_tumblr'] . '.tumblr.com/' : $this->details['abh_tumblr']) . '" title="' . __('Tumblr', _ABH_PLUGIN_NAME_) . '" class="abh_tumblr" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_youtube']) && $this->details['abh_youtube'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_youtube'], 'http') === false) ? 'http://www.youtube.com/user/' : '') . $this->details['abh_youtube'] . '" title="' . __('YouTube', _ABH_PLUGIN_NAME_) . '" class="abh_youtube" target="_blank" ' . $nofollow . '></a>';
        }
        if (isset($this->details['abh_vimeo']) && $this->details['abh_vimeo'] <> '') {
            $count++;
            $content .= '<a ' . (($itemprop) ? 'itemprop="sameAs"' : '') . ' href="' . ((strpos($this->details['abh_vimeo'], 'http') === false) ? 'http://vimeo.com/' : '') . $this->details['abh_vimeo'] . '" title="' . __('Vimeo', _ABH_PLUGIN_NAME_) . '" class="abh_vimeo" target="_blank" ' . $nofollow . '></a>';
        }


        if ($count == 5 || $count == 6) {
            $content = '<div style="width:85px; margin: 0 0 0 auto;">' . $content . '</div>';
        } elseif ($count == 7 || $count == 8) {
            $content = '<div style="width:120px; margin: 0 0 0 auto;">' . $content . '</div>';
        } elseif ($count == 9 || $count == 10) {
            $content = '<div style="width:140px; margin: 0 0 0 auto;">' . $content . '</div>';
        } elseif ($count == 11 || $count == 12) {
            $content = '<div style="width:160px; margin: 0 0 0 auto;">' . $content . '</div>';
        }

        if ($count > 0 && isset($this->details['abh_socialtext']) && $this->details['abh_socialtext'] <> '')
            $content = '<div style="clear: both; font-size:12px; font-weight:normal; width: 85px; margin: 0 0 2px auto; line-height: 20px;">' . $this->details['abh_socialtext'] . '</div>' . $content;

        return $content;
    }


    /**
     * Get the List Of Posts for the author
     * @return string
     */
    private function getLatestPosts() {
        $content = '<ul>';
        $latest_posts = new WP_Query(array('posts_per_page' => ABH_Classes_Tools::getOption('anh_crt_posts'), 'author' => $this->author->ID));

        $latest_posts = apply_filters('abh_author_latest_posts', $latest_posts);

        while ($latest_posts->have_posts()) : $latest_posts->the_post();

            if (isset($this->category) && $this->category <> '') {
                $found = false;
                $categories = get_the_category();
                foreach ($categories as $category) {
                    if (!is_numeric($this->category)) {
                        if ($this->category == $category->name) {
                            $found = true;
                            break;
                        }
                    } elseif (is_numeric($this->category)) {
                        if ($this->category == $category->cat_ID) {
                            $found = true;
                            break;
                        }
                    }
                }
                if (!$found)
                    continue;
                //echo '<pre>' . print_r($category, true) . '</pre>';
            }

            if (get_the_title() <> '')
                $content .= '
				<li ' . ((ABH_Classes_Tools::getOption('abh_descfontsize') <> 'default') ? 'style="font-size:' . ABH_Classes_Tools::getOption('abh_descfontsize') . ' !important;"' : '') . ' >
					<a href="' . get_permalink() . '">' . get_the_title() . '</a>' .
                    (((int)get_the_time('U') > 0) ? '<span> - ' . @date_i18n(get_option('date_format'), (int)get_the_time('U')) . '</span>' : '') . '
				</li>';
        endwhile;
        wp_reset_postdata();
        $content .= '</ul>';

        return $content;
    }

    /**
     * Clear the new lines from the author box
     * @param type $content
     * @return string
     */
    private function clearTags($content) {
        return preg_replace_callback('~\<[^>]+\>.*\</[^>]+\>~ms', array($this, 'stripNewLines'), $content);
    }

    /**
     * Clear the new lines
     * @param type $match
     * @return type
     */
    public function stripNewLines($match) {
        return str_replace(array("\r", "\n", "  "), '', $match[0]);
    }

    /**
     * Get the meta with Social and Profile
     * @return string
     */
    public function showMeta() {
        if (!isset($this->author))
            return;

        $meta = "\n<!-- StarBox - the Author Box for Humans " . ABH_VERSION . ", visit: http://wordpress.org/plugins/starbox/ -->\n";

        if (ABH_Classes_Tools::getOption('abh_showopengraph') == 1 && is_author()) {
            //Show the OpenGraph
            $meta .= $this->showOpenGraph();
        }

        if (isset($this->details['abh_google']) && $this->details['abh_google'] <> '')
            $meta .= $this->showGoogleAuthorMeta(); //show google author meta
        if (isset($this->details['abh_facebook']) && $this->details['abh_facebook'] <> '')
            $meta .= $this->showFacebookAuthorMeta(); //show facebook author meta

        $meta .= "<!-- /StarBox - the Author Box for Humans -->\n\n";

        return $meta;
    }

    /**
     * Get the Open Graph for the current author
     * @return string
     */
    public function showOpenGraph() {
        $og = '';
        $og .= sprintf('<meta property="og:url" content="%s" />', get_author_posts_url($this->author->ID)) . "\n";
        $og .= sprintf('<meta property="og:type" content="%s" />', 'profile') . "\n";
        $og .= sprintf('<meta property="profile:first_name" content="%s" />', get_the_author_meta('first_name', $this->author->ID)) . "\n";
        $og .= sprintf('<meta property="profile:last_name" content="%s" />', get_the_author_meta('last_name', $this->author->ID)) . "\n";

        return $og;
    }

    /**
     * Get the Google author Meta
     * @return string
     */
    public function showGoogleAuthorMeta() {
        return '<link rel="author" href="' . ((strpos($this->details['abh_google'], 'http') === false) ? 'http://plus.google.com/' : '') . $this->details['abh_google'] . '" />' . "\n";
    }

    /**
     * Get the Facebook author Meta
     * @return string
     */
    public function showFacebookAuthorMeta() {
        return '<meta property="article:author" content="' . ((strpos($this->details['abh_facebook'], 'http') === false) ? 'http://facebook.com/' : '') . $this->details['abh_facebook'] . '" />' . "\n";
    }

    /**
     * Check if the page is a valid HTML page
     * @return bool
     */
    public function isHtmlHeader() {
        $headers = headers_list();

        foreach ($headers as $index => $value) {
            if (strpos($value, ':') !== false) {
                $exploded = @explode(': ', $value);
                if (@count((array)$exploded) > 1) {
                    $headers[$exploded[0]] = $exploded[1];
                }
            }
        }
        if (isset($headers['Content-Type'])) {
            if (strpos($headers['Content-Type'], 'text/html') !== false) {
                return true;
            }
        } else {
            return false;
        }

        return false;
    }
}