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

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/advanced.../classes
File: in-content-injector.php
$count = 0;
[500] Fix | Delete
[501] Fix | Delete
// For each tag located before/after an ad placeholder, find its offset among the same tags.
[502] Fix | Delete
foreach ( $tag_matches[0] as $r ) {
[503] Fix | Delete
if ( preg_match( '/%advads_placeholder_(\d+)%/', $r, $result ) ) {
[504] Fix | Delete
$id = $result[1];
[505] Fix | Delete
$found_ad = false;
[506] Fix | Delete
foreach ( $ads_for_placeholders as $n => $ad ) {
[507] Fix | Delete
if ( (int) $ad['id'] === (int) $id ) {
[508] Fix | Delete
$found_ad = $ad;
[509] Fix | Delete
break;
[510] Fix | Delete
}
[511] Fix | Delete
}
[512] Fix | Delete
if ( ! $found_ad ) {
[513] Fix | Delete
continue;
[514] Fix | Delete
}
[515] Fix | Delete
[516] Fix | Delete
switch ( $found_ad['position'] ) {
[517] Fix | Delete
case 'before':
[518] Fix | Delete
case 'append':
[519] Fix | Delete
$ads_for_placeholders[ $n ]['offset'] = $count;
[520] Fix | Delete
break;
[521] Fix | Delete
case 'after':
[522] Fix | Delete
case 'prepend':
[523] Fix | Delete
$ads_for_placeholders[ $n ]['offset'] = $count - 1;
[524] Fix | Delete
break;
[525] Fix | Delete
}
[526] Fix | Delete
} else {
[527] Fix | Delete
$count ++;
[528] Fix | Delete
}
[529] Fix | Delete
}
[530] Fix | Delete
[531] Fix | Delete
// Find tags before/after which we need to inject ads.
[532] Fix | Delete
preg_match_all( "#{$tag_regexp}#i", $content_orig, $orig_tag_matches, PREG_OFFSET_CAPTURE );
[533] Fix | Delete
$new_content = '';
[534] Fix | Delete
$pos = 0;
[535] Fix | Delete
[536] Fix | Delete
foreach ( $orig_tag_matches[0] as $n => $r ) {
[537] Fix | Delete
$to_inject = [];
[538] Fix | Delete
// Check if we need to inject an ad at this offset.
[539] Fix | Delete
foreach ( $ads_for_placeholders as $ad ) {
[540] Fix | Delete
if ( isset( $ad['offset'] ) && $ad['offset'] === $n ) {
[541] Fix | Delete
$to_inject[] = $ad;
[542] Fix | Delete
}
[543] Fix | Delete
}
[544] Fix | Delete
[545] Fix | Delete
foreach ( $to_inject as $item ) {
[546] Fix | Delete
switch ( $item['position'] ) {
[547] Fix | Delete
case 'before':
[548] Fix | Delete
case 'append':
[549] Fix | Delete
$found_pos = $r[1];
[550] Fix | Delete
break;
[551] Fix | Delete
case 'after':
[552] Fix | Delete
case 'prepend':
[553] Fix | Delete
$found_pos = $r[1] + strlen( $r[0] );
[554] Fix | Delete
break;
[555] Fix | Delete
}
[556] Fix | Delete
[557] Fix | Delete
$new_content .= substr( $content_orig, $pos, $found_pos - $pos );
[558] Fix | Delete
$pos = $found_pos;
[559] Fix | Delete
$new_content .= $item['ad'];
[560] Fix | Delete
}
[561] Fix | Delete
}
[562] Fix | Delete
$new_content .= substr( $content_orig, $pos );
[563] Fix | Delete
[564] Fix | Delete
return $new_content;
[565] Fix | Delete
}
[566] Fix | Delete
[567] Fix | Delete
[568] Fix | Delete
/**
[569] Fix | Delete
* Callback function for usort() to sort ads for placeholders.
[570] Fix | Delete
*
[571] Fix | Delete
* @param array $first The first array to compare.
[572] Fix | Delete
* @param array $second The second array to compare.
[573] Fix | Delete
*
[574] Fix | Delete
* @return int 0 if both objects equal. -1 if second array should come first, 1 otherwise.
[575] Fix | Delete
*/
[576] Fix | Delete
public static function sort_ads_for_placehoders( $first, $second ) {
[577] Fix | Delete
if ( $first['position'] === $second['position'] ) {
[578] Fix | Delete
return 0;
[579] Fix | Delete
}
[580] Fix | Delete
[581] Fix | Delete
$num = [
[582] Fix | Delete
'before' => 1,
[583] Fix | Delete
'prepend' => 2,
[584] Fix | Delete
'append' => 3,
[585] Fix | Delete
'after' => 4,
[586] Fix | Delete
];
[587] Fix | Delete
[588] Fix | Delete
return $num[ $first['position'] ] > $num[ $second['position'] ] ? 1 : - 1;
[589] Fix | Delete
}
[590] Fix | Delete
[591] Fix | Delete
/**
[592] Fix | Delete
* Add a warning to 'Ad health'.
[593] Fix | Delete
*
[594] Fix | Delete
* @param array $nodes .
[595] Fix | Delete
*
[596] Fix | Delete
* @return array $nodes.
[597] Fix | Delete
*/
[598] Fix | Delete
public static function add_ad_health_node( $nodes ) {
[599] Fix | Delete
$nodes[] = [
[600] Fix | Delete
'type' => 1,
[601] Fix | Delete
'data' => [
[602] Fix | Delete
'parent' => 'advanced_ads_ad_health',
[603] Fix | Delete
'id' => 'advanced_ads_ad_health_the_content_not_enough_elements',
[604] Fix | Delete
'title' => sprintf(
[605] Fix | Delete
/* translators: %s stands for the name of the "Disable level limitation" option and automatically translated as well */
[606] Fix | Delete
__( 'Set <em>%s</em> to show more ads', 'advanced-ads' ),
[607] Fix | Delete
__( 'Disable level limitation', 'advanced-ads' )
[608] Fix | Delete
),
[609] Fix | Delete
'href' => admin_url( '/admin.php?page=advanced-ads-settings#top#general' ),
[610] Fix | Delete
'meta' => [
[611] Fix | Delete
'class' => 'advanced_ads_ad_health_warning',
[612] Fix | Delete
'target' => '_blank',
[613] Fix | Delete
],
[614] Fix | Delete
],
[615] Fix | Delete
];
[616] Fix | Delete
[617] Fix | Delete
return $nodes;
[618] Fix | Delete
}
[619] Fix | Delete
[620] Fix | Delete
/**
[621] Fix | Delete
* Get paths of ancestors that should not contain ads.
[622] Fix | Delete
*
[623] Fix | Delete
* @param object $xpath DOMXPath object.
[624] Fix | Delete
*
[625] Fix | Delete
* @return array Paths of ancestors.
[626] Fix | Delete
*/
[627] Fix | Delete
private static function get_ancestors_to_limit( $xpath ) {
[628] Fix | Delete
$query = self::get_ancestors_to_limit_query();
[629] Fix | Delete
if ( ! $query ) {
[630] Fix | Delete
return [];
[631] Fix | Delete
}
[632] Fix | Delete
[633] Fix | Delete
$node_list = $xpath->query( $query );
[634] Fix | Delete
$ancestors_to_limit = [];
[635] Fix | Delete
[636] Fix | Delete
foreach ( $node_list as $a ) {
[637] Fix | Delete
$ancestors_to_limit[] = $a->getNodePath();
[638] Fix | Delete
}
[639] Fix | Delete
[640] Fix | Delete
return $ancestors_to_limit;
[641] Fix | Delete
}
[642] Fix | Delete
[643] Fix | Delete
[644] Fix | Delete
/**
[645] Fix | Delete
* Remove paragraphs that has ancestors that should not contain ads.
[646] Fix | Delete
*
[647] Fix | Delete
* @param array $paragraphs An array of `DOMNode` objects to insert ads before or after.
[648] Fix | Delete
* @param array $ancestors_to_limit Paths of ancestor that should not contain ads.
[649] Fix | Delete
*
[650] Fix | Delete
* @return array $new_paragraphs An array of `DOMNode` objects to insert ads before or after.
[651] Fix | Delete
*/
[652] Fix | Delete
private static function filter_by_ancestors_to_limit( $paragraphs, $ancestors_to_limit ) {
[653] Fix | Delete
$new_paragraphs = [];
[654] Fix | Delete
[655] Fix | Delete
foreach ( $paragraphs as $k => $paragraph ) {
[656] Fix | Delete
foreach ( $ancestors_to_limit as $a ) {
[657] Fix | Delete
if ( 0 === stripos( $paragraph->getNodePath(), $a ) ) {
[658] Fix | Delete
continue 2;
[659] Fix | Delete
}
[660] Fix | Delete
}
[661] Fix | Delete
[662] Fix | Delete
$new_paragraphs[] = $paragraph;
[663] Fix | Delete
}
[664] Fix | Delete
[665] Fix | Delete
return $new_paragraphs;
[666] Fix | Delete
}
[667] Fix | Delete
[668] Fix | Delete
/**
[669] Fix | Delete
* Get query to select ancestors that should not contain ads.
[670] Fix | Delete
*
[671] Fix | Delete
* @return string/false DOMXPath query or false.
[672] Fix | Delete
*/
[673] Fix | Delete
private static function get_ancestors_to_limit_query() {
[674] Fix | Delete
/**
[675] Fix | Delete
* TODO:
[676] Fix | Delete
* - support `%` (rand) at the start
[677] Fix | Delete
* - support plain text that node should contain instead of CSS selectors
[678] Fix | Delete
* - support `prev` and `next` as `type`
[679] Fix | Delete
*/
[680] Fix | Delete
[681] Fix | Delete
/**
[682] Fix | Delete
* Filter the nodes that limit injection.
[683] Fix | Delete
*
[684] Fix | Delete
* @param array An array of arrays, each of which contains:
[685] Fix | Delete
*
[686] Fix | Delete
* @type string $type Accept: `ancestor` - limit injection inside the ancestor.
[687] Fix | Delete
* @type string $node A "class selector" which targets one class (.) or "id selector" which targets one id (#),
[688] Fix | Delete
* optionally with `%` at the end.
[689] Fix | Delete
*/
[690] Fix | Delete
$items = apply_filters(
[691] Fix | Delete
'advanced-ads-content-injection-nodes-without-ads',
[692] Fix | Delete
[
[693] Fix | Delete
[
[694] Fix | Delete
// a class anyone can use to prevent automatic ad injection into a specific element.
[695] Fix | Delete
'node' => '.advads-stop-injection',
[696] Fix | Delete
'type' => 'ancestor',
[697] Fix | Delete
],
[698] Fix | Delete
[
[699] Fix | Delete
// Product Slider for Beaver Builder by WooPack.
[700] Fix | Delete
'node' => '.woopack-product-carousel',
[701] Fix | Delete
'type' => 'ancestor',
[702] Fix | Delete
],
[703] Fix | Delete
[
[704] Fix | Delete
// WP Author Box Lite.
[705] Fix | Delete
'node' => '#wpautbox-%',
[706] Fix | Delete
'type' => 'ancestor',
[707] Fix | Delete
],
[708] Fix | Delete
[
[709] Fix | Delete
// GeoDirectory Post Slider.
[710] Fix | Delete
'node' => '.geodir-post-slider',
[711] Fix | Delete
'type' => 'ancestor',
[712] Fix | Delete
],
[713] Fix | Delete
]
[714] Fix | Delete
);
[715] Fix | Delete
[716] Fix | Delete
$query = [];
[717] Fix | Delete
foreach ( $items as $p ) {
[718] Fix | Delete
$sel = $p['node'];
[719] Fix | Delete
[720] Fix | Delete
$sel_type = substr( $sel, 0, 1 );
[721] Fix | Delete
$sel = substr( $sel, 1 );
[722] Fix | Delete
[723] Fix | Delete
$rand_pos = strpos( $sel, '%' );
[724] Fix | Delete
$sel = str_replace( '%', '', $sel );
[725] Fix | Delete
$sel = sanitize_html_class( $sel );
[726] Fix | Delete
[727] Fix | Delete
if ( '.' === $sel_type ) {
[728] Fix | Delete
if ( false !== $rand_pos ) {
[729] Fix | Delete
$query[] = "@class and contains(concat(' ', normalize-space(@class), ' '), ' $sel')";
[730] Fix | Delete
} else {
[731] Fix | Delete
$query[] = "@class and contains(concat(' ', normalize-space(@class), ' '), ' $sel ')";
[732] Fix | Delete
}
[733] Fix | Delete
}
[734] Fix | Delete
if ( '#' === $sel_type ) {
[735] Fix | Delete
if ( false !== $rand_pos ) {
[736] Fix | Delete
$query[] = "@id and starts-with(@id, '$sel')";
[737] Fix | Delete
} else {
[738] Fix | Delete
$query[] = "@id and @id = '$sel'";
[739] Fix | Delete
}
[740] Fix | Delete
}
[741] Fix | Delete
}
[742] Fix | Delete
[743] Fix | Delete
if ( ! $query ) {
[744] Fix | Delete
return false;
[745] Fix | Delete
}
[746] Fix | Delete
[747] Fix | Delete
return '//*[' . implode( ' or ', $query ) . ']';
[748] Fix | Delete
}
[749] Fix | Delete
[750] Fix | Delete
}
[751] Fix | Delete
[752] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function