Просмотр исходного кода

Implement extension deletion

See https://github.com/FreshRSS/FreshRSS/issues/252
Marien Fressinaud 11 лет назад
Родитель
Сommit
76358846ab
2 измененных файлов с 47 добавлено и 1 удалено
  1. 21 1
      app/Controllers/extensionController.php
  2. 26 0
      lib/lib_rss.php

+ 21 - 1
app/Controllers/extensionController.php

@@ -172,6 +172,26 @@ class FreshRSS_extension_Controller extends Minz_ActionController {
 		}
 		}
 
 
 		$url_redirect = array('c' => 'extension', 'a' => 'index');
 		$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);
 	}
 	}
 }
 }

+ 26 - 0
lib/lib_rss.php

@@ -319,3 +319,29 @@ function check_install_database() {
 
 
 	return $status;
 	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);
+}