Implement extension deletion

See https://github.com/FreshRSS/FreshRSS/issues/252
This commit is contained in:
Marien Fressinaud
2014-12-08 13:36:08 +01:00
parent 0543f96a97
commit 76358846ab
2 changed files with 47 additions and 1 deletions

View File

@@ -172,6 +172,26 @@ class FreshRSS_extension_Controller extends Minz_ActionController {
}
$url_redirect = array('c' => 'extension', 'a' => 'index');
Minz_Request::bad('not implemented yet!', $url_redirect);
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);
}
$res = recursive_unlink($ext->getPath());
if ($res) {
Minz_Request::good(_t('feedback.extensions.removed', $ext_name),
$url_redirect);
} else {
Minz_Request::bad(_t('feedback.extensions.cannot_delete', $ext_name),
$url_redirect);
}
}
Minz_Request::forward($url_redirect, true);
}
}

View File

@@ -319,3 +319,29 @@ function check_install_database() {
return $status;
}
/**
* Remove a directory recursively.
*
* From http://php.net/rmdir#110489
*
* @param $dir the directory to remove
*/
function recursive_unlink($dir) {
if (!is_dir($dir)) {
return true;
}
$files = array_diff(scandir($dir), array('.', '..'));
foreach ($files as $filename) {
$filename = $dir . '/' . $filename;
if (is_dir($filename)) {
@chmod($filename, 0777);
recursive_unlink($filename);
} else {
unlink($filename);
}
}
return rmdir($dir);
}