/**
  * load interface for single visitor condition
  *
  * @since 1.5.4
  */
 public function load_visitor_condition()
 {
     if (!current_user_can(Advanced_Ads_Plugin::user_cap('advanced_ads_edit_ads'))) {
         return;
     }
     // get visitor condition types
     $visitor_conditions = Advanced_Ads_Visitor_Conditions::get_instance()->conditions;
     $condition = array();
     $condition['type'] = isset($_POST['type']) ? $_POST['type'] : '';
     $condition['connector'] = isset($_POST['connector']) ? $_POST['connector'] : '';
     $index = isset($_POST['index']) ? $_POST['index'] : 0;
     if (isset($visitor_conditions[$condition['type']])) {
         $metabox = $visitor_conditions[$condition['type']]['metabox'];
     } else {
         die;
     }
     if (method_exists($metabox[0], $metabox[1])) {
         call_user_func(array($metabox[0], $metabox[1]), $condition, $index);
     }
     die;
 }
Example #2
0
 /**
  * check visitor conditions
  *
  * @since 1.1.0
  * @return bool $can_display true if can be displayed in frontend based on visitor settings
  */
 public function can_display_by_visitor()
 {
     // check old "visitor" and new "visitors" conditions
     if ((empty($this->options['visitors']) || !is_array($this->options['visitors'])) && (empty($this->options['visitor']) || !is_array($this->options['visitor']))) {
         return true;
     }
     if (isset($this->options['visitors']) && is_array($this->options['visitors'])) {
         $visitor_conditions = $this->options['visitors'];
         foreach ($visitor_conditions as $_condition) {
             $result = Advanced_Ads_Visitor_Conditions::frontend_check($_condition, $this);
             if (!$result) {
                 // return false only, if the next condition doesn’t have an OR operator
                 $next = next($visitor_conditions);
                 if (!isset($next['connector']) || $next['connector'] !== 'or') {
                     return false;
                 }
             }
         }
     }
     /**
      * "old" visitor conditions
      *
      * @deprecated since version 1.5.4
      */
     if (empty($this->options['visitor']) || !is_array($this->options['visitor'])) {
         return true;
     }
     $visitor_conditions = $this->options('visitor');
     // check mobile condition
     if (isset($visitor_conditions['mobile'])) {
         switch ($visitor_conditions['mobile']) {
             case 'only':
                 if (!wp_is_mobile()) {
                     return false;
                 }
                 break;
             case 'no':
                 if (wp_is_mobile()) {
                     return false;
                 }
                 break;
         }
     }
     return true;
 }
<?php

$visitor_conditions = Advanced_Ads_Visitor_Conditions::get_instance()->conditions;
$options = $ad->options('visitors');
?>
<p class="description"><?php 
_e('Display conditions that are based on the user. Use with caution on cached websites.', 'advanced-ads');
?>
</p>
<div id="advads-visitor-conditions">
	<table><tbody><?php 
if (isset($options)) {
    $i = 0;
    foreach ($options as $_options) {
        if (isset($visitor_conditions[$_options['type']]['metabox'])) {
            $metabox = $visitor_conditions[$_options['type']]['metabox'];
        } else {
            continue;
        }
        if (method_exists($metabox[0], $metabox[1])) {
            $_connector = isset($_options['connector']) ? esc_attr($_options['connector']) : 'and';
            ?>
<tr><td colspan="4" class="advads-visitor-conditions-connector-<?php 
            echo $_connector;
            ?>
"><?php 
            echo $_connector;
            ?>
<hr/></td></tr><?php 
            ?>
<tr><td></td><td><?php 
 /**
  * controls frontend checks for conditions
  *
  * @param arr $options options of the condition
  * @param ob $ad Advanced_Ads_Ad
  * @return bool false, if ad can’t be delivered
  */
 static function frontend_check($options = array(), $ad = false)
 {
     $visitor_conditions = Advanced_Ads_Visitor_Conditions::get_instance()->conditions;
     if (is_array($options) && isset($visitor_conditions[$options['type']]['check'])) {
         $check = $visitor_conditions[$options['type']]['check'];
     } else {
         return true;
     }
     // call frontend check callback
     if (method_exists($check[0], $check[1])) {
         return call_user_func(array($check[0], $check[1]), $options, $ad);
     }
     return true;
 }