DCL 3.7.4
Loading...
Searching...
No Matches
Page.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/Charset.h>
8#include <dcl/URI.h>
9#include <dcl/ArrayT.h>
10
11#include "HtmlPage.h"
12#include "LinkUtility.h"
13#include "Page.h"
14
15#if __DCL_HAVE_THIS_FILE__
16#undef __THIS_FILE__
17static const char_t __THIS_FILE__[] = __T("fastpage/Page.cpp");
18#endif
19
20#define CM_INSERT 1
21#define CM_UPDATE 2
22#define CM_DELETE 3
23
24__DCL_BEGIN_NAMESPACE
25
27
28ClassListView::ClassListView(HtmlPage* pPage)
29 : HtmlView(pPage)
30{
31}
32
33void ClassListView::onPrint(Session& session)
35{
36 session.__ctx.addHeader(HttpHeader(L"Cache-Control", L"no-cache"));
37
38 assign(L"TITLE", __pPage->__strTitle);
39
40 TextTemplate& CLASS = (*this)[L"CLASS"];
41 SQLQuery& q = session.__query;
42
43 for(int i = 0; i < HtmlView::__nClassCount; i++) {
44 CLASS.assign(L"DS_TYPE", String::valueOf(HtmlView::__aClasses[i].nDsType));
45 CLASS.assign(L"CLASS_ID", String::valueOf(HtmlView::__aClasses[i].nClassID));
46 CLASS.assign(L"CLASS_NAME", HtmlView::__aClasses[i].pszClassName);
47 CLASS.assign(L"COMMENT", HtmlView::__aClasses[i].pszDesc);
48 append(L"CLASS", CLASS);
49 }
50
51 HtmlView::onPrint(session);
52}
53
60
63{
64 SQLQuery& q = session.__query;
65
66 TextTemplate& CATEGORY = (*this)[L"CATEGORY"];
67 q.execute(L"SELECT * FROM DCL_PAGE_CATEGORY ORDER BY CATEGORY_ID");
68 q.fetch();
69 while(!q.eof()) {
70 CATEGORY.assign(q.fields(), L"");
71 CATEGORY.assign(L"VNO", VNO());
72 append(L"CATEGORY", CATEGORY);
73 q.fetch();
74 }
75
76 FormView::onPrint(session);
77}
78
81{
82// HtmlView::dump(session);
83
84 ListedStringToStringArrayMap& mapForm = session.__ctx.__formMap;
85 StringArray& vCategoryID = mapForm[L"CATEGORY_ID"];
86 StringArray& vCategoryName = mapForm[L"CATEGORY_NAME"];
87 StringArray& vDescription = mapForm[L"COMMENT"];
88 StringArray& vDeleteID = mapForm[L"DELETE_ID"];
89
90 if (vCategoryID.size() <= 1) {
91 // 스킨 템플릿에서 마지막 CATEGORY_ID는 사용하지 않는다.
92 __pPage->refresh(session, session.__ctx.getHttpHeader(L"Referer"));
93 return;
94 }
95
96 // vCategoryID와 vDeleteID가 숫자문자열인지 검사한다.
97 // 숫자가 아닌 값이 있는경우에는 예외 발생하여 처리 중단됨
98 Array<int> vnCategoryID(vCategoryID.size() - 1);
99 for(size_t i = 0; i < vCategoryID.size() - 1; i++)
100 vnCategoryID[i] = (unsigned int)Integer::parse(vCategoryID[i], 10);
101
102 for(size_t i = 0; i < vDeleteID.size(); i++)
103 Integer::parse(vDeleteID[i], 10);
104
105 SQLQuery& q = session.__query;
106 SQLQuery qInsert(q.connection());
107 SQLQuery qUpdate(q.connection());
108
109 qInsert.prepare(L""
110 "INSERT INTO DCL_PAGE_CATEGORY (CATEGORY_ID, CATEGORY_NAME, COMMENT"
111 ", UPDATE_TIME)"
112 "\n VALUES(:CATEGORY_ID, :CATEGORY_NAME, :COMMENT, CURRENT_TIMESTAMP)"
113 );
114 qUpdate.prepare(L""
115 "UPDATE DCL_PAGE_CATEGORY"
116 "\n SET CATEGORY_NAME = :CATEGORY_NAME"
117 ", COMMENT = :COMMENT, UPDATE_TIME = CURRENT_TIMESTAMP"
118 "\n WHERE CATEGORY_ID = :CATEGORY_ID"
119 );
120
121 int iDelete = 0;
122 for(size_t i = 0; i < vCategoryID.size() - 1; i++) {
123 if (iDelete < (ssize_t) vDeleteID.size() && vCategoryID[i] == vDeleteID[iDelete]) {
124 q.execute(L""
125 "SELECT COUNT(*) FROM DCL_PAGE "
126 "\n WHERE CATEGORY_ID = " + vDeleteID[iDelete]
127 );
128 q.fetch();
129 if (q.fields()[0].asInteger() == 0) {
130 q.execute(L""
131 "DELETE FROM DCL_PAGE_CATEGORY"
132 "\n WHERE CATEGORY_ID = " + vDeleteID[iDelete]
133 );
134 }
135 iDelete++;
136 }
137 else {
138 String& strID = vCategoryID[i];
139 String& strName = vCategoryName[i];
140 String& strDesc = vDescription[i];
141
142 q.execute(L""
143 "SELECT COUNT(*) FROM DCL_PAGE_CATEGORY"
144 "\n WHERE CATEGORY_ID = " + strID
145 );
146 q.fetch();
147
148 SQLQuery* pQuery = &qInsert;
149 if (q.fields()[0].asInteger() != 0) // then UPDATE
150 pQuery = &qUpdate;
151
152 pQuery->params().byName(L"CATEGORY_ID").setValue(vnCategoryID[i]);
153 pQuery->params().byName(L"CATEGORY_NAME").setValue(strName);
154 if (strDesc.isEmpty())
155 pQuery->params().byName(L"COMMENT").setNull();
156 else
157 pQuery->params().byName(L"COMMENT").setValue(strDesc);
158
159 pQuery->execute();
160 }
161 }
162
163 __pPage->refresh(session, session.__ctx.getHttpHeader(L"Referer"));
164}
165
167
169 : HtmlView(pPage)
170{
171 __nParts = 5;
172 __nRows = 20;
173 __nShortComment = 10;
174}
175
178{
179 HtmlView::init(fields);
180
181 __mapParams.lookup(L"DETAIL", __strDetailPage);
182 __mapParams.lookup(L"WRITE", __strWritePage);
183
184 String rValue;
185
186 if (__mapParams.lookup(L"PARTS", rValue) && !rValue.isEmpty()) {
187 __nParts = Integer::parse(rValue, 10, __nParts);
188 if (__nParts < 5 || __nParts > 20)
189 __nParts = 5;
190 }
191
192 if (__mapParams.lookup(L"ROWS", rValue) && !rValue.isEmpty()) {
193 __nRows = Integer::parse(rValue, 10, __nRows);
194 if (__nRows <= 0)
195 __nRows = 20;
196 }
197
198 if (__mapParams.lookup(L"SHORT_COMMENT", rValue) && !rValue.isEmpty()) {
199 int n = Integer::parse(rValue, 10, __nShortComment);
200 if (n > 0)
201 __nShortComment = n;
202 }
203}
204
207{
208 SQLQuery& q = session.__query;
209 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
210
211 int nCurrentPart = Integer::parse(getDefault(mapQuery, L"part"), 10, 1);
212 int nRows = __nRows;
213
214 String strDetailPage = __strDetailPage;
215 String strWritePage = __strWritePage;
216 StringBuilder strThisPage = __pPage->__strPageID;
217 String strThisPageEnc;
218
219 String strCategoryID = getDefault(mapQuery, L"category");
220
221 TextTemplate& CATEGORY = (*this)[L"CATEGORY"];
222 q.execute(L""
223 "SELECT CATEGORY_ID, CATEGORY_NAME"
224 "\n FROM DCL_PAGE_CATEGORY"
225 "\n ORDER BY CATEGORY_ID"
226 );
227 q.fetch();
228 while(!q.eof()) {
229 CATEGORY.assign(q.fields(), L"");
230 append(L"CATEGORY", CATEGORY);
231
232 q.fetch();
233 }
234
235 String strWhere;
236 if (!strCategoryID.isEmpty()) {
237 strWhere = L"\n WHERE P.CATEGORY_ID = " + strCategoryID;
238 strThisPage += L"&category=" + strCategoryID;
239 }
240
241 assign(L"DETAIL", strDetailPage);
242 assign(L"WRITE", strWritePage);
243 assign(L"_THIS", URLEncoder::encode(strThisPage));
244 assign(L"CATEGORY_ID", strCategoryID);
245
246 int nUsingRecord = nRows;
247 int nTotalRecord = nUsingRecord;
248 int nTotalPart = 1;
249
250 // nNo를 표시하기 위해서 조건에 만족하는 전체레코드의 개수가 항상 필요하다.
251 q.execute(L""
252 "SELECT COUNT(*) "
253 "\n FROM DCL_PAGE AS P"
254 + strWhere
255 );
256 q.fetch();
257 nTotalRecord = q.fields()[0].asInteger();
258 if (nTotalRecord == 0) {
259 assign(L"EMPTY", (*this)[L"EMPTY"]);
260 HtmlView::onPrint(session);
261 return;
262 }
263
264 __DCL_VERIFY(nTotalRecord > 0);
265
266 nTotalPart = nTotalRecord / nUsingRecord;
267 if (nTotalRecord % nUsingRecord)
268 nTotalPart++;
269
270 if (nCurrentPart <= 0 || nCurrentPart > nTotalPart)
271 nCurrentPart = nTotalPart;
272
273 StringBuilder strThisPageEx = strThisPage;
274 if (nCurrentPart > 1)
275 strThisPageEx += L"&part=" + String::valueOf(nCurrentPart);
276
277 strThisPageEnc = URLEncoder::encode(strThisPageEx);
278 assign(L"_THIS", strThisPageEnc);
279
280 int nOffset = (nCurrentPart - 1) * nUsingRecord;
281
282 int nNo = nTotalRecord - ((nCurrentPart - 1) * nUsingRecord);
283 int nRow = 1;
284 TextTemplate& PAGE = (*this)[L"PAGE"];
285
286 q.execute(L""
287 "SELECT P.PAGE_ID, P.TYPE, P.CHARSET, P.LANGUAGE, P.TITLE, P.COMMENT"
288 ", P.UPDATE_TIME, R.ROLE_NAME, C.CATEGORY_NAME"
289 "\n FROM DCL_PAGE AS P"
290 "\n INNER JOIN DCL_ROLE AS R ON (P.PERM_ID = R.ROLE_ID)"
291 "\n INNER JOIN DCL_PAGE_CATEGORY AS C ON (P.CATEGORY_ID = C.CATEGORY_ID)"
292 + strWhere + L""
293 "\n ORDER BY P.PAGE_ID DESC"
294 "\n LIMIT " + String::valueOf(nUsingRecord) + L""
295 "\n OFFSET " + String::valueOf(nOffset)
296 );
297
298 q.fetch();
299 if (q.eof())
300 assign(L"EMPTY", (*this)[L"EMPTY"]);
301 else {
302 do {
303 PAGE.assign(q.fields(), L"&nbsp;");
304 SQLField& field = q.fields().byName(L"COMMENT");
305 if (field.isNull()) {
306 PAGE.assign(L"COMMENT", L"");
307 PAGE.assign(L"SHORT_COMMENT", L"&nbsp;");
308 }
309 else {
310 String strDesc = field.asString();
311 if ((ssize_t) strDesc.length() > __nShortComment)
312 PAGE.assign(L"SHORT_COMMENT", strDesc.left(__nShortComment) + L"...");
313 else
314 PAGE.assign(L"SHORT_COMMENT", strDesc);
315 }
316
317 PAGE.assign(L"NO", String::valueOf(nNo--));
318 PAGE.assign(L"DETAIL", strDetailPage);
319 PAGE.assign(L"WRITE", strWritePage);
320 PAGE.assign(L"_THIS", strThisPageEnc);
321
322 append(L"PAGE", PAGE);
323
324 q.fetch();
325 } while(!q.eof());
326
327 TextTemplate* pPART_LINK = atP(L"PART_LINK");
328 if (pPART_LINK && nTotalPart > 1) {
329 PartLink pl(pPART_LINK, strThisPage, String());
330 pl.assign(this, nTotalPart, nCurrentPart, __nParts);
331 }
332 }
333
334 HtmlView::onPrint(session);
335}
336
343
346{
347 FormView::init(fields);
348
349 __mapParams.lookup(L"DETAIL", __strDetailPage);
350 __mapParams.lookup(L"LIST", __strListPage);
351}
352
355{
356 SQLQuery& q = session.__query;
357
358 TextTemplate& CATEGORY = (*this)[L"CATEGORY"];
359 q.execute(L""
360 "SELECT CATEGORY_ID, CATEGORY_NAME FROM DCL_PAGE_CATEGORY"
361 "\n ORDER BY CATEGORY_ID"
362 );
363 q.fetch();
364 while(!q.eof()) {
365 CATEGORY.assign(q.fields(), L"");
366 append(L"CATEGORY", CATEGORY);
367 q.fetch();
368 }
369
370 TextTemplate& ROLE = (*this)[L"ROLE"];
371 q.execute(L""
372 "SELECT ROLE_ID, ROLE_NAME FROM DCL_ROLE"
373 "\n WHERE ROLE_ID > 0"
374 "\n ORDER BY ROLE_ID"
375 );
376 q.fetch();
377 while(!q.eof()) {
378 ROLE.assign(q.fields(), L"");
379 append(L"ROLE", ROLE);
380 q.fetch();
381 }
382
383 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
384
385 String strListPage = getDefault(mapQuery, L"list");
386 if (!strListPage.isEmpty()) {
387 String strListPageEnc = URLEncoder::encode(strListPage);
388 assign(L"_LIST", strListPageEnc);
389 }
390 else
391 strListPage = __strListPage;
392
393 assign(L"LIST", strListPage);
394
395 String strPageID = getDefault(mapQuery, L"_page");
396 if (strPageID.isEmpty())
397 strPageID = L"-1";
398
399 q.execute(L""
400 "SELECT * FROM DCL_PAGE WHERE PAGE_ID = " + strPageID
401 );
402 q.fetch();
403 if (q.eof()) {
404 // insert NEW
405 q.execute(L"SELECT MAX(PAGE_ID) AS PAGE_ID FROM DCL_PAGE");
406 q.fetch();
407 if (q.eof() || q.fields()[0].isNull())
408 strPageID = L"1";
409 else {
410 int nPageID = q.fields()[0].asInteger();
411 if (nPageID < 201)
412 nPageID = 201;
413 else
414 nPageID++;
415
416 strPageID = String::valueOf(nPageID);
417 }
418 assign(L"PAGE_ID", strPageID);
419 }
420 else {
421 // modify
422 assign(q.fields(), L"");
423 assign(L"ACTION", L"&_page=" + strPageID);
424
425 q.execute(L""
426 "SELECT V.NO, V.CLASS_ID, V.USER_ID, V.DS_ID, V.SKIN_FILE"
427 ", V.PARAMETERS, D.DS_TYPE, D.DS_NAME"
428 "\n FROM DCL_VIEW AS V"
429 "\n INNER JOIN DCL_DATA_SOURCE AS D"
430 "\n ON(V.USER_ID = D.USER_ID AND V.DS_ID = D.DS_ID)"
431 "\n WHERE V.PAGE_ID = " + strPageID + L""
432 "\n ORDER BY V.NO"
433 );
434 q.fetch();
435 TextTemplate& VIEW = (*this)[L"VIEW"];
436 while(!q.eof()) {
437 VIEW.assign(q.fields(), L"");
438 const HtmlView::CLASS_INFO* pInfo =
439 HtmlView::getClassInfo(q.fields().byName(L"CLASS_ID").asInteger());
440 if (pInfo) {
441 VIEW.assign(L"CLASS_NAME", pInfo->className());
442 VIEW.assign(L"CLASS_DS_TYPE", String::valueOf(pInfo->nDsType));
443 }
444 else {
445 VIEW.assign(L"CLASS_NAME", L"Invalid ClassID");
446 VIEW.assign(L"CLASS_DS_TYPE", L"0");
447 }
448
449 VIEW.assign(L"VNO", VNO());
450 append(L"VIEW", VIEW);
451 q.fetch();
452 }
453 }
454
455 FormView::onPrint(session);
456}
457
460{
461// dump(session);
462// return;
463
464 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
465 ListedStringToStringArrayMap& mapForm = session.__ctx.__formMap;
466
467 int nOldPageID = Integer::parse(
468 getDefault(mapQuery, L"_page"),
469 10,
470 -1
471 );
472 int nPageID = Integer::parse(
473 getDefault(mapForm, L"PAGE_ID"),
474 10,
475 -1
476 );
477 int nCategoryID = Integer::parse(getDefault(mapForm, L"CATEGORY_ID"), 10, 0);
478 int nPermID = Integer::parse(getDefault(mapForm, L"PERM_ID"), 10, 1);
479 String strType = getDefault(mapForm, L"TYPE");
480 String strCharset = getDefault(mapForm, L"CHARSET");
481 String strLanguage = getDefault(mapForm, L"LANGUAGE");
482 String strTitle = getDefault(mapForm, L"TITLE");
483 String strDesc = getDefault(mapForm, L"COMMENT");
484
485 if (strType.isEmpty())
486 strType = L"text/html";
487
488 if (nPageID <= 0 ) {
489 // data error
490 return;
491 }
492
493 int nCM = CM_INSERT;
494 if (nOldPageID > 0)
495 nCM = CM_UPDATE;
496
497 SQLQuery& q = session.__query;
498 if (nCM == CM_INSERT) {
499 // insert
500 q.prepare(L""
501 "INSERT INTO DCL_PAGE (PAGE_ID, PERM_ID, CATEGORY_ID,"
502 " TYPE, CHARSET, LANGUAGE, TITLE,"
503 " COMMENT, UPDATE_TIME)\n"
504 "\n VALUES (:PAGE_ID, :PERM_ID, :CATEGORY_ID,"
505 " :TYPE, :CHARSET, :LANGUAGE, :TITLE,"
506 " :COMMENT, CURRENT_TIMESTAMP)"
507 );
508 }
509 else {
510 q.execute(L""
511 "DELETE FROM DCL_VIEW WHERE PAGE_ID = " + String::valueOf(nOldPageID)
512 );
513
514 q.prepare(L""
515 "UPDATE DCL_PAGE SET "
516 "\n PAGE_ID = :PAGE_ID,"
517 " PERM_ID = :PERM_ID,"
518 " CATEGORY_ID = :CATEGORY_ID,"
519 " TYPE = :TYPE, CHARSET = :CHARSET,"
520 " LANGUAGE = :LANGUAGE, TITLE = :TITLE,"
521 " COMMENT = :COMMENT,"
522 " UPDATE_TIME = CURRENT_TIMESTAMP"
523 "\n WHERE PAGE_ID = :OLD_PAGE_ID"
524 );
525 }
526
527 SQLParams& params = q.params();
528 params.byName(L"PAGE_ID").setValue(nPageID);
529 params.byName(L"PERM_ID").setValue(nPermID);
530 params.byName(L"CATEGORY_ID").setValue(nCategoryID);
531 params.byName(L"TYPE").setValue(strType);
532 if (strCharset.isEmpty())
533 params.byName(L"CHARSET").setNull();
534 else
535 params.byName(L"CHARSET").setValue(strCharset);
536
537 if (strLanguage.isEmpty())
538 params.byName(L"LANGUAGE").setNull();
539 else
540 params.byName(L"LANGUAGE").setValue(strLanguage);
541
542 if (strTitle.isEmpty())
543 params.byName(L"TITLE").setNull();
544 else
545 params.byName(L"TITLE").setValue(strTitle);
546
547 if (strDesc.isEmpty())
548 params.byName(L"COMMENT").setNull();
549 else
550 params.byName(L"COMMENT").setValue(strDesc);
551
552 if (nCM == CM_UPDATE)
553 params.byName(L"OLD_PAGE_ID").setValue(nOldPageID);
554
555 q.execute();
556
557 /*
558 try {
559 q.execute();
560 }
561 catch(SQLException* e) {
562 // insert 때 중복값이 발생하거나... 또는, ..
563 e->destroy();
564 return false;
565 }
566 */
567
568 StringArray& vCLASS = mapForm[L"CLASS_ID"];
569 StringArray& vUSER = mapForm[L"USER_ID"];
570 StringArray& vDS = mapForm[L"DS_ID"];
571 StringArray& vSKIN = mapForm[L"SKIN_FILE"];
572 StringArray& vPARAMS = mapForm[L"PARAMETERS"];
573
574 q.prepare(L""
575 "INSERT INTO DCL_VIEW "
576 "\n VALUES(:PAGE_ID, :NO, :CLASS_ID, :USER_ID, :DS_ID, :SKIN_FILE, :PARAMETERS)"
577 );
578 for(size_t i = 0; i < vCLASS.size(); i++) {
579 int nClassID = Integer::parse(vCLASS[i], 10, -1);
580 if (nClassID < 0) {
581 // error
582 break;
583 }
584 q.params().byName(L"PAGE_ID").setValue(nPageID);
585 q.params().byName(L"NO").setValue((int)(i + 1));
586 q.params().byName(L"CLASS_ID").setValue(nClassID);
587 q.params().byName(L"USER_ID").setValue(Integer::parse(vUSER[i], 10, -1));
588 q.params().byName(L"DS_ID").setValue(Integer::parse(vDS[i], 10, -1));
589 if (vSKIN[i].isEmpty())
590 q.params().byName(L"SKIN_FILE").setNull();
591 else
592 q.params().byName(L"SKIN_FILE").setValue(vSKIN[i]);
593
594 if (vPARAMS[i].isEmpty())
595 q.params().byName(L"PARAMETERS").setNull();
596 else
597 q.params().byName(L"PARAMETERS").setValue(vPARAMS[i]);
598
599 q.execute();
600 }
601
602 StringBuilder strNext = getDefault(mapQuery, L"next");
603 if (strNext.isEmpty()) {
604 strNext = __strDetailPage;
605 strNext += L"&_page=" + String::valueOf(nPageID);
606 }
607
608 String strListPage = getDefault(mapQuery, L"list");
609 if (!strListPage.isEmpty())
610 strNext += L"&list=" + URLEncoder::encode(strListPage);
611
612 __pPage->refresh(session, L"?page=" + strNext.toString());
613}
614
621
624{
625 HtmlView::init(fields);
626
627 __mapParams.lookup(L"LIST", __strListPage);
628 __mapParams.lookup(L"WRITE", __strWritePage);
629}
630
633{
634 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
635 SQLQuery& q = session.__query;
636
637 String strListPage = getDefault(mapQuery, L"list");
638 String strListPageEnc;
639 String strWritePage = __strWritePage;
640 String strPageIDs = String::join(mapQuery[L"_page"], L',', false);
641
642 if (strListPage.isEmpty())
643 strListPage = __strListPage;
644
645 strListPageEnc = URLEncoder::encode(strListPage);
646
647 assign(L"LIST", strListPage);
648 assign(L"_LIST", strListPageEnc);
649 assign(L"WRITE", strWritePage);
650
651 TextTemplate& PAGE = (*this)[L"PAGE"];
652 TextTemplate& EMPTY = (*this)[L"EMPTY"];
653
654 if (strPageIDs.isEmpty()) {
655 EMPTY.assign(L"LIST", strListPage);
656 assign(L"EMPTY", EMPTY);
657 HtmlView::onPrint(session);
658 return;
659 }
660
661 q.execute(L""
662 "SELECT P.PAGE_ID, P.TYPE, P.CHARSET, P.LANGUAGE,"
663 " P.TITLE, P.COMMENT, P.UPDATE_TIME, C.CATEGORY_NAME, R.ROLE_NAME"
664 "\n FROM DCL_PAGE AS P"
665 "\n INNER JOIN DCL_PAGE_CATEGORY AS C ON (P.CATEGORY_ID = C.CATEGORY_ID)"
666 "\n INNER JOIN DCL_ROLE AS R ON (P.PERM_ID = R.ROLE_ID)"
667 "\n WHERE P.PAGE_ID IN (" + strPageIDs + L")"
668 "\n ORDER BY P.PAGE_ID ASC"
669 );
670
671 q.fetch();
672 if (q.eof())
673 assign(L"EMPTY", EMPTY);
674 else {
675 TextTemplate& VIEW = PAGE[L"VIEW"];
676 TextTemplate& V_EMPTY = PAGE[L"EMPTY"];
677 SQLQuery qV(q.connection());
678 qV.prepare(L""
679 "SELECT V.NO, V.CLASS_ID, V.USER_ID, V.DS_ID, V.SKIN_FILE"
680 ", V.PARAMETERS, D.DS_TYPE, D.DS_NAME"
681 "\n FROM DCL_VIEW AS V"
682 "\n INNER JOIN DCL_DATA_SOURCE AS D"
683 "\n ON(V.USER_ID = D.USER_ID AND V.DS_ID = D.DS_ID)"
684 "\n WHERE V.PAGE_ID = :PAGE_ID"
685 "\n ORDER BY V.NO"
686 );
687
688 while(!q.eof())
689 {
690 PAGE.assign(q.fields(), L"&nbsp;");
691 PAGE.assign(L"LIST", strListPage);
692 PAGE.assign(L"_LIST", strListPageEnc);
693 PAGE.assign(L"WRITE", strWritePage);
694
695 StringBuilder strContentType = q.fields().byName(L"TYPE").asString();
696 if (!q.fields().byName(L"CHARSET").isNull()) {
697 strContentType += L"; charset=";
698 strContentType += q.fields().byName(L"CHARSET").asString();
699 }
700 PAGE.assign(L"CONTENT_TYPE", strContentType);
701
702 qV.params()[0].setValue(q.fields().byName(L"PAGE_ID").asInteger());
703 qV.execute();
704 qV.fetch();
705 if (qV.eof())
706 PAGE.assign(L"EMPTY", V_EMPTY);
707 else {
708 while(!qV.eof()) {
709 VIEW.assign(qV.fields(), L"&nbsp;");
710 VIEW.assign(L"CLASS_NAME", HtmlView::className(
711 qV.fields().byName(L"CLASS_ID").asInteger()
712 )
713 );
714 PAGE.append(L"EMPTY", VIEW);
715 qV.fetch();
716 }
717
718 }
719 append(L"EMPTY", PAGE);
720 PAGE.reset();
721 q.fetch();
722 }
723 }
724
725 HtmlView::onPrint(session);
726}
727
728__DCL_END_NAMESPACE
#define __THIS_FILE__
Definition _trace.h:14
wchar_t char_t
Definition Config.h:247
#define __DCL_THROWS1(e)
Definition Config.h:152
#define CM_UPDATE
#define CM_INSERT
#define IMPLEMENT_CLASSINFO_EX(class_name, base_class_name)
Definition HtmlView.h:37
#define __DCL_VERIFY(expr)
Definition Object.h:396
#define __T(str)
Definition Object.h:60
Definition ArrayT.h:42
String VNO() const
Definition HtmlView.cpp:293
StringToStringMap __mapParams
Definition HtmlView.h:112
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
Definition HtmlView.cpp:349
static String getDefault(ListedStringToStringArrayMap &map, const String &strKey)
Definition HtmlView.cpp:256
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
Definition HtmlView.cpp:298
HtmlPage * __pPage
Definition HtmlView.h:108
static int parse(const wchar_t *_number, unsigned _base=10) __DCL_THROWS1(NumericConvertException *)
Definition Numeric.inl:36
virtual void onPost(Session &session) __DCL_THROWS1(Exception *)
Definition Page.cpp:79
PageCategoryForm(HtmlPage *pPage)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
Definition Page.cpp:61
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
Definition Page.cpp:622
PageDetailView(HtmlPage *pPage)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
Definition Page.cpp:631
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
Definition Page.cpp:176
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
Definition Page.cpp:205
PageListView(HtmlPage *pPage)
PageWriteForm(HtmlPage *pPage)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
Definition Page.cpp:353
virtual void onPost(Session &session) __DCL_THROWS1(Exception *)
Definition Page.cpp:458
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
Definition Page.cpp:344
Definition SQL.h:48
_CONST SQLField & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
Definition SQLQuery.cpp:77
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
bool eof() const
Definition SQL.inl:91
SQLConnection * connection() const
Definition SQL.inl:116
void fetch() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:336
static ByteString encode(const ByteString &_str)
Definition URI.cpp:82