← All changes
|
admin/classes/class-plugversions-restoring-link.php
+95
-29
0.0.7
→
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 | } |