version 0.3.29
[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 int OptionsPage::m_mode=1;\r
9 \r
10 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
11 {\r
12         std::string rval("");\r
13 \r
14         rval+="<select name=\""+name+"\">";\r
15 \r
16         std::vector<std::string>::const_iterator i=items.begin();\r
17         while(i!=items.end())\r
18         {\r
19                 rval+="<option value=\""+(*i)+"\"";\r
20                 if((*i)==selecteditem)\r
21                 {\r
22                         rval+=" SELECTED";\r
23                 }\r
24                 rval+=">";\r
25                 i++;\r
26                 if(i!=items.end())\r
27                 {\r
28                         rval+=(*i);\r
29                         i++;\r
30                 }\r
31                 rval+="</option>";\r
32         }\r
33 \r
34         rval+="</select>";\r
35 \r
36         return rval;\r
37 }\r
38 \r
39 const std::string OptionsPage::CreateTextArea(const std::string &name, const std::string &currentvalue, const std::string &param1, const std::string &param2)\r
40 {\r
41         std::string html("");\r
42 \r
43         html+="<textarea name=\""+name+"\"";\r
44         if(param1!="")\r
45         {\r
46                 html+=" cols=\""+param1+"\"";\r
47         }\r
48         if(param2!="")\r
49         {\r
50                 html+=" rows=\""+param2+"\"";\r
51         }\r
52         html+=">";\r
53         html+=SanitizeTextAreaOutput(currentvalue);\r
54         html+="</textarea>";\r
55 \r
56         return html;\r
57 }\r
58 \r
59 const std::string OptionsPage::CreateTextBox(const std::string &name, const std::string &currentvalue, const std::string &param1, const std::string &param2)\r
60 {\r
61         std::string html("");\r
62 \r
63         html+="<input type=\"text\" name=\""+name+"\" value=\""+currentvalue+"\"";\r
64         if(param1!="")\r
65         {\r
66                 html+=" size=\""+param1+"\"";\r
67         }\r
68         if(param2!="")\r
69         {\r
70                 html+=" maxlength=\""+param2+"\"";\r
71         }\r
72         html+=">";\r
73 \r
74         return html;\r
75 \r
76 }\r
77 \r
78 const std::string OptionsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
79 {\r
80         std::string content("");\r
81         std::string sql("");\r
82 \r
83         if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="save" && ValidateFormPassword(queryvars))\r
84         {\r
85                 SQLite3DB::Statement update=m_db->Prepare("UPDATE tblOption SET OptionValue=? WHERE Option=?;");\r
86                 std::vector<std::string> options;\r
87                 std::vector<std::string> oldvalues;\r
88                 std::vector<std::string> newvalues;\r
89                 CreateArgArray(queryvars,"option",options);\r
90                 CreateArgArray(queryvars,"oldvalue",oldvalues);\r
91                 CreateArgArray(queryvars,"value",newvalues);\r
92 \r
93                 for(int i=0; i<options.size(); i++)\r
94                 {\r
95                         if(oldvalues[i]!=newvalues[i])\r
96                         {\r
97                                 update.Bind(0,newvalues[i]);\r
98                                 update.Bind(1,options[i]);\r
99                                 update.Step();\r
100                                 update.Reset();\r
101                         }\r
102                 }\r
103 \r
104         }\r
105 \r
106         if(queryvars.find("mode")!=queryvars.end())\r
107         {\r
108                 if((*queryvars.find("mode")).second=="2")\r
109                 {\r
110                         m_mode=2;\r
111                 }\r
112                 else\r
113                 {\r
114                         m_mode=1;\r
115                 }\r
116         }\r
117 \r
118         content+="<h2 style=\"text-align:center;\">Options</h2>\r\n";\r
119         content+="<div style=\"text-align:center;\">";\r
120         if(m_mode==1)\r
121         {\r
122                 content+="Simple | <a href=\""+m_pagename+"?mode=2\">Advanced</a>";\r
123         }\r
124         else\r
125         {\r
126                 content+="<a href=\""+m_pagename+"?mode=1\">Simple</a> | Advanced</a>";\r
127         }\r
128         content+="</div>";\r
129 \r
130         content+="<form name=\"frmoptions\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"save\">";\r
131         content+=CreateFormPassword();\r
132         content+="<table>\r\n";\r
133 \r
134         if(m_mode==1)\r
135         {\r
136                 sql="SELECT Option,OptionValue,OptionDescription,Section,ValidValues,DisplayType,DisplayParam1,DisplayParam2 FROM tblOption WHERE Mode='simple' ORDER BY SortOrder;";\r
137         }\r
138         else\r
139         {\r
140                 sql="SELECT Option,OptionValue,OptionDescription,Section,ValidValues,DisplayType,DisplayParam1,DisplayParam2 FROM tblOption ORDER BY SortOrder;";\r
141         }\r
142         SQLite3DB::Statement st=m_db->Prepare(sql);\r
143         st.Step();\r
144 \r
145         int count=0;\r
146         std::string countstr;\r
147         std::string lastsection("");\r
148         while(st.RowReturned())\r
149         {\r
150                 std::string option("");\r
151                 std::string value("");\r
152                 std::string description("");\r
153                 std::string section("");\r
154                 std::string validvalues("");\r
155                 std::vector<std::string> validvaluevec;\r
156                 std::string displaytype("");\r
157                 std::string displayparam1("");\r
158                 std::string displayparam2("");\r
159 \r
160                 st.ResultText(0,option);\r
161                 st.ResultText(1,value);\r
162                 st.ResultText(2,description);\r
163                 st.ResultText(3,section);\r
164                 if(st.ResultNull(4)==false)\r
165                 {\r
166                         st.ResultText(4,validvalues);\r
167                         StringFunctions::Split(validvalues,"|",validvaluevec);\r
168                 }\r
169                 st.ResultText(5,displaytype);\r
170                 st.ResultText(6,displayparam1);\r
171                 st.ResultText(7,displayparam2);\r
172 \r
173                 if(section!=lastsection)\r
174                 {\r
175                         content+="<tr>";\r
176                         content+="<td colspan=\"3\"><h3>"+section+"</h3></td>";\r
177                         content+="</tr>";\r
178                         lastsection=section;\r
179                 }\r
180 \r
181                 StringFunctions::Convert(count,countstr);\r
182                 content+="<tr>";\r
183                 content+="<td valign=\"top\" class=\"optionname\"><input type=\"hidden\" name=\"option["+countstr+"]\" value=\""+option+"\">"+option+"</td>";\r
184                 content+="<td valign=\"top\"><input type=\"hidden\" name=\"oldvalue["+countstr+"]\" value=\""+value+"\">";\r
185 \r
186                 if(displaytype=="textbox")\r
187                 {\r
188                         content+=CreateTextBox("value["+countstr+"]",value,displayparam1,displayparam2);\r
189                 }\r
190                 else if(displaytype=="select")\r
191                 {\r
192                         content+=CreateDropDown("value["+countstr+"]",validvaluevec,value,displayparam1,displayparam2);\r
193                 }\r
194                 else if(displaytype=="textarea")\r
195                 {\r
196                         content+=CreateTextArea("value["+countstr+"]",value,displayparam1,displayparam2);\r
197                 }\r
198                 else\r
199                 {\r
200                         content+="Currently Unsupported";\r
201                 }\r
202 \r
203                 /*\r
204                 if(validvaluevec.size()>0)\r
205                 {\r
206                         content+=CreateDropDown("value["+countstr+"]",validvaluevec,value);\r
207                 }\r
208                 else if(value!="true" && value!="false")\r
209                 {\r
210                         content+="<input type=\"text\" name=\"value["+countstr+"]\" value=\""+value+"\">";\r
211                 }\r
212                 else\r
213                 {\r
214                         content+=CreateTrueFalseDropDown("value["+countstr+"]",value);\r
215                 }\r
216                 */\r
217 \r
218                 content+="</td></tr>\r\n";\r
219                 content+="<tr><td valign=\"top\" class=\"optiondescription\" colspan=\"2\">"+description+"</td>";\r
220                 content+="</tr>\r\n";\r
221                 st.Step();\r
222                 count++;\r
223         }\r
224         content+="<input type=\"hidden\" name=\"param[0]\" value=\"\">";\r
225         content+="<tr><td colspan=\"3\"><center><input type=\"submit\" value=\"Save\"></form></td></tr>";\r
226         content+="</table>";\r
227         \r
228         return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
229 }\r
230 \r
231 const bool OptionsPage::WillHandleURI(const std::string &uri)\r
232 {\r
233         if(uri.find("options.")!=std::string::npos)\r
234         {\r
235                 return true;\r
236         }\r
237         else\r
238         {\r
239                 return false;\r
240         }\r
241 }\r