/** * 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; }
/** * 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; }