PluginProbe
PlugVersions – Easily roll back to previous versions of your plugins. / 0.3.0
PlugVersions – Easily roll back to previous versions of your plugins. v0.3.0
0.3.0 0.0.6.RC-1 0.0.7 0.0.8 0.1.0 0.2.0 0.2.1 trunk 0.0.1 0.0.2 0.0.3 0.0.4 0.0.5 0.0.6
← All changes | admin/classes/class-plugversions-restoring-link.php +95 -29 0.0.6.RC-1 → 0.3.0 View file →
@@ -1,8 +1,13 @@
1 1 <?php
2 2 /**
3 3 * Class to add the restoring link.
4 + * This class is responsible for adding a link to restore plugin versions in the plugins list.
5 + * It checks for existing plugin versions, adds action links to restore them,
6 + * and cleans up the plugins list by removing unzipped versions.
4 7 *
8 + * @version 0.0.8
9 + *
5 10 * @package Plugversions
6 11 */
7 12
8 13 defined( 'PLUGIN_REVISIONS_PLUGIN_DIR' ) || exit; // Exit if not accessed from PlugVersions.
@@ -8,8 +13,11 @@
8 13 defined( 'PLUGIN_REVISIONS_PLUGIN_DIR' ) || exit; // Exit if not accessed from PlugVersions.
9 14
10 15 /**
11 16 * Class PlugVersions Restoring Link
17 + * This class is used to add a link for restoring plugin versions.
18 + * It checks for existing plugin versions in the plugins directory,
19 + * adds action links to restore them, and cleans up the plugins list
12 20 *
13 21 *
14 22 * @version 0.0.6
15 23 * @package PlugVersions
@@ -18,56 +26,100 @@
18 26
19 27 /**
20 28 * Key.
21 29 *
22 - * @var string $key
30 + * @var string $this->key
23 31 * @since 0.0.6
24 32 */
25 33 public $key;
26 34
27 35 /**
28 - * Version.
36 + * Plugins.
29 37 *
30 - * @var string $version
31 - * @since 0.0.6
38 + * @var array $plugins
39 + * @since 0.0.8
32 40 */
33 - public $version;
41 + public $plugins;
34 42
35 43 /**
36 - * Zip Name.
44 + * Main Constructor
45 + * This constructor initializes the class, checks for the plugin revision key,
46 + * populates the plugins data, and adds necessary filters for action links and cleaning the plugins list.
37 47 *
38 - * @var string $zip_name
39 48 * @since 0.0.6
40 49 */
41 - public $zip_name;
50 + public function __construct() {
51 + $this->key = eos_plugin_revision_key();
52 + $this->plugins = array();
53 + if( $this->key && current_user_can( 'activate_plugin' ) ) {
54 + $this->plugins = $this->populate_plugins();
55 + if( ! empty( $this->plugins ) ) {
56 + add_filter( 'plugin_action_links' , array( $this, 'add_link' ), 10, 4 );
57 + }
58 + add_filter( 'all_plugins', array( $this, 'clean_plugins_list' ) );
59 + }
60 + }
42 61
43 62 /**
44 - * Plugin Name.
63 + * Populate plugins data
64 + * This function scans the plugins directory for plugin zip files that match the revision key.
65 + * It extracts the plugin name and version from the zip file names and organizes them into an array.
66 + * The array contains plugin names as keys, with their versions and zip file names as values.
45 67 *
46 - * @var string $plugin_name
47 68 * @since 0.0.6
48 69 */
49 - public $plugin_name;
70 + public function populate_plugins() {
71 + $all_plugin_files = scandir( WP_PLUGIN_DIR );
72 + if( $all_plugin_files && is_array( $all_plugin_files ) && ! empty( $all_plugin_files ) ) {
73 + $plugins = array();
74 + foreach( $all_plugin_files as $plugin ) {
75 + if( 'zip' === pathinfo( $plugin, PATHINFO_EXTENSION ) ) {
76 + if( false !== strpos( $plugin, 'pr-' . $this->key .'-' ) && false !== strpos( $plugin, '-ver-' ) ) {
77 + $arr = explode( 'ver-', $plugin );
78 + $arr = explode( '-', $arr[0] );
79 + if( 'pr' === $arr[0] && isset( $arr[1] ) && $this->key === $arr[1] && isset( $arr[2] ) ) {
80 + $version = $arr[2];
81 + $plugin_name = str_replace( array( 'pr-' . $this->key . '-' . $version . '-ver-', '.zip' ), array( '', '' ), $plugin );
82 + if( is_dir( WP_PLUGIN_DIR . '/' . $plugin_name ) ) {
83 + if( ! isset( $plugins[$plugin_name]['versions'] ) ) {
84 + $plugins[$plugin_name]['versions'] = array();
85 + }
86 + if( ! isset( $plugins[$plugin_name]['zips'] ) ) {
87 + $plugins[$plugin_name]['zips'] = array();
88 + }
89 + $plugins[$plugin_name]['versions'][] = $version;
90 + $plugins[$plugin_name]['zips'][] = $plugin;
91 + }
92 + }
93 + }
94 + }
95 + }
96 + return $plugins;
97 + }
98 + }
50 99
51 100 /**
52 - * Class constructor.
101 + * Remove unzipped versions from the plugins list
102 + * This function iterates through the plugins list and removes any plugin that has a name starting with 'pr-' followed by the revision key.
103 + * It ensures that only the original plugins remain in the list, excluding any unzipped versions created by the plugin revisions.
53 104 *
54 - * @param string $key
55 - * @param string $version
56 - * @param string $zip_name
57 - * @param string $plugin_name
58 - * @param 0.0.6
59 - */
60 - public function __construct( $key, $version, $zip_name, $plugin_name ) {
61 - $this->key = $key;
62 - $this->version = $version;
63 - $this->zip_name = $zip_name;
64 - $this->plugin_name = $plugin_name;
65 - add_filter( 'plugin_action_links' , array( $this, 'add_link' ), 10, 4 );
66 - }
105 + * @param array $plugins
106 + * @param 0.0.8
107 + */
108 + public function clean_plugins_list( $plugins ) {
109 + foreach( $plugins as $plugin => $arr ) {
110 + if( false !== strpos( '_' . $plugin, 'pr-' . $this->key ) ) {
111 + unset( $plugins[$plugin] );
112 + }
113 + }
114 + return $plugins;
115 + }
67 116
68 117 /**
69 118 * Add action link to restore plugin version.
119 + * This function adds a link to the plugin action links in the plugins list.
120 + * It checks if the plugin has any versions available for restoration,
121 + * and if so, it adds a link to restore each version.
70 122 *
71 123 * @param array $actions
72 124 * @param string $plugin_file
73 125 * @param array $plugin_data
@@ -74,11 +126,25 @@
74 126 * @param string $context
75 127 * @param 0.0.6
76 128 */
77 129 public function add_link( $actions, $plugin_file, $plugin_data, $context ) {
78 - if( $this->plugin_name !== dirname( $plugin_file ) || ! current_user_can( 'activate_plugin' ) ) return $actions;
79 - $links = isset( $actions['versions'] ) ? $actions['versions'] : '';
80 - $links .= '<a class="plugin-revision-action" href="#" data-parent_plugin="'.esc_attr( $plugin_file ).'" data-dir="'.esc_attr( $this->zip_name ).'">'.sprintf( esc_html__( 'Replace with version: %s','plugversions' ), esc_attr( $this->version ) ).'</a> ';
81 - $actions['versions'] = '<span class="plugin-revision-wrp"><a href="#">' . esc_html__( 'Revisions','plugin-revisioons' ) . '</a><span class="plugin-revisions-vers">' . rtrim( $links, ' ' ) . '</span></span>';
130 + if( isset( $this->plugins[dirname( $plugin_file )] ) ) {
131 + $plugin_vers = $this->plugins[dirname( $plugin_file )];
132 + if( $plugin_vers && ! empty( $plugin_vers ) ) {
133 + $links = '';
134 + $n = 0;
135 + foreach( $plugin_vers['versions'] as $version ) {
136 + if( isset( $plugin_vers['zips'][$n] ) ) {
137 + $zip_name = $plugin_vers['zips'][$n];
138 + /* translators: version of the plugin. */
139 + $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> ';
140 + }
141 + ++$n;
142 + }
143 + /* translators: the plugin revisions. */
144 + $actions['versions'] = '<span class="plugin-revision-wrp"><a href="#">' . esc_html__( 'Revisions','plugversions' ) . '</a><span class="plugin-revisions-vers">' . rtrim( $links, ' ' ) . '</span></span>';
145 +
146 + }
147 + }
82 148 return $actions;
83 149 }
84 150 }