| 1 |
<?php |
| 2 |
/** |
| 3 |
* Class to add the restoring link. |
| 4 |
* |
| 5 |
* @package Plugversions |
| 6 |
*/ |
| 7 |
|
| 8 |
defined( 'PLUGIN_REVISIONS_PLUGIN_DIR' ) || exit; // Exit if not accessed from PlugVersions. |
| 9 |
|
| 10 |
/** |
| 11 |
* Class PlugVersions Restoring Link |
| 12 |
* |
| 13 |
* |
| 14 |
* @version 0.0.6 |
| 15 |
* @package PlugVersions |
| 16 |
*/ |
| 17 |
class PlugVersions_Restoring_Link { |
| 18 |
|
| 19 |
/** |
| 20 |
* Key. |
| 21 |
* |
| 22 |
* @var string $this->key |
| 23 |
* @since 0.0.6 |
| 24 |
*/ |
| 25 |
public $key; |
| 26 |
|
| 27 |
/** |
| 28 |
* Plugins. |
| 29 |
* |
| 30 |
* @var array $plugins |
| 31 |
* @since 0.0.8 |
| 32 |
*/ |
| 33 |
public $plugins; |
| 34 |
|
| 35 |
/** |
| 36 |
* Main Constructor |
| 37 |
* |
| 38 |
* @since 0.0.6 |
| 39 |
*/ |
| 40 |
public function __construct() { |
| 41 |
$this->key = eos_plugin_revision_key(); |
| 42 |
$this->plugins = array(); |
| 43 |
if( $this->key && current_user_can( 'activate_plugin' ) ) { |
| 44 |
$this->plugins = $this->populate_plugins(); |
| 45 |
if( ! empty( $this->plugins ) ) { |
| 46 |
add_filter( 'plugin_action_links' , array( $this, 'add_link' ), 10, 4 ); |
| 47 |
} |
| 48 |
add_filter( 'all_plugins', array( $this, 'clean_plugins_list' ) ); |
| 49 |
} |
| 50 |
} |
| 51 |
|
| 52 |
/** |
| 53 |
* Populate plugins data |
| 54 |
* |
| 55 |
* @since 0.0.6 |
| 56 |
*/ |
| 57 |
public function populate_plugins() { |
| 58 |
$all_plugin_files = scandir( WP_PLUGIN_DIR ); |
| 59 |
if( $all_plugin_files && is_array( $all_plugin_files ) && ! empty( $all_plugin_files ) ) { |
| 60 |
$plugins = array(); |
| 61 |
foreach( $all_plugin_files as $plugin ) { |
| 62 |
if( 'zip' === pathinfo( $plugin, PATHINFO_EXTENSION ) ) { |
| 63 |
if( false !== strpos( $plugin, 'pr-' . $this->key .'-' ) && false !== strpos( $plugin, '-ver-' ) ) { |
| 64 |
$arr = explode( 'ver-', $plugin ); |
| 65 |
$arr = explode( '-', $arr[0] ); |
| 66 |
if( 'pr' === $arr[0] && isset( $arr[1] ) && $this->key === $arr[1] && isset( $arr[2] ) ) { |
| 67 |
$version = $arr[2]; |
| 68 |
$plugin_name = str_replace( array( 'pr-' . $this->key . '-' . $version . '-ver-', '.zip' ), array( '', '' ), $plugin ); |
| 69 |
if( is_dir( WP_PLUGIN_DIR . '/' . $plugin_name ) ) { |
| 70 |
if( ! isset( $plugins[$plugin_name]['versions'] ) ) { |
| 71 |
$plugins[$plugin_name]['versions'] = array(); |
| 72 |
} |
| 73 |
if( ! isset( $plugins[$plugin_name]['zips'] ) ) { |
| 74 |
$plugins[$plugin_name]['zips'] = array(); |
| 75 |
} |
| 76 |
$plugins[$plugin_name]['versions'][] = $version; |
| 77 |
$plugins[$plugin_name]['zips'][] = $plugin; |
| 78 |
} |
| 79 |
} |
| 80 |
} |
| 81 |
} |
| 82 |
} |
| 83 |
return $plugins; |
| 84 |
} |
| 85 |
} |
| 86 |
|
| 87 |
/** |
| 88 |
* Remove unzipped versions from the plugins list |
| 89 |
* |
| 90 |
* @param array $plugins |
| 91 |
* @param 0.0.8 |
| 92 |
*/ |
| 93 |
public function clean_plugins_list( $plugins ) { |
| 94 |
foreach( $plugins as $plugin => $arr ) { |
| 95 |
if( false !== strpos( '_' . $plugin, 'pr-' . $this->key ) ) { |
| 96 |
unset( $plugins[$plugin] ); |
| 97 |
} |
| 98 |
} |
| 99 |
return $plugins; |
| 100 |
} |
| 101 |
|
| 102 |
/** |
| 103 |
* Add action link to restore plugin version. |
| 104 |
* |
| 105 |
* @param array $actions |
| 106 |
* @param string $plugin_file |
| 107 |
* @param array $plugin_data |
| 108 |
* @param string $context |
| 109 |
* @param 0.0.6 |
| 110 |
*/ |
| 111 |
public function add_link( $actions, $plugin_file, $plugin_data, $context ) { |
| 112 |
if( isset( $this->plugins[dirname( $plugin_file )] ) ) { |
| 113 |
$plugin_vers = $this->plugins[dirname( $plugin_file )]; |
| 114 |
if( $plugin_vers && ! empty( $plugin_vers ) ) { |
| 115 |
$links = ''; |
| 116 |
$n = 0; |
| 117 |
foreach( $plugin_vers['versions'] as $version ) { |
| 118 |
if( isset( $plugin_vers['zips'][$n] ) ) { |
| 119 |
$zip_name = $plugin_vers['zips'][$n]; |
| 120 |
/* translators: version of the plugin. */ |
| 121 |
$links .= '<a class="plugin-revision-action" href="#" data-parent_plugin="'.esc_attr( $plugin_file ).'" data-dir="'.esc_attr( $zip_name ).'">'.sprintf( esc_html__( 'Replace with version: %s','plugversions' ), esc_attr( $version ) ).'</a> '; |
| 122 |
} |
| 123 |
++$n; |
| 124 |
} |
| 125 |
/* translators: the plugin revisions. */ |
| 126 |
$actions['versions'] = '<span class="plugin-revision-wrp"><a href="#">' . esc_html__( 'Revisions','plugversions' ) . '</a><span class="plugin-revisions-vers">' . rtrim( $links, ' ' ) . '</span></span>'; |
| 127 |
|
| 128 |
} |
| 129 |
} |
| 130 |
return $actions; |
| 131 |
} |
| 132 |
} |