DCL 3.7.4
Loading...
Searching...
No Matches
VisitorBook.cpp
Go to the documentation of this file.
1#include <dcl/Config.h>
2
3#ifdef __WINNT__
4#include <windows.h>
5#endif
6
7#include <dcl/String.h>
8#include <dcl/Html.h>
9
10#include "EShopServlet.h"
11#include "VisitorBook.h"
12
13#if __DCL_HAVE_THIS_FILE__
14#undef __THIS_FILE__
15static const char_t __THIS_FILE__[] = L"eshop/VisitorBook.cpp";
16#endif
17
18__DCL_BEGIN_NAMESPACE
19
21
23 const String& strMainCommand,
24 int nMainCommandID,
25 const String& strCommand,
26 const EShopServlet& _servlet
27) : __servlet(_servlet)
28{
29 __strMainCommand = strMainCommand;
30 __nMainCommandID = nMainCommandID;
31 __strCommand = strCommand;
32}
33
36 Writer& out,
37 SQLConnection* pSQLConn
38)
39{
40 int nCMD = CM_VISITOR_BOOK_LIST;
41 ListedStringToStringArrayMap params = ctx.__queryMap;
42 {
43 for (ListedStringToStringArrayMap::ConstIterator it = ctx.__formMap.begin();
44 it != ctx.__formMap.end(); it++
45 ) {
46 const StringArray& ss = (*it).value;
47 StringArray& ds = params[(*it).key];
48 for (size_t i = 0; i < ss.size(); i++) {
49 ds.add(ss[i]);
50 }
51 }
52 }
53
54 ListedStringToStringArrayMap::Iterator it = params.find(__strCommand);
55 if (it != params.end()) {
56 if (!((*it).value.isEmpty())) {
57 try {
58 nCMD = Int32::parse((*it).value[0]);
59 }
60 catch(Exception* e) {
61 e->destroy();
62 }
63 }
64 }
65
66 __DCL_TRACE1(L"nCMD [%d]\n", nCMD);
67
68 switch(nCMD) {
69 case CM_VISITOR_BOOK_LIST :
70 onVisitorBookList(pSQLConn, out);
71 break;
72 case CM_VISITOR_BOOK_BODY :
73 return onVisitorBookBody(params, pSQLConn, out);
74 break;
75 case CM_VISITOR_BOOK_DELETE :
76 onVisitorBookDelete(params, pSQLConn, out);
77 break;
78 case CM_VISITOR_BOOK_UPDATE_FORM :
79 onVisitorBookUpdateForm(params, pSQLConn, out);
80 break;
81 case CM_VISITOR_BOOK_UPDATE :
82 onVisitorBookUpdate(params, ctx, pSQLConn, out);
83 break;
84 default :
85 return false;
86 }
87
88 return true;
89}
90
92 SQLConnection* pSQLConn,
93 Writer& out
94)
95{
96 TextTemplate tplList(__servlet.readTemplate(L"visitlist.html"));
97 TextTemplate& row = tplList[L"row"];
98
99 StringBuilder strHREF = String::format(L"?%ls=%d&%ls=%d",
100 __strMainCommand.data(), __nMainCommandID,
101 __strCommand.data(), CM_VISITOR_BOOK_UPDATE_FORM
102 );
103 tplList.assign(L"HREF_NEW_MSG", strHREF);
104
105 SQLQuery q(pSQLConn);
106 q.prepare(L"SELECT ID, SUBJECT, BODY, REGIST, VISITOR, EMAIL, RHOST"
107 " FROM ES_VISITOR_BOOK ORDER BY ID"
108 );
109 q.execute();
110 q.fetch();
111 while(!q.eof()) {
112 strHREF = String::format(L"?%ls=%d&%ls=%d&%ls=%ls",
113 __strMainCommand.data(), __nMainCommandID,
114 __strCommand.data(), CM_VISITOR_BOOK_BODY,
115 L"id", q.fields().byName(L"ID").asString().data()
116 );
117 row.assign(L"HREF_MSG_BODY", strHREF);
118 row.assign(q.fields(), L"&nbsp;");
119
120 tplList.append(L"row", row);
121 q.fetch();
122 }
123 out << tplList;
124}
125
127 ListedStringToStringArrayMap& params,
128 SQLConnection* pSQLConn,
129 Writer& out
130)
131{
132 ListedStringToStringArrayMap::Iterator it = params.find(L"id");
133 if (it == params.end()) {
134 onVisitorBookList(pSQLConn, out);
135 return false;
136 }
137
138 String strID;
139 if (!(*it).value.isEmpty())
140 strID = (*it).value[0];
141
142 TextTemplate tplBody(__servlet.readTemplate(L"visitbody.html"));
143 SQLQuery q(pSQLConn);
144 q.prepare(
145 L"SELECT ID, SUBJECT, BODY, REGIST, VISITOR, EMAIL, RHOST"
146 " FROM ES_VISITOR_BOOK WHERE ID = " + strID
147 );
148 q.execute();
149 q.fetch();
150 if (q.eof())
151 return false;
152 else {
153 String strHREF = String::format(L"?%ls=%d",
154 __strMainCommand.data(), __nMainCommandID
155 );
156 tplBody.assign(L"HREF_ACTION", strHREF);
157 tplBody.assign(L"COMMAND_STR", __strCommand);
158 tplBody.assign(L"CM_VISITOR_BOOK_LIST", String::valueOf(CM_VISITOR_BOOK_LIST));
159 tplBody.assign(L"CM_VISITOR_BOOK_UPDATE_FORM", String::valueOf(CM_VISITOR_BOOK_UPDATE_FORM));
160 tplBody.assign(L"CM_VISITOR_BOOK_DELETE", String::valueOf(CM_VISITOR_BOOK_DELETE));
161
162 tplBody.assign(q.fields(), L"&nbsp;");
163 if (!q.fields().byName(L"BODY").isNull()) {
164 tplBody.assign(L"BODY",
166 q.fields().byName(L"BODY").asString(),
167 4, L"", L"<br>\n"
168 )
169 );
170 }
171 out << tplBody;
172 }
173 return true;
174}
175
177 ListedStringToStringArrayMap& params,
178 SQLConnection* pSQLConn,
179 Writer& out
180)
181{
182 String strID;
183 ListedStringToStringArrayMap::Iterator it = params.find(L"id");
184 if ((it != params.end()) && (!(*it).value.isEmpty()))
185 strID = (*it).value[0];
186
187 StringBuilder strHREF;
188 strHREF.format(L"?%ls=%d&%ls=%d",
189 __strMainCommand.data(), __nMainCommandID,
190 __strCommand.data(), CM_VISITOR_BOOK_UPDATE
191 );
192
193 TextTemplate tpl(__servlet.readTemplate(L"visitupdate.html"));
194 if (!strID.isEmpty()) {
195 SQLQuery q(pSQLConn);
196 q.execute(L"SELECT ID, SUBJECT, BODY, REGIST, VISITOR, EMAIL, RHOST"
197 " FROM ES_VISITOR_BOOK WHERE ID = " + strID);
198 q.fetch();
199 if (!q.eof()) {
200 strHREF += L"&id=" + q.fields().byName(L"ID").asString();
201 tpl.assign(L"HREF_ACTION", strHREF);
202 tpl.assign(q.fields(), L"&nbsp");
203
204 out << tpl;
205 return;
206 }
207 }
208
209 tpl.assign(L"HREF_ACTION", strHREF);
210 tpl.assign(L"SUBJECT", L"");
211 tpl.assign(L"VISITOR", L"");
212 tpl.assign(L"EMAIL", L"");
213 tpl.assign(L"BODY", L"");
214
215 out << tpl;
216}
217
219 ListedStringToStringArrayMap& params,
220 SQLConnection* pSQLConn,
221 Writer& out
222)
223{
224 String strID;
225 String strPasswd;
226
227 ListedStringToStringArrayMap::Iterator it = params.find(L"id");
228 if ((it != params.end()) && (!(*it).value.isEmpty()))
229 strID = (*it).value[0];
230
231 it = params.find(L"passwd");
232 if ((it != params.end()) && (!(*it).value.isEmpty()))
233 strPasswd = (*it).value[0];
234
235 SQLQuery q(pSQLConn);
236 q.execute(L"SELECT PASSWD FROM ES_VISITOR_BOOK WHERE ID = " + strID);
237 q.fetch();
238 if (!q.eof()) {
239 bool bDoDelete = false;
240 if (q.fields()[0].isNull() && strPasswd.isEmpty())
241 bDoDelete = true;
242 else {
243 if (q.fields()[0].asString() == strPasswd)
244 bDoDelete = true;
245 }
246
247 if (bDoDelete) {
248 q.execute(L"DELETE FROM ES_VISITOR_BOOK WHERE ID = " + strID);
249 }
250 }
251
252 if (q.affectedRows() > 0)
253 onVisitorBookList(pSQLConn, out);
254 else
255 onVisitorBookBody(params, pSQLConn, out);
256}
257
259 ListedStringToStringArrayMap& params,
261 SQLConnection* pSQLConn,
262 Writer& out
263)
264{
265 String strID;
266 String strPasswd;
267
268 String strSubject;
269 String strBody;
270 String strVisitor;
271 String strEmail;
272 String strRHost = ctx.remoteAddr();
273
274 ListedStringToStringArrayMap::Iterator it;
275
276 it = params.find(L"id");
277 if ((it != params.end()) && (!(*it).value.isEmpty()))
278 strID = (*it).value[0];
279
280 it = params.find(L"passwd");
281 if ((it != params.end()) && (!(*it).value.isEmpty()))
282 strPasswd = (*it).value[0];
283
284 it = params.find(L"subject");
285 if ((it != params.end()) && (!(*it).value.isEmpty()))
286 strSubject = (*it).value[0];
287
288 it = params.find(L"body");
289 if ((it != params.end()) && (!(*it).value.isEmpty()))
290 strBody = (*it).value[0];
291
292 it = params.find(L"visitor");
293 if ((it != params.end()) && (!(*it).value.isEmpty()))
294 strVisitor = (*it).value[0];
295
296 it = params.find(L"email");
297 if ((it != params.end()) && (!(*it).value.isEmpty()))
298 strEmail = (*it).value[0];
299
300 if (strSubject.isEmpty()
301 || strBody.isEmpty()
302 || strVisitor.isEmpty()
303 || strEmail.isEmpty()
304 ) {
305 out << L"<br><br><p><strong>모두 입력해 주세요!!</strong></p>";
306 return;
307 }
308
309 String strSQL = L""
310 "INSERT INTO "
311 " ES_VISITOR_BOOK(SUBJECT, BODY, REGIST, VISITOR,"
312 " EMAIL, RHOST, PASSWD) "
313 " VALUES(:SUBJECT, :BODY, CURRENT_TIMESTAMP, :VISITOR,"
314 " :EMAIL, :RHOST, :PASSWD)"
315 ;
316
317 SQLQuery q(pSQLConn);
318 if (!strID.isEmpty()) {
319 q.execute(L"SELECT PASSWD FROM ES_VISITOR_BOOK WHERE ID = " + strID);
320 q.fetch();
321 if (!q.eof()) {
322 if (q.fields()[0].isNull()
323 || q.fields()[0].asString() == strPasswd) {
324 strSQL = L""
325 "UPDATE ES_VISITOR_BOOK "
326 " SET SUBJECT = :SUBJECT, BODY = :BODY, VISITOR = :VISITOR, "
327 " EMAIL = :EMAIL, RHOST = :RHOST, PASSWD = :PASSWD "
328 " WHERE ID = " + strID;
329 }
330 else {
331 onVisitorBookBody(params, pSQLConn, out);
332 return;
333 }
334 }
335 }
336
337 q.prepare(strSQL);
338 SQLParams& sqlParams = q.params();
339 sqlParams.byName(L"SUBJECT").setValue(strSubject);
340 sqlParams.byName(L"BODY").setValue(strBody);
341 sqlParams.byName(L"VISITOR").setValue(strVisitor);
342 sqlParams.byName(L"EMAIL").setValue(strEmail);
343 sqlParams.byName(L"RHOST").setValue(strRHost);
344 sqlParams.byName(L"PASSWD").setValue(strPasswd);
345
346 q.execute();
347
348 onVisitorBookList(pSQLConn, out);
349}
350
351__DCL_END_NAMESPACE
#define __THIS_FILE__
Definition _trace.h:14
wchar_t char_t
Definition Config.h:247
#define __DCL_TRACE1(fmt, arg1)
Definition Object.h:399
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
Definition Object.h:245
virtual void destroy()
Definition Exception.cpp:74
static String format(const String &_str, int _tab2Space, const String &_beginOfLine, const String &_endOfLine)
Definition Html.cpp:122
static int32_t parse(const wchar_t *_number, unsigned _base=10) __DCL_THROWS1(NumericConvertException *)
Definition Numeric.cpp:264
_CONST SQLField & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
Definition SQLQuery.cpp:77
bool isEmpty() const
Definition SQL.inl:60
SQLParam & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
Definition SQLQuery.cpp:157
void prepare(const String &_sql) __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:282
_CONST SQLParams & params() _CONST
Definition SQL.inl:106
_CONST SQLFields & fields() _CONST
Definition SQL.inl:101
void execute() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:316
int64_t affectedRows() const
Definition SQL.inl:96
bool eof() const
Definition SQL.inl:91
void fetch() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:336
bool onVisitorBookBody(ListedStringToStringArrayMap &params, SQLConnection *pSQLConn, Writer &out)
void onVisitorBookDelete(ListedStringToStringArrayMap &params, SQLConnection *pSQLConn, Writer &out)
bool onVisitorBook(HttpServletContextEx &ctx, Writer &out, SQLConnection *pSQLConn)
void onVisitorBookList(SQLConnection *pSQLConn, Writer &out)
void onVisitorBookUpdateForm(ListedStringToStringArrayMap &params, SQLConnection *pSQLConn, Writer &out)
void onVisitorBookUpdate(ListedStringToStringArrayMap &params, HttpServletContextEx &ctx, SQLConnection *pSQLConn, Writer &out)
VisitorBook(const String &strMainCommand, int nMainCommandID, const String &strCommand, const EShopServlet &_servlet)