5c61e16b5fdf2d6616b8e6b89fa0ca53b34283e5
[fms.git] / src / http / pages / optionspage.cpp
1 #include "../../../include/http/pages/optionspage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 \r
4 #ifdef XMEM\r
5         #include <xmem.h>\r
6 #endif\r
7 \r
8 const std::string OptionsPage::CreateDropDown(const std::string &name, const std::vector<std::string> &items, const std::string &selecteditem)\r
9 {\r
10         std::string rval="";\r
11 \r
12         rval+="<select name=\""+name+"\">";\r
13 \r
14         std::vector<std::string>::const_iterator i=items.begin();\r
15         while(i!=items.end())\r
16         {\r
17                 rval+="<option value=\""+(*i)+"\"";\r
18                 if((*i)==selecteditem)\r
19                 {\r
20                         rval+=" SELECTED";\r
21                 }\r
22                 rval+=">";\r
23                 i++;\r
24                 if(i!=items.end())\r
25                 {\r
26                         rval+=(*i);\r
27                         i++;\r
28                 }\r
29                 rval+="</option>";\r
30         }\r
31 \r
32         rval+="</select>";\r
33 \r
34         return rval;\r
35 }\r
36 \r
37 const std::string OptionsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
38 {\r
39         std::string content="<h2 style=\"text-align:center;\">Options</h2>\r\n";\r
40         content+="<form name=\"frmoptions\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"save\">";\r
41         content+=CreateFormPassword();\r
42         content+="<table><tr><th>Option</th><th>Value</th><th>Description</th></tr>";\r
43 \r
44         if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="save" && ValidateFormPassword(queryvars))\r
45         {\r
46                 SQLite3DB::Statement update=m_db->Prepare("UPDATE tblOption SET OptionValue=? WHERE Option=?;");\r
47                 std::vector<std::string> options;\r
48                 std::vector<std::string> oldvalues;\r
49                 std::vector<std::string> newvalues;\r
50                 CreateArgArray(queryvars,"option",options);\r
51                 CreateArgArray(queryvars,"oldvalue",oldvalues);\r
52                 CreateArgArray(queryvars,"value",newvalues);\r
53 \r
54                 for(int i=0; i<options.size(); i++)\r
55                 {\r
56                         if(oldvalues[i]!=newvalues[i])\r
57                         {\r
58                                 update.Bind(0,newvalues[i]);\r
59                                 update.Bind(1,options[i]);\r
60                                 update.Step();\r
61                                 update.Reset();\r
62                         }\r
63                 }\r
64 \r
65         }\r
66 \r
67         SQLite3DB::Statement st=m_db->Prepare("SELECT Option,OptionValue,OptionDescription,Section,ValidValues FROM tblOption ORDER BY SortOrder;");\r
68         st.Step();\r
69 \r
70         int count=0;\r
71         std::string countstr;\r
72         std::string lastsection="";\r
73         while(st.RowReturned())\r
74         {\r
75                 std::string option;\r
76                 std::string value;\r
77                 std::string description;\r
78                 std::string section;\r
79                 std::string validvalues;\r
80                 std::vector<std::string> validvaluevec;\r
81 \r
82                 st.ResultText(0,option);\r
83                 st.ResultText(1,value);\r
84                 st.ResultText(2,description);\r
85                 st.ResultText(3,section);\r
86                 if(st.ResultNull(4)==false)\r
87                 {\r
88                         st.ResultText(4,validvalues);\r
89                         StringFunctions::Split(validvalues,"|",validvaluevec);\r
90                 }\r
91 \r
92                 if(section!=lastsection)\r
93                 {\r
94                         content+="<tr>";\r
95                         content+="<td colspan=\"3\"><h3>"+section+"</h3></td>";\r
96                         content+="</tr>";\r
97                         lastsection=section;\r
98                 }\r
99 \r
100                 StringFunctions::Convert(count,countstr);\r
101                 content+="<tr>";\r
102                 content+="<td valign=\"top\"><input type=\"hidden\" name=\"option["+countstr+"]\" value=\""+option+"\">"+option+"</td>";\r
103                 content+="<td valign=\"top\"><input type=\"hidden\" name=\"oldvalue["+countstr+"]\" value=\""+value+"\">";\r
104 \r
105                 if(validvaluevec.size()>0)\r
106                 {\r
107                         content+=CreateDropDown("value["+countstr+"]",validvaluevec,value);\r
108                 }\r
109                 else if(value!="true" && value!="false")\r
110                 {\r
111                         content+="<input type=\"text\" name=\"value["+countstr+"]\" value=\""+value+"\"></td>";\r
112                 }\r
113                 else\r
114                 {\r
115                         content+=CreateTrueFalseDropDown("value["+countstr+"]",value);\r
116                 }\r
117 \r
118                 content+="<td valign=\"top\">"+description+"</td>";\r
119                 content+="</tr>";\r
120                 st.Step();\r
121                 count++;\r
122         }\r
123         content+="<input type=\"hidden\" name=\"param[0]\" value=\"\">";\r
124         content+="<tr><td colspan=\"3\"><center><input type=\"submit\" value=\"Save\"></form></td></tr>";\r
125         content+="</table>";\r
126         \r
127         return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
128 }\r
129 \r
130 const bool OptionsPage::WillHandleURI(const std::string &uri)\r
131 {\r
132         if(uri.find("options.")!=std::string::npos)\r
133         {\r
134                 return true;\r
135         }\r
136         else\r
137         {\r
138                 return false;\r
139         }\r
140 }\r