PluginProbe
PlugVersions – Easily roll back to previous versions of your plugins. / 0.0.8
PlugVersions – Easily roll back to previous versions of your plugins. v0.0.8
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
plugversions / admin / classes / class-plugversions-restoring-link.php

class-plugversions-restoring-link.php in PlugVersions – Easily roll back to previous versions of your plugins. 0.0.8, at admin/classes/class-plugversions-restoring-link.php

132 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }