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
|
<?php
/**
* The controller to manage extensions.
*/
class FreshRSS_extension_Controller extends Minz_ActionController {
/**
* This action is called before every other action in that class. It is
* the common boiler plate for every action. It is triggered by the
* underlying framework.
*/
public function firstAction() {
if (!FreshRSS_Auth::hasAccess()) {
Minz_Error::error(403);
}
}
/**
* This action lists all the extensions available to the current user.
*/
public function indexAction() {
Minz_View::prependTitle(_t('admin.extensions.title') . ' · ');
$this->view->extension_list = Minz_ExtensionManager::list_extensions();
}
public function configureAction() {
if (Minz_Request::param('ajax')) {
$this->view->_useLayout(false);
}
}
/**
* This action enables a disabled extension for the current user.
*
* System extensions can only be enabled by an administrator.
*
* Parameter is:
* - e: the extension name (urlencoded).
*/
public function enableAction() {
$url_redirect = array('c' => 'extension', 'a' => 'index');
if (Minz_Request::isPost()) {
$ext_name = urldecode(Minz_Request::param('e'));
$ext = Minz_ExtensionManager::find_extension($ext_name);
if (is_null($ext)) {
Minz_Request::bad(_t('feedback.extensions.not_found', $ext_name),
$url_redirect);
}
if ($ext->is_enabled()) {
Minz_Request::bad(_t('feedback.extensions.already_enabled', $ext_name),
$url_redirect);
}
if ($ext->getType() === 'system' && FreshRSS_Auth::hasAccess('admin')) {
$ext->install();
Minz_Configuration::addExtension($ext_name);
Minz_Configuration::writeFile();
Minz_Request::good(_t('feedback.extensions.enabled', $ext_name),
$url_redirect);
} elseif ($ext->getType() === 'user') {
$ext->install();
FreshRSS_Context::$conf->addExtension($ext_name);
FreshRSS_Context::$conf->save();
Minz_Request::good(_t('feedback.extensions.enabled', $ext_name),
$url_redirect);
} else {
Minz_Request::bad(_t('feedback.extensions.no_access', $ext_name),
$url_redirect);
}
}
Minz_Request::forward($url_redirect, true);
}
/**
* This action disables an enabled extension for the current user.
*
* System extensions can only be disabled by an administrator.
*
* Parameter is:
* - e: the extension name (urlencoded).
*/
public function disableAction() {
$url_redirect = array('c' => 'extension', 'a' => 'index');
if (Minz_Request::isPost()) {
$ext_name = urldecode(Minz_Request::param('e'));
$ext = Minz_ExtensionManager::find_extension($ext_name);
if (is_null($ext)) {
Minz_Request::bad(_t('feedback.extensions.not_found', $ext_name),
$url_redirect);
}
if (!$ext->is_enabled()) {
Minz_Request::bad(_t('feedback.extensions.not_enabled', $ext_name),
$url_redirect);
}
if ($ext->getType() === 'system' && FreshRSS_Auth::hasAccess('admin')) {
$ext->uninstall();
Minz_Configuration::removeExtension($ext_name);
Minz_Configuration::writeFile();
Minz_Request::good(_t('feedback.extensions.disabled', $ext_name),
$url_redirect);
} elseif ($ext->getType() === 'user') {
$ext->uninstall();
FreshRSS_Context::$conf->removeExtension($ext_name);
FreshRSS_Context::$conf->save();
Minz_Request::good(_t('feedback.extensions.disabled', $ext_name),
$url_redirect);
} else {
Minz_Request::bad(_t('feedback.extensions.no_access', $ext_name),
$url_redirect);
}
}
Minz_Request::forward($url_redirect, true);
}
public function removeAction() {
}
}
|