#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 ¶m1, const std::string ¶m2)\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 ¤tvalue, const std::string ¶m1, const std::string ¶m2)\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 ¤tvalue, const std::string ¶m1, const std::string ¶m2)\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
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