generated from aljawaid/KanboardSkeletonPlugin
-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPluginManagerController.php
138 lines (118 loc) · 4.54 KB
/
PluginManagerController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
namespace Kanboard\Plugin\PluginManager\Controller;
use Kanboard\Controller\BaseController;
use Kanboard\Core\Plugin\Directory;
use Kanboard\Core\Plugin\Installer;
use Kanboard\Core\Plugin\PluginInstallerException;
use ZipArchive;
/**
* Class PluginManager
*
* @author aljawaid
*
*/
class PluginManagerController extends \Kanboard\Controller\PluginController
{
/**
* Display the Plugin Problems Page
*
* @access public
*/
public function show()
{
$this->response->html($this->helper->layout->plugin('pluginManager:info/plugin-problems', array(
'title' => t('Plugins').' ⥂ '.t('Plugin Problems'),
)));
}
/**
* Install a plugin.
*/
public function installPlugin()
{
if (strlen($archiveURL = urldecode($this->request->getValue('plugin_url'))) > 0) {
$this->installByURL($archiveURL);
}
if (strlen($archiveFile = $this->request->getFilePath('plugin_file')) > 0) {
$this->installByFile($archiveFile);
}
//$this->response->redirect($this->helper->url->to('PluginController', 'show'));
}
/**
* Install a plugin from URL.
*
* @param string $archiveUrl
*/
private function installByURL(string $archiveUrl)
{
try {
$installer = new Installer($this->container);
$installer->install($archiveUrl);
$this->response->redirect($this->helper->url->to('PluginController', 'show'));
$this->flash->success(t('Plugin installed successfully'));
} catch (PluginInstallerException $e) {
$this->flash->failure($e->getMessage());
}
}
/**
* Install a plugin from file.
*
* @param string $archiveFile
*/
private function installByFile(string $archiveFile)
{
if (file_exists($archiveFile)) {
$zip = new ZipArchive();
try {
if ($zip->open($archiveFile) !== true) {
$this->response->redirect($this->helper->url->to('PluginManagerController', 'showManualPlugins', array('plugin' => 'PluginManager')));
throw new PluginInstallerException(t('Unable to open plugin archive'));
}
if ($zip->numFiles === 0) {
$this->response->redirect($this->helper->url->to('PluginManagerController', 'showManualPlugins', array('plugin' => 'PluginManager')));
throw new PluginInstallerException(t('There is no file in the plugin archive'));
}
if ($zip->locateName('Plugin.php', ZipArchive::FL_NODIR) === false) {
$this->response->redirect($this->helper->url->to('PluginManagerController', 'showManualPlugins', array('plugin' => 'PluginManager')));
throw new PluginInstallerException(t('This file is not recognised as a plugin'));
}
if (!$zip->extractTo(PLUGINS_DIR)) {
$zip->close();
$this->response->redirect($this->helper->url->to('PluginManagerController', 'showManualPlugins', array('plugin' => 'PluginManager')));
throw new PluginInstallerException(t('Unable to extract plugin archive'));
}
$zip->close();
$this->response->redirect($this->helper->url->to('PluginController', 'show'));
$this->flash->success(t('Plugin installed successfully'));
} catch (PluginInstallerException $e) {
$this->flash->failure($e->getMessage());
}
unlink($archiveFile);
} else {
$this->response->redirect($this->helper->url->to('PluginManagerController', 'showManualPlugins', array('plugin' => 'PluginManager')));
$this->flash->failure(t('Plugin archive file not found'));
}
}
/**
* Display the Plugin Info Page
*
* @access public
*/
public function showPluginInfo()
{
$this->response->html($this->helper->layout->plugin('pluginManager:info/plugin-info', array(
'title' => t('Plugins').' ⥂ '.t('Plugin Info'),
'available_plugins' => Directory::getInstance($this->container)->getAvailablePlugins()
)));
}
/**
* Display the Manual Plugins Page
*
* @access public
*/
public function showManualPlugins()
{
$this->response->html($this->helper->layout->plugin('pluginManager:plugin/manual-plugins', array(
'title' => t('Manual Plugins'),
)));
}
}