version 0.3.29
[fms.git] / src / http / pages / optionspage.cpp
index 7743738..4ec3233 100644 (file)
@@ -5,13 +5,82 @@
        #include <xmem.h>\r
 #endif\r
 \r
+int OptionsPage::m_mode=1;\r
+\r
+const std::string OptionsPage::CreateDropDown(const std::string &name, const std::vector<std::string> &items, const std::string &selecteditem, const std::string &param1, const std::string &param2)\r
+{\r
+       std::string rval("");\r
+\r
+       rval+="<select name=\""+name+"\">";\r
+\r
+       std::vector<std::string>::const_iterator i=items.begin();\r
+       while(i!=items.end())\r
+       {\r
+               rval+="<option value=\""+(*i)+"\"";\r
+               if((*i)==selecteditem)\r
+               {\r
+                       rval+=" SELECTED";\r
+               }\r
+               rval+=">";\r
+               i++;\r
+               if(i!=items.end())\r
+               {\r
+                       rval+=(*i);\r
+                       i++;\r
+               }\r
+               rval+="</option>";\r
+       }\r
+\r
+       rval+="</select>";\r
+\r
+       return rval;\r
+}\r
+\r
+const std::string OptionsPage::CreateTextArea(const std::string &name, const std::string &currentvalue, const std::string &param1, const std::string &param2)\r
+{\r
+       std::string html("");\r
+\r
+       html+="<textarea name=\""+name+"\"";\r
+       if(param1!="")\r
+       {\r
+               html+=" cols=\""+param1+"\"";\r
+       }\r
+       if(param2!="")\r
+       {\r
+               html+=" rows=\""+param2+"\"";\r
+       }\r
+       html+=">";\r
+       html+=SanitizeTextAreaOutput(currentvalue);\r
+       html+="</textarea>";\r
+\r
+       return html;\r
+}\r
+\r
+const std::string OptionsPage::CreateTextBox(const std::string &name, const std::string &currentvalue, const std::string &param1, const std::string &param2)\r
+{\r
+       std::string html("");\r
+\r
+       html+="<input type=\"text\" name=\""+name+"\" value=\""+currentvalue+"\"";\r
+       if(param1!="")\r
+       {\r
+               html+=" size=\""+param1+"\"";\r
+       }\r
+       if(param2!="")\r
+       {\r
+               html+=" maxlength=\""+param2+"\"";\r
+       }\r
+       html+=">";\r
+\r
+       return html;\r
+\r
+}\r
+\r
 const std::string OptionsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
 {\r
-       std::string content="<h2 style=\"text-align:center;\">Options</h2>\r\n";\r
-       content+="<form name=\"frmoptions\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"save\">";\r
-       content+="<table><tr><th>Option</th><th>Value</th><th>Description</th></tr>";\r
+       std::string content("");\r
+       std::string sql("");\r
 \r
-       if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="save")\r
+       if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="save" && ValidateFormPassword(queryvars))\r
        {\r
                SQLite3DB::Statement update=m_db->Prepare("UPDATE tblOption SET OptionValue=? WHERE Option=?;");\r
                std::vector<std::string> options;\r
@@ -31,47 +100,132 @@ const std::string OptionsPage::GeneratePage(const std::string &method, const std
                                update.Reset();\r
                        }\r
                }\r
+\r
+       }\r
+\r
+       if(queryvars.find("mode")!=queryvars.end())\r
+       {\r
+               if((*queryvars.find("mode")).second=="2")\r
+               {\r
+                       m_mode=2;\r
+               }\r
+               else\r
+               {\r
+                       m_mode=1;\r
+               }\r
        }\r
 \r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT Option,OptionValue,OptionDescription FROM tblOption;");\r
+       content+="<h2 style=\"text-align:center;\">Options</h2>\r\n";\r
+       content+="<div style=\"text-align:center;\">";\r
+       if(m_mode==1)\r
+       {\r
+               content+="Simple | <a href=\""+m_pagename+"?mode=2\">Advanced</a>";\r
+       }\r
+       else\r
+       {\r
+               content+="<a href=\""+m_pagename+"?mode=1\">Simple</a> | Advanced</a>";\r
+       }\r
+       content+="</div>";\r
+\r
+       content+="<form name=\"frmoptions\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"save\">";\r
+       content+=CreateFormPassword();\r
+       content+="<table>\r\n";\r
+\r
+       if(m_mode==1)\r
+       {\r
+               sql="SELECT Option,OptionValue,OptionDescription,Section,ValidValues,DisplayType,DisplayParam1,DisplayParam2 FROM tblOption WHERE Mode='simple' ORDER BY SortOrder;";\r
+       }\r
+       else\r
+       {\r
+               sql="SELECT Option,OptionValue,OptionDescription,Section,ValidValues,DisplayType,DisplayParam1,DisplayParam2 FROM tblOption ORDER BY SortOrder;";\r
+       }\r
+       SQLite3DB::Statement st=m_db->Prepare(sql);\r
        st.Step();\r
 \r
        int count=0;\r
        std::string countstr;\r
