Add enable / disable extension features

See https://github.com/FreshRSS/FreshRSS/issues/252
This commit is contained in:
Marien Fressinaud
2014-12-06 16:17:11 +01:00
parent a08c382e06
commit 2e4682ebd4
3 changed files with 97 additions and 5 deletions

View File

@@ -29,12 +29,80 @@ class FreshRSS_extension_Controller extends Minz_ActionController {
}
}
/**
* 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('feedback.extension.not_found', $url_redirect);
}
if ($ext->is_enabled()) {
Minz_Request::bad('feedback.extension.already_enabled', $url_redirect);
}
if ($ext->getType() === 'system' && !FreshRSS_Auth::hasAccess('admin')) {
Minz_Request::bad('feedback.extension.no_access', $url_redirect);
}
$ext->install();
FreshRSS_Context::$conf->addExtension($ext_name);
FreshRSS_Context::$conf->save();
Minz_Request::good('feedback.extension.enabled', $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('feedback.extension.not_found', $url_redirect);
}
if (!$ext->is_enabled()) {
Minz_Request::bad('feedback.extension.not_enabled', $url_redirect);
}
if ($ext->getType() === 'system' && !FreshRSS_Auth::hasAccess('admin')) {
Minz_Request::bad('feedback.extension.no_access', $url_redirect);
}
$ext->uninstall();
FreshRSS_Context::$conf->removeExtension($ext_name);
FreshRSS_Context::$conf->save();
Minz_Request::good('feedback.extension.disabled', $url_redirect);
}
Minz_Request::forward($url_redirect, true);
}
public function removeAction() {