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 @@ System Settings + + Plugins + - JavaScript Console + JavaScript Console
  • H2 Console diff --git a/src/main/twirl/admin/plugins.scala.html b/src/main/twirl/admin/plugins.scala.html new file mode 100644 index 0000000..78ab4f3 --- /dev/null +++ b/src/main/twirl/admin/plugins.scala.html @@ -0,0 +1,21 @@ +@(plugins: List[plugin.PluginSystem.Plugin])(implicit context: app.Context) +@import context._ +@import view.helpers._ +@html.main("Plugins"){ + @menu("plugins"){ + + + + + + + @plugins.map { plugin => + + + + + + } +
    IDProviderDescription
    @plugin.id@plugin.author@plugin.description
    + } +} diff --git a/src/main/twirl/admin/script.scala.html b/src/main/twirl/admin/script.scala.html index 9707c1d..e3997b8 100644 --- a/src/main/twirl/admin/script.scala.html +++ b/src/main/twirl/admin/script.scala.html @@ -7,7 +7,7 @@
    JavaScript Console
    -
    +