PluginProbe
Premmerce / 1.0
Premmerce v1.0
trunk 1.0 1.1 1.2 1.2.1 1.3 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.19 1.3.2 1.3.20 1.3.21 1.3.22 1.3.23 1.3.3 1.3.4 1.3.5 1.3.6 All 28 releases
premmerce / src / Api / PluginApi.php

PluginApi.php in Premmerce 1.0, at src/Api/PluginApi.php

254 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php namespace Premmerce\Premmerce\Api;
2
3 use Automatic_Upgrader_Skin;
4 use Plugin_Upgrader;
5 use Premmerce\Premmerce\Data\Plugins;
6 use Premmerce\Premmerce\WordpressSDK\FileManager\FileManager;
7
8 class PluginApi{
9
10 /**
11 * @var array
12 */
13 private $plugins = [];
14
15 /**
16 * @var FileManager
17 */
18 private $fileManager;
19
20 public function __construct(FileManager $fileManager){
21 $this->fileManager = $fileManager;
22 $this->init();
23 }
24
25 /**
26 * @param $slug
27 *
28 * @return array|object|\WP_Error
29 */
30 public function getInfoPlugin($slug){
31
32 if(!function_exists('plugins_api')){
33 include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
34 }
35
36 return plugins_api('plugin_information', ['slug' => $slug]);
37 }
38
39 /**
40 * @return array
41 */
42 public function getExtra(){
43 $plugins = Plugins::getAll();
44 foreach($plugins as $slug => &$plugin){
45 if(isset($plugin['link'])){
46 $install = [
47 "handler" => "premmerce.plugins",
48 "action" => "premmerce_actions",
49 "value" => $slug,
50 "option" => "install",
51 ];
52 }else{
53 $install = [
54 "handler" => "wp.updates",
55 'action' => 'install-plugin',
56 'slug' => $slug,
57 ];
58 }
59
60 $plugin['install_action'] = $install;
61 $plugin['activate_action'] = [
62 "handler" => "premmerce.plugins",
63 "action" => "premmerce_actions",
64 "value" => $slug,
65 "option" => "activate",
66 ];
67 };
68
69 return $plugins;
70 }
71
72
73 /**
74 * @return array
75 */
76 public function getInstalledPlugins(){
77 return $this->plugins;
78 }
79
80 /**
81 * @param $slug
82 *
83 * @return mixed
84 */
85 public function getInstalledPlugin($slug){
86 return $this->plugins[ $slug ];
87 }
88
89 /**
90 * @param string $slug
91 *
92 * @return bool
93 */
94 public function isInstalledPlugin($slug){
95 return array_key_exists($slug, $this->plugins);
96 }
97
98 /**
99 * @param string $slug
100 *
101 * @return bool
102 */
103 public function isActivePlugin($slug){
104 if($this->isInstalledPlugin($slug)){
105
106 $name = $this->plugins[ $slug ]['plugin'];
107
108 return is_plugin_active($name);
109 }
110 }
111
112 /**
113 * @param string $slug
114 *
115 * @return null|bool|\WP_Error
116 */
117 public function activatePlugin($slug){
118 if(!$this->isActivePlugin($slug)){
119 $name = $this->plugins[ $slug ]['plugin'];
120 $result = activate_plugin($name);
121 if(is_null($result)){
122 return true;
123 }else{
124 return $result;
125 }
126 }
127 }
128
129 /**
130 * @param string $slug
131 */
132 public function deactivatePlugin($slug){
133 if($this->isActivePlugin($slug)){
134 $name = $this->plugins[ $slug ]['plugin'];
135
136 return deactivate_plugins($name);
137 }
138 }
139
140 /**
141 * Reload plugins
142 */
143 public function reloadPlugins(){
144 wp_clean_plugins_cache();
145 $this->init();
146 }
147
148
149 /**
150 * Load plugins
151 */
152 private function init(){
153
154 $plugins = get_plugins();
155
156 foreach($plugins as $name => $plugin){
157 $parts = explode('/', $name);
158 $slug = array_shift($parts);
159 $this->plugins[ $slug ] = $plugin;
160 $this->plugins[ $slug ]['plugin'] = $name;
161 }
162
163
164 }
165
166 /**
167 * @param $slug
168 *
169 * @return bool
170 */
171 public function activateTheme($slug){
172 switch_theme($slug);
173 return true;
174 }
175
176
177 /**
178 * @param $slug
179 *
180 * @return bool
181 */
182 public function isActiveTheme($slug){
183 return wp_get_theme()->get_template() == $slug;
184 }
185
186
187 /**
188 * @param $slug
189 *
190 * @return bool
191 */
192 public function isInstalledTheme($slug){
193 $themes = $this->getThemes();
194
195 return array_key_exists($slug, $themes);
196 }
197
198 /**
199 * @return array
200 */
201 public function getThemes(){
202 return wp_get_themes();
203 }
204
205
206 /**
207 * @param string $slug
208 *
209 * @return bool|\WP_Error
210 */
211 public function upgrade($slug){
212 return $this->getPluginUpgrader()->upgrade($slug);
213 }
214
215
216 /**
217 * @param string $slug
218 *
219 * @return bool|\WP_Error
220 */
221 public function installPlugin($slug){
222 if(!$this->isInstalledPlugin($slug)){
223 if($path = Plugins::getPath($slug)){
224 $link = $this->fileManager->getPluginDirectory() . $path;
225 }else{
226 $result = $this->getInfoPlugin($slug);
227 $link = $result->download_link;
228 }
229
230 $result = $this->getPluginUpgrader()->install($link);
231
232 $this->reloadPlugins();
233
234 return $result;
235 }
236 }
237
238 /**
239 * @return Plugin_Upgrader
240 */
241 private function getPluginUpgrader(){
242 $includes = ABSPATH . 'wp-admin/includes/';
243 if(!class_exists('WP_Upgrader')){
244 include_once $includes . 'class-wp-upgrader.php';
245 }
246 if(!class_exists('Plugin_Upgrader')){
247 include_once $includes . 'class-plugin-upgrader.php';
248 }
249
250 return new Plugin_Upgrader(new Automatic_Upgrader_Skin());
251
252 }
253
254 }