Current File : /home/resuelf/www/wp-content/plugins/starbox/controllers/Frontend.php |
<?php defined('ABSPATH') || die('Cheatin\' uh?'); ?>
<?php
class ABH_Controllers_Frontend extends ABH_Classes_FrontController {
public static $options;
private $box = '';
private $show = false;
public $custom = array();
private $shortcode = '';
function __construct() {
parent::__construct();
$this->shortcode = '/\[starbox([\s+][^\]]+)*\]/i';
}
/**
* Get the author box
* Dependency: hookFronthead();
* @return string|false if the author is not found
*/
public function getBox() {
$this->model->single = true;
return $this->model->getAuthorBox();
}
/**
* Called on shortcode+
* @param string $content
* @return string
*/
public function hookShortStarboximg($param) {
global $post;
$id = 0;
$str = '';
$force = false;
if (isset($post->ID)) {
$this->custom[(int)$post->ID] = array();
$this->custom[(int)$post->ID] = true;
}
extract(shortcode_atts(array('id' => 0), $param));
if ((int)$id > 0) {
$this->model->author = get_userdata((int)$id);
//get the author details settings
$this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID);
}
if ($id === 'all') {
$args = array(
'orderby' => 'post_count',
'order' => 'DESC'
);
$theme = ABH_Classes_Tools::getOption('abh_theme');
ABH_Classes_Tools::setOption('abh_powered_by', 0); //down show powered by for too many
$users = get_users($args);
foreach ($users as $user) {
$details = ABH_Classes_Tools::getOption('abh_author' . $user->ID);
if (!isset($details['abh_use']) || $details['abh_use'])
$str .= ABH_Classes_ObjController::getController('ABH_Controllers_Frontend')->showStarboximg($user->ID);
if (!$force && (!is_single() && !is_singular()))
break; //don't show multiple authors in post list
}
} elseif (!is_numeric($id)) {
if (strpos($id, ',') !== false) {
$show_list = @preg_split("/,/", $id);
ABH_Classes_Tools::setOption('abh_powered_by', 0); //down show powered by for too many
} else {
$show_list = array($id);
$this->model->author = get_user_by('login', $id);
if (isset($this->model->author->ID)) {
//get the author details settings
$this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID);
}
}
$args = array(
'orderby' => 'post_count',
'order' => 'DESC',
);
if(count($show_list) == 1){
$args['search'] = current($show_list);
$args['search_columns'] = array( 'user_login' );
}
$users = get_users($args);
foreach ($users as $user) {
// show mutiple authors in one shortcode
if (in_array($user->user_login, $show_list) || in_array($user->ID, $show_list)) {
$details = ABH_Classes_Tools::getOption('abh_author' . $user->ID);
if (!isset($details['abh_use']) || $details['abh_use'])
$str .= ABH_Classes_ObjController::getController('ABH_Controllers_Frontend')->showStarboximg($user->ID);
if (!$force && (!is_single() && !is_singular()))
break; //don't show multiple authors in post list
}
}
} else {
$str = ABH_Classes_ObjController::getController('ABH_Controllers_Frontend')->showStarboximg((int)$id);
}
return $str;
}
/**
* Called on shortcode+
* @param string $content
* @return string
*/
public function hookShortStarbox($param, $force = false) {
global $post;
$id = 0;
$str = '';
$desc = '';
$lpc = null; //latest posts category
$theme = '';
$orderby = 'post_count';
$order = 'DESC';
if (isset($post->ID)) {
$this->custom[(int)$post->ID] = array();
$this->custom[(int)$post->ID] = true;
}
extract(shortcode_atts(array('id' => 0, 'desc' => '', 'lpc' => '', 'theme' => '', 'orderby' => 'post_count', 'order' => 'DESC'), $param));
//Add the order
if (!in_array($orderby, array('post_count', 'display_name', 'name', 'user_login', 'login', 'user_nicename', 'nicename', 'user_email', 'email', 'last_name', 'first_name'))) $orderby = 'post_count';
if (!in_array(strtoupper($order), array('DESC', 'ASC'))) $order = 'ASC';
if ($theme <> '') {
if (!in_array($theme, ABH_Classes_Tools::getOption('abh_themes')))
$theme = '';
}
if (isset($lpc)) {
$this->model->category = $lpc;
}
if ((int)$id > 0) {
$this->model->author = get_userdata((int)$id);
if (isset($this->model->author->ID)) {
//get the author details settings
if($this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID)){
$theme = ($theme == '' || $this->model->details['abh_theme'] <> 'default') ? $this->model->details['abh_theme'] : $theme;
}
}
}
$theme = ($theme == '' || $theme == 'default') ? ABH_Classes_Tools::getOption('abh_theme') : $theme;
//remove the multiple new lines from custom description
if ($desc <> '') {
$desc = ABH_Classes_Tools::i18n($desc);
$desc = preg_replace('/(<br[^>]*>)+/i', "", $desc);
}
//
//show all the authors in the content
if ($id === 'all') {
$args = array(
'orderby' => $orderby,
'order' => strtoupper($order)
);
if ($orderby == 'first_name' || $orderby == 'last_name') {
$args['orderby'] = 'meta_value';
$args['meta_key'] = $orderby;
}
$theme = ABH_Classes_Tools::getOption('abh_theme');
ABH_Classes_Tools::setOption('abh_powered_by', 0); //down show powered by for too many
$users = get_users($args);
foreach ($users as $user) {
$details = ABH_Classes_Tools::getOption('abh_author' . $user->ID);
if (!isset($details['abh_use']) || $details['abh_use'])
$str .= ABH_Classes_ObjController::getController('ABH_Controllers_Frontend')->showBox($user->ID, $desc);
if (!$force && (!is_single() && !is_singular()))
break; //don't show multiple authors in post list
}
} elseif (!is_numeric($id)) {
if (strpos($id, ',') !== false) {
$show_list = @preg_split("/,/", $id);
$theme = ABH_Classes_Tools::getOption('abh_theme');
ABH_Classes_Tools::setOption('abh_powered_by', 0); //down show powered by for too many
} else {
$show_list = array($id);
$this->model->author = get_user_by('login', $id);
if (isset($this->model->author->ID)) {
//get the author details settings
if($this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID)){
$theme = ($theme == '' || $this->model->details['abh_theme'] <> 'default') ? $this->model->details['abh_theme'] : $theme;
}
}
}
$args = array(
'orderby' => $orderby,
'order' => strtoupper($order)
);
if ($orderby == 'first_name' || $orderby == 'last_name') {
$args['orderby'] = 'meta_value';
$args['meta_key'] = $orderby;
}
if(count($show_list) == 1){
$args['search'] = current($show_list);
$args['search_columns'] = array( 'user_login' );
}
$users = get_users($args);
foreach ($users as $user) {
// show mutiple authors in one shortcode
if (in_array($user->user_login, $show_list) || in_array($user->ID, $show_list)) {
$details = ABH_Classes_Tools::getOption('abh_author' . $user->ID);
if (!isset($details['abh_use']) || $details['abh_use'])
$str .= ABH_Classes_ObjController::getController('ABH_Controllers_Frontend')->showBox($user->ID, $desc);
if (!$force && (!is_single() && !is_singular()))
break; //don't show multiple authors in post list
}
}
$str;
} else {
$str = ABH_Classes_ObjController::getController('ABH_Controllers_Frontend')->showBox((int)$id, $desc);
}
if ($theme <> '' && $this->model->isHtmlHeader()) {
if (file_exists(_ABH_ALL_THEMES_DIR_ . $theme . '/css/frontend' . (ABH_DEBUG ? '' : '.min') . '.css')) {
ABH_Classes_ObjController::getController('ABH_Classes_DisplayController')
->loadMedia(_ABH_ALL_THEMES_URL_ . $theme . '/css/frontend' . (ABH_DEBUG ? '' : '.min') . '.css'); //load the css and js for frontend
}
if (file_exists(_ABH_ALL_THEMES_DIR_ . $theme . '/js/frontend' . (ABH_DEBUG ? '' : '.min') . '.js')) {
ABH_Classes_ObjController::getController('ABH_Classes_DisplayController')
->loadMedia(_ABH_ALL_THEMES_URL_ . $theme . '/js/frontend' . (ABH_DEBUG ? '' : '.min') . '.js'); //load the css and js for frontend
}
}
return $str;
}
public function hookShortWidgetStarbox($content) {
$id = 0;
$desc = '';
$lpc = null; //latest posts category
$theme = '';
if (@preg_match($this->shortcode, $content, $out)) {
if (!empty($out) && isset($out[1])) {
if (trim($out[1]) <> '') {
$out[1] = trim(str_replace(array('" ', '"'), array('"&', ''), $out[1]));
if ($out[1] <> '') {
@parse_str($out[1]);
}
}
}
return str_replace($out[0], $this->hookShortStarbox(array('id' => $id, 'desc' => $desc, 'lpc' => $lpc, 'theme' => $theme), true), $content);
}
return $content;
}
/**
* Show the author box to the correct position
* @param string $content
* @return string
*/
public function showAuthorBox($content = '') {
if (!isset($this->model->details['abh_google']) || $this->model->details['abh_google']) {
$content = preg_replace('/rel=[\"|\']([^\"\']*author[^\"\']*)[\"|\']/i', '', $content);
}
if (!isset($this->model->details['abh_use']) || $this->model->details['abh_use']) {
if ((is_single() && ABH_Classes_Tools::getOption('abh_inposts') == 1) ||
(is_page() && ABH_Classes_Tools::getOption('abh_inpages') == 1)) {
$this->model->single = true;
$this->box = $this->getBox();
}
switch ($this->model->position) {
case 'up':
$content = $this->box . $content;
break;
case 'down':
default:
$content .= $this->box;
break;
}
}
return $content;
}
/**
* If called it will return the box and will not show the author box in article
* @param int $author_id (optional) The author ID
* @param string $custom_desc (optional) The custom description for the author
* @return string
*/
public function showBox($author_id = 0, $description = '') {
if(!$this->model->isHtmlHeader()){
return;
}
if ($author_id == 0) {
global $wp_query;
if (!empty($wp_query->posts))
foreach ($wp_query->posts as $post) {
if ($post->ID && get_post_status($post->ID) == 'publish') {
// Get the author data
$post = get_post($post->ID);
break;
}
}
// cancel on errors
if (!isset($post) || !isset($post->post_author))
return;
// get the author data
if (is_author())
$this->model->author = get_queried_object();
else
$this->model->author = get_userdata($post->post_author);
} else {
$this->model->author = get_userdata($author_id);
}
if (!isset($this->model->author->ID)) {
return;
}
//get the author details settings
$this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID);
if ($description <> '')
$this->model->details['abh_extra_description'] = $description;
$this->model->position = 'custom';
return $this->getBox();
}
/**
* If called it will return the author image or the gravatar img
* @param int $author_id (optional) The author ID
* @return string
*/
public function showStarboximg($author_id = 0) {
if(!$this->model->isHtmlHeader()){
return;
}
if ($author_id == 0) {
global $wp_query;
if (!empty($wp_query->posts))
foreach ($wp_query->posts as $post) {
if ($post->ID && get_post_status($post->ID) == 'publish') {
// Get the author data
$post = get_post($post->ID);
break;
}
}
// cancel on errors
if (!isset($post) || !isset($post->post_author))
return;
// get the author data
if (is_author())
$this->model->author = get_queried_object();
else
$this->model->author = get_userdata($post->post_author);
} else {
$this->model->author = get_userdata($author_id);
}
if (!isset($this->model->author->ID)) {
return;
}
//get the author details settings
$this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID);
return $this->model->getProfileImage();
}
/**
* Hook the Init in Frontend
*/
public function hookFrontinit() {
if (isset($this->model->details) && $this->model->details['abh_google'] <> '') {
remove_action('wp_head', 'author_rel_link');
}
}
/**
* Hook the Frontend Header load
*/
public function hookFronthead() {
global $wp_query;
$post = null;
if ((is_single() && (ABH_Classes_Tools::getOption('abh_strictposts') == 0 || (ABH_Classes_Tools::getOption('abh_strictposts') == 1 && get_post_type() == 'post')) && ABH_Classes_Tools::getOption('abh_inposts') == 1) ||
(is_singular() && get_post_type() == 'page' && ABH_Classes_Tools::getOption('abh_inpages') == 1) ||
(ABH_Classes_Tools::getOption('abh_ineachpost') == 1) && (is_category() || is_tag() || (!is_singular() && get_post_type() == 'page') || (ABH_Classes_Tools::getOption('abh_strictposts') == 0 && is_archive()) || (ABH_Classes_Tools::getOption('abh_strictposts') == 0 && is_search()))) {
$theme = ABH_Classes_Tools::getOption('abh_theme');
if (!empty($wp_query->posts))
foreach ($wp_query->posts as $post) {
if ($post->ID && get_post_status($post->ID) == 'publish') {
// Get the author data
$post = get_post($post->ID);
break;
}
}
// cancel on errors
if (!isset($post) || !isset($post->post_author))
return;
// get the author data
if (is_author())
$this->model->author = get_queried_object();
else
$this->model->author = get_userdata($post->post_author);
if (!isset($this->model->author->ID)) {
return;
}
//get the author details settings
$this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID);
if (isset($this->model->details['abh_lpc'])) //if the latest post category is set
$this->model->category = $this->model->details['abh_lpc'];
//Se the author box position
if (isset($this->model->details['abh_position']) && $this->model->details['abh_position'] <> 'default')
$this->model->position = $this->model->details['abh_position'];
else
$this->model->position = ABH_Classes_Tools::getOption('abh_position');
// For some themes the position is important to be on top
if(isset($this->model->details['abh_theme'])) {
if (strpos($this->model->details['abh_theme'], 'topstar') !== false || ($this->model->details['abh_theme'] == 'default' && strpos(ABH_Classes_Tools::getOption('abh_theme'), 'topstar') !== false))
$this->model->position = 'up'; //force position for this theme
if ($this->model->details['abh_theme'] <> '' && $this->model->details['abh_theme'] <> 'default')
$theme = $this->model->details['abh_theme'];
}
// set theme for author box shown for each article
if (is_author()) {
//Add the header meta authors for single post
echo $this->model->showMeta();
} elseif ((ABH_Classes_Tools::getOption('abh_ineachpost') == 1 && count($wp_query->posts) > 1)) {
$theme = ABH_Classes_Tools::getOption('abh_achposttheme');
$this->show = true;
} elseif (!isset($this->model->details['abh_use']) || $this->model->details['abh_use']) {
$this->show = true;
//Add the header meta authors for single post
echo $this->model->showMeta();
}
if ($this->show) {
if(!$this->model->isHtmlHeader()){
return;
}
// load the theme css and js in header
if (file_exists(_ABH_ALL_THEMES_DIR_ . $theme . '/css/frontend' . (ABH_DEBUG ? '' : '.min') . '.css')) {
ABH_Classes_ObjController::getController('ABH_Classes_DisplayController')
->loadMedia(_ABH_ALL_THEMES_URL_ . $theme . '/css/frontend' . (ABH_DEBUG ? '' : '.min') . '.css'); //load the css and js for frontend
}
if (file_exists(_ABH_ALL_THEMES_DIR_ . $theme . '/js/frontend' . (ABH_DEBUG ? '' : '.min') . '.js')) {
ABH_Classes_ObjController::getController('ABH_Classes_DisplayController')
->loadMedia(_ABH_ALL_THEMES_URL_ . $theme . '/js/frontend' . (ABH_DEBUG ? '' : '.min') . '.js'); //load the css and js for frontend
}
if (!is_author()) {
ABH_Classes_ObjController::getController('ABH_Classes_DisplayController')
->loadMedia(_ABH_ALL_THEMES_URL_ . 'admin/css/hidedefault' . (ABH_DEBUG ? '' : '.min') . '.css'); //load the css and js for frontend
}
}
}
}
/**
* Hook the Article/Page Content
* @global object $post
* @param string $content
* @return string
*/
public function hookFrontcontent($content) {
global $post, $wp_query;
//make sure the header was called before content
if(!did_action('wp_head') && !is_author()){
if ((ABH_Classes_Tools::getOption('abh_ineachpost') == 1 && count($wp_query->posts) > 1)) {
$this->show = true;
} elseif (!isset($this->model->details['abh_use']) || $this->model->details['abh_use']) {
$this->show = true;
}
}
if (!$this->show || (isset($this->custom[(int)$post->ID]) && $this->custom[(int)$post->ID] == true))
return $content;
if (ABH_Classes_Tools::getOption('abh_shortcode') == 1)
if (preg_match($this->shortcode, $content)) {
$this->custom[(int)$post->ID] = true;
return $content;
}
$content = $this->showAuthorBox($content);
if (ABH_Classes_Tools::getOption('abh_ineachpost') == 1 && $this->box == '') {
$post = get_post($post->ID);
if (!isset($post->post_author)){
return '';
}
// get the author data
$this->model->author = get_userdata($post->post_author);
if (!isset($this->model->author->ID)) {
return '';
}
//get the author details settings
$this->model->details = ABH_Classes_Tools::getOption('abh_author' . $this->model->author->ID);
if (!isset($this->model->details['abh_use']) || $this->model->details['abh_use'] == 1) {
$this->model->single = false;
echo $this->model->getAuthorBox();
}
}
return $content;
}
/**
* Hook the Frontend Widgets Content
*/
public function hookFrontwidget($content) {
if (!$this->show)
return $content;
if (!isset($this->model->details['abh_google']) || $this->model->details['abh_google']) {
$content = preg_replace('/rel=[\"|\']([^\"\']*author[^\"\']*)[\"|\']/i', '', $content);
}
return $content;
}
/**
* Hook the Frontend Footer
*/
public function hookFrontfooter() {
}
}