Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/advanced.../classes
File: ad_group.php
<?php
[0] Fix | Delete
[1] Fix | Delete
use AdvancedAds\Entities;
[2] Fix | Delete
use AdvancedAds\Utilities\WordPress;
[3] Fix | Delete
[4] Fix | Delete
/**
[5] Fix | Delete
* An ad group object
[6] Fix | Delete
*
[7] Fix | Delete
* @package Advanced_Ads_Group
[8] Fix | Delete
* @author Thomas Maier <support@wpadvancedads.com>
[9] Fix | Delete
* @license GPL-2.0+
[10] Fix | Delete
* @link https://wpadvancedads.com
[11] Fix | Delete
* @copyright 2014 Thomas Maier, Advanced Ads GmbH
[12] Fix | Delete
*/
[13] Fix | Delete
class Advanced_Ads_Group {
[14] Fix | Delete
[15] Fix | Delete
/**
[16] Fix | Delete
* Default ad group weight
[17] Fix | Delete
* previously called MAX_AD_GROUP_WEIGHT
[18] Fix | Delete
*/
[19] Fix | Delete
const MAX_AD_GROUP_DEFAULT_WEIGHT = 10;
[20] Fix | Delete
[21] Fix | Delete
/**
[22] Fix | Delete
* Term id of this ad group
[23] Fix | Delete
*/
[24] Fix | Delete
public $id = 0;
[25] Fix | Delete
[26] Fix | Delete
/**
[27] Fix | Delete
* Group type
[28] Fix | Delete
*
[29] Fix | Delete
* @since 1.4.8
[30] Fix | Delete
*/
[31] Fix | Delete
public $type = 'default';
[32] Fix | Delete
[33] Fix | Delete
/**
[34] Fix | Delete
* Name of the taxonomy
[35] Fix | Delete
*/
[36] Fix | Delete
public $taxonomy = '';
[37] Fix | Delete
[38] Fix | Delete
/**
[39] Fix | Delete
* Post type of the ads
[40] Fix | Delete
*/
[41] Fix | Delete
protected $post_type = '';
[42] Fix | Delete
[43] Fix | Delete
/**
[44] Fix | Delete
* The current loaded ad
[45] Fix | Delete
*/
[46] Fix | Delete
protected $current_ad = '';
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* The name of the term
[50] Fix | Delete
*/
[51] Fix | Delete
public $name = '';
[52] Fix | Delete
[53] Fix | Delete
/**
[54] Fix | Delete
* The slug of the term
[55] Fix | Delete
*/
[56] Fix | Delete
public $slug = '';
[57] Fix | Delete
[58] Fix | Delete
/**
[59] Fix | Delete
* The description of the term
[60] Fix | Delete
*/
[61] Fix | Delete
public $description = '';
[62] Fix | Delete
[63] Fix | Delete
/**
[64] Fix | Delete
* Number of ads to display in the group block
[65] Fix | Delete
*/
[66] Fix | Delete
public $ad_count = 1;
[67] Fix | Delete
[68] Fix | Delete
/**$slug
[69] Fix | Delete
* contains other options
[70] Fix | Delete
*
[71] Fix | Delete
* @since 1.5.5
[72] Fix | Delete
*/
[73] Fix | Delete
public $options = [];
[74] Fix | Delete
[75] Fix | Delete
/**
[76] Fix | Delete
* Optional arguments passed to ads.
[77] Fix | Delete
*
[78] Fix | Delete
* @var array
[79] Fix | Delete
*/
[80] Fix | Delete
public $ad_args = [];
[81] Fix | Delete
[82] Fix | Delete
/**
[83] Fix | Delete
* Containing ad weights
[84] Fix | Delete
*/
[85] Fix | Delete
private $ad_weights;
[86] Fix | Delete
[87] Fix | Delete
/**
[88] Fix | Delete
* Array with post type objects (ads)
[89] Fix | Delete
*/
[90] Fix | Delete
private $ads = false;
[91] Fix | Delete
[92] Fix | Delete
/**
[93] Fix | Delete
* Multidimensional array contains information about the wrapper
[94] Fix | Delete
* each possible html attribute is an array with possible multiple elements.
[95] Fix | Delete
*
[96] Fix | Delete
* @since untagged
[97] Fix | Delete
*/
[98] Fix | Delete
public $wrapper = [];
[99] Fix | Delete
[100] Fix | Delete
/**
[101] Fix | Delete
* Displayed above the ad.
[102] Fix | Delete
*/
[103] Fix | Delete
public $label = '';
[104] Fix | Delete
[105] Fix | Delete
/**
[106] Fix | Delete
* Whether this group is in a head placement.
[107] Fix | Delete
*
[108] Fix | Delete
* @var bool
[109] Fix | Delete
*/
[110] Fix | Delete
private $is_head_placement;
[111] Fix | Delete
[112] Fix | Delete
/**
[113] Fix | Delete
* True, if this is an Advanced Ads Ad Group
[114] Fix | Delete
*
[115] Fix | Delete
* @var bool
[116] Fix | Delete
*/
[117] Fix | Delete
public $is_group = false;
[118] Fix | Delete
[119] Fix | Delete
/**
[120] Fix | Delete
* The decorated WP_Term object.
[121] Fix | Delete
*
[122] Fix | Delete
* @var \WP_Term
[123] Fix | Delete
*/
[124] Fix | Delete
private $group;
[125] Fix | Delete
[126] Fix | Delete
/**
[127] Fix | Delete
* Init ad group object
[128] Fix | Delete
*
[129] Fix | Delete
* @param int|WP_Term $group Either id of the ad group or term object.
[130] Fix | Delete
* @param iterable $ad_args Optional arguments passed to ads.
[131] Fix | Delete
*
[132] Fix | Delete
* @since 1.0.0
[133] Fix | Delete
*/
[134] Fix | Delete
public function __construct( $group, iterable $ad_args = [] ) {
[135] Fix | Delete
$this->taxonomy = Entities::TAXONOMY_AD_GROUP;
[136] Fix | Delete
[137] Fix | Delete
$this->group = get_term( $group, $this->taxonomy );
[138] Fix | Delete
if ( $this->group === null || is_wp_error( $this->group ) ) {
[139] Fix | Delete
return;
[140] Fix | Delete
}
[141] Fix | Delete
[142] Fix | Delete
$this->is_group = true;
[143] Fix | Delete
$this->id = $this->group->term_id;
[144] Fix | Delete
$this->name = $this->group->name;
[145] Fix | Delete
$this->slug = $this->group->slug;
[146] Fix | Delete
$this->description = $this->group->description;
[147] Fix | Delete
$this->post_type = Entities::POST_TYPE_AD;
[148] Fix | Delete
$this->ad_args = $ad_args;
[149] Fix | Delete
$this->is_head_placement = isset( $this->ad_args['placement_type'] ) && $this->ad_args['placement_type'] === 'header';
[150] Fix | Delete
$this->ad_args['is_top_level'] = ! isset( $this->ad_args['is_top_level'] );
[151] Fix | Delete
[152] Fix | Delete
$this->load_additional_attributes();
[153] Fix | Delete
[154] Fix | Delete
if ( ! $this->is_head_placement ) {
[155] Fix | Delete
$this->create_wrapper();
[156] Fix | Delete
}
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
/**
[160] Fix | Delete
* If a property on the original WP_Term is requested, return it, otherwise null.
[161] Fix | Delete
*
[162] Fix | Delete
* @param string $name The requested property name.
[163] Fix | Delete
*
[164] Fix | Delete
* @return mixed|null
[165] Fix | Delete
* @noinspection MagicMethodsValidityInspection -- We don't want to allow setting of properties.
[166] Fix | Delete
*/
[167] Fix | Delete
public function __get( string $name ) {
[168] Fix | Delete
return $this->group->$name ?? null;
[169] Fix | Delete
}
[170] Fix | Delete
[171] Fix | Delete
/**
[172] Fix | Delete
* Whether a property is set.
[173] Fix | Delete
*
[174] Fix | Delete
* @param string $name The requested property name.
[175] Fix | Delete
*
[176] Fix | Delete
* @return bool
[177] Fix | Delete
* @noinspection MagicMethodsValidityInspection -- We don't want to allow setting of properties.
[178] Fix | Delete
*/
[179] Fix | Delete
public function __isset( string $name ): bool {
[180] Fix | Delete
return isset( $this->group->$name );
[181] Fix | Delete
}
[182] Fix | Delete
[183] Fix | Delete
/**
[184] Fix | Delete
* Load additional attributes for groups that are not part of the WP terms
[185] Fix | Delete
*
[186] Fix | Delete
* @since 1.4.8
[187] Fix | Delete
*/
[188] Fix | Delete
protected function load_additional_attributes() {
[189] Fix | Delete
// -TODO should abstract (i.e. only call once per request)
[190] Fix | Delete
$all_groups = get_option( 'advads-ad-groups', [] );
[191] Fix | Delete
[192] Fix | Delete
if ( ! isset( $all_groups[ $this->id ] ) || ! is_array( $all_groups[ $this->id ] ) ) { return; }
[193] Fix | Delete
[194] Fix | Delete
if ( isset( $this->ad_args['change-group'] ) ) {
[195] Fix | Delete
// some options was provided by the user
[196] Fix | Delete
$group_data = Advanced_Ads_Utils::merge_deep_array( [ $all_groups[ $this->id ], $this->ad_args['change-group'] ] ) ;
[197] Fix | Delete
} else {
[198] Fix | Delete
$group_data = $all_groups[ $this->id ];
[199] Fix | Delete
}
[200] Fix | Delete
[201] Fix | Delete
if ( isset( $group_data['type'] ) ) {
[202] Fix | Delete
$this->type = $group_data['type'];
[203] Fix | Delete
}
[204] Fix | Delete
[205] Fix | Delete
// get ad count; default is 1
[206] Fix | Delete
if ( isset( $group_data['ad_count'] ) ) {
[207] Fix | Delete
$this->ad_count = $group_data['ad_count'] === 'all' ? 'all' : (int) $group_data['ad_count'];
[208] Fix | Delete
}
[209] Fix | Delete
[210] Fix | Delete
if ( isset( $group_data['options'] ) ) {
[211] Fix | Delete
$this->options = isset( $group_data['options'] ) ? $group_data['options'] : [];
[212] Fix | Delete
}
[213] Fix | Delete
}
[214] Fix | Delete
[215] Fix | Delete
/**
[216] Fix | Delete
* Control the output of the group by type and amount of ads
[217] Fix | Delete
*
[218] Fix | Delete
* @param array $ordered_ad_ids Ordered ids of the ads that belong to the group.
[219] Fix | Delete
*
[220] Fix | Delete
* @return string $output output of ad(s) by ad
[221] Fix | Delete
* @since 1.4.8
[222] Fix | Delete
*/
[223] Fix | Delete
public function output( $ordered_ad_ids ) {
[224] Fix | Delete
if ( empty( $ordered_ad_ids ) ) {
[225] Fix | Delete
return '';
[226] Fix | Delete
}
[227] Fix | Delete
[228] Fix | Delete
// load the ad output
[229] Fix | Delete
$output = [];
[230] Fix | Delete
$ads_displayed = 0;
[231] Fix | Delete
$ad_count = apply_filters( 'advanced-ads-group-ad-count', $this->ad_count, $this );
[232] Fix | Delete
[233] Fix | Delete
$ad_select = Advanced_Ads_Select::get_instance();
[234] Fix | Delete
[235] Fix | Delete
// the Advanced_Ads_Ad obj can access this info
[236] Fix | Delete
$this->ad_args['group_info'] = [
[237] Fix | Delete
'id' => $this->id,
[238] Fix | Delete
'name' => $this->name,
[239] Fix | Delete
'type' => $this->type,
[240] Fix | Delete
'refresh_enabled' => ! empty( $this->options['refresh']['enabled'] ),
[241] Fix | Delete
];
[242] Fix | Delete
$this->ad_args['ad_label'] = 'disabled';
[243] Fix | Delete
[244] Fix | Delete
if( is_array( $ordered_ad_ids ) ){
[245] Fix | Delete
foreach ( $ordered_ad_ids as $_ad_id ) {
[246] Fix | Delete
$this->ad_args['group_info']['ads_displayed'] = $ads_displayed;
[247] Fix | Delete
[248] Fix | Delete
// load the ad output
[249] Fix | Delete
$ad = $ad_select->get_ad_by_method( $_ad_id, Advanced_Ads_Select::AD, $this->ad_args );
[250] Fix | Delete
[251] Fix | Delete
if ( ! empty( $ad ) ) {
[252] Fix | Delete
$output[] = $ad;
[253] Fix | Delete
$ads_displayed++;
[254] Fix | Delete
// break the loop when maximum ads are reached
[255] Fix | Delete
if( $ads_displayed === $ad_count ) {
[256] Fix | Delete
break;
[257] Fix | Delete
}
[258] Fix | Delete
}
[259] Fix | Delete
}
[260] Fix | Delete
}
[261] Fix | Delete
[262] Fix | Delete
$global_output = ! isset( $this->ad_args['global_output'] ) || $this->ad_args['global_output'];
[263] Fix | Delete
if ( $global_output ) {
[264] Fix | Delete
// add the group to the global output array
[265] Fix | Delete
$advads = Advanced_Ads::get_instance();
[266] Fix | Delete
$advads->current_ads[] = ['type' => 'group', 'id' => $this->id, 'title' => $this->name];
[267] Fix | Delete
}
[268] Fix | Delete
[269] Fix | Delete
if ( $output === [] || ! is_array( $output ) ) {
[270] Fix | Delete
return '';
[271] Fix | Delete
}
[272] Fix | Delete
[273] Fix | Delete
// filter grouped ads output
[274] Fix | Delete
$output_array = apply_filters( 'advanced-ads-group-output-array', $output, $this );
[275] Fix | Delete
[276] Fix | Delete
// make sure the right format comes through the filter
[277] Fix | Delete
if ( $output_array === [] || ! is_array( $output_array ) ) {
[278] Fix | Delete
return '';
[279] Fix | Delete
}
[280] Fix | Delete
[281] Fix | Delete
$output_string = implode( '', $output_array );
[282] Fix | Delete
[283] Fix | Delete
// Adds inline css to the wrapper.
[284] Fix | Delete
if ( ! empty( $this->ad_args['inline-css'] ) && $this->ad_args['is_top_level'] ) {
[285] Fix | Delete
$inline_css = new Advanced_Ads_Inline_Css();
[286] Fix | Delete
$this->wrapper = $inline_css->add_css( $this->wrapper, $this->ad_args['inline-css'], $global_output );
[287] Fix | Delete
}
[288] Fix | Delete
[289] Fix | Delete
if ( ! $this->is_head_placement && $this->wrapper !== [] ) {
[290] Fix | Delete
$output_string = '<div' . Advanced_Ads_Utils::build_html_attributes( $this->wrapper ) . '>'
[291] Fix | Delete
. $this->label
[292] Fix | Delete
. apply_filters( 'advanced-ads-output-wrapper-before-content-group', '', $this )
[293] Fix | Delete
. $output_string
[294] Fix | Delete
. apply_filters( 'advanced-ads-output-wrapper-after-content-group', '', $this )
[295] Fix | Delete
. '</div>';
[296] Fix | Delete
}
[297] Fix | Delete
[298] Fix | Delete
if ( ! empty( $this->ad_args['is_top_level'] ) && ! empty( $this->ad_args['placement_clearfix'] ) ) {
[299] Fix | Delete
$output_string .= '<br style="clear: both; display: block; float: none;"/>';
[300] Fix | Delete
}
[301] Fix | Delete
[302] Fix | Delete
// filter final group output
[303] Fix | Delete
return apply_filters( 'advanced-ads-group-output', $output_string, $this );
[304] Fix | Delete
}
[305] Fix | Delete
[306] Fix | Delete
/**
[307] Fix | Delete
* Get ordered ids of the ads that belong to the group
[308] Fix | Delete
*
[309] Fix | Delete
* @return array
[310] Fix | Delete
*/
[311] Fix | Delete
public function get_ordered_ad_ids() {
[312] Fix | Delete
// load ads
[313] Fix | Delete
$ads = $this->load_all_ads();
[314] Fix | Delete
if ( ! is_array( $ads ) ) {
[315] Fix | Delete
return [];
[316] Fix | Delete
}
[317] Fix | Delete
[318] Fix | Delete
// get ad weights serving as an order here
[319] Fix | Delete
$weights = $this->get_ad_weights( array_keys( $ads ) );
[320] Fix | Delete
$ad_ids = wp_list_pluck( $ads, 'ID' );
[321] Fix | Delete
[322] Fix | Delete
// remove ads with 0 ad weight and unavailable ads (e.g. drafts).
[323] Fix | Delete
foreach ( $weights as $ad_id => $ad_weight ) {
[324] Fix | Delete
if ( $ad_weight === 0 || ! in_array( $ad_id, $ad_ids, true ) ) {
[325] Fix | Delete
unset( $weights[ $ad_id ] );
[326] Fix | Delete
}
[327] Fix | Delete
}
[328] Fix | Delete
[329] Fix | Delete
// order ads based on group type
[330] Fix | Delete
if ( $this->type === 'ordered' ) {
[331] Fix | Delete
$ordered_ad_ids = $this->shuffle_ordered_ads( $weights );
[332] Fix | Delete
} else { // default
[333] Fix | Delete
$ordered_ad_ids = $this->shuffle_ads( $ads, $weights );
[334] Fix | Delete
}
[335] Fix | Delete
[336] Fix | Delete
return apply_filters( 'advanced-ads-group-output-ad-ids', $ordered_ad_ids, $this->type, $ads, $weights, $this );
[337] Fix | Delete
}
[338] Fix | Delete
[339] Fix | Delete
/**
[340] Fix | Delete
* Return all ads from this group
[341] Fix | Delete
*
[342] Fix | Delete
* @since 1.0.0
[343] Fix | Delete
*/
[344] Fix | Delete
public function get_all_ads() {
[345] Fix | Delete
return $this->load_all_ads();
[346] Fix | Delete
}
[347] Fix | Delete
[348] Fix | Delete
/**
[349] Fix | Delete
* Load all public ads for this group
[350] Fix | Delete
*
[351] Fix | Delete
* @since 1.0.0
[352] Fix | Delete
* @update 1.1.0 load only public ads
[353] Fix | Delete
* @update allow to cache groups for few minutes
[354] Fix | Delete
*
[355] Fix | Delete
* @return bool|WP_Post[] $ads array with ad (post) objects
[356] Fix | Delete
*/
[357] Fix | Delete
private function load_all_ads() {
[358] Fix | Delete
[359] Fix | Delete
if ( ! $this->id ) {
[360] Fix | Delete
return [];
[361] Fix | Delete
}
[362] Fix | Delete
[363] Fix | Delete
if ( false !== $this->ads ) {
[364] Fix | Delete
return $this->ads;
[365] Fix | Delete
}
[366] Fix | Delete
[367] Fix | Delete
// Much more complex than needed: one of the three queries is not needed and the last query gets slow quiet fast.
[368] Fix | Delete
$args = [
[369] Fix | Delete
'post_type' => $this->post_type,
[370] Fix | Delete
'post_status' => 'publish',
[371] Fix | Delete
'posts_per_page' => -1,
[372] Fix | Delete
'taxonomy' => $this->taxonomy,
[373] Fix | Delete
'term' => $this->slug,
[374] Fix | Delete
'orderby' => 'id', // Might want to avoid sorting as not needed for most calls and fast in PHP; slight I/O blocking concern.
[375] Fix | Delete
];
[376] Fix | Delete
[377] Fix | Delete
$ads = new WP_Query( $args );
[378] Fix | Delete
[379] Fix | Delete
if ( $ads->have_posts() ) {
[380] Fix | Delete
$this->ads = $this->add_post_ids( $ads->posts );
[381] Fix | Delete
} else {
[382] Fix | Delete
$this->ads = [];
[383] Fix | Delete
}
[384] Fix | Delete
[385] Fix | Delete
return $this->ads;
[386] Fix | Delete
}
[387] Fix | Delete
[388] Fix | Delete
/**
[389] Fix | Delete
* Use post ids as keys for ad array
[390] Fix | Delete
*
[391] Fix | Delete
* @since 1.0.0
[392] Fix | Delete
* @param array $ads array with post objects.
[393] Fix | Delete
* @return array $ads array with post objects with post id as their key.
[394] Fix | Delete
*/
[395] Fix | Delete
private function add_post_ids( array $ads ) {
[396] Fix | Delete
return array_reduce(
[397] Fix | Delete
$ads,
[398] Fix | Delete
function( $ads, $ad ) {
[399] Fix | Delete
$ads[ $ad->ID ] = $ad;
[400] Fix | Delete
[401] Fix | Delete
return $ads;
[402] Fix | Delete
},
[403] Fix | Delete
[]
[404] Fix | Delete
);
[405] Fix | Delete
}
[406] Fix | Delete
[407] Fix | Delete
/**
[408] Fix | Delete
* Shuffle ads based on ad weight.
[409] Fix | Delete
*
[410] Fix | Delete
* @param array $ads ad objects.
[411] Fix | Delete
* @param array $weights ad weights, indexed by ad id.
[412] Fix | Delete
*
[413] Fix | Delete
* @return array
[414] Fix | Delete
* @since 1.0.0
[415] Fix | Delete
*/
[416] Fix | Delete
public function shuffle_ads( $ads, $weights ) {
[417] Fix | Delete
// get a random ad for every ad there is
[418] Fix | Delete
$shuffled_ads = [];
[419] Fix | Delete
// while non-zero weights are set select random next
[420] Fix | Delete
// phpcs:ignore WordPress.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition -- prevents code duplication.
[421] Fix | Delete
while ( null !== ( $random_ad_id = $this->get_random_ad_by_weight( $weights ) ) ) {
[422] Fix | Delete
// remove chosen ad from weights array
[423] Fix | Delete
unset( $weights[ $random_ad_id ] );
[424] Fix | Delete
// put random ad into shuffled array
[425] Fix | Delete
if ( ! empty( $ads[ $random_ad_id ] ) ) {
[426] Fix | Delete
$shuffled_ads[] = $random_ad_id;
[427] Fix | Delete
}
[428] Fix | Delete
}
[429] Fix | Delete
[430] Fix | Delete
return $shuffled_ads;
[431] Fix | Delete
}
[432] Fix | Delete
[433] Fix | Delete
/**
[434] Fix | Delete
* Shuffle ads that have the same width.
[435] Fix | Delete
*
[436] Fix | Delete
* @since untagged
[437] Fix | Delete
* @param array $weights Array of $ad_id => weight pairs.
[438] Fix | Delete
* @return array $ordered_ad_ids Ordered ad ids.
[439] Fix | Delete
*/
[440] Fix | Delete
public function shuffle_ordered_ads( array $weights ) {
[441] Fix | Delete
// order to highest weight first
[442] Fix | Delete
arsort( $weights );
[443] Fix | Delete
$ordered_ad_ids = array_keys( $weights );
[444] Fix | Delete
[445] Fix | Delete
$weights = array_values( $weights );
[446] Fix | Delete
$count = count( $weights );
[447] Fix | Delete
$pos = 0;
[448] Fix | Delete
for ( $i = 1; $i <= $count; $i++ ) {
[449] Fix | Delete
if ( $i == $count || $weights[ $i ] !== $weights[ $i - 1] ) {
[450] Fix | Delete
$slice_len = $i - $pos;
[451] Fix | Delete
if ( $slice_len !== 1 ) {
[452] Fix | Delete
$shuffled = array_slice( $ordered_ad_ids, $pos, $slice_len );
[453] Fix | Delete
shuffle ( $shuffled );
[454] Fix | Delete
// Replace the unshuffled chunk with the shuffled one.
[455] Fix | Delete
array_splice( $ordered_ad_ids, $pos, $slice_len, $shuffled );
[456] Fix | Delete
}
[457] Fix | Delete
$pos = $i;
[458] Fix | Delete
}
[459] Fix | Delete
}
[460] Fix | Delete
return $ordered_ad_ids;
[461] Fix | Delete
}
[462] Fix | Delete
[463] Fix | Delete
/**
[464] Fix | Delete
* Get random ad by ad weight.
[465] Fix | Delete
*
[466] Fix | Delete
* @since 1.0.0
[467] Fix | Delete
* @param array $ad_weights Indexed by ad_id [int $ad_id => int $weight].
[468] Fix | Delete
* @source applied with fix for order http://stackoverflow.com/a/11872928/904614
[469] Fix | Delete
*
[470] Fix | Delete
* @return null|int
[471] Fix | Delete
*/
[472] Fix | Delete
private function get_random_ad_by_weight(array $ad_weights) {
[473] Fix | Delete
[474] Fix | Delete
// use maximum ad weight for ads without this
[475] Fix | Delete
// ads might have a weight of zero (0); to avoid mt_rand fail assume that at least 1 is set.
[476] Fix | Delete
$max = array_sum( $ad_weights );
[477] Fix | Delete
if ( $max < 1 ) {
[478] Fix | Delete
return null;
[479] Fix | Delete
}
[480] Fix | Delete
[481] Fix | Delete
$rand = mt_rand( 1, $max );
[482] Fix | Delete
foreach ( $ad_weights as $ad_id => $weight ) {
[483] Fix | Delete
$rand -= $weight;
[484] Fix | Delete
if ( $rand <= 0 ) {
[485] Fix | Delete
return $ad_id;
[486] Fix | Delete
}
[487] Fix | Delete
}
[488] Fix | Delete
[489] Fix | Delete
return null;
[490] Fix | Delete
}
[491] Fix | Delete
[492] Fix | Delete
/**
[493] Fix | Delete
* Get weights of ads in this group
[494] Fix | Delete
*
[495] Fix | Delete
* @param array $ad_ids Ids of ads assigned to this group.
[496] Fix | Delete
*
[497] Fix | Delete
* @return array
[498] Fix | Delete
*/
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function