diff --git a/src/main/scala/app/SystemSettingsController.scala b/src/main/scala/app/SystemSettingsController.scala index 9199a72..e6d0aca 100644 --- a/src/main/scala/app/SystemSettingsController.scala +++ b/src/main/scala/app/SystemSettingsController.scala @@ -72,6 +72,10 @@ redirect("/admin/system") }) + get("/admin/plugins")(adminOnly { + admin.html.plugins(plugin.PluginSystem.plugins) + }) + get("/admin/script")(adminOnly { admin.html.script() }) diff --git a/src/main/scala/plugin/PluginSystem.scala b/src/main/scala/plugin/PluginSystem.scala index 52f5d0c..993dacb 100644 --- a/src/main/scala/plugin/PluginSystem.scala +++ b/src/main/scala/plugin/PluginSystem.scala @@ -14,20 +14,22 @@ private val logger = LoggerFactory.getLogger(PluginSystem.getClass) - private val plugins = scala.collection.mutable.Map[String, Plugin]() + private val pluginsMap = scala.collection.mutable.Map[String, Plugin]() - def install(id: String, plugin: Plugin): Unit = { - plugins.put(id, plugin) + def install(plugin: Plugin): Unit = { + pluginsMap.put(plugin.id, plugin) } + def plugins: List[Plugin] = pluginsMap.values.toList + def uninstall(id: String): Unit = { - plugins.remove(id) + pluginsMap.remove(id) } - def repositoryMenus : List[RepositoryMenu] = plugins.values.flatMap(_.repositoryMenuList).toList - def globalMenus : List[GlobalMenu] = plugins.values.flatMap(_.globalMenuList).toList - def repositoryActions : List[Action] = plugins.values.flatMap(_.repositoryActionList).toList - def globalActions : List[Action] = plugins.values.flatMap(_.globalActionList).toList + def repositoryMenus : List[RepositoryMenu] = pluginsMap.values.flatMap(_.repositoryMenuList).toList + def globalMenus : List[GlobalMenu] = pluginsMap.values.flatMap(_.globalMenuList).toList + def repositoryActions : List[Action] = pluginsMap.values.flatMap(_.repositoryActionList).toList + def globalActions : List[Action] = pluginsMap.values.flatMap(_.globalActionList).toList // Case classes to hold plug-ins information internally in GitBucket case class GlobalMenu(label: String, url: String, icon: String, condition: Context => Boolean) @@ -37,7 +39,7 @@ /** * This is a plug-in definition class. */ - class Plugin { + class Plugin(val id: String, val author: String, val url: String, val description: String) { private[PluginSystem] val repositoryMenuList = ListBuffer[RepositoryMenu]() private[PluginSystem] val globalMenuList = ListBuffer[GlobalMenu]() diff --git a/src/main/twirl/admin/menu.scala.html b/src/main/twirl/admin/menu.scala.html index 6e6a6af..adb2de1 100644 --- a/src/main/twirl/admin/menu.scala.html +++ b/src/main/twirl/admin/menu.scala.html @@ -11,8 +11,11 @@
ID | +Provider | +Description | +
---|---|---|
@plugin.id | +@plugin.author | +@plugin.description | +