time() ) );
}
} );
add_filter( 'upgrader_package_options',function( $options){
if( isset( $options['destination'] ) && isset( $options['hook_extra'] ) ){
$hook_extra = $options['hook_extra'];
if( isset( $hook_extra['plugin'] ) ){
$plugin = $hook_extra['plugin'];
$plugin_name = dirname( $plugin );
$path = sanitize_option( 'upload_path',$options['destination'].'/'.$plugin );
if( file_exists( $path ) ){
$plugin_data = get_plugin_data( $path );
$version = $plugin_data['Version'];
if( !class_exists( 'WP_Upgrader' ) ){
if( file_exists( ABSPATH.'wp-admin/includes/class-wp-upgrader.php' ) ){
require_once ABSPATH.'/wp-admin/includes/class-wp-upgrader.php';
}
}
if( class_exists( 'WP_Upgrader' ) ){
$upgrader = new WP_Upgrader();
$key = eos_plugin_revision_key();
if( $key ){
$destination = str_replace( dirname( $plugin ),'pr-'.$key.'-'.sanitize_option( 'upload_path',$version ).'-ver-'.dirname( $plugin ),sanitize_option( 'upload_path',plugin_dir_path( $path )) );
if( !is_dir( $destination ) ){
global $wp_filesystem;
if( empty( $wp_filesystem ) ){
require_once ( ABSPATH .'/wp-admin/includes/file.php' );
WP_Filesystem();
}
$wp_filesystem->mkdir( $destination );
}
if( !empty( $wp_filesystem ) && $wp_filesystem->is_dir( $destination ) ){
$result = copy_dir( plugin_dir_path( $path ),$destination );
eos_plugin_revisions_remove_versions( apply_filters( 'max_plugin_revisions',4 ),$plugin_name );
}
}
}
}
}
}
return $options;
},10,4 );
add_filter( 'all_plugins',function( $plugins ){
//Remove plugin revisions from plugins table in the page wp-admin/plugins.php
$key = eos_plugin_revision_key();
if( $key ){
foreach( $plugins as $plugin => $arr ){
if( false !== strpos( $plugin,'pr-'.$key.'-' ) ){
unset( $plugins[$plugin] );
$parent_plugin = str_replace( 'pr-'.$key.'-','',$plugin );
$parent_pluginArr = explode( '-ver-',$parent_plugin );
$parent_plugin = isset( $parent_pluginArr[1] ) ? $parent_pluginArr[1] : $parent_plugin;
add_filter( 'plugin_action_links_'.$parent_plugin,function( $actions, $plugin_file, $plugin_data, $context ){
if( !current_user_can( 'activate_plugin' ) ) return $actions;
$key = eos_plugin_revision_key();
$all_dirs = scandir( dirname( PLUGIN_REVISIONS_PLUGIN_DIR ) );
if( $all_dirs && !empty( $all_dirs ) ){
$new_action_links = '';
$plugin = dirname( $plugin_file );
foreach( $all_dirs as $dir ){
if( false !== strpos( $dir,'pr-'.$key.'-' ) && substr( $dir,-strlen( $plugin ),strlen( $plugin ) ) === $plugin ){
$ver = str_replace( 'pr-'.$key.'-','',$dir );
$verArr = explode( '-ver-',$ver );
$ver = $verArr[0];
$new_action_links .= ''.sprintf( esc_html__( 'Replace with version: %s','plugversions' ),$ver ).' ';
}
}
if( '' !== $new_action_links ){
$actions['versions'] = ''.esc_html__( 'Revisions','plugin-revisioons' ).''.rtrim( $new_action_links,' ' ).'';
}
}
return $actions;
},10,4 );
}
}
}
return $plugins;
} );
add_action( 'admin_head',function(){
global $pagenow;
if( $pagenow && 'plugins.php' === sanitize_text_field( $pagenow ) ){
?>
delete( dirname( PLUGIN_REVISIONS_PLUGIN_DIR ).'/'.$dir,true );
}
}
++$n;
}
}
}
function eos_plugin_revisions_scandir( $dir ) {
$ignored = array('.', '..', '.svn', '.htaccess');
$files = array();
foreach( scandir( $dir ) as $file ){
if( in_array( $file,$ignored ) ) continue;
$files[$file] = filemtime( $dir.'/'.$file );
}
asort( $files );
$files = array_keys( $files );
return ( $files ) ? $files : false;
}
add_filter( 'site_transient_update_plugins',function( $obj ){
if( isset( $obj ) && is_object( $obj ) && isset( $obj->response ) ){
$response = $obj->response;
$key = eos_plugin_revision_key();
foreach( $response as $p => $arr ){
if( false !== strpos( $p,'pr-'.$key.'-' ) && isset( $response[$p] ) ){
unset( $response[$p] );
}
}
$obj->response = $response;
}
return $obj;
} );