'Ad Kangaroo',
'version' => '1.0'
);
public $menu_slug = 'ad_kangaroo';
public $ad_kangaroo_blog_prefix;
public $current_tab = 'main';
public $ad_kangaroo_options;
public $ad_kangaroo_ads;
public $ad_kangaroo_nonce;
public $ad_kangaroo_adunit_types;
public $ad_kangaroo_adunit_statuses;
public $ad_kangaroo_adunit_sizes;
public $ad_kangaroo_publisher_id;
public $ads_count = 0;
private $is_main_query = false;
function __construct( ) {
$this->ad_kangaroo_blog_prefix = '_'.get_current_blog_id();
$this->ad_kangaroo_ads = get_option( 'ad_kangaroo_ads', array() );
$this->ad_kangaroo_options = get_option( 'ad_kangaroo_options', array() );
$this->ad_kangaroo_nonce = plugin_basename( __FILE__ );
$this->ad_kangaroo_adunit_types = array(
'TEXT' => __( 'Text', 'ad_kangaroo' ),
'IMAGE' => __( 'Image', 'ad_kangaroo' ),
'TEXT_IMAGE' => __( 'Text/Image', 'ad_kangaroo' ),
'LINK' => __( 'Link', 'ad_kangaroo' )
);
$this->ad_kangaroo_adunit_statuses = array(
'NEW' => __( 'New', 'ad_kangaroo' ),
'ACTIVE' => __( 'Active', 'ad_kangaroo' ),
'INACTIVE' => __( 'Idle', 'ad_kangaroo' )
);
$this->ad_kangaroo_adunit_sizes = array(
'RESPONSIVE' => __( 'Responsive', 'ad_kangaroo' )
);
require_once( dirname( __FILE__ ) . '/class.ad_kangaroo.widget.php' );
add_action( 'widgets_init', array( $this, 'register_ad_kangaroo_widget' ) );
if ( is_admin() ) {
$this->run_backend();
}else{
$this->run_frontend();
}
}
function register_ad_kangaroo_widget(){
register_widget( 'Ad_Kangaroo_Widget' );
}
public function run_backend() {
if ( isset($_GET['ad_kangaroo_tab']) ) {
$this->current_tab = $_GET['ad_kangaroo_tab'];
}
add_action( 'admin_init', array( $this, 'ad_kangaroo_init_session') );
add_action( 'admin_enqueue_scripts', array( $this, 'ad_kangaroo_add_admin_scripts' ) );
add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
add_action( 'wp_ajax_ad_kangaroo', array( $this, 'ad_kangaroo_ajax') );
}
public function run_frontend(){
add_action( 'loop_start', array( $this, 'ad_kangaroo_loop_start' ) );
add_action( 'loop_end', array( $this, 'ad_kangaroo_loop_end' ) );
add_filter( 'the_content', array( $this, 'ad_kangaroo_content' ) );
}
// Frontend
public function ad_kangaroo_loop_start( $content ){
global $wp_query;
if ( is_main_query() && $content === $wp_query ) {
$this->is_main_query = true;
$this->main_query = $wp_query;
}
}
public function ad_kangaroo_loop_end(){
$this->is_main_query = false;
}
public function ad_kangaroo_content( $content ){
if ( $this->is_main_query && ! is_feed() && ( is_home() || is_front_page() || is_category() || is_tag() || is_single() || is_page() ) ){
$show_before = true;
$show_after = true;
if ( is_home() || is_category() || is_tag() ) {
$max_posts = $this->main_query->post_count;
$current = $this->main_query->current_post + 1 ;
if ( $current == 1 ) {
$show_after = false;
}elseif ( $max_posts == $current ) {
$show_before = false;
}else{
$show_before = false;
$show_after = false;
}
}
if ( is_home() || is_front_page() ) {
$ad_page = 'home';
}
if ( is_category() || is_tag() ) {
$ad_page = 'categories_tags';
}
if ( is_single() ) {
$ad_page = 'posts';
}
if ( is_page() ) {
$ad_page = 'pages';
}
if ( isset($this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']][$ad_page]) ) {
foreach ( $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']][$ad_page] as $ad_unit_id => $ad_unit ) {
$ad_code = htmlspecialchars_decode( $ad_unit['code'] );
$ad_html = sprintf( '
%s
', $ad_unit_id, $ad_code );
if ( $ad_unit['position'] == 'before' && $show_before && $this->ads_count < 4 ) {
$content = $ad_html.$content;
$this->ads_count ++;
}
if ( $ad_unit['position'] == 'after' && $show_after && $this->ads_count < 4 ) {
$content = $content.$ad_html;
$this->ads_count ++;
}
}
}
}
return $content;
}
// Backend
public function create_google_client() {
require_once( dirname( __FILE__ ) . '/google_api/autoload.php' );
$client = new Google_Client();
$client->setClientId( '132414533943-no0lcpfjlm975fop8eah6agatvn9u3vh.apps.googleusercontent.com' );
$client->setClientSecret( '6FEn4C1BjBA-kLMbilUNYDE7' );
$client->setScopes( array( 'https://www.googleapis.com/auth/adsense' ) );
$client->setRedirectUri( 'urn:ietf:wg:oauth:2.0:oob' );
$client->setAccessType( 'offline' );
$client->setDeveloperKey( 'AIzaSyCRqcU0_H1TehsCmwGPLA5jsPgMIATClc0' );
$client->setApplicationName( $this->plugin_info['name'] );
return $client;
}
public function ad_kangaroo_add_admin_scripts() {
if ( isset( $_GET['page'] ) && $this->menu_slug == $_GET['page'] ) {
wp_enqueue_style( 'ad_kangaroo_admin_css', plugins_url( 'css/admin.css', __FILE__ ), false, $this->plugin_info["version"] );
wp_enqueue_script( 'ad_kangaroo_admin_js', plugins_url( 'js/admin.js' , __FILE__ ), array( 'jquery' ), $this->plugin_info["version"] );
$count = 0;
if ( isset( $this->ad_kangaroo_options['publisher_id'] ) && isset( $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']][$this->current_tab] ) ) {
$count = count( $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']][$this->current_tab] );
}
$Ad_Kangaroo = array(
'ajax' => admin_url( 'admin-ajax.php' ),
'ads_count' => $count
);
wp_localize_script( 'ad_kangaroo_admin_js', 'Ad_Kangaroo', $Ad_Kangaroo );
}
}
public function ad_kangaroo_init_session(){
if ( isset( $_GET['page'] ) && $this->menu_slug == $_GET['page'] ) {
if ( ! session_id() ) {
session_start();
}
}
}
public function add_admin_menu() {
add_menu_page( __( 'Ad Kangaroo', 'ad_kangaroo' ), __( 'Ad Kangaroo', 'ad_kangaroo' ), 'manage_options', $this->menu_slug, array( $this, 'am_admin_page' ), 'dashicons-dashboard' );
}
public function render_tabs(){
$tabs = array(
'main' => __( 'Settings', 'ad_kangaroo' ),
);
if ( isset( $this->ad_kangaroo_publisher_id ) ) {
$tabs = array(
'main' => __( 'Settings', 'ad_kangaroo' ),
'home' => __( 'Homepage', 'ad_kangaroo' ),
'pages' => __( 'Pages', 'ad_kangaroo' ),
'posts' => __( 'Posts', 'ad_kangaroo' ),
'categories_tags' => __( 'Categories / Tags', 'ad_kangaroo' ),
'widget' => __( 'Widget', 'ad_kangaroo' )
);
}
foreach ($tabs as $key => $tab) {
$title = $tab;
if ( 'main' != $key ) {
$count = 0;
if ( isset( $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']][$key] ) ) {
$count = count( $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']][$key] );
}
$title = $tab.''.$count.'';
}
$url = admin_url( 'admin.php?page=ad_kangaroo&ad_kangaroo_tab='.$key );
if ( $key == 'main' ) {
$url = admin_url( 'admin.php?page=ad_kangaroo' );
}
if ( $key != $this->current_tab ) {
echo ''.$title.'';
}else{
echo ''.$title.'';
}
}
}
public function am_admin_page() {
$this->google_client = $this->create_google_client();
// Ad_Kangaroo Forms actions
// Logout action.
if ( isset( $_POST['ad_kangaroo_logout'] ) && check_admin_referer( $this->ad_kangaroo_nonce, 'ad_kangaroo_nonce' ) ) {
unset( $_SESSION[ 'ad_kangaroo_authorization_code' . $this->ad_kangaroo_blog_prefix ] );
unset( $this->ad_kangaroo_options['authorization_code'] );
update_option( 'ad_kangaroo_options', $this->ad_kangaroo_options );
}
// Authenticate action.
if ( isset( $_POST['ad_kangaroo_authorization_code'] ) && ! empty( $_POST['ad_kangaroo_authorization_code'] ) && check_admin_referer( $this->ad_kangaroo_nonce, 'ad_kangaroo_nonce' ) ) {
try {
$this->google_client->authenticate( $_POST['ad_kangaroo_authorization_code'] );
$this->ad_kangaroo_options['authorization_code'] = $_SESSION[ 'ad_kangaroo_authorization_code' . $this->ad_kangaroo_blog_prefix ] = $this->google_client->getAccessToken();
update_option( 'ad_kangaroo_options', $this->ad_kangaroo_options );
} catch ( Exception $e ) {}
}
// Add authorization to session if authorization exist in db.
if ( ! isset( $_SESSION[ 'ad_kangaroo_authorization_code' . $this->ad_kangaroo_blog_prefix ] ) && isset( $this->ad_kangaroo_options['authorization_code'] ) ) {
$_SESSION[ 'ad_kangaroo_authorization_code' . $this->ad_kangaroo_blog_prefix ] = $this->ad_kangaroo_options['authorization_code'];
}
// Set access token if authorization code exist.
if ( isset( $_SESSION[ 'ad_kangaroo_authorization_code' . $this->ad_kangaroo_blog_prefix ] ) ) {
$this->google_client->setAccessToken( $_SESSION[ 'ad_kangaroo_authorization_code' . $this->ad_kangaroo_blog_prefix ] );
}
// Get AdSense Info
if ( $this->google_client->getAccessToken() ) {
$this->adsense_client = new Google_Service_AdSense( $this->google_client );
$ad_kangaroo_adsense_accounts = $this->adsense_client->accounts;
$ad_kangaroo_adsense_adclients = $this->adsense_client->adclients;
$ad_kangaroo_adsense_adunits = $this->adsense_client->adunits;
try {
$ad_kangaroo_list_accounts = $ad_kangaroo_adsense_accounts->listAccounts()->getItems();
$this->ad_kangaroo_publisher_id = $ad_kangaroo_list_accounts[0]['id'];
$this->ad_kangaroo_options['publisher_id'] = $this->ad_kangaroo_publisher_id;
/* Start fix old options */
if ( isset( $this->ad_kangaroo_options['adunits'] ) && ! isset( $this->ad_kangaroo_options['adunits'][ $this->ad_kangaroo_options['publisher_id'] ] ) ) {
$ad_kangaroo_temp_adunits = $this->ad_kangaroo_options['adunits'];
unset( $this->ad_kangaroo_options['adunits'] );
$this->ad_kangaroo_options['adunits'][ $this->ad_kangaroo_options['publisher_id'] ] = $ad_kangaroo_temp_adunits;
}
/* End fix old options */
update_option( 'ad_kangaroo_options', $this->ad_kangaroo_options );
try {
$ad_kangaroo_list_adclients = $ad_kangaroo_adsense_adclients->listAdclients()->getItems();
$ad_kangaroo_ad_client = null;
foreach ( $ad_kangaroo_list_adclients as $ad_kangaroo_list_adclient ) {
if ( $ad_kangaroo_list_adclient['productCode'] == 'AFC' ) {
$ad_kangaroo_ad_client = $ad_kangaroo_list_adclient['id'];
}
}
if ( $ad_kangaroo_ad_client ) {
try {
$ad_kangaroo_adunits = $ad_kangaroo_adsense_adunits->listAdunits( $ad_kangaroo_ad_client )->getItems();
foreach ( $ad_kangaroo_adunits as $ad_kangaroo_adunit ) {
$ad_kangaroo_adunit_type = $this->ad_kangaroo_adunit_types[ $ad_kangaroo_adunit->getContentAdsSettings()->getType() ];
$ad_kangaroo_adunit_size = preg_replace( '/SIZE_([\d]+)_([\d]+)/', '$1x$2', $ad_kangaroo_adunit->getContentAdsSettings()->getSize() );
if ( array_key_exists( $ad_kangaroo_adunit_size, $this->ad_kangaroo_adunit_sizes ) ) {
$ad_kangaroo_adunit_size = $this->ad_kangaroo_adunit_sizes[ $ad_kangaroo_adunit_size ];
}
$ad_kangaroo_adunit_status = $ad_kangaroo_adunit->getStatus();
if ( array_key_exists( $ad_kangaroo_adunit_status, $this->ad_kangaroo_adunit_statuses ) ) {
$ad_kangaroo_adunit_status = $this->ad_kangaroo_adunit_statuses[ $ad_kangaroo_adunit_status ];
}
$ad_kangaroo_table_data[ $ad_kangaroo_adunit->getId() ] = array(
'id' => $ad_kangaroo_adunit->getId(),
'name' => $ad_kangaroo_adunit->getName(),
'code' => $ad_kangaroo_adunit->getCode(),
'summary' => sprintf( '%s, %s', $ad_kangaroo_adunit_type, $ad_kangaroo_adunit_size ),
'status' => $ad_kangaroo_adunit_status,
'status_value' => $ad_kangaroo_adunit['status'],
// 'script_code' => htmlspecialchars($ad_kangaroo_adsense_adunits->getAdCode( $ad_kangaroo_ad_client, $ad_kangaroo_adunit->getId() )->getAdCode())
);
}
} catch ( Google_Service_Exception $e ) {
$ad_kangaroo_err = $e->getErrors();
$ad_kangaroo_api_notice = array(
'class' => 'error ad_kangaroo_api_notice below-h2',
'message' => sprintf( '%s %s %s',
__( 'AdUnits Error:', 'ad_kangaroo' ),
$ad_kangaroo_err[0]['message'],
sprintf( __( 'Create account in %s', 'ad_kangaroo' ), 'Google AdSense.' )
)
);
}
}
} catch ( Google_Service_Exception $e ) {
$ad_kangaroo_err = $e->getErrors();
$ad_kangaroo_api_notice = array(
'class' => 'error ad_kangaroo_api_notice below-h2',
'message' => sprintf( '%s %s %s',
__( 'AdClient Error:', 'ad_kangaroo' ),
$ad_kangaroo_err[0]['message'],
sprintf( __( 'Create account in %s', 'ad_kangaroo' ), 'Google AdSense.' )
)
);
}
} catch ( Google_Service_Exception $e ) {
$ad_kangaroo_err = $e->getErrors();
$ad_kangaroo_api_notice = array(
'class' => 'error ad_kangaroo_api_notice below-h2',
'message' => sprintf( '%s %s %s',
__( 'Account Error:', 'ad_kangaroo' ),
$ad_kangaroo_err[0]['message'],
sprintf( __( 'Create account in %s', 'ad_kangaroo' ), 'Google AdSense.' )
)
);
} catch ( Exception $e ) {
$ad_kangaroo_api_notice = array(
'class' => 'error ad_kangaroo_api_notice below-h2',
'message' => $e->getMessage()
);
}
}
if ( isset( $_POST['ad_kangaroo_authorization_code'] ) && isset( $_POST['ad_kangaroo_authorize'] ) && ! $this->google_client->getAccessToken() && check_admin_referer( $this->ad_kangaroo_nonce, 'ad_kangaroo_nonce' ) ) {
$ad_kangaroo_api_notice = array(
'class' => 'error ad_kangaroo_api_notice below-h2',
'message' => __( 'Invalid authorization code. Please, try again.', 'ad_kangaroo' )
);
}
if ( isset( $_POST['ad_kangaroo_save_settings'] ) && check_admin_referer( $this->ad_kangaroo_nonce, 'ad_kangaroo_nonce' ) ) {
$this->ad_kangaroo_options['include_inactive_ads'] = ( ! empty( $_POST['ad_kangaroo_include_inactive_id'] ) ) ? 1 : 0;
update_option( 'ad_kangaroo_options', $this->ad_kangaroo_options );
}
require_once( dirname( __FILE__ ) . '/templates/screen.php' );
}
public function ad_kangaroo_ajax(){
if ( isset($_POST['id']) && isset($_POST['position']) && check_admin_referer( $this->ad_kangaroo_nonce, 'secret' ) ) {
$current_publisher_ads = isset( $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']] ) ? $this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']] : array();
if ( 'disable' == $_POST['position'] ) {
unset( $current_publisher_ads[$_POST['tab']][$_POST['id']] );
$this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']] = $current_publisher_ads;
update_option( 'ad_kangaroo_ads', $this->ad_kangaroo_ads );
wp_die( 'succes' );
}
$this->google_client = $this->create_google_client();
$this->google_client->setAccessToken( $this->ad_kangaroo_options['authorization_code'] );
if ( $this->google_client->getAccessToken() ) {
$this->adsense_client = new Google_Service_AdSense( $this->google_client );
$ad_kangaroo_adsense_adunits = $this->adsense_client->adunits;
$ad_kangaroo_adsense_adclients = $this->adsense_client->adclients;
$ad_kangaroo_list_adclients = $ad_kangaroo_adsense_adclients->listAdclients()->getItems();
foreach ( $ad_kangaroo_list_adclients as $ad_kangaroo_list_adclient ) {
if ( $ad_kangaroo_list_adclient['productCode'] == 'AFC' ) {
$ad_kangaroo_ad_client = $ad_kangaroo_list_adclient['id'];
}
}
if ( $ad_kangaroo_ad_client ) {
$ad_kangaroo_adunits = $ad_kangaroo_adsense_adunits->listAdunits( $ad_kangaroo_ad_client )->getItems();
$code = $ad_kangaroo_adsense_adunits->getAdCode( $ad_kangaroo_ad_client, $_POST['id'] )->getAdCode();
$current_publisher_ads[$_POST['tab']][$_POST['id']] = array(
'position' => $_POST['position'],
'code' => $code
);
$this->ad_kangaroo_ads[$this->ad_kangaroo_options['publisher_id']] = $current_publisher_ads;
update_option( 'ad_kangaroo_ads', $this->ad_kangaroo_ads );
wp_die( 'succes' );
}
}
}
wp_die('error');
}
}
$wp_ad_kangaroo = new Ad_Kangaroo();