15#if __DCL_HAVE_THIS_FILE__
28ClassListView::ClassListView(
HtmlPage* pPage)
33void ClassListView::onPrint(
Session& session)
36 session.__ctx.addHeader(
HttpHeader(L
"Cache-Control", L
"no-cache"));
38 assign(L
"TITLE", __pPage->__strTitle);
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);
66 TextTemplate& CATEGORY = (*this)[L
"CATEGORY"];
67 q.
execute(L
"SELECT * FROM DCL_PAGE_CATEGORY ORDER BY CATEGORY_ID");
70 CATEGORY.assign(q.
fields(), L
"");
71 CATEGORY.assign(L
"VNO",
VNO());
72 append(L
"CATEGORY", CATEGORY);
76 FormView::onPrint(session);
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"];
90 if (vCategoryID.size() <= 1) {
92 __pPage->refresh(session, session.__ctx.getHttpHeader(L
"Referer"));
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);
102 for(
size_t i = 0; i < vDeleteID.size(); i++)
110 "INSERT INTO DCL_PAGE_CATEGORY (CATEGORY_ID, CATEGORY_NAME, COMMENT"
112 "\n VALUES(:CATEGORY_ID, :CATEGORY_NAME, :COMMENT, CURRENT_TIMESTAMP)"
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"
122 for(
size_t i = 0; i < vCategoryID.size() - 1; i++) {
123 if (iDelete < (ssize_t) vDeleteID.size() && vCategoryID[i] == vDeleteID[iDelete]) {
125 "SELECT COUNT(*) FROM DCL_PAGE "
126 "\n WHERE CATEGORY_ID = " + vDeleteID[iDelete]
129 if (q.
fields()[0].asInteger() == 0) {
131 "DELETE FROM DCL_PAGE_CATEGORY"
132 "\n WHERE CATEGORY_ID = " + vDeleteID[iDelete]
138 String& strID = vCategoryID[i];
139 String& strName = vCategoryName[i];
140 String& strDesc = vDescription[i];
143 "SELECT COUNT(*) FROM DCL_PAGE_CATEGORY"
144 "\n WHERE CATEGORY_ID = " + strID
149 if (q.
fields()[0].asInteger() != 0)
152 pQuery->
params().
byName(L
"CATEGORY_ID").setValue(vnCategoryID[i]);
153 pQuery->
params().
byName(L
"CATEGORY_NAME").setValue(strName);
154 if (strDesc.isEmpty())
163 __pPage->refresh(session, session.__ctx.getHttpHeader(L
"Referer"));
173 __nShortComment = 10;
186 if (
__mapParams.lookup(L
"PARTS", rValue) && !rValue.isEmpty()) {
188 if (__nParts < 5 || __nParts > 20)
192 if (
__mapParams.lookup(L
"ROWS", rValue) && !rValue.isEmpty()) {
198 if (
__mapParams.lookup(L
"SHORT_COMMENT", rValue) && !rValue.isEmpty()) {
209 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
214 String strDetailPage = __strDetailPage;
215 String strWritePage = __strWritePage;
216 StringBuilder strThisPage =
__pPage->__strPageID;
217 String strThisPageEnc;
219 String strCategoryID =
getDefault(mapQuery, L
"category");
221 TextTemplate& CATEGORY = (*this)[L
"CATEGORY"];
223 "SELECT CATEGORY_ID, CATEGORY_NAME"
224 "\n FROM DCL_PAGE_CATEGORY"
225 "\n ORDER BY CATEGORY_ID"
229 CATEGORY.assign(q.
fields(), L
"");
230 append(L
"CATEGORY", CATEGORY);
236 if (!strCategoryID.isEmpty()) {
237 strWhere = L
"\n WHERE P.CATEGORY_ID = " + strCategoryID;
238 strThisPage += L
"&category=" + strCategoryID;
241 assign(L
"DETAIL", strDetailPage);
242 assign(L
"WRITE", strWritePage);
244 assign(L
"CATEGORY_ID", strCategoryID);
246 int nUsingRecord = nRows;
247 int nTotalRecord = nUsingRecord;
253 "\n FROM DCL_PAGE AS P"
257 nTotalRecord = q.
fields()[0].asInteger();
258 if (nTotalRecord == 0) {
259 assign(L
"EMPTY", (*
this)[L
"EMPTY"]);
266 nTotalPart = nTotalRecord / nUsingRecord;
267 if (nTotalRecord % nUsingRecord)
270 if (nCurrentPart <= 0 || nCurrentPart > nTotalPart)
271 nCurrentPart = nTotalPart;
273 StringBuilder strThisPageEx = strThisPage;
274 if (nCurrentPart > 1)
275 strThisPageEx += L
"&part=" + String::valueOf(nCurrentPart);
278 assign(L
"_THIS", strThisPageEnc);
280 int nOffset = (nCurrentPart - 1) * nUsingRecord;
282 int nNo = nTotalRecord - ((nCurrentPart - 1) * nUsingRecord);
284 TextTemplate& PAGE = (*this)[L
"PAGE"];
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)"
293 "\n ORDER BY P.PAGE_ID DESC"
294 "\n LIMIT " + String::valueOf(nUsingRecord) + L
""
295 "\n OFFSET " + String::valueOf(nOffset)
300 assign(L
"EMPTY", (*
this)[L
"EMPTY"]);
303 PAGE.assign(q.
fields(), L
" ");
305 if (field.isNull()) {
306 PAGE.assign(L
"COMMENT", L
"");
307 PAGE.assign(L
"SHORT_COMMENT", L
" ");
310 String strDesc = field.asString();
311 if ((ssize_t) strDesc.length() > __nShortComment)
312 PAGE.assign(L
"SHORT_COMMENT", strDesc.left(__nShortComment) + L
"...");
314 PAGE.assign(L
"SHORT_COMMENT", strDesc);
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);
322 append(L
"PAGE", PAGE);
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);
358 TextTemplate& CATEGORY = (*this)[L
"CATEGORY"];
360 "SELECT CATEGORY_ID, CATEGORY_NAME FROM DCL_PAGE_CATEGORY"
361 "\n ORDER BY CATEGORY_ID"
365 CATEGORY.assign(q.
fields(), L
"");
366 append(L
"CATEGORY", CATEGORY);
370 TextTemplate& ROLE = (*this)[L
"ROLE"];
372 "SELECT ROLE_ID, ROLE_NAME FROM DCL_ROLE"
373 "\n WHERE ROLE_ID > 0"
374 "\n ORDER BY ROLE_ID"
378 ROLE.assign(q.
fields(), L
"");
379 append(L
"ROLE", ROLE);
383 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
385 String strListPage =
getDefault(mapQuery, L
"list");
386 if (!strListPage.isEmpty()) {
388 assign(L
"_LIST", strListPageEnc);
391 strListPage = __strListPage;
393 assign(L
"LIST", strListPage);
395 String strPageID =
getDefault(mapQuery, L
"_page");
396 if (strPageID.isEmpty())
400 "SELECT * FROM DCL_PAGE WHERE PAGE_ID = " + strPageID
405 q.
execute(L
"SELECT MAX(PAGE_ID) AS PAGE_ID FROM DCL_PAGE");
410 int nPageID = q.
fields()[0].asInteger();
416 strPageID = String::valueOf(nPageID);
418 assign(L
"PAGE_ID", strPageID);
423 assign(L
"ACTION", L
"&_page=" + strPageID);
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
""
435 TextTemplate& VIEW = (*this)[L
"VIEW"];
437 VIEW.assign(q.
fields(), L
"");
438 const HtmlView::CLASS_INFO* pInfo =
439 HtmlView::getClassInfo(q.
fields().
byName(L
"CLASS_ID").asInteger());
441 VIEW.assign(L
"CLASS_NAME", pInfo->className());
442 VIEW.assign(L
"CLASS_DS_TYPE", String::valueOf(pInfo->nDsType));
445 VIEW.assign(L
"CLASS_NAME", L
"Invalid ClassID");
446 VIEW.assign(L
"CLASS_DS_TYPE", L
"0");
449 VIEW.assign(L
"VNO",
VNO());
450 append(L
"VIEW", VIEW);
455 FormView::onPrint(session);
464 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
465 ListedStringToStringArrayMap& mapForm = session.__ctx.__formMap;
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");
485 if (strType.isEmpty())
486 strType = L
"text/html";
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)"
511 "DELETE FROM DCL_VIEW WHERE PAGE_ID = " + String::valueOf(nOldPageID)
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"
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();
535 params.
byName(L
"CHARSET").setValue(strCharset);
537 if (strLanguage.isEmpty())
538 params.
byName(L
"LANGUAGE").setNull();
540 params.
byName(L
"LANGUAGE").setValue(strLanguage);
542 if (strTitle.isEmpty())
543 params.
byName(L
"TITLE").setNull();
545 params.
byName(L
"TITLE").setValue(strTitle);
547 if (strDesc.isEmpty())
548 params.
byName(L
"COMMENT").setNull();
550 params.
byName(L
"COMMENT").setValue(strDesc);
553 params.
byName(L
"OLD_PAGE_ID").setValue(nOldPageID);
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"];
575 "INSERT INTO DCL_VIEW "
576 "\n VALUES(:PAGE_ID, :NO, :CLASS_ID, :USER_ID, :DS_ID, :SKIN_FILE, :PARAMETERS)"
578 for(
size_t i = 0; i < vCLASS.size(); i++) {
589 if (vSKIN[i].isEmpty())
594 if (vPARAMS[i].isEmpty())
602 StringBuilder strNext =
getDefault(mapQuery, L
"next");
603 if (strNext.isEmpty()) {
604 strNext = __strDetailPage;
605 strNext += L
"&_page=" + String::valueOf(nPageID);
608 String strListPage =
getDefault(mapQuery, L
"list");
609 if (!strListPage.isEmpty())
612 __pPage->refresh(session, L
"?page=" + strNext.toString());
634 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
637 String strListPage =
getDefault(mapQuery, L
"list");
638 String strListPageEnc;
639 String strWritePage = __strWritePage;
640 String strPageIDs = String::join(mapQuery[L
"_page"], L
',',
false);
642 if (strListPage.isEmpty())
643 strListPage = __strListPage;
647 assign(L
"LIST", strListPage);
648 assign(L
"_LIST", strListPageEnc);
649 assign(L
"WRITE", strWritePage);
651 TextTemplate& PAGE = (*this)[L
"PAGE"];
652 TextTemplate& EMPTY = (*this)[L
"EMPTY"];
654 if (strPageIDs.isEmpty()) {
655 EMPTY.assign(L
"LIST", strListPage);
656 assign(L
"EMPTY", EMPTY);
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"
673 assign(L
"EMPTY", EMPTY);
675 TextTemplate& VIEW = PAGE[L
"VIEW"];
676 TextTemplate& V_EMPTY = PAGE[L
"EMPTY"];
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"
690 PAGE.assign(q.
fields(), L
" ");
691 PAGE.assign(L
"LIST", strListPage);
692 PAGE.assign(L
"_LIST", strListPageEnc);
693 PAGE.assign(L
"WRITE", strWritePage);
695 StringBuilder strContentType = q.
fields().
byName(L
"TYPE").asString();
697 strContentType += L
"; charset=";
698 strContentType += q.
fields().
byName(L
"CHARSET").asString();
700 PAGE.assign(L
"CONTENT_TYPE", strContentType);
706 PAGE.assign(L
"EMPTY", V_EMPTY);
709 VIEW.assign(qV.
fields(), L
" ");
710 VIEW.assign(L
"CLASS_NAME", HtmlView::className(
714 PAGE.append(L
"EMPTY", VIEW);
719 append(L
"EMPTY", PAGE);
#define IMPLEMENT_CLASSINFO_EX(class_name, base_class_name)
#define __DCL_VERIFY(expr)
StringToStringMap __mapParams
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
static String getDefault(ListedStringToStringArrayMap &map, const String &strKey)
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
static int parse(const wchar_t *_number, unsigned _base=10) __DCL_THROWS1(NumericConvertException *)
virtual void onPost(Session &session) __DCL_THROWS1(Exception *)
PageCategoryForm(HtmlPage *pPage)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
PageDetailView(HtmlPage *pPage)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
PageListView(HtmlPage *pPage)
PageWriteForm(HtmlPage *pPage)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
virtual void onPost(Session &session) __DCL_THROWS1(Exception *)
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
void assign(TextTemplate *pDest, int nTotalPart, int nCurrentPart, int nNumberPart)
_CONST SQLField & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
SQLParam & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
void prepare(const String &_sql) __DCL_THROWS1(SQLException *)
_CONST SQLParams & params() _CONST
_CONST SQLFields & fields() _CONST
void execute() __DCL_THROWS1(SQLException *)
SQLConnection * connection() const
void fetch() __DCL_THROWS1(SQLException *)
static ByteString encode(const ByteString &_str)