diff options
Diffstat (limited to 'app/acf-util/skins-model.lua')
-rw-r--r-- | app/acf-util/skins-model.lua | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/app/acf-util/skins-model.lua b/app/acf-util/skins-model.lua new file mode 100644 index 0000000..8b5a57e --- /dev/null +++ b/app/acf-util/skins-model.lua @@ -0,0 +1,49 @@ +-- acf model for displaying logfiles recusivly +module (..., package.seeall) + +require("fs") +require("format") + +local function set_skins(self, skin) + local content = "\n"..(fs.read_file(self.conf.conffile) or "") + local count + content,count = string.gsub(content, "\n%s*skin%s*=[^\n]*", "\nskin="..format.escapespecialcharacters(skin)) + if count == 0 then + content = "\nskin="..format.escapespecialcharacters(skin)..content + end + fs.write_file(self.conf.conffile, string.sub(content,2)) + local cmdoutput = "New skin selected" + return cmdoutput, errtxt +end + +local function list_skins(self) + local skinarray = {} + for i,file in ipairs(posix.dir(self.conf.wwwdir ..self.conf.skindir) or {}) do + -- Ignore files that begins with a '.' and 'cgi-bin' and only list folders + if not ((string.match(file, "^%.")) or (string.match(file, "^cgi[-]bin")) or (string.match(file, "^static")) or (posix.stat(self.conf.wwwdir .. self.conf.skindir .. file).type ~= "directory")) then + local entry = cfe({ value=file, label="Skin name" }) + local current = conf.skin + entry.inuse = (file == current) + table.insert(skinarray, entry) + end + end + return cfe({ type="list", value=skinarray, label="Skins" }) +end + + +get = function (self) + return list_skins(self) +end + +update = function (self, newskin) + -- Make sure no one can inject code into the model. + local availableskins = list_skins(self) + local cmdoutput = "Failed to set skin" + local errtxt = "Invalid selection" + for i,skin in ipairs(availableskins.value) do + if ( skin.value == newskin) then + cmdoutput, errtxt = set_skins(self, newskin) + end + end + return cfe({ value=cmdoutput, errtxt=errtxt, label="Set skin result" }) +end |