diff --git a/contrib/media/cascade.css b/contrib/media/cascade.css index 8fc11994e6..d09ab7477c 100644 --- a/contrib/media/cascade.css +++ b/contrib/media/cascade.css @@ -165,6 +165,13 @@ h3 { display: inline; } +.code { + background: #f7f7f7; + border: 1px solid #d7d7d7; + margin: 1em 1.75em; + padding: 1em; +} + code { display: block; background: #f7f7f7; @@ -241,4 +248,9 @@ code { .error { color: red; font-weight: bold; +} + +.ok { + color: green; + font-weight: bold; } \ No newline at end of file diff --git a/src/ffluci/controller/admin/system.lua b/src/ffluci/controller/admin/system.lua index c4ba027cbc..5d3150aa2a 100644 --- a/src/ffluci/controller/admin/system.lua +++ b/src/ffluci/controller/admin/system.lua @@ -4,6 +4,7 @@ require("ffluci.sys") require("ffluci.http") require("ffluci.util") require("ffluci.fs") +require("ffluci.model.ipkg") function action_editor() local file = ffluci.http.formvalue("file", "") @@ -29,6 +30,108 @@ function action_editor() ffluci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg}) end +function action_ipkg() + local file = "/etc/ipkg.conf" + local data = ffluci.http.formvalue("data") + local stat = nil + local err = nil + + if data then + stat, err = ffluci.fs.writefile(file, data) + end + + local cnt = ffluci.fs.readfile(file) + if cnt then + cnt = ffluci.util.pcdata(cnt) + end + + ffluci.template.render("admin_system/ipkg", {cnt=cnt, msg=err}) +end + +function action_packages() + local ipkg = ffluci.model.ipkg + local void = nil + local submit = ffluci.http.formvalue("submit") + + + -- Search query + local query = ffluci.http.formvalue("query") + query = (query ~= '') and query or nil + + + -- Packets to be installed + local install = ffluci.http.formvalue("install") + install = (type(install) == "table" and submit) and install or nil + + -- Install from URL + local url = ffluci.http.formvalue("url") + if url and url ~= '' and submit then + if not install then + install = {} + end + install[url] = 1 + end + + -- Do install + if install then + for k, v in pairs(install) do + void, install[k] = ipkg.install(k) + end + end + + + -- Remove packets + local remove = ffluci.http.formvalue("remove") + remove = (type(remove) == "table" and submit) and remove or nil + if remove then + for k, v in pairs(remove) do + void, remove[k] = ipkg.remove(k) + end + end + + + -- Update all packets + local update = ffluci.http.formvalue("update") + if update then + void, update = ipkg.update() + end + + + -- Upgrade all packets + local upgrade = ffluci.http.formvalue("upgrade") + if upgrade then + void, upgrade = ipkg.upgrade() + end + + + -- Package info + local info = ffluci.model.ipkg.info(query) + local pkgs = {} + + -- Sort after status and name + for k, v in pairs(info) do + local x = 0 + for i, j in pairs(pkgs) do + local vins = (v.Status and v.Status.installed) + local jins = (j.Status and j.Status.installed) + if vins ~= jins then + if vins then + break + end + else + if j.Package > v.Package then + break + end + end + x = i + end + table.insert(pkgs, x+1, v) + end + + ffluci.template.render("admin_system/packages", {pkgs=pkgs, query=query, + install=install, remove=remove, update=update, upgrade=upgrade}) +end + function action_passwd() local p1 = ffluci.http.formvalue("pwd1") local p2 = ffluci.http.formvalue("pwd2") @@ -46,8 +149,11 @@ function action_passwd() end function action_reboot() - ffluci.template.render("admin_system/reboot") - ffluci.sys.reboot() + local reboot = ffluci.http.formvalue("reboot") + ffluci.template.render("admin_system/reboot", {reboot=reboot}) + if reboot then + ffluci.sys.reboot() + end end function action_sshkeys() diff --git a/src/ffluci/model/menu/00main.lua b/src/ffluci/model/menu/00main.lua index 966c4228ce..e0bd403c19 100644 --- a/src/ffluci/model/menu/00main.lua +++ b/src/ffluci/model/menu/00main.lua @@ -8,8 +8,10 @@ act("luci", "FFLuCI") act("contact", "Kontakt") add("admin", "system", "System", 20) +act("packages", "Paketverwaltung") act("passwd", "Passwort ändern") act("sshkeys", "SSH-Schlüssel") +act("ipkg", "IPKG-Konfiguration") act("reboot", "Neu starten") add("admin", "network", "Netzwerk", 30) diff --git a/src/ffluci/view/admin_system/ipkg.htm b/src/ffluci/view/admin_system/ipkg.htm new file mode 100644 index 0000000000..bbe7f3bc6e --- /dev/null +++ b/src/ffluci/view/admin_system/ipkg.htm @@ -0,0 +1,23 @@ +<%+header%> +
src Name URL
dest Name Pfad
<%:reboot_do Neustart durchführen%>
+<% else %> +<%:reboot_running Bitte warten: Neustart wird durchgeführt...%>
+ +<% end %> <%+footer%> \ No newline at end of file