DCL 4.0
Loading...
Searching...
No Matches
VisitorBook.cpp
Go to the documentation of this file.
1#include <dcl/Config.h>
2
3#if __DCL_WINDOWS
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#ifdef __DCL_DEBUG
14#undef __THIS_FILE__
15static const wchar_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 m_strMainCommand = strMainCommand;
30 m_nMainCommandID = nMainCommandID;
31 m_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 const StringArray& ss = (*it).value;
46 StringArray& ds = params[(*it).key];
47 for (size_t i = 0; i < ss.size(); i++) {
48 ds.add(ss[i]);
49 }
50 }
51 }
52
53 ListedStringToStringArrayMap::Iterator it = params.find(m_strCommand);
54 if (it != params.end()) {
55 if (!((*it).value.isEmpty()))
56 {
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 m_strMainCommand.data(), m_nMainCommandID,
101 m_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 q.execute();
109 q.fetch();
110 while(!q.eof()) {
111 strHREF = String::format(L"?%ls=%d&%ls=%d&%ls=%ls",
112 m_strMainCommand.data(), m_nMainCommandID,
113 m_strCommand.data(), CM_VISITOR_BOOK_BODY,
114 L"id", q.fields().byName(L"ID").asString().data()
115 );
116 row.assign(L"HREF_MSG_BODY", strHREF);
117 row.assign(q.fields(), L"&nbsp;");
118
119 tplList.append(L"row", row);
120 q.fetch();
121 }
122 out << tplList;
123}
124
126 ListedStringToStringArrayMap& params,
127 SQLConnection* pSQLConn,
128 Writer& out
129 )
130{
131 ListedStringToStringArrayMap::Iterator it = params.find(L"id");
132 if (it == params.end()) {
133 onVisitorBookList(pSQLConn, out);
134 return false;
135 }
136
137 String strID;
138 if (!(*it).value.isEmpty())
139 strID = (*it).value[0];
140
141 TextTemplate tplBody(__servlet.readTemplate(L"visitbody.html"));
142 SQLQuery q(pSQLConn);
143 q.prepare(L"SELECT ID, SUBJECT, BODY, REGIST, VISITOR, EMAIL, RHOST"
144 " FROM ES_VISITOR_BOOK WHERE ID = " + strID);
145 q.execute();
146 q.fetch();
147 if (q.eof())
148 return false;
149 else {
150 String strHREF = String::format(L"?%ls=%d",
151 m_strMainCommand.data(), m_nMainCommandID
152 );
153 tplBody.assign(L"HREF_ACTION", strHREF);
154 tplBody.assign(L"COMMAND_STR", m_strCommand);
155 tplBody.assign(L"CM_VISITOR_BOOK_LIST", String::valueOf(CM_VISITOR_BOOK_LIST));
156 tplBody.assign(L"CM_VISITOR_BOOK_UPDATE_FORM", String::valueOf(CM_VISITOR_BOOK_UPDATE_FORM));
157 tplBody.assign(L"CM_VISITOR_BOOK_DELETE", String::valueOf(CM_VISITOR_BOOK_DELETE));
158
159 tplBody.assign(q.fields(), L"&nbsp;");
160 if (!q.fields().byName(L"BODY").isNull()) {
161 tplBody.assign(L"BODY",
163 q.fields().byName(L"BODY").asString(),
164 4, L"", L"<br>\n"
165 ));
166 }
167
168
169 out << tplBody;
170 }
171 return true;
172}
173
175 ListedStringToStringArrayMap& params,
176 SQLConnection* pSQLConn,
177 Writer& out
178 )
179{
180 String strID;
181 ListedStringToStringArrayMap::Iterator it = params.find(L"id");
182 if ((it != params.end()) && (!(*it).value.isEmpty()))
183 strID = (*it).value[0];
184
185 StringBuilder strHREF;
186 strHREF.format(L"?%ls=%d&%ls=%d",
187 m_strMainCommand.data(), m_nMainCommandID,
188 m_strCommand.data(), CM_VISITOR_BOOK_UPDATE
189 );
190
191 TextTemplate tpl(__servlet.readTemplate(L"visitupdate.html"));
192 if (!strID.isEmpty()) {
193 SQLQuery q(pSQLConn);
194 q.execute(L"SELECT ID, SUBJECT, BODY, REGIST, VISITOR, EMAIL, RHOST"
195 " FROM ES_VISITOR_BOOK WHERE ID = " + strID);
196 q.fetch();
197 if (!q.eof()) {
198 strHREF += L"&id=" + q.fields().byName(L"ID").asString();
199 tpl.assign(L"HREF_ACTION", strHREF);
200 tpl.assign(q.fields(), L"&nbsp");
201
202 out << tpl;
203 return;
204 }
205 }
206
207 tpl.assign(L"HREF_ACTION", strHREF);
208 tpl.assign(L"SUBJECT", L"");
209 tpl.assign(L"VISITOR", L"");
210 tpl.assign(L"EMAIL", L"");
211 tpl.assign(L"BODY", L"");
212
213 out << tpl;
214}
215
217 ListedStringToStringArrayMap& params,
218 SQLConnection* pSQLConn,
219 Writer& out
220 )
221{
222 String strID;
223 String strPasswd;
224
225 ListedStringToStringArrayMap::Iterator it = params.find(L"id");
226 if ((it != params.end()) && (!(*it).value.isEmpty()))
227 strID = (*it).value[0];
228
229 it = params.find(L"passwd");
230 if ((it != params.end()) && (!(*it).value.isEmpty()))
231 strPasswd = (*it).value[0];
232
233
234 SQLQuery q(pSQLConn);
235 q.execute(L"SELECT PASSWD FROM ES_VISITOR_BOOK WHERE ID = " + strID);
236 q.fetch();
237 if (!q.eof()) {
238 bool bDoDelete = false;
239 if (q.fields()[0].isNull() && strPasswd.isEmpty())
240 bDoDelete = true;
241 else {
242 if (q.fields()[0].asString() == strPasswd)
243 bDoDelete = true;
244 }
245
246 if (bDoDelete)
247 q.execute(L"DELETE FROM ES_VISITOR_BOOK WHERE ID = " + strID);
248
249 }
250
251 if (q.affectedRows() > 0)
252 onVisitorBookList(pSQLConn, out);
253 else
254 onVisitorBookBody(params, pSQLConn, out);
255}
256
258 ListedStringToStringArrayMap& params,
260 SQLConnection* pSQLConn,
261 Writer& out
262 )
263{
264 String strID;
265 String strPasswd;
266
267 String strSubject;
268 String strBody;
269 String strVisitor;
270 String strEmail;
271 String strRHost = ctx.remoteAddr();
272
273 ListedStringToStringArrayMap::Iterator it;
274
275 it = params.find(L"id");
276 if ((it != params.end()) && (!(*it).value.isEmpty()))
277 strID = (*it).value[0];
278
279 it = params.find(L"passwd");
280 if ((it != params.end()) && (!(*it).value.isEmpty()))
281 strPasswd = (*it).value[0];
282
283 it = params.find(L"subject");
284 if ((it != params.end()) && (!(*it).value.isEmpty()))
285 strSubject = (*it).value[0];
286
287 it = params.find(L"body");
288 if ((it != params.end()) && (!(*it).value.isEmpty()))
289 strBody = (*it).value[0];
290
291 it = params.find(L"visitor");
292 if ((it != params.end()) && (!(*it).value.isEmpty()))
293 strVisitor = (*it).value[0];
294
295 it = params.find(L"email");
296 if ((it != params.end()) && (!(*it).value.isEmpty()))
297 strEmail = (*it).value[0];
298
299 if (strSubject.isEmpty()
300 || strBody.isEmpty()
301 || strVisitor.isEmpty()
302 || strEmail.isEmpty())
303 {
304 out << L"<br><br><p><strong>모두 입력해 주세요!!</strong></p>";
305 return;
306 }
307
308 String strSQL = L""
309 "INSERT INTO "
310 " ES_VISITOR_BOOK(SUBJECT, BODY, REGIST, VISITOR,"
311 " EMAIL, RHOST, PASSWD) "
312 " VALUES(:SUBJECT, :BODY, CURRENT_TIMESTAMP, :VISITOR,"
313 " :EMAIL, :RHOST, :PASSWD)";
314
315 SQLQuery q(pSQLConn);
316 if (!strID.isEmpty()) {
317 q.execute(L"SELECT PASSWD FROM ES_VISITOR_BOOK WHERE ID = " + strID);
318 q.fetch();
319 if (!q.eof()) {
320 if (q.fields()[0].isNull()
321 || q.fields()[0].asString() == strPasswd) {
322 strSQL = L""
323 "UPDATE ES_VISITOR_BOOK "
324 " SET SUBJECT = :SUBJECT, BODY = :BODY, VISITOR = :VISITOR, "
325 " EMAIL = :EMAIL, RHOST = :RHOST, PASSWD = :PASSWD "
326 " WHERE ID = " + strID;
327 }
328 else {
329 onVisitorBookBody(params, pSQLConn, out);
330 return;
331 }
332 }
333 }
334
335 q.prepare(strSQL);
336 SQLParams& sqlParams = q.params();
337 sqlParams.byName(L"SUBJECT").setValue(strSubject);
338 sqlParams.byName(L"BODY").setValue(strBody);
339 sqlParams.byName(L"VISITOR").setValue(strVisitor);
340 sqlParams.byName(L"EMAIL").setValue(strEmail);
341 sqlParams.byName(L"RHOST").setValue(strRHost);
342 sqlParams.byName(L"PASSWD").setValue(strPasswd);
343
344 q.execute();
345
346 onVisitorBookList(pSQLConn, out);
347}
348
349__DCL_END_NAMESPACE
#define __THIS_FILE__
Definition _trace.h:14
#define __DCL_TRACE1(fmt, arg1)
Definition Object.h:376
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
Definition Object.h:228
virtual void destroy()
Definition Exception.cpp:74
static String format(const String &_str, int _tab2Space, const String &_beginOfLine, const String &_endOfLine)
Definition Html.cpp:123
static int32_t parse(const wchar_t *_number, unsigned _base=10) __DCL_THROWS1(NumericConvertException *)
Definition Numeric.cpp:284
_CONST SQLField & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
Definition SQLQuery.cpp:77
bool isEmpty() const
Definition SQL.inl:98
SQLParam & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
Definition SQLQuery.cpp:157
_CONST SQLParams & params() _CONST
Definition SQL.inl:144
void prepare(const String &_sql) __DCL_THROWS2(SQLException *
_CONST SQLFields & fields() _CONST
Definition SQL.inl:139
void CharsetConvertException *void execute() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:307
int64_t affectedRows() const
Definition SQL.inl:134
bool eof() const
Definition SQL.inl:129
void CharsetConvertException *void fetch() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:329
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)