17#if __DCL_HAVE_THIS_FILE__
26SignCheckForm::SignCheckForm(
HtmlPage* pPage)
31void SignCheckForm::init(
SQLFields& fields)
36 __mapParams.lookup(L
"REJECT", __strReject);
39static bool __isValidSignID(
const String& strSignID)
41 const wchar_t* psz = strSignID.data();
44 (L
'a' <= *psz && *psz <=
'z')
45 || (L
'0' <= *psz && *psz <=
'9')
53void SignCheckForm::onPrint(
Session& session)
57 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
58 ListedStringToStringArrayMap& mapForm = session.__ctx.__formMap;
60 String strSignID = getDefault(mapForm, L
"SIGN_ID");
61 String strNickname = getDefault(mapForm, L
"NICKNAME");
63 assign(L
"SIGN_ID", strSignID);
64 assign(L
"NICKNAME", strNickname);
66 if (!strSignID.isEmpty() || !strNickname.isEmpty()) {
67 bool bAcceptSignID =
false;
68 bool bAcceptNickname =
false;
71 "DELETE FROM DCL_SIGN_LOCK"
72 "\n WHERE UPDATE_TIME < SUBTIME(CURRENT_TIMESTAMP, \'01:00:00\')"
75 q.
execute(L
"SET AUTOCOMMIT = 0");
78 "\n FROM DCL_DATA_SOURCE"
79 "\n WHERE USER_ID = 0 AND DS_ID = -1"
83 if (!strSignID.isEmpty()) {
84 strSignID = strSignID.toLowerCase();
86 if (__strReject.contains(strSignID))
89 if (!__isValidSignID(strSignID))
93 "SELECT USER_ID, SIGN_ID"
95 "\n WHERE SIGN_ID = \'" + strSignID + L
"\'"
98 if (!q.
eof() && q.
fields()[0].asInteger() != session.__nUserID)
102 "SELECT SESSION_ID, SIGN_ID"
103 "\n FROM DCL_SIGN_LOCK"
104 "\n WHERE SIGN_ID = \'" + strSignID + L
"\'"
107 if (!q.
eof() && q.
fields()[0].asString() != session.__strSessionID)
110 bAcceptSignID =
true;
115 if (!strNickname.isEmpty()) {
117 if (__strReject.contains(strNickname))
121 "SELECT USER_ID, NICKNAME"
123 "\n WHERE NICKNAME = \'" + strNickname + L
"\'"
126 if (!q.
eof() && q.
fields()[0].asInteger() != session.__nUserID)
130 "SELECT SESSION_ID, NICKNAME"
131 "\n FROM DCL_SIGN_LOCK"
132 "\n WHERE NICKNAME = \'" + strNickname + L
"\'"
135 if (!q.
eof() && q.
fields()[0].asString() != session.__strSessionID)
138 bAcceptNickname =
true;
143 StringBuilder strSQL = L
"UPDATE DCL_SIGN_LOCK SET UPDATE_TIME = CURRENT_TIMESTAMP, L";
144 if (!strSignID.isEmpty()) {
146 strSQL += L
"SIGN_ID = \'" + strSignID + L
"\'";
148 strSQL += L
"SIGN_ID = NULL";
150 if (!strNickname.isEmpty()) {
151 if (!strSignID.isEmpty())
154 strSQL += L
"NICKNAME = \'" + strNickname + L
"\'";
156 strSQL += L
"NICKNAME = NULL";
158 strSQL += L
"\n WHERE SESSION_ID = \'" + session.__strSessionID + L
"\'";
163 "INSERT INTO DCL_SIGN_LOCK"
164 "\n (SESSION_ID, SIGN_ID, NICKNAME, UPDATE_TIME)"
165 "\n VALUES(:SESSION_ID, :SIGN_ID, :NICKNAME, CURRENT_TIMESTAMP)"
168 q.
params()[0].setValue(session.__strSessionID);
170 q.
params()[1].setValue(strSignID);
172 q.
params()[2].setValue(strNickname);
182 q.
execute(L
"SET AUTOCOMMIT = 1");
184 bool bAcceptAssigned =
false;
185 bool bRejectAssigned =
false;
189 if (!strSignID.isEmpty()) {
191 assign(L
"ACCEPTED_SIGN_ID", strSignID);
192 ACCEPTED.assign(L
"SIGN_ID", strSignID);
193 bAcceptAssigned =
true;
196 REJECTED.assign(L
"SIGN_ID", strSignID);
197 bRejectAssigned =
true;
201 if (!strNickname.isEmpty()) {
202 if (bAcceptNickname) {
203 assign(L
"ACCEPTED_NICKNAME", strNickname);
204 ACCEPTED.assign(L
"NICKNAME", strNickname);
205 bAcceptAssigned =
true;
208 REJECTED.assign(L
"NICKNAME", strNickname);
209 bRejectAssigned =
true;
213 if (bAcceptAssigned) {
214 ACCEPTED.assign(L
"VNO", VNO());
215 assign(L
"ACCEPTED", ACCEPTED);
217 if (bRejectAssigned) {
218 REJECTED.assign(L
"VNO", VNO());
219 assign(L
"REJECTED", REJECTED);
223 FormView::onPrint(session);
226void SignCheckForm::onPost(
Session& session)
229 __pPage->print(session);
234UserListView::UserListView(
HtmlPage* pPage)
240 __origin = ORIGIN_ALL;
244void UserListView::init(
SQLFields& fields)
249 __mapParams.lookup(L
"DETAIL", __strDetailPage);
250 __mapParams.lookup(L
"WRITE", __strWritePage);
253 if (__mapParams.lookup(L
"PARTS", rValue) && !rValue.isEmpty()) {
255 if (5 <= n && n <= 20)
259 if (__mapParams.lookup(L
"ROWS", rValue) && !rValue.isEmpty()) {
265 if (__mapParams.lookup(L
"SHORT_COMMENT", rValue) && !rValue.isEmpty()) {
271 if (__mapParams.lookup(L
"ORIGIN", rValue) && !rValue.isEmpty()) {
272 if (!rValue.compareNoCase(L
"USER"))
273 __origin = ORIGIN_USER;
274 else if (!rValue.compareNoCase(L
"GROUP"))
275 __origin = ORIGIN_GROUP;
276 else if (!rValue.compareNoCase(L
"SYSTEM"))
277 __origin = ORIGIN_SYSTEM;
279 if (__mapParams.lookup(L
"NO", rValue) && !rValue.isEmpty()) {
280 if (!rValue.compareNoCase(L
"ASC"))
285void UserListView::onPrint(
Session& session)
289 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
291 int nCurrentPart =
Integer::parse(getDefault(mapQuery, L
"part"), 10, 1);
294 String strDetailPage = __strDetailPage;
295 String strWritePage = __strWritePage;
296 StringBuilder strThisPage = __pPage->__strPageID;
297 String strThisPageEnc;
299 String strOrigin = getDefault(mapQuery, L
"origin");
300 String strCategoryID = getDefault(mapQuery, L
"category");
301 String strName = getDefault(mapQuery, L
"name");
302 String strOwner = getDefault(mapQuery, L
"owner");
303 String strSort = getDefault(mapQuery, L
"sort");
305 StringBuilder strWhere;
311 if (!strCategoryID.isEmpty())
312 strWhere = L
"U.CATEGORY_ID = " + strCategoryID;
313 else if (!strOrigin.isEmpty()) {
316 strWhere = L
"U.CATEGORY_ID > 0";
317 else if (nOrigin < 0)
318 strWhere = L
"U.CATEGORY_ID < 0";
320 strWhere = L
"U.CATEGORY_ID = 0";
327 nCategoryID = -nCategoryID;
329 strWhere = L
"U.CATEGORY_ID = " + String::valueOf(nCategoryID);
331 strWhere = L
"U.CATEGORY_ID < 0";
337 nCategoryID = -nCategoryID;
340 strWhere = L
"U.CATEGORY_ID = " + String::valueOf(nCategoryID);
342 strWhere = L
"U.CATEGORY_ID > 0";
345 case ORIGIN_SYSTEM: {
346 strWhere = L
"U.CATEGORY_ID = 0";
351 if (!strName.isEmpty() || !strOwner.isEmpty()) {
352 if (!strWhere.isEmpty())
353 strWhere += L
" AND ";
355 if (!strName.isEmpty())
356 strWhere += L
"(U.SIGN_ID LIKE \'%" + strName + L
"%\'"
357 " OR U.USER_NAME LIKE \'%" + strName + L
"%\')";
359 strWhere += L
"(O.SIGN_ID LIKE \'%" + strOwner + L
"%\'"
360 " OR O.USER_NAME LIKE \'%" + strOwner + L
"%\')";
363 if (!strCategoryID.isEmpty())
364 strThisPage += L
"&category=" + strCategoryID;
365 else if (!strOrigin.isEmpty())
366 strThisPage += L
"&origin=" + strOrigin;
368 if (!strSort.isEmpty()) {
369 if (strSort == L
"member") {
370 strOrderBy = L
"U.NUSER DESC, U.USER_NAME ASC";
371 strThisPage += L
"&sort=member";
377 else if (strSort == L
"message") {
378 strOrderBy = L
"U.NMESSAGE DESC, U.USER_NAME ASC";
379 strThisPage += L
"&sort=message";
381 else if (session.isSysAdmin()) {
382 if (strSort == L
"id") {
384 strOrderBy = L
"U.USER_ID ASC";
385 strThisPage += L
"&sort=id";
387 else if (strSort == L
"sign") {
388 strOrderBy = L
"U.SIGN_ID ASC, U.USER_NAME ASC";
389 strThisPage += L
"&sort=sign";
391 else if (strSort == L
"name") {
392 strOrderBy = L
"U.USER_NAME ASC, U.SIGN_ID ASC";
393 strThisPage += L
"&sort=name";
395 else if (strSort == L
"owner") {
396 strOrderBy = L
"U.OWNER_ID ASC, U.USER_ID ASC";
397 strThisPage += L
"&sort=owner";
399 else if (strSort == L
"register") {
400 strOrderBy = L
"U.REGISTER_DATE DESC, U.SIGN_ID ASC";
401 strThisPage += L
"&sort=register";
406 if (strOrderBy.isEmpty())
407 strOrderBy = L
"U.NMEMBER DESC, U.NMESSAGE DESC, U.USER_NAME ASC";
412 assign(L
"DETAIL", strDetailPage);
413 assign(L
"WRITE", strWritePage);
414 assign(L
"SORT", strSort);
415 assign(L
"CATEGORY", strCategoryID);
416 assign(L
"ORIGIN", strOrigin);
417 assign(L
"NAME", strName);
418 assign(L
"OWNER", strOwner);
420 int nUsingRecord = nRows;
421 int nTotalRecord = nUsingRecord;
425 StringBuilder strSQL = L
""
427 "\n FROM DCL_USER AS U";
428 if (!strOwner.isEmpty())
429 strSQL += L
"\n INNER JOIN DCL_USER AS O ON (U.OWNER_ID = O.USER_ID)";
430 if (!strWhere.isEmpty())
431 strSQL += L
"\n WHERE " + strWhere.toString();
435 nTotalRecord = q.
fields()[0].asInteger();
436 if (nTotalRecord == 0) {
437 assign(L
"EMPTY", (*
this)[L
"EMPTY"]);
444 nTotalPart = nTotalRecord / nUsingRecord;
445 if (nTotalRecord % nUsingRecord)
448 if (nCurrentPart <= 0 || nCurrentPart > nTotalPart)
449 nCurrentPart = nTotalPart;
451 StringBuilder strThisPageEx = strThisPage;
452 if (nCurrentPart > 1)
453 strThisPageEx += L
"&part=" + String::valueOf(nCurrentPart);
456 assign(L
"_THIS", strThisPageEnc);
457 if (!session.isSysGuest()) {
459 ADD.assign(L
"WRITE", strWritePage);
460 ADD.assign(L
"CATEGORY_ID", strCategoryID);
461 ADD.assign(L
"_THIS", strThisPageEnc);
465 assign(L
"ADD", (*
this)[L
"NADD"]);
467 int nOffset = (nCurrentPart - 1) * nUsingRecord;
469 int nNo = nTotalRecord - ((nCurrentPart - 1) * nUsingRecord);
475 "SELECT U.USER_ID, U.SIGN_ID, U.USER_NAME, U.NICKNAME"
476 "\n, U.CATEGORY_ID, U.ROLE_ID, U.OWNER_ID"
477 "\n, U.OPEN_LEVEL, U.REGISTER_DATE, U.COMMENT"
478 "\n, U.TODAY_NMEMBER, U.TODAY_NMESSAGE, U.TODAY_NVISIT"
479 "\n, U.NMEMBER, U.NMESSAGE, U.NVISIT"
481 "\n, O.USER_NAME AS OWNER_NAME, O.NICKNAME AS OWNER_NICKNAME"
482 "\n FROM DCL_USER AS U"
483 "\n INNER JOIN DCL_ROLE AS R ON (U.ROLE_ID = R.ROLE_ID)"
484 "\n INNER JOIN DCL_USER AS O ON (U.OWNER_ID = O.USER_ID)";
485 if (!strWhere.isEmpty())
486 strSQL += L
"\n WHERE " + strWhere.
toString();
488 "\n ORDER BY " + strOrderBy + L
""
489 "\n LIMIT " + String::valueOf(nUsingRecord) + L
""
490 "\n OFFSET " + String::valueOf(nOffset);
497 assign(L
"EMPTY", (*
this)[L
"EMPTY"]);
502 ROW.assign(q.
fields(), L
" ");
504 if (session.isSysAdmin()) {
505 int nCategoryID = q.
fields().
byName(L
"CATEGORY_ID").asInteger();
509 else if (nCategoryID < 0)
513 ROW.assign(L
"ORIGIN", strOrigin);
516 if (__nShortComment > 0) {
520 __nShortComment, strLong, strShort) == 0
522 strShort = L
" ";
525 ROW.assign(L
"SHORT_COMMENT", strShort);
526 ROW.assign(L
"COMMENT", strLong);
529 ROW.assign(L
"NO", String::valueOf(nNo));
535 ROW.assign(L
"DETAIL", strDetailPage);
536 ROW.assign(L
"WRITE", strWritePage);
537 ROW.assign(L
"_THIS", strThisPageEnc);
539 ROW.assign(L
"_DHE", L
"dhed");
541 ROW.assign(L
"_DHE", L
"dhe");
549 if (pPART_LINK && nTotalPart > 1) {
550 PartLink pl(pPART_LINK, strThisPage, String());
551 pl.assign(
this, nTotalPart, nCurrentPart, __nParts);
560UserWriteForm::UserWriteForm(
HtmlPage* pPage)
563 __origin = ORIGIN_ALL;
566void UserWriteForm::init(
SQLFields& fields)
571 __mapParams.lookup(L
"LIST", __strListPage);
572 __mapParams.lookup(L
"DETAIL", __strDetailPage);
575 if (__mapParams.lookup(L
"ORIGIN", rValue) && !rValue.isEmpty()) {
576 if (!rValue.compareNoCase(L
"USER"))
577 __origin = ORIGIN_USER;
578 else if (!rValue.compareNoCase(L
"GROUP"))
579 __origin = ORIGIN_GROUP;
580 else if (!rValue.compareNoCase(L
"SYSTEM"))
581 __origin = ORIGIN_SYSTEM;
585void UserWriteForm::onPrint(
Session& session)
588 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
591 String strListPage = getDefault(mapQuery, L
"list");
592 if (!strListPage.isEmpty()) {
594 assign(L
"_LIST", strListPageEnc);
597 strListPage = __strListPage;
599 assign(L
"LIST", strListPage);
604 "SELECT ROLE_ID, ROLE_NAME FROM DCL_ROLE"
606 "\n ORDER BY ROLE_ID"
610 pROLE->assign(q.
fields(), L
"");
611 append(L
"ROLE", *pROLE);
624 String strCategoryID = getDefault(mapQuery, L
"category");
628 if (!strCategoryID.isEmpty()) {
630 assign(L
"ACTION", L
"&category=" + strCategoryID);
634 if (!session.isSysAdmin()) {
643 nCategoryID = -nCategoryID;
648 nCategoryID = -nCategoryID;
655 "SELECT CATEGORY_ID, CATEGORY_NAME"
656 "\n FROM DCL_GROUP_CATEGORY"
657 "\n WHERE CATEGORY_ID = " + String::valueOf(nCategoryID)
662 __DCL_TRACE1(L
"Invalid CATEGORY_ID: %d\n", nCategoryID);
668 String strUserID = getDefault(mapQuery, L
"user");
669 if (!strUserID.isEmpty()) {
670 assign(L
"ACTION", L
"&user=" + strUserID);
674 nUserID = session.__nUserID;
676 if (session.isSysGuest()) {
690 else if (nCategoryID < 0)
694 assign(L
"ORIGIN", strOrigin);
704 "SELECT U.USER_ID, U.SIGN_ID, U.USER_NAME, U.NICKNAME"
705 "\n,U.ROLE_ID, U.OWNER_ID, U.CATEGORY_ID"
706 "\n,U.OPEN_LEVEL, U.REMARK"
708 "\n,U.BIRTHDAY, U.SEX, U.MARRIAGE"
711 "\n,U.EMAIL, U.HOMEPAGE, U.MESSENGER1, U.MESSENGER2, U.TEL1, U.TEL2"
712 "\n,U.ZIPCODE, U.ADDR, U.ADDR_BUNJI, U.PIC_NAME"
713 "\n,O.USER_NAME AS OWNER_NAME"
715 "\n FROM DCL_USER AS U"
716 "\n INNER JOIN DCL_USER AS O ON (U.OWNER_ID = O.USER_ID)"
717 "\n INNER JOIN DCL_USER_CATEGORY AS C ON (U.CATEGORY_ID = C.CATEGORY_ID)"
718 "\n WHERE U.USER_ID = " + String::valueOf(nUserID)
729 FormView::onPrint(session);
732void UserWriteForm::onPost(
Session& session)
735 session.__ctx.setContentType(L
"text/html");
740 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
741 ListedStringToStringArrayMap& mapForm = session.__ctx.__formMap;
748 String strCategoryID = getDefault(mapQuery, L
"category");
752 if (!strCategoryID.isEmpty()) {
757 if (!session.isSysAdmin()) {
766 nCategoryID = -nCategoryID;
771 nCategoryID = -nCategoryID;
778 "SELECT CATEGORY_ID, CATEGORY_NAME"
779 "\n FROM DCL_GROUP_CATEGORY"
780 "\n WHERE CATEGORY_ID = " + String::valueOf(nCategoryID)
785 __DCL_TRACE1(L
"Invalid CATEGORY_ID: %d\n", nCategoryID);
791 if (session.isSysGuest()) {
796 String strUserID = getDefault(mapQuery, L
"user");
797 if (!strUserID.isEmpty())
800 nUserID = session.__nUserID;
802 strUserID = getDefault(mapForm, L
"USER_ID");
803 if (strUserID.isEmpty()
806 __DCL_TRACE2(L
"%d != %ls\n", nUserID, strUserID.data());
810 nCategoryID =
Integer::parse(getDefault(mapForm, L
"CATEGORY_ID"), 10, 0);
825 bool bModifiedSignID =
false;
827 String strSignID = getDefault(mapForm, L
"SIGN_ID");
829 String strOrgSignID = getDefault(mapForm, L
"_SIGN_ID");
830 if (strSignID != strOrgSignID) {
835 "\n FROM DCL_SIGN_LOCK"
836 "\n WHERE SESSION_ID = \'" + session.__strSessionID + L
"\'"
841 || q.
fields()[0].asString() != strSignID
843 __DCL_TRACE1(L
"검사되지 않은 SIGN_ID !! - \"%ls\"\n", strSignID.data());
846 bModifiedSignID =
true;
850 String strPassword = getDefault(mapForm, L
"PASSWORD");
851 String strUserName = getDefault(mapForm, L
"USER_NAME");
852 String strNickname = getDefault(mapForm, L
"NICKNAME");
854 String strComment =
Html::strip(getDefault(mapForm, L
"COMMENT"),
NULL);
855 String strRemark = getDefault(mapForm, L
"REMARK");
857 String strJuminNumber = getDefault(mapForm, L
"JUMIN_NUMBER");
858 String strBirthday = getDefault(mapForm, L
"BIRTHDAY");
859 String strSex = getDefault(mapForm, L
"SEX");
860 String strMarriage = getDefault(mapForm, L
"MARRIAGE");
861 String strJob = getDefault(mapForm, L
"JOB");
862 String strOffice = getDefault(mapForm, L
"OFFICE");
864 String strEMail = getDefault(mapForm, L
"EMAIL");
865 String strHomePage = getDefault(mapForm, L
"HOMEPAGE");
866 String strMessenger1 = getDefault(mapForm, L
"MESSENGER1");
867 String strMessenger2 = getDefault(mapForm, L
"MESSENGER2");
868 String strTel1 = getDefault(mapForm, L
"TEL1");
869 String strTel2 = getDefault(mapForm, L
"TEL2");
871 String strZipcode = getDefault(mapForm, L
"ZIPCODE");
872 String strAddr = getDefault(mapForm, L
"ADDR");
873 String strAddrBunji = getDefault(mapForm, L
"ADDR_BUNJI");
878 int nOpenLevel =
Integer::parse(getDefault(mapForm, L
"OPEN_LEVEL")
881 int nMembership =
Integer::parse(getDefault(mapForm, L
"OPEN_LEVEL_MEMBERSHIP"), 10, 0);
882 int nMember =
Integer::parse(getDefault(mapForm, L
"OPEN_LEVEL_MEMBER"), 10, 0);
883 int nLife =
Integer::parse(getDefault(mapForm, L
"OPEN_LEVEL_LIFE"), 10, 0);
884 int nContect =
Integer::parse(getDefault(mapForm, L
"OPEN_LEVEL_CONTECT"), 10, 0);
885 int nAddress =
Integer::parse(getDefault(mapForm, L
"OPEN_LEVEL_ADDRESS"), 10, 0);
887 int n = nMembership | (nMember << 4)
888 | (nLife << 16) | (nContect << 20) | (nAddress << 24);
890 if (nOpenLevel != n) {
891 __DCL_TRACE2(L
"Warning! Not Equal %x != %x\n", nOpenLevel, n);
899 bool bValidPicture =
false;
903 if (session.__ctx.__formFileMap.size() > 0) {
904 StoredHttpFormData::FileInfoArray& vPicture =
905 session.__ctx.__formFileMap[0];
906 if (vPicture.size() > 0 &&
907 vPicture[0].contentType.compareNoCase(L
"image/", 6) == 0
909 strPicType = vPicture[0].contentType;
910 strPicName = vPicture[0].filename;
925 "INSERT INTO DCL_USER"
926 "\n( USER_ID, SIGN_ID, PASSWORD, USER_NAME, NICKNAME"
927 "\n, ROLE_ID, OWNER_ID, CATEGORY_ID, OPEN_LEVEL"
928 "\n, REGISTER_DATE, REMARK, UPDATE_TIME"
929 "\n, LAST_SIGNIN, LAST_USE, TODAY"
930 "\n, JUMIN_NUMBER, BIRTHDAY, SEX, MARRIAGE, JOB, OFFICE, COMMENT"
931 "\n, EMAIL, MESSENGER1, MESSENGER2, TEL1, TEL2"
932 "\n, ZIPCODE, ADDR, ADDR_BUNJI"
933 "\n, PIC_NAME, PIC_TYPE, PIC_DATA)"
935 "\n( :USER_ID, :SIGN_ID, :PASSWORD, :USER_NAME, :NICKNAME"
936 "\n, :ROLE_ID, :OWNER_ID, :CATEGORY_ID, :OPEN_LEVEL"
937 "\n, CURRENT_DATE, :REMARK, CURRENT_TIMESTAMP"
938 "\n, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_DATE"
939 "\n, :JUMIN_NUMBER, :BIRTHDAY, :SEX, :MARRIAGE, :JOB, :OFFICE, :COMMENT"
940 "\n, :EMAIL, :MESSENGER1, :MESSENGER2, :TEL1, :TEL2"
941 "\n, :ZIPCODE, :ADDR, :ADDR_BUNJI"
942 "\n, :PIC_NAME, :PIC_TYPE, :PIC_DATA)";
948 "SELECT MAX(USER_ID) + 1"
954 nUserID = q.
fields()[0].asInteger();
958 q.
execute(L
"SET AUTOCOMMIT = 0");
961 "\n FROM DCL_DATA_SOURCE"
962 "\n WHERE USER_ID = 0 AND DS_ID = -1"
966 nUserID = q.
fields()[0].asInteger();
968 nOwnerID = session.__nUserID;
976 "UPDATE DCL_USER SET"
977 "\n SIGN_ID = :SIGN_ID, PASSWORD = :PASSWORD"
978 "\n, USER_NAME = :USER_NAME, NICKNAME = :NICKNAME"
979 "\n, ROLE_ID = :ROLE_ID, OWNER_ID = :OWNER_ID"
980 "\n, CATEGORY_ID = :CATEGORY_ID, OPEN_LEVEL = :OPEN_LEVEL"
981 "\n, REMARK = :REMARK"
982 "\n, UPDATE_TIME = CURRENT_TIMESTAMP"
983 "\n, JUMIN_NUMBER = :JUMIN_NUMBER, BIRTHDAY = :BIRTHDAY"
984 "\n, SEX = :SEX, MARRIAGE = :MARRIAGE"
985 "\n, JOB = :JOB, OFFICE = :OFFICE"
986 "\n, COMMENT = :COMMENT"
987 "\n, EMAIL = :EMAIL, MESSENGER1 = :MESSENGER1, MESSENGER2 = :MESSENGER2"
988 "\n, TEL1 = :TEL1, TEL2 = :TEL2"
989 "\n, ZIPCODE = :ZIPCODE, ADDR = :ADDR, ADDR_BUNJI = :ADDR_BUNJI"
990 "\n, PIC_NAME = :PIC_NAME, PIC_TYPE = :PIC_TYPE, PIC_DATA = :PIC_DATA"
991 "\n WHERE USER_ID = :USER_ID";
998 params.
byName(L
"USER_ID").setValue(nUserID);
999 params.
byName(L
"SIGN_ID").setValue(strSignID);
1000 params.
byName(L
"PASSWORD").setValue(strPassword);
1001 params.
byName(L
"USER_NAME").setValue(strUserName);
1002 params.
byName(L
"ROLE_ID").setValue(nRoleID);
1003 params.
byName(L
"OWNER_ID").setValue(nOwnerID);
1004 params.
byName(L
"CATEGORY_ID").setValue(nCategoryID);
1005 params.
byName(L
"OPEN_LEVEL").setValue(nOpenLevel);
1007 params.
byName(L
"REMARK").setValue(strRemark);
1009 if (!strJuminNumber.isEmpty())
1010 params.
byName(L
"JUMIN_NUMBER").setValue(strJuminNumber);
1011 if (!strBirthday.isEmpty())
1012 params.
byName(L
"BIRTHDAY").setValue(strBirthday);
1013 if (!strSex.isEmpty())
1014 params.
byName(L
"SEX").setValue(strSex);
1015 if (!strMarriage.isEmpty())
1016 params.
byName(L
"MARRIAGE").setValue(strMarriage);
1017 if (!strJob.isEmpty())
1018 params.
byName(L
"JOB").setValue(strJob);
1019 if (!strOffice.isEmpty())
1020 params.
byName(L
"OFFICE").setValue(strOffice);
1022 if (!strComment.isEmpty())
1023 params.
byName(L
"COMMENT").setValue(strComment);
1025 if (!strEMail.isEmpty())
1026 params.
byName(L
"EMAIL").setValue(strEMail);
1027 if (!strHomePage.isEmpty())
1028 params.
byName(L
"HOMEPAGE").setValue(strHomePage);
1029 if (!strMessenger1.isEmpty())
1030 params.
byName(L
"MESSENGER1").setValue(strMessenger1);
1031 if (!strMessenger2.isEmpty())
1032 params.
byName(L
"MESSENGER2").setValue(strMessenger2);
1033 if (!strTel1.isEmpty())
1034 params.
byName(L
"TEL1").setValue(strTel1);
1035 if (!strTel2.isEmpty())
1036 params.
byName(L
"TEL2").setValue(strTel2);
1037 if (!strZipcode.isEmpty())
1038 params.
byName(L
"ZIPCODE").setValue(strZipcode);
1039 if (!strAddr.isEmpty())
1040 params.
byName(L
"ADDR").setValue(strAddr);
1041 if (!strAddrBunji.isEmpty())
1042 params.
byName(L
"ADDR_BUNJI").setValue(strAddrBunji);
1044 if (bValidPicture) {
1046 strPicType.data(), strPicName.data(),
1049 params.
byName(L
"PIC_TYPE").setValue(strPicType);
1050 params.
byName(L
"PIC_NAME").setValue(strPicName);
1051 params.
byName(L
"PIC_DATA").setValue(
1060 "DELETE FROM DCL_SIGN_LOCK"
1061 "\n WHERE SESSION_ID = \'" + session.__strSessionID + L
"\'"
1066 "UPDATE DCL_DATA_SOURCE"
1067 "\n SET MESSAGE_ID = MESSAGE_ID + 1"
1068 "\n WHERE USER_ID = 0 AND DS_ID = -1"
1071 q.
execute(L
"SET AUTOCOMMIT = 0");
1077 "DELETE FROM DCL_SIGN_LOCK"
1078 "\n WHERE SESSION_ID = \'" + session.__strSessionID + L
"\'"
1082 q.
execute(L
"SET AUTOCOMMIT = 0");
1087 if (session.isSysGuest())
1089 session.login(strSignID, strPassword);
1095 session.__ctx.__queryMap[L
"USER_ID"].add(String::valueOf(nUserID));
1096 __pPage->print(session);
1101UserDetailView::UserDetailView(
HtmlPage* pPage)
1107void UserDetailView::init(
SQLFields& fields)
1112 __mapParams.lookup(L
"LIST", __strListPage);
1113 __mapParams.lookup(L
"WRITE", __strWritePage);
1116static int __GetAge(
Date dtBirthday)
1119 int nAge = dtNow.
year() - dtBirthday.
year();
1121 && dtNow.
day() >= dtBirthday.
day()))
1127void UserDetailView::onPrint(
Session& session)
1131 ListedStringToStringArrayMap& mapQuery = session.__ctx.__queryMap;
1133 String strListPage = getDefault(mapQuery, L
"list");
1134 String strListPageEnc;
1135 String strWritePage = __strWritePage;
1136 String strUserIDs = String::join(mapQuery[L
"user"], L
',');
1138 if (strListPage.isEmpty())
1139 strListPage = __strListPage;
1143 assign(L
"LIST", strListPage);
1144 assign(L
"_LIST", strListPageEnc);
1145 assign(L
"WRITE", strWritePage);
1152 if (strUserIDs.isEmpty()) {
1153 EMPTY.assign(L
"LIST", strListPage);
1154 assign(L
"EMPTY", EMPTY);
1160 "SELECT U.USER_ID, U.SIGN_ID, U.USER_NAME, U.NICKNAME"
1161 "\n,U.ROLE_ID, U.OWNER_ID, U.CATEGORY_ID"
1162 "\n,U.OPEN_LEVEL, U.REGISTER_DATE, U.REMARK, U.UPDATE_TIME"
1163 "\n,U.LAST_SIGNIN, U.LAST_USE"
1164 "\n,U.TODAY, U.TODAY_NMEMBER, U.TODAY_NMESSAGE, U.TODAY_NVISIT"
1165 "\n,U.NMEMBER, U.NMESSAGE, U.NVISIT"
1167 "\n,U.BIRTHDAY, U.SEX, U.MARRIAGE"
1168 "\n,U.JOB, U.OFFICE"
1170 "\n,U.EMAIL, U.HOMEPAGE, U.MESSENGER1, U.MESSENGER2, U.TEL1, U.TEL2"
1171 "\n,U.ZIPCODE, U.ADDR, U.ADDR_BUNJI, U.PIC_NAME"
1173 "\n,O.USER_NAME AS OWNER_NAME"
1174 "\n,C.CATEGORY_NAME"
1175 "\n FROM DCL_USER AS U"
1176 "\n INNER JOIN DCL_ROLE AS R ON (U.ROLE_ID = R.ROLE_ID)"
1177 "\n INNER JOIN DCL_USER AS O ON (U.OWNER_ID = O.USER_ID)"
1178 "\n INNER JOIN DCL_USER_CATEGORY AS C ON (U.CATEGORY_ID = C.CATEGORY_ID)"
1179 "\n WHERE U.USER_ID IN (" + strUserIDs + L
")"
1180 "\n ORDER BY U.USER_ID ASC";
1186 assign(L
"EMPTY", EMPTY);
1189 USER.assign(q.
fields(), L
" ");
1191 int nCategoryID = q.
fields().
byName(L
"CATEGORY_ID").asInteger();
1192 if (session.isSysAdmin()) {
1194 if (nCategoryID > 0)
1196 else if (nCategoryID < 0)
1200 USER.assign(L
"ORIGIN", strOrigin);
1204 USER.assign(L
"PICTURE", NPICTURE);
1206 PICTURE.assign(L
"PIC_NAME", q.
fields().
byName(L
"PIC_NAME").asString());
1207 PICTURE.assign(L
"USER_ID", q.
fields().
byName(L
"USER_ID").asString());
1208 PICTURE.assign(L
"SIGN_ID", q.
fields().
byName(L
"SIGN_ID").asString());
1210 PICTURE.assign(L
"DHE", L
"dhed");
1212 PICTURE.assign(L
"DHE", L
"dhe");
1214 USER.assign(L
"PICTURE", PICTURE);
1217 if (nCategoryID > 0) {
1220 int nOpenLevel = q.
fields().
byName(L
"OPEN_LEVEL").asInteger();
1221 bool bMemberOfMyGroups =
false;
1222 int nUserID = q.
fields().
byName(L
"USER_ID").asInteger();
1225 String strMeID = String::valueOf(nUserID);
1226 String strOtherID = String::valueOf(session.__nUserID);
1232 "\n FROM DCL_USER_MEMBER AS G"
1233 "\n INNER JOIN DCL_USER_MEMBER AS O"
1234 "\n ON (G.USER_ID = O.USER_ID)"
1237 "\n WHERE G.MEMBER_ID = " + strMeID + L
""
1238 "\n AND O.MEMBER_ID = " + strOtherID + L
""
1244 bMemberOfMyGroups =
true;
1268 nAge = __GetAge(f.asDate());
1270 if (session.isSysAdmin() || session.isOwner(nUserID))
1272 if (nOpenLevel & 0x00080000)
1274 if (nOpenLevel & 0x00040000) {
1275 if (!session.isSysGuest())
1278 if (nOpenLevel & 0x00020000) {
1279 if (bMemberOfMyGroups)
1282 if (nOpenLevel & 0x00010000) {
1283 if (!session.isMemberGuest())
1293 USER.assign(L
"AGE", String::valueOf(nAge));
1295 USER.assign(L
"AGE", L
" ");
1298 if (!(session.isSysAdmin() || session.isOwner(nUserID)))
1300 static const wchar_t* asz[] = {
1301 L
"USER_NAME", L
"JUMIN_NUMBER", L
"BIRTHDAY", L
"SEX", L
"MARRIAGE",
1302 L
"JOB", L
"OFFICE",
NULL,
1303 L
"EMAIL", L
"HOMEPAGE", L
"MESSENGER1", L
"MESSENGER2",
1304 L
"TEL1", L
"TEL2",
NULL,
1305 L
"ZIPCODE", L
"ADDR", L
"ADDR_BUNJI"
1307 int nMaskMember = 0x00010000;
1308 int nMaskGroup = 0x00020000;
1309 int nMaskUser = 0x00040000;
1310 int nMaskGuest = 0x00080000;
1311 String strSp = L
" ";
1313 for(
size_t i = 0; i < (
sizeof(asz) /
sizeof(
const char*)); i++) {
1314 if (asz[i] ==
NULL) {
1322 if (nOpenLevel & nMaskGuest)
1324 if (nOpenLevel & nMaskUser) {
1325 if (!session.isSysGuest())
1328 if (nOpenLevel & nMaskGroup) {
1329 if (bMemberOfMyGroups)
1332 if (nOpenLevel & nMaskMember) {
1333 if (!session.isMemberGuest())
1338 if (!field.isNull())
1339 USER.assign(asz[i], strSp);
1348 append(L
"USER", USER);
1356void UserDetailView::onGet(
Session& session)
1362 ListedStringToStringArrayMap& map = ctx.__queryMap;
1363 ListedStringToStringArrayMap::ConstIterator it = map.find(L
"user");
1364 if (!(it == map.end() || (*it).value.isEmpty()))
1370 "SELECT PIC_NAME, PIC_TYPE, PIC_DATA FROM DCL_USER"
1371 "\nWHERE USER_ID = L" + String::valueOf(nUserID)
1377 String strName = q.
fields()[0].asString();
1378 String strType = q.
fields()[1].asString();
1379 String strData = q.
fields()[2].asString();
1382 ctx.setContentType(strType);
1384 HttpHeader(L
"Content-Length", String::valueOf(strData.length()))
1388 L
"Content-Disposition",
1389 L
"inline; filename=\"" + strName + L
"\""
1392 ctx.write(strData.data(), strData.length());
1401UserSearchForm::UserSearchForm(
HtmlPage* pPage)
1406void UserSearchForm::onPrint(
Session& session)
1409 ListedStringToStringArrayMap& map = session.__ctx.__formMap;
1411 String strUserName = getDefault(map, L
"USER_NAME");
1412 String strRoleID = getDefault(map, L
"ROLE_ID");
1413 String strRegStart = getDefault(map, L
"REG_START");
1414 String strRegEnd = getDefault(map, L
"REG_END");
1415 String strPointsStart = getDefault(map, L
"POINTS_START");
1416 String strPointsEnd = getDefault(map, L
"POINTS_END");
1418 assign(L
"USER_NAME", strUserName);
1419 assign(L
"REG_START", strRegStart);
1420 assign(L
"REG_END", strRegEnd);
1421 assign(L
"POINTS_START", strPointsStart);
1422 assign(L
"POINTS_END", strPointsEnd);
1425 if (strRoleID == L
"-1")
1426 USER_ROLE.assign(L
"SELECTED", L
"selected");
1428 USER_ROLE.assign(L
"SELECTED", L
"");
1429 USER_ROLE.assign(L
"ROLE_ID", L
"-1");
1430 USER_ROLE.assign(L
"ROLE_NAME", L
"전체");
1431 append(L
"USER_ROLE", USER_ROLE);
1435 "SELECT ROLE_ID, ROLE_NAME\n"
1441 if (q.
fields().
byName(L
"ROLE_ID").asString() == strRoleID)
1442 USER_ROLE.assign(L
"SELECTED", L
"selected");
1444 USER_ROLE.assign(L
"SELECTED", L
"");
1445 USER_ROLE.assign(q.
fields(), L
"");
1446 append(L
"USER_ROLE", USER_ROLE);
1450 String strSelect = L
""
1451 "SELECT U.USER_ID, U.USER_NAME, U.SIGN_ID, U.POINTS\n"
1452 ", R.ROLE_NAME, U.LAST_SIGNIN, U.REGIST_DATE\n"
1454 " INNER JOIN DCL_ROLE R ON (U.ROLE_ID = R.ROLE_ID)\n";
1456#define WHERE_USER_NAME 0x01
1457#define WHERE_ROLE_ID 0x02
1458#define WHERE_REGIST_DATE 0x04
1459#define WHERE_POINTS 0x08
1460 int nWhereFlags = 0;
1462 StringBuilder strWhere;
1463 StringBuilder strOrderBy;
1464 if (!strUserName.isEmpty()) {
1465 strWhere = L
"WHERE U.USER_NAME LIKE '" + strUserName + L
"%'";
1469 if (!strRoleID.isEmpty() && strRoleID != L
"-1") {
1470 if (strWhere.isEmpty())
1471 strWhere = L
"WHERE U.ROLE_ID = " + strRoleID;
1473 strWhere += L
"\nAND U.ROLE_ID = " + strRoleID;
1478 if (!strRegStart.isEmpty()) {
1484 String strStart = L
"'" + strRegStart + L
"'";
1485 if (strWhere.isEmpty())
1486 strWhere = L
"WHERE REGIST_DATE >= " + strStart;
1488 strWhere += L
"\nAND REGIST_DATE >= " + strStart;
1497 if (!strRegEnd.isEmpty()) {
1503 String strEnd = L
"'" + strRegEnd + L
"'";
1504 if (strWhere.isEmpty())
1505 strWhere = L
"WHERE REGIST_DATE <= L" + strEnd;
1507 strWhere += L
"\nAND REGIST_DATE <= L" + strEnd;
1516 if (!strPointsStart.isEmpty()) {
1519 if (strWhere.isEmpty())
1520 strWhere = L
"WHERE POINTS >= L" + strPointsStart;
1522 strWhere += L
"\nAND POINTS >= L" + strPointsStart;
1531 if (!strPointsEnd.isEmpty()) {
1534 if (strWhere.isEmpty())
1535 strWhere = L
"WHERE POINTS <= L" + strPointsEnd;
1537 strWhere += L
"\nAND POINTS <= L" + strPointsEnd;
1548 strOrderBy = L
"\nORDER BY U.USER_NAME";
1551 if (strOrderBy.isEmpty())
1552 strOrderBy = L
"\nORDER BY U.REGIST_DATE";
1554 strOrderBy += L
"\n,U.REGIST_DATE";
1558 String strSQL = strSelect + strWhere.toString() + strOrderBy.toString()
1567 assign(L
"WHERE", strWhere);
1572 USER.assign(L
"NO", String::valueOf(n++));
1573 USER.assign(q.
fields(), L
" ");
1574 append(L
"USER", USER);
1579 FormView::onPrint(session);
1582void UserSearchForm::onPost(
Session& session)
1585 __pPage->print(session);
1590UserActivityView::UserActivityView(
HtmlPage* pPage)
1595void UserActivityView::onPrint(
Session& session)
1600 String strGroupID = String::valueOf(session.__nServiceUserID);
1603 "SELECT G.TODAY, G.TODAY_NUSER, G.TODAY_NVISIT, G.TODAY_NMESSAGE"
1604 ", G.NUSER, G.NVISIT, G.NMESSAGE"
1605 "\n FROM DCL_GROUP AS G"
1606 "\n WHERE G.GROUP_ID = " + strGroupID
1610 assign(L
"EMPTY", (*
this)[L
"EMTPY"]);
1614 GROUP.assign(q.
fields(), L
" ");
1615 assign(L
"GROUP", GROUP);
#define IMPLEMENT_CLASSINFO_EX(class_name, base_class_name)
#define DEFAULT_SHORT_STRING
#define __DCL_TRACE0(psz)
#define __DCL_TRACE1(fmt, arg1)
#define __DCL_TRACE3(fmt, arg1, arg2, arg3)
#define __DCL_VERIFY(expr)
#define __DCL_ASSERT(expr)
#define __DCL_TRACE2(fmt, arg1, arg2)
#define WHERE_REGIST_DATE
#define SYSTEM_CATEGORY_ID
static DateTime getCurrentLocalTime()
String toStringAll() const
static ByteString readBytes(InputStream &_input, size_t _n=(size_t) -1) __DCL_THROWS1(IOException *)
static String strip(const String &_str, const wchar_t *_elementNames)
virtual void onPrint(Session &session) __DCL_THROWS1(Exception *)
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
static int parse(const wchar_t *_number, unsigned _base=10) __DCL_THROWS1(NumericConvertException *)
virtual String toString() const
_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 *)
int64_t affectedRows() const
SQLConnection * connection() const
void fetch() __DCL_THROWS1(SQLException *)
static ByteString encode(const ByteString &_str)