2013-08-02 22:18:35 +02:00
< ? php
/*
@ name Adblock
@ author Phyks < phyks @ phyks . me >
@ link http :// www . phyks . me
2013-08-04 21:45:04 +02:00
@ licence BEERWARE ( See README . md file )
2013-08-02 22:18:35 +02:00
@ version 2.0 . 0
2013-08-04 21:45:04 +02:00
@ description The adblock plugin for leed allows to block embedded flash contents and / or images in feeds . You can set it fine - grained for each feed . You can also disable images only for mobile devices .
2013-08-04 15:11:29 +02:00
*/
2013-08-02 22:18:35 +02:00
2013-08-04 22:54:58 +02:00
function adblock_isMobileDevice () {
return preg_match ( " /(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up \ .browser|up \ .link|webos|wos)/i " , $_SERVER [ " HTTP_USER_AGENT " ]);
}
function adblock_trim_list ( $input ) {
$output = array ();
foreach ( $input as $key => $value ) {
2013-08-05 13:27:40 +02:00
$output [ $key ] = trim ( $value , " \t \n \r \0 \x0B , \" " );
2013-08-04 22:54:58 +02:00
}
return $output ;
}
2013-08-02 22:18:35 +02:00
2013-08-04 20:13:32 +02:00
function adblock_plugin_treat_events ( & $events ) {
2013-08-04 22:54:58 +02:00
//Set params
2013-08-05 13:27:40 +02:00
$configurationManager = new Configuration ();
$partial = $configurationManager -> get ( 'articleView' ) == " partial " ;
2013-12-08 00:44:49 +01:00
$adblock_constants = file_get_contents ( " adblock_constants.php " );
2013-08-04 22:54:58 +02:00
$adblock_constants = explode ( " \n " , $adblock_constants );
$adblock_params = array ();
foreach ( $adblock_constants as $adblock_constant ) {
if ( trim ( $adblock_constant ) != " " ) {
$adblock_constant = explode ( " = " , $adblock_constant );
$adblock_params [ trim ( $adblock_constant [ 0 ])] = trim ( $adblock_constant [ 1 ]);
}
}
if ( isset ( $adblock_params [ " flash_enabled " ]) && $adblock_params [ " flash_enabled " ] == " 1 " ) {
$filter_flash = true ;
if ( isset ( $adblock_params [ " flash_block " ]) && $adblock_params [ " flash_block " ] == " 1 " ) {
$block_flash = true ;
}
else {
$block_flash = false ;
}
}
else {
$filter_flash = false ;
}
$flash_except_list = explode ( ',' , trim ( $adblock_params [ " flash_list " ], " \t \n \r \0 \x0B , " ));
$flash_except_list = adblock_trim_list ( $flash_except_list );
if ( isset ( $adblock_params [ " img_enabled " ]) && $adblock_params [ " img_enabled " ] == " 1 " ) {
$filter_img = true ;
if ( isset ( $adblock_params [ " img_block " ]) && $adblock_params [ " img_block " ] == " 1 " ) {
$block_img = true ;
}
else {
$block_img = false ;
}
2013-08-05 13:27:40 +02:00
if ( isset ( $adblock_params [ " img_only_mobiles " ]) && $adblock_params [ " img_only_mobiles " ] == " 1 " && ! adblock_isMobileDevice ()) { //If filter only on mobile devices and not a mobile device
2013-08-04 22:54:58 +02:00
$filter_img = false ;
}
}
else {
$filter_img = false ;
}
$img_except_list = explode ( ',' , trim ( $adblock_params [ " img_list " ], " \t \n \r \0 \x0B , " ));
$img_except_list = adblock_trim_list ( $flash_except_list );
2013-08-05 11:49:28 +02:00
$elegant_degradation = ( isset ( $adblock_params [ " elegant_degradation " ]) && $adblock_params [ " elegant_degradation " ] == " 1 " ) ? true : false ;
2013-08-04 22:54:58 +02:00
2013-08-04 15:11:29 +02:00
foreach ( $events as $event ) {
2013-08-05 13:27:40 +02:00
$filtered_content = ( $partial ) ? $event -> getDescription : $event -> getContent ();
2013-08-05 14:41:48 +02:00
$modified = false ;
2013-08-04 22:54:58 +02:00
// Flash handling
if ( $filter_flash ) {
if (( $block_flash && ! in_array ( $event -> getFeed (), $flash_except_list )) || ( ! $block_flash && in_array ( $event -> getFeed (), $flash_except_list ))) {
//Replace flash content
2013-08-05 22:42:10 +02:00
preg_match_all ( " #<iframe. { 0,}/(iframe)?>#U " , $filtered_content , $object_list_in_event , PREG_SET_ORDER );
2013-08-04 23:38:42 +02:00
foreach ( $object_list_in_event as $object ) {
2013-08-05 22:42:10 +02:00
if ( ! $elegant_degradation ) {
$replacement_content = '
< span class = " blocked_flash " onclick = " return adblock_unblock_flash(this, \ ''.htmlspecialchars( $object[0] ).' \ '); " > X </ span >
' ;
$filtered_content = str_replace ( $object [ 0 ], $replacement_content , $filtered_content );
2013-08-05 11:49:28 +02:00
}
else {
2013-08-05 22:42:10 +02:00
preg_match ( " #width=[ \" ']([0-9] { 1,})[ \" ']#U " , $object [ 0 ], $width );
preg_match ( " #height=[ \" ']([0-9] { 1,})[ \" ']#U " , $object [ 0 ], $height );
$font_size = min ( $width [ 1 ], $height [ 1 ]);
$replacement_content = '
< span class = " blocked_flash " '.((!empty($width[1]) && !empty($height[1])) ? ' style = " width: '. $width[1] .'px; height: '. $height[1] .'px; padding: 0; padding-top: '.((int) $font_size ) / 2 .'px; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; font-size: '. $font_size .'px; " ' : ' ').' onclick = " return adblock_unblock_flash(this, \ ''.htmlspecialchars( $object[0] ).' \ '); " > X </ span >
' ;
$filtered_content = str_replace ( $object [ 0 ], $replacement_content , $filtered_content );
2013-08-05 11:49:28 +02:00
}
2013-08-04 23:38:42 +02:00
}
2013-08-05 22:42:10 +02:00
$modified = true ;
2013-08-04 22:54:58 +02:00
}
}
2013-08-04 23:23:11 +02:00
2013-08-04 22:54:58 +02:00
// Images handling
if ( $filter_img ) {
2013-08-05 13:27:40 +02:00
if (( $block_img && ! in_array ( $event -> getFeed (), $img_except_list )) || ( ! $block_img && in_array ( $event -> getFeed (), $img_except_list ))) {
2013-08-04 23:23:11 +02:00
//Replace images
2013-08-05 13:27:40 +02:00
preg_match_all ( " #<img. { 0,}src=[ \" '](. { 1,})[ \" ']. { 0,}/?(img)?>#U " , $filtered_content , $img_list_in_event , PREG_SET_ORDER );
2013-08-04 23:23:11 +02:00
foreach ( $img_list_in_event as $img ) {
2013-08-05 13:27:40 +02:00
if ( ! $elegant_degradation ) {
$replacement_content = '
2013-08-05 22:42:10 +02:00
< span class = " blocked_image " onclick = " return adblock_unblock_img(this, \ ''.urlencode( $img[1] ).' \ '); " > X </ span >
2013-08-05 13:27:40 +02:00
' ;
$filtered_content = str_replace ( $img [ 0 ], $replacement_content , $filtered_content );
2013-08-05 11:49:28 +02:00
}
else {
2013-08-05 13:27:40 +02:00
$content_size = getimagesize ( $img [ 1 ]); //Index 0 is width, index 1 is height
2013-08-05 22:42:10 +02:00
$font_size = min ( $content_size [ 0 ], $content_size [ 1 ]);
2013-08-05 13:27:40 +02:00
$replacement_content = '
2013-08-05 22:42:10 +02:00
< span class = " blocked_image " style = " width:'.(int) $content_size[0] .'px; height:'.(int) $content_size[1] .'px; padding:0; padding-top: '.((int) $font_size ) / 2 .'px; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; font-size: '. $font_size .'px; " onclick = " return adblock_unblock_img(this, \ ''.urlencode( $img[1] ).' \ '): " > X </ span >
2013-08-05 13:27:40 +02:00
' ;
$filtered_content = str_replace ( $img [ 0 ], $replacement_content , $filtered_content );
2013-08-05 11:49:28 +02:00
}
2013-08-04 23:23:11 +02:00
}
2013-08-05 14:41:48 +02:00
$modified = true ;
2013-08-04 22:54:58 +02:00
}
}
2013-08-05 22:42:10 +02:00
if ( $modified ) {
if ( $partial )
$event -> setDescription ( $filtered_content );
else
$event -> setContent ( $filtered_content );
}
2013-08-04 15:11:29 +02:00
}
2013-08-02 22:18:35 +02:00
}
2013-08-04 15:11:29 +02:00
function adblock_plugin_setting_link ( & $myUser ) {
echo '
< li class = " pointer " onclick = " $ ( \ '#main section \ ').hide(); $ ( \ '#main #adblockSettingsBloc \ ').fadeToggle(200); " > Adblock </ li > ' ;
}
function adblock_plugin_setting_bloc ( & $myUser ) {
2013-12-08 00:44:49 +01:00
$adblock_constants = file_get_contents ( 'adblock_constants.php' );
2013-08-04 15:11:29 +02:00
$adblock_constants = explode ( " \n " , $adblock_constants );
2013-08-04 20:53:49 +02:00
$adblock_params = array ();
2013-08-04 15:11:29 +02:00
foreach ( $adblock_constants as $adblock_constant ) {
if ( trim ( $adblock_constant ) != " " ) {
$adblock_constant = explode ( " = " , $adblock_constant );
$adblock_params [ trim ( $adblock_constant [ 0 ])] = trim ( $adblock_constant [ 1 ]);
}
}
2013-08-04 20:53:49 +02:00
$flash_enabled = ( isset ( $adblock_params [ " flash_enabled " ]) && $adblock_params [ " flash_enabled " ] == " 1 " ) ? true : false ;
$flash_block = ( isset ( $adblock_params [ " flash_block " ]) && $adblock_params [ " flash_block " ] == " 1 " ) ? true : false ;
if ( isset ( $adblock_params [ " flash_list " ]))
2013-08-04 22:54:58 +02:00
$flash_list = str_replace ( " , " , " \n " , trim ( $adblock_params [ " flash_list " ], " \t \n \r \0 \x0B , " ));
2013-08-04 20:53:49 +02:00
else
$flash_list = " " ;
$img_enabled = ( isset ( $adblock_params [ " img_enabled " ]) && $adblock_params [ " img_enabled " ] == " 1 " ) ? true : false ;
$img_only_mobiles = ( isset ( $adblock_params [ " img_only_mobiles " ]) && $adblock_params [ " img_only_mobiles " ] == 1 ) ? true : false ;
$img_block = ( isset ( $adblock_params [ " img_block " ]) && $adblock_params [ " img_block " ] == " 1 " ) ? true : false ;
if ( isset ( $adblock_params [ " img_list " ]))
2013-08-04 22:54:58 +02:00
$img_list = str_replace ( " , " , " \n " , trim ( $adblock_params [ " img_list " ], " \t \n \r \0 \x0B , " ));
2013-08-04 20:53:49 +02:00
else
$img_list = " " ;
2013-08-04 15:11:29 +02:00
2013-08-05 11:49:28 +02:00
$elegant_degradation = ( isset ( $adblock_params [ " elegant_degradation " ]) && $adblock_params [ " elegant_degradation " ] == " 1 " ) ? true : false ;
2013-08-05 13:27:40 +02:00
$getimagesize_available = function_exists ( " getimagesize " ) && (( ini_get ( " allow_url_fopen " ) == " 1 " ) ? true : false );
2013-08-05 11:49:28 +02:00
2013-08-04 15:11:29 +02:00
echo '
< section id = " adblockSettingsBloc " >
< form action = " action.php?action=adblock_update " method = " POST " >
< h2 > Plugin Adblock </ h2 >
2013-08-04 20:53:49 +02:00
< p >< em > Note : </ em >< br />
You must enter a list of id of feeds in the blacklist / whitelist fields . This list must be one id per line . You can find the id of the feed you want in the address bar on the page of the feed in Leed ( http :// LEED_URL / index . php ? action = selectedFeed & feed = ID ) .</ p >
2013-08-04 15:11:29 +02:00
< fieldset >
< div class = " flash_adblockSettingsBlock " >
< h3 > Flash embedded contents :</ h3 >
< p >
Enable / Disable blocking of flash contents in events :< br />
< input type = " radio " name = " flash_adblock_enable " value = " 1 " id = " flash_adblock_block_enabled " '.(($flash_enabled) ? ' checked = " checked " ' : ' ').' />< label for = " flash_adblock_block_enabled " > Enabled </ label >< br />
< input type = " radio " name = " flash_adblock_enable " value = " 0 " id = " flash_adblock_block_disable " '.((!$flash_enabled) ? ' checked = " checked " ' : ' ').' /> < label for = " flash_adblock_block_disable " > Disabled </ label >
</ p >
< p > Default behavior :< br />
< input type = " radio " name = " flash_adblock_default_behavior " value = " 1 " id = " flash_adblock_blockall " onchange = " adblock_whitelist_blacklist( \ 'adblock_flash_whitelist_blacklist \ ', 1); " '.(($flash_block) ? ' checked = " checked " ' : ' ').' />< label for = " flash_adblock_blockall " > Block all contents ( and use a whitelist ) </ label >< br />
< input type = " radio " name = " flash_adblock_default_behavior " value = " 0 " id = " flash_adblock_allowall " onchange = " adblock_whitelist_blacklist( \ 'adblock_flash_whitelist_blacklist \ ', 0); " '.((!$flash_block) ? ' checked = " checked " ' : ' ').' />< label for = " flash_adblock_allowall " > Allow all contents ( and use a blacklist ) </ label >
</ p >
2013-12-08 16:00:23 +01:00
< p >< span id = " adblock_flash_whitelist_blacklist " > '.(($flash_block) ? ' Whitelist : ' : ' Blacklist : ').' </ span ></ br >
2013-08-04 15:11:29 +02:00
< textarea name = " flash_adblock_list " rows = " 7 " > '.$flash_list.' </ textarea >
</ div >
</ fieldset >
< fieldset >
< div class = " img_adblockSettingsBlock " >
< h3 > Images :</ h3 >
< p >
Enable / Disable blocking of images in events :< br />
< input type = " radio " name = " img_adblock_enable " value = " 1 " id = " img_adblock_block_enabled " '.(($img_enabled) ? ' checked = " checked " ' : ' ').' />< label for = " img_adblock_block_enabled " > Enabled </ label >< br />
< input type = " radio " name = " img_adblock_enable " value = " 0 " id = " img_adblock_block_disable " '.((!$img_enabled) ? ' checked = " checked " ' : ' ').' /> < label for = " img_adblock_block_disable " > Disabled </ label >
</ p >
< p > Default behavior :< br />
< input type = " radio " name = " img_adblock_default_behavior " value = " 1 " id = " img_adblock_blockall " onchange = " adblock_whitelist_blacklist( \ 'adblock_img_whitelist_blacklist \ ', 1); " '.(($img_block) ? ' checked = " checked " ' : ' ').' />< label for = " img_adblock_blockall " > Block all contents ( and use a whitelist ) </ label >< br />
< input type = " radio " name = " img_adblock_default_behavior " value = " 0 " id = " img_adblock_allowall " onchange = " adblock_whitelist_blacklist( \ 'adblock_img_whitelist_blacklist \ ', 0); " '.((!$img_block) ? ' checked = " checked " ' : ' ').' />< label for = " img_adblock_allowall " > Allow all contents ( and use a blacklist ) </ label >
</ p >
2013-08-04 20:53:49 +02:00
< p > Block images only on mobile devices ? < br />
< input type = " radio " name = " img_adblock_only_mobiles " value = " 1 " id = " img_adblock_only_mobiles_yes " '.(($img_only_mobiles) ? ' checked = " checked " ' : ' ').' />< label for = " img_adblock_only_mobiles_yes " > Only block images on mobile devices </ label >< br />
< input type = " radio " name = " img_adblock_only_mobiles " value = " 0 " id = " img_adblock_only_mobiles_no " '.((!$img_only_mobiles) ? ' checked = " checked " ' : ' ').' />< label for = " img_adblock_only_mobiles_no " > Block images on all devices </ label >
</ p >
2013-12-08 16:00:23 +01:00
< p >< span id = " adblock_img_whitelist_blacklist " > '.(($img_block) ? ' Whitelist : ' : ' Blacklist : ').' </ span ></ br >
2013-08-04 15:11:29 +02:00
< textarea name = " img_adblock_list " rows = " 7 " > '.$img_list.' </ textarea >
</ div >
</ fieldset >
2013-08-05 11:49:28 +02:00
< p >
Elegant degradation ( replace content with same - size content ) ? < br />
2013-08-05 13:27:40 +02:00
< input type = " radio " name = " adblock_elegant_degradation " value = " 1 " id = " adblock_elegant_degradation_yes " '.(($elegant_degradation) ? ' checked = " checked " ' : ' ').' '.((!$getimagesize_available) ? ' disabled ' : ' ').' />< label for = " adblock_elegant_degradation_yes " > Yes </ label > '.((!$getimagesize_available) ? ' < em > ( Not available because the getimagesize seems to not be available on your system or allow_url_fopen is set to Off in php . ini ) </ em > ' : ' ').' < br />
2013-08-05 11:49:28 +02:00
< input type = " radio " name = " adblock_elegant_degradation " value = " 0 " id = " adblock_elegant_degradation_no " '.((!$elegant_degradation) ? ' checked = " checked " ' : ' ').' />< label for = " adblock_elegant_degradation_no " > No </ label >
</ p >
2013-08-04 15:11:29 +02:00
< p id = " adblock_settings_submit " >
< input type = " submit " class = " button " value = " Save " />
</ p >
</ form >
</ section > ' ;
}
function adblock_plugin_setting_update ( $_ ) {
2013-08-04 20:13:32 +02:00
if ( $_ [ 'action' ] == 'adblock_update' ) {
2013-08-04 21:45:04 +02:00
$flash_enabled = ( int ) $_ [ 'flash_adblock_enable' ];
$flash_block = ( int ) $_ [ 'flash_adblock_default_behavior' ];
2013-08-04 22:54:58 +02:00
$flash_list = str_replace ( " \r \n " , " , " , trim ( $_ [ " flash_adblock_list " ]));
$flash_list = str_replace ( " \n " , " , " , trim ( $flash_list ));
2013-08-04 20:13:32 +02:00
2013-08-04 21:45:04 +02:00
$img_enabled = ( int ) $_ [ 'img_adblock_enable' ];
$img_block = ( int ) $_ [ 'img_adblock_default_behavior' ];
$img_only_mobiles = ( int ) $_ [ " img_adblock_only_mobiles " ];
2013-08-04 22:54:58 +02:00
$img_list = str_replace ( " \r \n " , " , " , trim ( $_ [ " img_adblock_list " ]));
$img_list = str_replace ( " \n " , " , " , trim ( $img_list ));
2013-08-04 20:13:32 +02:00
2013-08-05 11:49:28 +02:00
$elegant_degradation = ( int ) $_ [ " adblock_elegant_degradation " ];
2013-12-08 00:44:49 +01:00
if ( file_put_contents ( " adblock_constants.php " , " flash_enabled = " . $flash_enabled . " \n flash_block = " . $flash_block . " \n flash_list = " . $flash_list . " \n img_enabled = " . $img_enabled . " \n img_block = " . $img_block . " \n img_only_mobiles = " . $img_only_mobiles . " \n img_list = " . $img_list . " \n elegant_degradation = " . $elegant_degradation ))
2013-08-04 20:13:32 +02:00
header ( 'location: settings.php' );
else
2013-12-08 00:44:49 +01:00
exit ( " Unable to write parameters to adblock_constants.php. Check permissions on the folders. " );
2013-08-04 20:13:32 +02:00
}
2013-08-04 15:11:29 +02:00
}
Plugin :: addCSS ( " /css/adblock_plugin_css.css " );
Plugin :: addJS ( " /js/adblock_plugin_js.js " );
2013-08-04 20:13:32 +02:00
Plugin :: addHook ( " index_post_treatment " , " adblock_plugin_treat_events " );
2013-08-04 15:11:29 +02:00
Plugin :: addHook ( " setting_post_link " , " adblock_plugin_setting_link " );
Plugin :: addHook ( " setting_post_section " , " adblock_plugin_setting_bloc " );
Plugin :: addHook ( " action_post_case " , " adblock_plugin_setting_update " );
2013-08-02 22:18:35 +02:00
?>