+       std::string lastsection("");\r
        while(st.RowReturned())\r
        {\r
-               std::string option;\r
-               std::string value;\r
-               std::string description;\r
+               std::string option("");\r
+               std::string value("");\r
+               std::string description("");\r
+               std::string section("");\r
+               std::string validvalues("");\r
+               std::vector<std::string> validvaluevec;\r
+               std::string displaytype("");\r
+               std::string displayparam1("");\r
+               std::string displayparam2("");\r
 \r
                st.ResultText(0,option);\r
                st.ResultText(1,value);\r
                st.ResultText(2,description);\r
+               st.ResultText(3,section);\r
+               if(st.ResultNull(4)==false)\r
+               {\r
+                       st.ResultText(4,validvalues);\r
+                       StringFunctions::Split(validvalues,"|",validvaluevec);\r
+               }\r
+               st.ResultText(5,displaytype);\r
+               st.ResultText(6,displayparam1);\r
+               st.ResultText(7,displayparam2);\r
+\r
+               if(section!=lastsection)\r
+               {\r
+                       content+="<tr>";\r
+                       content+="<td colspan=\"3\"><h3>"+section+"</h3></td>";\r
+                       content+="</tr>";\r
+                       lastsection=section;\r
+               }\r
 \r
                StringFunctions::Convert(count,countstr);\r
                content+="<tr>";\r
-               content+="<td valign=\"top\"><input type=\"hidden\" name=\"option["+countstr+"]\" value=\""+option+"\">"+option+"</td>";\r
+               content+="<td valign=\"top\" class=\"optionname\"><input type=\"hidden\" name=\"option["+countstr+"]\" value=\""+option+"\">"+option+"</td>";\r
                content+="<td valign=\"top\"><input type=\"hidden\" name=\"oldvalue["+countstr+"]\" value=\""+value+"\">";\r
 \r
-               if(value!="true" && value!="false")\r
+               if(displaytype=="textbox")\r
+               {\r
+                       content+=CreateTextBox("value["+countstr+"]",value,displayparam1,displayparam2);\r
+               }\r
+               else if(displaytype=="select")\r
+               {\r
+                       content+=CreateDropDown("value["+countstr+"]",validvaluevec,value,displayparam1,displayparam2);\r
+               }\r
+               else if(displaytype=="textarea")\r
+               {\r
+                       content+=CreateTextArea("value["+countstr+"]",value,displayparam1,displayparam2);\r
+               }\r
+               else\r
+               {\r
+                       content+="Currently Unsupported";\r
+               }\r
+\r
+               /*\r
+               if(validvaluevec.size()>0)\r
+               {\r
+                       content+=CreateDropDown("value["+countstr+"]",validvaluevec,value);\r
+               }\r
+               else if(value!="true" && value!="false")\r
                {\r
-                       content+="<input type=\"text\" name=\"value["+countstr+"]\" value=\""+value+"\"></td>";\r
+                       content+="<input type=\"text\" name=\"value["+countstr+"]\" value=\""+value+"\">";\r
                }\r
                else\r
                {\r
                        content+=CreateTrueFalseDropDown("value["+countstr+"]",value);\r
                }\r
+               */\r
 \r
-               content+="<td valign=\"top\">"+description+"</td>";\r
-               content+="</tr>";\r
+               content+="</td></tr>\r\n";\r
+               content+="<tr><td valign=\"top\" class=\"optiondescription\" colspan=\"2\">"+description+"</td>";\r
+               content+="</tr>\r\n";\r
                st.Step();\r
                count++;\r
        }\r
-\r
+       content+="<input type=\"hidden\" name=\"param[0]\" value=\"\">";\r
        content+="<tr><td colspan=\"3\"><center><input type=\"submit\" value=\"Save\"></form></td></tr>";\r
        content+="</table>";\r
        \r
-       return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
+       return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
 }\r
 \r
 const bool OptionsPage::WillHandleURI(const std::string &uri)\r