| 1 |
/* |
| 2 |
* |
| 3 |
* $Revision: 1.73 $ |
| 4 |
* $Log: commonal.cc,v $ |
| 5 |
* Revision 1.73 2005/02/25 07:41:35 tani |
| 6 |
* getGroupItemID霑ス蜉?. |
| 7 |
* item, index縺ョlimit繝輔ぅ繝シ繝ォ繝峨r逋サ骭イ?梧峩譁ー蜃ヲ逅?↓霑ス蜉?. |
| 8 |
* |
| 9 |
* Revision 1.72 2005/02/25 01:03:42 tani |
| 10 |
* dbtype==DBTYPE_SQLITE縺ョ譎ゅ?蜃ヲ逅?r蛻?イ? |
| 11 |
* |
| 12 |
* Revision 1.71 2005/02/24 11:32:55 aga4096 |
| 13 |
* 繝サupdateGroup縺ァ繧ー繝ォ繝シ繝励う繝ウ繝?ャ繧ッ繧ケ縺ョ蜷榊燕繧貞、画峩縺吶k繧医≧菫ョ豁」. |
| 14 |
* |
| 15 |
* Revision 1.70 2005/02/23 06:39:28 tani |
| 16 |
* isGuestEnabled: 險ュ螳壹r隱ュ縺ソ霎シ繧?繝??繝悶Ν繧貞、画峩. |
| 17 |
* |
| 18 |
* Revision 1.69 2005/02/22 02:39:30 tani |
| 19 |
* public_item_target_user_all髢「謨ー繧定ソス蜉?. |
| 20 |
* SQL荳ュ縺ョpublic_item_target_user_all縺ョ豈碑シ?シ上rpublic_item_target_user_all髢「謨ー縺ォ鄂ョ謠? |
| 21 |
* session繝??繝悶Ν縺ョLEFT JOIN縺ョ譚。莉カ縺ォsid縺ョ繝√ぉ繝?け繧定ソス蜉?. |
| 22 |
* DB蝠丞粋縺帛?逅??鬮倬?溷喧. |
| 23 |
* |
| 24 |
* Revision 1.68 2005/02/21 05:46:18 tani |
| 25 |
* getItemCount繧定ソス蜉?. |
| 26 |
* dumpItemID, getItems縺ョ蝠丞粋縺帙r鬮倬?溷喧. |
| 27 |
* |
| 28 |
* Revision 1.67 2005/02/19 02:06:11 tani |
| 29 |
* 謇ソ隱咲憾諷九?讓ゥ髯舌メ繧ァ繝?け縺ォ菴懈?閠?r霑ス蜉?. |
| 30 |
* |
| 31 |
* Revision 1.66 2005/02/16 10:03:13 youi |
| 32 |
* publication_year/month/mday縺ォ蟇セ蠢? |
| 33 |
* |
| 34 |
* Revision 1.65 2005/02/16 07:37:17 youi |
| 35 |
* insertItem, updateItem, getItems: publication_date縺ォ蟇セ蠢? |
| 36 |
* |
| 37 |
* Revision 1.64 2005/02/15 02:35:47 youi |
| 38 |
* SQLINTEGER縺九iSQLLEN縺ク蝙句、画峩. |
| 39 |
* |
| 40 |
* Revision 1.63 2005/02/10 02:33:16 aga |
| 41 |
* 繝サzipCreate繧偵さ繝。繝ウ繝医い繧ヲ繝医@縺ヲ縺?◆縺ョ繧呈綾縺励◆. |
| 42 |
* |
| 43 |
* Revision 1.62 2005/02/09 11:11:52 youi |
| 44 |
* deleteItem縺ォ繧「繧、繝?Β縺ォ髢「菫ゅ☆繧九お繝ウ繝医Μ縺ョ蜑企勁蜃ヲ逅?r霑ス蜉?. |
| 45 |
* |
| 46 |
* Revision 1.61 2005/02/09 07:23:50 aga |
| 47 |
* 繝サURL to My Personal Archive 繧奪B繝サAL縺九i豸医@縺? |
| 48 |
* |
| 49 |
* Revision 1.60 2005/02/09 02:14:15 aga |
| 50 |
* 繝サinitializeDB()縺ォdbtype蠑墓焚繧定ソス蜉?(SQLite逕ィ). |
| 51 |
* |
| 52 |
* Revision 1.59 2005/02/08 07:15:02 youi |
| 53 |
* pubmed繝代?繧ケ蜃ヲ逅? |
| 54 |
* |
| 55 |
* Revision 1.58 2005/02/08 06:40:51 youi |
| 56 |
* pubmedComplete:繧ク繝」繝シ繝翫Ν縺ョ螳悟?縺ェ繧ソ繧、繝医Ν繧貞叙蠕励@縺ヲpubmed_t縺ォ繧サ繝?ヨ. |
| 57 |
* |
| 58 |
* Revision 1.57 2005/02/03 12:04:58 youi |
| 59 |
* getOwnPublicItemID繧貞ョ夂セゥ. |
| 60 |
* binder_item_link縺ョ繝??繝悶Ν蜷阪r菫ョ豁」. |
| 61 |
* |
| 62 |
* Revision 1.56 2005/01/29 09:49:22 youi |
| 63 |
* syslog_printf: 繝?ヰ繝?げ繝。繝?そ繝シ繧ク蜃コ蜉幃未謨ー繧貞ョ夂セゥ縺励◆. |
| 64 |
* getCertifyPermission: 繝√ぉ繝?け逕ィ縺ョsql繧貞ョ夂セゥ縺励◆. |
| 65 |
* SQLINTEGER->SQLLEN縺ク蝙九r螟画峩縺励◆. |
| 66 |
* getItemPermission: 繝「繝?Ξ繝シ繧ソ縺ァ縺ゅk縺具シ溘?蛻、譁ュ譚。莉カ繧剃ソョ豁」. |
| 67 |
* |
| 68 |
* Revision 1.55 2005/01/28 07:01:38 youi |
| 69 |
* getItemIDByIndexID: 蟇セ雎。縺ィ縺ェ繧九い繧、繝?Β縺ョ譚。莉カ隕狗峩縺? |
| 70 |
* SQLAllocHandle螟ア謨玲凾縺ョ繝。繝?そ繝シ繧ク繧定ソス蜉?. |
| 71 |
* |
| 72 |
* Revision 1.54 2005/01/28 00:36:58 aga |
| 73 |
* 繝サfreeString縺ァ關ス縺。繧九%縺ィ縺後≠繧九?繧剃ソョ豁」. |
| 74 |
* |
| 75 |
* Revision 1.53 2005/01/27 08:30:35 youi |
| 76 |
* getIndexIDByItemID繧貞ョ夂セゥ縺励◆. |
| 77 |
* |
| 78 |
* Revision 1.52 2005/01/25 06:46:50 aga |
| 79 |
* 繝サBinders繧貞性繧?index縺ッdeleteIndex荳榊庄. |
| 80 |
* 繝サgetItems縺後お繝ゥ繝シ繧貞?縺吶%縺ィ縺後≠繧九?繧剃ソョ豁」. |
| 81 |
* |
| 82 |
* Revision 1.51 2005/01/24 10:50:29 youi |
| 83 |
* freeItemType,getItemTypes髢「謨ー繧定ソス蜉?縺励◆. |
| 84 |
* |
| 85 |
* Revision 1.50 2005/01/24 01:54:38 youi |
| 86 |
* 蠑墓焚縺ョ蝙倶ソョ鬟セ繧貞、画峩. |
| 87 |
* dumpItemID, getItemIDByBinderID, getItemIDByIndexID |
| 88 |
* 髢「謨ー霑ス蜉? |
| 89 |
* getPrivateItemID, getUncertifiedLink |
| 90 |
* |
| 91 |
* Revision 1.49 2005/01/22 09:30:58 youi |
| 92 |
* setLastErrorString縺ョ螳」險?繧定ソス蜉?縺励◆. |
| 93 |
* |
| 94 |
* Revision 1.48 2005/01/22 04:18:22 aga |
| 95 |
* 繝サloginUser, insertAccount蜀?〒縺ッmd5()繧定。後o縺ェ縺?h縺?ソョ豁」. |
| 96 |
* |
| 97 |
* Revision 1.47 2005/01/22 02:41:14 aga |
| 98 |
* 繝サamazon陬懷ョ後r菴懈?. |
| 99 |
* |
| 100 |
* Revision 1.46 2005/01/21 01:36:11 youi |
| 101 |
* pubmed陬懷ョ梧ゥ溯?繧定ソス蜉?縺励◆. |
| 102 |
* |
| 103 |
* Revision 1.45 2005/01/19 10:07:53 aga |
| 104 |
* 繝サ繧イ繧ケ繝医Θ繝シ繧カ蜷代¢縺ョ菫ョ豁」. |
| 105 |
* |
| 106 |
* Revision 1.44 2005/01/19 06:01:59 youi |
| 107 |
* 髢「謨ー霑ス蜉? |
| 108 |
* getConfigValue |
| 109 |
* setConfigValue |
| 110 |
* getChangeLogs |
| 111 |
* insertChangeLog |
| 112 |
* getItemIDByBinderID |
| 113 |
* registerBinderItem |
| 114 |
* unregisterBinderItem |
| 115 |
* getIndexPermission |
| 116 |
* freeString |
| 117 |
* freeChangeLog |
| 118 |
* 蠑墓焚縺ォcriteria_t繧定ソス蜉? |
| 119 |
* getItemIDByIndexID |
| 120 |
* 蠑墓焚縺ョ鬆?コ上r螟画峩 |
| 121 |
* getCertifyState |
| 122 |
* setCertifyState |
| 123 |
* getCertifyPermission |
| 124 |
* sessionID2UID,querySimple,queryGetUnsignedInt縺ョ蛻ゥ逕ィ |
| 125 |
* insertItem縺ョ蜀?Κ縺ァPrivateIndex縺ク逋サ骭イ繧定。後↑縺?/span> |
| 126 |
* getItems: getItemPermission繧剃スソ縺」縺溯ェュ縺ソ霎シ縺ソ讓ゥ髯舌メ繧ァ繝?け. |
| 127 |
* |
| 128 |
* Revision 1.43 2005/01/19 01:42:15 aga |
| 129 |
* 繝サx_xnpaccount_index縺ョgid,uid縺?縺ォ縺ェ繧峨↑縺?h縺?ソョ豁」. |
| 130 |
* |
| 131 |
* Revision 1.42 2005/01/19 00:51:29 aga |
| 132 |
* 繝サinsertIndex縺ァx_xnpaccount_index.index_id縺後♀縺九@縺??繧剃ソョ豁」. |
| 133 |
* |
| 134 |
* Revision 1.41 2005/01/19 00:06:51 aga |
| 135 |
* 繝サupdateIndex縺ァ縲∝酔縺伜錐蜑阪?蜈?シ溘′縺ゅk縺句錐蜑阪′遨コ縺ァ縺ゅk縺ェ繧峨お繝ゥ繝シ縺ォ縺励◆. |
| 136 |
* 繝サcreateSession縺ァ縲「id縺訓latform繝ヲ繝シ繧カ縺ァ縺ェ縺?°activate縺輔l縺ヲ縺?↑縺?↑繧峨お繝ゥ繝シ縺ォ縺励◆. |
| 137 |
* |
| 138 |
* Revision 1.40 2005/01/17 00:15:05 aga |
| 139 |
* 繝サdeleteIndex, updateIndex縺ォ螟ア謨励☆繧九%縺ィ縺後≠繧九?繧剃ソョ豁」. |
| 140 |
* |
| 141 |
* Revision 1.39 2005/01/15 05:38:10 youi |
| 142 |
* insertAccount: 譁?ュ怜?繝舌ャ繝輔ぃ縺ョ繧オ繧、繧コ隱ソ謨エ縺ェ縺ゥ. |
| 143 |
* updateAccount: 譁?ュ怜?繝舌ャ繝輔ぃ縺ョ繧オ繧、繧コ隱ソ謨エ縺ェ縺ゥ. |
| 144 |
* 繧「繧、繝?Β邂。逅?未謨ー繧貞ョ夂セゥ縺励◆. |
| 145 |
* insertItem, getItem, getItems, dumpItemID, updateItem, deleteItem縺ェ縺ゥ. |
| 146 |
* freeGID, freeUID: 蠑墓焚縺ョ蝙九r菫ョ豁」. |
| 147 |
* |
| 148 |
* Revision 1.38 2005/01/15 00:39:16 aga |
| 149 |
* 繝サx_xnpaccount_item_basic縺ョ讒矩??繧貞、画峩. |
| 150 |
* |
| 151 |
* Revision 1.37 2005/01/14 10:36:59 aga |
| 152 |
* 繝サindex髢「菫ゅ?蜃ヲ逅?r霑ス蜉?. |
| 153 |
* 繝サinsertAccount縺ァprivate index繧剃ス懈?縺吶k繧医≧菫ョ豁」. |
| 154 |
* 繝サinsertGroup縺ァgroup index 繧剃ス懈?縺吶k繧医≧菫ョ豁」. |
| 155 |
* |
| 156 |
* Revision 1.36 2005/01/13 04:19:22 aga |
| 157 |
* 繝サVP繧湛NP縺ォ螟画鋤. |
| 158 |
* |
| 159 |
* Revision 1.35 2005/01/06 07:20:17 youi |
| 160 |
* WIN32螳夂セゥ譎ゅ?繧、繝ウ繧ッ繝ォ繝シ繝峨?霑ス蜉?. |
| 161 |
* MySQL API縺ォ髢「縺吶k繝倥ャ繝?繝輔ぃ繧、繝ォ繧貞炎髯、. |
| 162 |
* deleteAccount: 謇?螻槭☆繧輝latform繧ー繝ォ繝シ繝励°繧峨?蜑企勁繧貞?阡オ縺励◆. |
| 163 |
* insertAccount: 繝ヲ繝シ繧カ逋サ骭イ縺ィ蜷梧凾縺ォ繝?ヵ繧ゥ繝ォ繝?latform繧ー繝ォ繝シ繝励∈逋サ骭イ縺吶k. |
| 164 |
* deleteMember: 繝?ヵ繧ゥ繝ォ繝?latform繧ー繝ォ繝シ繝励°繧峨?蜑企勁繧堤ヲ∵ュ「縺吶k. |
| 165 |
* deleteMemberNoLimit縺ョ螳夂セゥ. |
| 166 |
* |
| 167 |
* Revision 1.34 2004/12/28 04:38:14 aga |
| 168 |
* 繝サlogoutUser()縺ョ菫ョ豁」. |
| 169 |
* |
| 170 |
* Revision 1.33 2004/12/27 05:56:23 youi |
| 171 |
* odbcDiagString: STMT莉・螟悶?繝上Φ繝峨Ν繧ょ?逅?☆繧九h縺?↓螟画峩縺励◆. |
| 172 |
* syslog繝。繝?そ繝シ繧ク縺ョ蜃ヲ逅?r霑ス蜉?縺励◆. |
| 173 |
* |
| 174 |
* Revision 1.32 2004/12/25 09:46:47 youi |
| 175 |
* MySQL+MyODBC縺ァ蜍穂ス懊☆繧九h縺?↓菫ョ豁」縺励◆. |
| 176 |
* |
| 177 |
* Revision 1.31 2004/12/21 11:42:59 youi |
| 178 |
* 繧ウ繝。繝ウ繝医?蠑墓焚?梧綾繧雁?、縺ョ隱ャ譏弱↑縺ゥ繧定ソス蜉?. |
| 179 |
* |
| 180 |
* Revision 1.30 2004/12/18 10:24:54 youi |
| 181 |
* IMPORT_MYSQLDLL繧貞ョ夂セゥ縺励◆縺ィ縺搾シ勲YSQL縺ョDLL繧貞虚逧?Μ繝ウ繧ッ縺吶k繝励Ο繝医ち繧、繝怜ョ」險?縺?/span> |
| 182 |
* 譛牙柑縺ォ縺ェ繧九h縺?↓菫ョ豁」縺励◆. |
| 183 |
* |
| 184 |
* Revision 1.29 2004/12/18 01:12:29 youi |
| 185 |
* freeResult縺ョ髢「謨ー蜷阪rfree<繝??繧ソ蝙?gt;縺ォ螟画峩縺励◆. |
| 186 |
* |
| 187 |
* Revision 1.28 2004/12/14 12:02:08 youi |
| 188 |
* __WIN__繧貞ョ夂セゥ縺励◆縺ィ縺阪?windows縺ョdll菴懈?縺ォ蠢?ヲ√↑蜃ヲ逅?r陦後↑縺? |
| 189 |
* USE_SYSLOG繧貞ョ夂セゥ縺励◆縺ィ縺阪?syslogd縺ク繝。繝?そ繝シ繧ク繧貞?蜉帙☆繧? |
| 190 |
* getAccounts: uidsLen縺?縺ョ縺ィ縺阪?蜃ヲ逅?r霑ス蜉?縺励◆. |
| 191 |
* |
| 192 |
* Revision 1.27 2004/12/06 11:34:47 aga |
| 193 |
* 繝サuninitializeDB()繧定ソス蜉?. |
| 194 |
* |
| 195 |
* Revision 1.26 2004/12/06 10:17:36 youi |
| 196 |
* mysql_use_result縺ョ蜿門セ礼オ先棡繧呈ョ九&縺壼叙繧雁?縺吶◆繧?シ?/span> |
| 197 |
* while( row = mysql_fetch_row(result) );繧呈諺蜈・??/span> |
| 198 |
* |
| 199 |
* Revision 1.25 2004/12/06 07:24:33 youi |
| 200 |
* insertAccount, insertGroup: |
| 201 |
* 譁ー隕剰ソス蜉?縺励◆諠??ア縺ォ蟇セ蠢懊☆繧九Θ繝シ繧カID?後げ繝ォ繝シ繝悠D繧堤ャャ荳牙シ墓焚縺ォ譖ク縺崎セシ繧?. |
| 202 |
* |
| 203 |
* Revision 1.24 2004/12/06 01:45:50 aga |
| 204 |
* 繝サ繧ウ繝。繝ウ繝医▽縺? |
| 205 |
* 繝サ髢区叛蠢倥l菫ョ豁」. |
| 206 |
* |
| 207 |
* Revision 1.23 2004/12/04 09:21:10 aga |
| 208 |
* 繝サxnp_config 竊 xnpaccount_config. |
| 209 |
* |
| 210 |
* Revision 1.22 2004/12/03 07:17:21 youi |
| 211 |
* isModerator縺ァ繧「繧ッ繧サ繧ケ縺吶k繝??繧ソ繝吶?繧ケ繝??繝悶Ν蜷阪r菫ョ豁」. |
| 212 |
* |
| 213 |
* Revision 1.21 2004/12/01 10:28:58 youi |
| 214 |
* DB繧ォ繝ゥ繝?蜷阪?螟画峩縺ォ莨エ縺?ソョ豁」 |
| 215 |
* institute -> division |
| 216 |
* organizaion -> company_name |
| 217 |
* |
| 218 |
* Revis1.20 2004/12/01 04:37:04 youi |
| 219 |
* freeResult: unsigned int* 繧 int* 縺ク菫ョ豁」. |
| 220 |
* 繧ウ繝。繝ウ繝磯Κ縺ォ髢「謨ー縺ョ隱ャ譏弱r霑ス險? |
| 221 |
* |
| 222 |
* Revision 1.19 2004/11/30 06:40:11 youi |
| 223 |
* 髢「謨ー繧定ソス蜉?(gidExists, uidExists) |
| 224 |
* getGroupCount繧貞ョ夂セゥ. |
| 225 |
* getGroupsByUid繧貞ョ夂セゥ. |
| 226 |
* isGroupAdmin繧剃ソョ豁」. |
| 227 |
* dumpGroupAdmins繧貞ョ夂セゥ. |
| 228 |
* deleteMember繧貞ョ夂セゥ. |
| 229 |
* insertMember繧貞ョ夂セゥ. |
| 230 |
* getMembers繧貞ョ夂セゥ. |
| 231 |
* isModerator繧貞ョ夂セゥ. |
| 232 |
* |
| 233 |
* Revision 1.18 2004/11/30 05:46:32 aga |
| 234 |
* 繝サsession縺九iremoteHost繧貞炎髯、. |
| 235 |
* |
| 236 |
* Revision 1.17 2004/11/27 09:35:49 youi |
| 237 |
* isActivated繧貞ョ夂セゥ. |
| 238 |
* activate繧貞ョ夂セゥ. |
| 239 |
* dumpUid繧貞ョ夂セゥ. |
| 240 |
* |
| 241 |
* Revision 1.16 2004/11/27 06:29:29 youi |
| 242 |
* getAccountCount繧貞ョ夂セゥ. |
| 243 |
* dumpGids繧貞ョ夂セゥ. |
| 244 |
* insertGroup, deleteGroup, updateGroup繧貞ョ夂セゥ. |
| 245 |
* getGroup, getGroups繧貞ョ夂セゥ. |
| 246 |
* 繝??繧ソ繝吶?繧ケ蛻晄悄蜑阪?蜻シ蜃コ縺ォ蟇セ縺暦シ軍ES_DB_NOT_INITIALIZED繧定ソ斐☆蜃ヲ逅?r蜷?未謨ー縺ォ霑ス蜉? |
| 247 |
* (譛ェ蟇セ蠢懊?髢「謨ー縺梧ョ九▲縺ヲ縺?k) |
| 248 |
* |
| 249 |
* Revision 1.15 2004/11/27 02:22:22 aga |
| 250 |
* 繝サinitializeDB蜑阪↓addSlashes()繧貞他縺カ縺ィ關ス縺。繧九?繧剃ソョ豁」. |
| 251 |
* |
| 252 |
* Revision 1.14 2004/11/27 01:07:31 youi |
| 253 |
* criteria2str: LIMIT縺ィORDER BY縺ョ鬆?分繧貞?繧梧崛縺医◆. |
| 254 |
* |
| 255 |
* Revision 1.13 2004/11/27 00:35:39 youi |
| 256 |
* getAccounts繧貞ョ夂セゥ. |
| 257 |
* getAccount繧剃ソョ豁」?悟?驛ィ縺ァgetAccounts繧貞他縺ウ蜃コ縺? |
| 258 |
* criteria2str繧貞ョ夂セゥ. |
| 259 |
* |
| 260 |
* Revision 1.12 2004/11/26 09:45:28 youi |
| 261 |
* getAccount繧貞ョ夂セゥ. |
| 262 |
* |
| 263 |
* Revision 1.11 2004/11/26 08:16:26 aga |
| 264 |
* 繝サgetSession, loginUser, createSession, freeResult(const session_t*) 菫ョ豁」. |
| 265 |
* |
| 266 |
* Revision 1.10 2004/11/26 07:57:42 youi |
| 267 |
* updateAccount, deleteAccount繧貞ョ夂セゥ. |
| 268 |
* mysql_query螟ア謨玲凾縺ッstderr縺ク繧ィ繝ゥ繝シ繧ウ繝シ繝峨→繧ィ繝ゥ繝シ繝。繝?そ繝シ繧ク繧貞?蜉? |
| 269 |
* |
| 270 |
* Revision 1.9 2004/11/26 07:38:02 aga |
| 271 |
* 繝サFAILUE -> FAILURE. |
| 272 |
* |
| 273 |
* Revision 1.8 2004/11/26 06:36:55 aga |
| 274 |
* 繝サcreateSession, getSession 繧剃ス懈?. |
| 275 |
* |
| 276 |
* Revision 1.7 2004/11/26 04:51:47 youi |
| 277 |
* dbprefix繧貞ョ夂セゥ縺励◆. |
| 278 |
* insertAccount繧貞ョ夂セゥ縺励◆. |
| 279 |
* isValidSessionID繧貞ョ夂セゥ縺励◆. |
| 280 |
* |
| 281 |
* Revision 1.6 2004/11/26 04:35:55 aga |
| 282 |
* 繝サloginUser(), logoutUser()繧剃ス懈?. |
| 283 |
* |
| 284 |
* Revision 1.5 2004/11/26 01:08:25 aga |
| 285 |
* 繝サaddSlashes()菴懈?. |
| 286 |
* |
| 287 |
* Revision 1.4 2004/11/25 12:14:29 youi |
| 288 |
* getUid縺ョ蜃ヲ逅?r螳夂セゥ縺励◆. |
| 289 |
* |
| 290 |
* Revision 1.3 2004/11/25 11:13:59 youi |
| 291 |
* getLastErrorString/setLastErrorString繧貞ョ夂セゥ. |
| 292 |
* |
| 293 |
* Revision 1.2 2004/11/25 08:55:19 youi |
| 294 |
* 蠑墓焚縺ョ蝙九r菫ョ豁」. |
| 295 |
* freeResult繧定ソス蜉?. |
| 296 |
* |
| 297 |
* Revision 1.1 2004/11/25 05:14:58 youi |
| 298 |
* initial version |
| 299 |
* |
| 300 |
* |
| 301 |
*/ |
| 302 |
#ifdef WIN32 |
| 303 |
#include <windows.h> |
| 304 |
#endif |
| 305 |
|
| 306 |
#ifdef USE_SYSLOG |
| 307 |
#include <syslog.h> |
| 308 |
#endif |
| 309 |
|
| 310 |
#include <stdio.h> |
| 311 |
#include <stdlib.h> |
| 312 |
#include <string.h> |
| 313 |
#include <string> |
| 314 |
#include <assert.h> |
| 315 |
#include <sql.h> |
| 316 |
#include <sqlext.h> |
| 317 |
#include <libxml/xmlreader.h> |
| 318 |
|
| 319 |
using namespace std; |
| 320 |
|
| 321 |
#include "common.h" |
| 322 |
#include "account.h" |
| 323 |
#include "group.h" |
| 324 |
#include "session.h" |
| 325 |
#include "item.h" |
| 326 |
#include "itemtype.h" |
| 327 |
#include "criteria.h" |
| 328 |
#include "commonal.h" |
| 329 |
#include "item.h" |
| 330 |
#include "index.h" |
| 331 |
#include "changelog.h" |
| 332 |
#include "pubmed.h" |
| 333 |
#include "amazonbook.h" |
| 334 |
|
| 335 |
static string dbprefix; //!< XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX |
| 336 |
static dbtype_t dbtype; //!< MySQL/SQLite |
| 337 |
|
| 338 |
static SQLHANDLE henv = NULL; |
| 339 |
static SQLHANDLE hdbc = NULL; |
| 340 |
static SQLHANDLE hstmt = NULL; |
| 341 |
|
| 342 |
static bool processEsummary(xmlTextReaderPtr reader, pubmed_t* p); |
| 343 |
static bool processEsearch(xmlTextReaderPtr reader, pubmed_t* p, int* DocID ); |
| 344 |
static void processEfetch(xmlTextReaderPtr reader, pubmed_t* p); |
| 345 |
static int streamPubmedFile(const char *filename, pubmed_t* p); |
| 346 |
static result_t insertIndexInternal( sessionid_t sid, index_t *index, indexid_t *xid ); |
| 347 |
static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode ); |
| 348 |
static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid ); |
| 349 |
static result_t getXoopsModuleConfigValue( const char *module, const char *key, char **value ); |
| 350 |
static void setLastErrorString( const char* str ); |
| 351 |
|
| 352 |
void syslog_printf( char* format, ... ) |
| 353 |
{ |
| 354 |
#ifdef USE_SYSLOG |
| 355 |
va_list ap; |
| 356 |
va_start(ap, format); |
| 357 |
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 358 |
vsyslog( LOG_DEBUG, format, ap ); |
| 359 |
#endif |
| 360 |
} |
| 361 |
|
| 362 |
/** |
| 363 |
* |
| 364 |
* public_item_target_user縺ョ險ュ螳壼?、縺?#39;all'縺ェ繧液rue繧偵°縺医☆ |
| 365 |
* 險ュ螳壼?、縺ョ蜿門セ励↓螟ア謨励@縺溷?エ蜷茨シ?#39;all'莉・螟悶?蝣エ蜷医?false繧偵°縺医☆ |
| 366 |
* |
| 367 |
*/ |
| 368 |
static bool public_item_target_user_all( ) |
| 369 |
{ |
| 370 |
char* value = 0; |
| 371 |
bool public_item_target_user_all = false; |
| 372 |
if( getConfigValue( XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_KEY, &value ) == RES_OK ){ |
| 373 |
public_item_target_user_all = ( strcmp( value, XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_ALL ) == 0 ); |
| 374 |
freeString( value ); |
| 375 |
} |
| 376 |
return public_item_target_user_all; |
| 377 |
} |
| 378 |
|
| 379 |
static result_t countResultRows( const char* sql, SQLLEN* count ) |
| 380 |
{ |
| 381 |
result_t ret = RES_ERROR; |
| 382 |
SQLRETURN sqlcode; |
| 383 |
SQLHANDLE hstmt = NULL; |
| 384 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 385 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql, strlen( sql ) ) ) == SQL_SUCCESS ){ |
| 386 |
*count = 0; |
| 387 |
while( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ) ( *count )++; |
| 388 |
ret = RES_OK; |
| 389 |
}else{ |
| 390 |
string s( "SQLExecDirect in countResultRows " ); |
| 391 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 392 |
s += "sql="; |
| 393 |
s += string( sql ); |
| 394 |
setLastErrorString( s.c_str( ) ); |
| 395 |
ret = RES_DB_QUERY_ERROR; |
| 396 |
} |
| 397 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 398 |
} |
| 399 |
return ret; |
| 400 |
} |
| 401 |
|
| 402 |
|
| 403 |
/** |
| 404 |
* |
| 405 |
* 繧、繝ウ繝?ャ繧ッ繧ケ逋サ骭イ?後い繧、繝?Β譖エ譁ー繧定。後↑縺」縺溘→縺阪?謇ソ隱咲憾諷九?蛻晄悄蛟、繧抵シ?/span> |
| 406 |
* 繧キ繧ケ繝?Β險ュ螳壹↓縺励◆縺後▲縺ヲ霑斐@縺セ縺呻シ?/span> |
| 407 |
* |
| 408 |
*/ |
| 409 |
static certify_t getInitialCertifyStateFromConfig( ) |
| 410 |
{ |
| 411 |
char* certify_item_val; |
| 412 |
certify_t ret = index::NOT_CERTIFIED; |
| 413 |
|
| 414 |
if( getConfigValue( XNP_CONFIG_CERTIFY_ITEM_KEY, &certify_item_val ) == RES_OK ){ |
| 415 |
if( strcmp( certify_item_val, XNP_CONFIG_CERTIFY_ITEM_AUTO ) == 0 ){ |
| 416 |
//certify automatic |
| 417 |
ret = index::CERTIFIED; |
| 418 |
}else if( strcmp( certify_item_val, XNP_CONFIG_CERTIFY_ITEM_ON ) == 0 ){ |
| 419 |
//certify by moderator or group admin |
| 420 |
ret = index::CERTIFY_REQUIRED; |
| 421 |
} |
| 422 |
syslog_printf( "\ngetInitialCertifyStateFromConfig certify_item_val=%s", certify_item_val ); |
| 423 |
freeString( certify_item_val ); |
| 424 |
} |
| 425 |
return ret; |
| 426 |
} |
| 427 |
|
| 428 |
/** |
| 429 |
* |
| 430 |
* 繧サ繝?す繝ァ繝ウ縺ォ蟇セ蠢應サ倥¢繧峨l縺溘Θ繝シ繧カ縺鯉シ訓latform繝ヲ繝シ繧カ縺ィ縺励※Activate縺?/span> |
| 431 |
* 繧後※縺?k縺九r霑斐☆ |
| 432 |
* |
| 433 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 434 |
* @return true Activate縺輔l縺ヲ縺?k |
| 435 |
* @return false Activate縺輔l縺ヲ縺?k?後∪縺溘?繧ィ繝ゥ繝シ |
| 436 |
* |
| 437 |
*/ |
| 438 |
static bool isActivatedBySession( sessionid_t sid ) |
| 439 |
{ |
| 440 |
const session_t* session; |
| 441 |
if( getSession( sid, &session ) == RES_OK ){ |
| 442 |
userid_t sess_uid = session -> getUID( ); |
| 443 |
freeSession( session ); |
| 444 |
return isActivated( sid, sess_uid ); |
| 445 |
} |
| 446 |
return false; |
| 447 |
} |
| 448 |
|
| 449 |
/** |
| 450 |
* |
| 451 |
* 繧サ繝?す繝ァ繝ウ縺ォ蟇セ蠢應サ倥¢繧峨l縺溘Θ繝シ繧カ縺鯉シ後Δ繝?Ξ繝シ繧ソ縺ァ縺ゅk縺具シ?/span> |
| 452 |
* |
| 453 |
* |
| 454 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 455 |
* @return true 繝「繝?Ξ繝シ繧ソ |
| 456 |
* @return false 繝「繝?Ξ繝シ繧ソ縺ァ縺ェ縺?シ後∪縺溘?繧ィ繝ゥ繝シ |
| 457 |
* |
| 458 |
*/ |
| 459 |
static bool isModeratorBySession( sessionid_t sid ) |
| 460 |
{ |
| 461 |
const session_t* session; |
| 462 |
if( getSession( sid, &session ) == RES_OK ){ |
| 463 |
userid_t sess_uid = session -> getUID( ); |
| 464 |
freeSession( session ); |
| 465 |
return isModerator( sid, sess_uid ); |
| 466 |
} |
| 467 |
return false; |
| 468 |
} |
| 469 |
|
| 470 |
|
| 471 |
|
| 472 |
|
| 473 |
/** SQL繧貞ョ溯。後☆繧九?らオ先棡縺ッ謐ィ縺ヲ繧九??/span> |
| 474 |
* @param sql sql |
| 475 |
* @return result_t |
| 476 |
*/ |
| 477 |
static result_t querySimple( const char *functionName, string &sql ){ |
| 478 |
result_t ret = RES_ERROR; |
| 479 |
SQLRETURN sqlcode; |
| 480 |
SQLHANDLE hstmt = NULL; |
| 481 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 482 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), strlen( sql.c_str() ) ) ) == SQL_SUCCESS ){ |
| 483 |
ret = RES_OK; |
| 484 |
}else{ |
| 485 |
string s( "SQLExecDirect in querySimple " ); |
| 486 |
s += functionName; |
| 487 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 488 |
s += "sql="; |
| 489 |
s += sql; |
| 490 |
setLastErrorString( s.c_str( ) ); |
| 491 |
ret = RES_DB_QUERY_ERROR; |
| 492 |
} |
| 493 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 494 |
} |
| 495 |
else { |
| 496 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in querySimple " ); |
| 497 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 498 |
setLastErrorString( s.c_str( ) ); |
| 499 |
ret = RES_ERROR; |
| 500 |
} |
| 501 |
return ret; |
| 502 |
} |
| 503 |
|
| 504 |
/** SQL繧貞ョ溯。後@縲?陦檎岼縺ョ譛?蛻昴?謨エ謨ー蛟、(NULL縺ェ繧?縺ィ縺ソ縺ェ縺?縺ョ縺ソ蜿励¢蜿悶k縲?/span> |
| 505 |
* @param sql sql |
| 506 |
* @param u 謨エ謨ー蛟、繧貞女縺大叙繧句、画焚縲?/span> |
| 507 |
* @return result_t |
| 508 |
*/ |
| 509 |
static result_t queryGetUnsignedInt( const char *functionName, string &sql, unsigned int *u ){ |
| 510 |
result_t ret = RES_ERROR; |
| 511 |
SQLRETURN sqlcode; |
| 512 |
SQLHANDLE hstmt = NULL; |
| 513 |
|
| 514 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 515 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), strlen( sql.c_str() ) ) ) == SQL_SUCCESS ){ |
| 516 |
SQLUINTEGER sInt = 0; |
| 517 |
SQLLEN len = 0; |
| 518 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &sInt, 0, &len ); |
| 519 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 520 |
if ( len == SQL_NULL_DATA ) |
| 521 |
sInt = 0; |
| 522 |
*u = sInt; |
| 523 |
ret = RES_OK; |
| 524 |
}else{ |
| 525 |
string s( "SQLFetch in queryGetUnsignedInt " ); |
| 526 |
s += functionName; |
| 527 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 528 |
setLastErrorString( s.c_str( ) ); |
| 529 |
ret = RES_ERROR; |
| 530 |
} |
| 531 |
}else{ |
| 532 |
string s( "SQLExecDirect in queryGetUnsignedInt " ); |
| 533 |
s += functionName; |
| 534 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 535 |
s += "sql="; |
| 536 |
s += sql; |
| 537 |
setLastErrorString( s.c_str( ) ); |
| 538 |
ret = RES_DB_QUERY_ERROR; |
| 539 |
} |
| 540 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 541 |
} |
| 542 |
else { |
| 543 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in queryGetUnsignedInt " ); |
| 544 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 545 |
setLastErrorString( s.c_str( ) ); |
| 546 |
ret = RES_ERROR; |
| 547 |
} |
| 548 |
return ret; |
| 549 |
} |
| 550 |
|
| 551 |
/** |
| 552 |
* |
| 553 |
* 譁?ュ怜?繧ウ繝斐???/span> |
| 554 |
* 謖?ョ壽枚蟄玲焚繧偵さ繝斐?縺暦シ後ヰ繝?ヵ繧。縺ョ譛?蠕後rNULL邨らォッ縺吶k??/span> |
| 555 |
* ( dst縺ョ繧オ繧、繧コ >= len + 1 )縺ァ縺ゅk縺薙→ |
| 556 |
* |
| 557 |
*/ |
| 558 |
static char* strncpy2( char* dst, const char* src, int len ) |
| 559 |
{ |
| 560 |
strncpy( dst, src, len ); |
| 561 |
dst[ len ] = '\0'; |
| 562 |
syslog_printf( "\nstrncpy2 '%s'\n", dst ); |
| 563 |
return dst; |
| 564 |
} |
| 565 |
|
| 566 |
/** |
| 567 |
* |
| 568 |
* SQL縺ョ螳溯。檎オ先棡縺九i繧ィ繝ゥ繝シ譁?ュ怜?繧堤函謌舌☆繧?/span> |
| 569 |
* |
| 570 |
* @param hstmt SQL譁??繝上Φ繝峨Ν |
| 571 |
* @param sqlcode SQLExecDirect,SQLExecute縺ョ謌サ繧雁?、 |
| 572 |
* @return 繧ィ繝ゥ繝シ譁?ュ怜? |
| 573 |
*/ |
| 574 |
static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode ) |
| 575 |
{ |
| 576 |
string s; |
| 577 |
if( sqlcode == SQL_ERROR || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 578 |
SQLCHAR SQLState[6]; |
| 579 |
SQLINTEGER NativeError; |
| 580 |
SQLCHAR MessageText[ 1024 ]; |
| 581 |
SQLSMALLINT TextLength; |
| 582 |
SQLGetDiagRec( HandleType, hstmt, 1, SQLState, &NativeError, MessageText, 1024, &TextLength ); |
| 583 |
|
| 584 |
s += string( (char*)MessageText ); |
| 585 |
s += " SQLSTATE="; |
| 586 |
s += string( (char*)SQLState ); |
| 587 |
|
| 588 |
} |
| 589 |
s += " sqlcode="; |
| 590 |
s += intToString( sqlcode ); |
| 591 |
return s; |
| 592 |
} |
| 593 |
|
| 594 |
/** |
| 595 |
* |
| 596 |
* 謖?ョ壹き繝ゥ繝?縺ョ蛟、繧貞叙繧雁?縺励※縺昴?譁?ュ怜?繧定ソ斐☆ |
| 597 |
* |
| 598 |
*/ |
| 599 |
string getResultCol( SQLHANDLE hstmt, int col ) |
| 600 |
{ |
| 601 |
string s; |
| 602 |
SQLRETURN sqlcode; |
| 603 |
SQLCHAR BinaryPtr[5000]; |
| 604 |
SQLLEN BinaryLenOrInd; |
| 605 |
SQLINTEGER NumBytes; |
| 606 |
|
| 607 |
syslog_printf( "getResultCol" ); |
| 608 |
while ( ( sqlcode = SQLGetData(hstmt, col, SQL_C_CHAR, BinaryPtr, sizeof(BinaryPtr), |
| 609 |
&BinaryLenOrInd)) != SQL_NO_DATA) { |
| 610 |
syslog_printf( "SQLGetData BinaryLenOrInd=%d", BinaryLenOrInd ); |
| 611 |
NumBytes = (BinaryLenOrInd > 5000) || (BinaryLenOrInd == SQL_NO_TOTAL) ? 5000 : BinaryLenOrInd; |
| 612 |
if( NumBytes <= 0 ) break; |
| 613 |
else if( NumBytes > 0 ){ |
| 614 |
s += string( (char*)BinaryPtr, NumBytes ); |
| 615 |
} |
| 616 |
} |
| 617 |
syslog_printf( "getResultCol returns %s", s.c_str() ); |
| 618 |
return s; |
| 619 |
} |
| 620 |
|
| 621 |
|
| 622 |
/** |
| 623 |
* |
| 624 |
* 繧ッ繧ゥ繝シ繝医↑縺ゥ繧箪險伜捷縺ァ繧ィ繧ケ繧ア繝シ繝励☆繧?/span> |
| 625 |
* |
| 626 |
* @param str addslashes縺吶∋縺肴枚蟄怜?縲?ULL謖?ョ壻ク榊庄縲?/span> |
| 627 |
* @return 螟画鋤蠕後?譁?ュ怜? |
| 628 |
*/ |
| 629 |
string addSlashes( const char *str ) |
| 630 |
{ |
| 631 |
if ( hdbc == NULL ){ |
| 632 |
string s; |
| 633 |
return s; |
| 634 |
}else{ |
| 635 |
string s( str ); |
| 636 |
return s; |
| 637 |
} |
| 638 |
|
| 639 |
int len = strlen(str) * 3; |
| 640 |
char* dst = new char[ len ]; |
| 641 |
const char* from = str; |
| 642 |
char* to = dst; |
| 643 |
while( *from != '\0' ){ |
| 644 |
switch( *from ){ |
| 645 |
case '\'': |
| 646 |
case '\"': |
| 647 |
case ';': |
| 648 |
*to = '\\'; to++; |
| 649 |
break; |
| 650 |
} |
| 651 |
*to = *from; to++; |
| 652 |
from++; |
| 653 |
} |
| 654 |
*to = '\0'; |
| 655 |
string s( dst ); |
| 656 |
delete[] dst; |
| 657 |
return s; |
| 658 |
} |
| 659 |
|
| 660 |
/** Xoops Module 縺ョ險ュ螳壹r隱ソ縺ケ繧?/span> |
| 661 |
* @param module 繝「繧ク繝・繝シ繝ォ縺ョdirname |
| 662 |
* @param key 險ュ螳壹?key |
| 663 |
* @param value 險ュ螳壹r霑斐☆螟画焚縲?/span> |
| 664 |
* @return |
| 665 |
*/ |
| 666 |
static result_t getXoopsModuleConfigValue( const char *module, const char *key, char **value ){ |
| 667 |
SQLRETURN sqlcode; |
| 668 |
SQLHANDLE hstmt = NULL; |
| 669 |
result_t result = RES_ERROR; |
| 670 |
|
| 671 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 672 |
string sql = "SELECT conf_value " |
| 673 |
" from " + dbprefix + "_config as tc, " + dbprefix + "_modules as tm " |
| 674 |
" where tm.mid=tc.conf_modid and tm.dirname = ? and tc.conf_name = ? "; |
| 675 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 676 |
SQLLEN cbModule = SQL_NTS, cbKey = SQL_NTS; |
| 677 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, strlen(module), 0, (SQLCHAR *)module, 0, &cbModule ); |
| 678 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, strlen(key), 0, (SQLCHAR *)key, 0, &cbKey ); |
| 679 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), strlen( sql.c_str() ) ) ) == SQL_SUCCESS ){ |
| 680 |
if ( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 681 |
string s = getResultCol( hstmt, 1 ); |
| 682 |
*value = new char[s.length()+1]; |
| 683 |
strcpy( *value, s.c_str() ); |
| 684 |
result = RES_OK; |
| 685 |
} |
| 686 |
else if ( sqlcode == SQL_NO_DATA ){ |
| 687 |
*value = 0; |
| 688 |
result = RES_OK; |
| 689 |
} |
| 690 |
else { |
| 691 |
string s( "SQLFetch in getXoopsModuleConfig " ); |
| 692 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 693 |
s += "sql="; |
| 694 |
s += sql; |
| 695 |
setLastErrorString( s.c_str( ) ); |
| 696 |
result = RES_ERROR; |
| 697 |
} |
| 698 |
}else{ |
| 699 |
string s( "SQLExecDirect in getXoopsModuleConfig " ); |
| 700 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 701 |
s += "sql="; |
| 702 |
s += sql; |
| 703 |
setLastErrorString( s.c_str( ) ); |
| 704 |
result = RES_DB_QUERY_ERROR; |
| 705 |
} |
| 706 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 707 |
} |
| 708 |
else { |
| 709 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getXoopsModuleConfig " ); |
| 710 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 711 |
setLastErrorString( s.c_str( ) ); |
| 712 |
result = RES_ERROR; |
| 713 |
} |
| 714 |
return result; |
| 715 |
} |
| 716 |
|
| 717 |
/** 繧イ繧ケ繝医Θ繝シ繧カ縺傾ooNiPs縺ョPublic縺ェ繧「繧、繝?Β繧定ヲ九k縺薙→縺後〒縺阪k縺九←縺?°繧定ソ斐☆縲?/span> |
| 718 |
*/ |
| 719 |
static bool isGuestEnabled(){ |
| 720 |
char *value = 0; |
| 721 |
result_t result = getConfigValue( XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_KEY, &value ); |
| 722 |
if ( result != RES_OK ) |
| 723 |
return false; |
| 724 |
if ( value == 0 ) |
| 725 |
return false; |
| 726 |
bool enabled = ( strcmp( value, XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_ALL ) == 0 ); |
| 727 |
freeString( value ); |
| 728 |
return enabled; |
| 729 |
} |
| 730 |
|
| 731 |
/** sid縺九iuid繧貞セ励k縲?/span> |
| 732 |
* @param sid session id |
| 733 |
* @param uid uid繧貞女縺大叙繧句、画焚 |
| 734 |
* @return RES_OK |
| 735 |
* sid縺ッ譛牙柑縺ェsessionid縺ァ縺ゅk縲ゅ%縺ョ蝣エ蜷?uid縺ォ縺ッ譛牙柑縺ェuid縺悟?繧九??/span> |
| 736 |
* 縺ゅk縺??縲∝?髢九い繧、繝?Β繧帝撼XooNiPs繝ヲ繝シ繧カ縺ォ蜈ャ髢 縺九▽sid縺茎ession::SID_GUEST(=0)縺ァ縺ゅk縲ゅ%縺ョ蝣エ蜷医??uid縺ォ縺ッaccount::UID_GUEST(=0)縺悟?繧九??/span> |
| 737 |
* @return 縺昴?莉 繧ィ繝ゥ繝シ |
| 738 |
*/ |
| 739 |
static result_t sessionID2UID( sessionid_t sid, userid_t *uid ){ |
| 740 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 741 |
|
| 742 |
if ( sid == session::SID_GUEST ){ |
| 743 |
if ( isGuestEnabled() ){ |
| 744 |
*uid = account::UID_GUEST; |
| 745 |
return RES_OK; |
| 746 |
} |
| 747 |
return RES_NO_SUCH_SESSION; |
| 748 |
} |
| 749 |
else { |
| 750 |
string sql = "SELECT uid FROM " + dbprefix + "_xnpaccount_session WHERE sid=" + unsignedIntToString(sid); |
| 751 |
syslog_printf( "sql=%s", sql.c_str() ); |
| 752 |
return queryGetUnsignedInt( "sessionID2UID", sql, uid ); |
| 753 |
} |
| 754 |
} |
| 755 |
|
| 756 |
|
| 757 |
|
| 758 |
/** |
| 759 |
* |
| 760 |
* gid縺ョ蟄伜惠繧偵メ繧ァ繝?け. |
| 761 |
* DB縺ョ繧「繧ッ繧サ繧ケ螟ア謨励↑縺ゥ繧Galse縺ィ縺ェ繧具シ?/span> |
| 762 |
* |
| 763 |
* @param gid 繝√ぉ繝?け縺励◆縺ЖID |
| 764 |
* @return true 蟄伜惠縺吶k |
| 765 |
* @return false 蟄伜惠縺励↑縺?/span> |
| 766 |
* |
| 767 |
*/ |
| 768 |
static bool gidExists( groupid_t gid ) |
| 769 |
{ |
| 770 |
string sql; |
| 771 |
SQLRETURN sqlcode; |
| 772 |
SQLHANDLE hstmt = NULL; |
| 773 |
|
| 774 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) != SQL_SUCCESS ) { |
| 775 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in gidExists" ); |
| 776 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 777 |
setLastErrorString( s.c_str( ) ); |
| 778 |
return false; |
| 779 |
} |
| 780 |
|
| 781 |
sql = "SELECT * FROM " + dbprefix + "_xnpaccount_groups "; |
| 782 |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 783 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) != SQL_SUCCESS ){ |
| 784 |
setLastErrorString( "SQLExecDirect in gidExists" ); |
| 785 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 786 |
return false; |
| 787 |
} |
| 788 |
|
| 789 |
if( ( sqlcode = SQLFetch( hstmt ) ) != SQL_SUCCESS ){ |
| 790 |
setLastErrorString( "SQLFetch in gidExists" ); |
| 791 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 792 |
return false; |
| 793 |
} |
| 794 |
|
| 795 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 796 |
return true; |
| 797 |
} |
| 798 |
|
| 799 |
|
| 800 |
/** |
| 801 |
* |
| 802 |
* Platform繝ヲ繝シ繧カ諠??ア縺ォuid縺悟ュ伜惠縺吶k縺九r繝√ぉ繝?け. |
| 803 |
* DB縺ョ繧「繧ッ繧サ繧ケ螟ア謨励↑縺ゥ繧Galse縺ィ縺ェ繧具シ?/span> |
| 804 |
* |
| 805 |
* @param uid 繝√ぉ繝?け縺励◆縺ФID |
| 806 |
* @return true 蟄伜惠縺吶k |
| 807 |
* @return false 蟄伜惠縺励↑縺?/span> |
| 808 |
* |
| 809 |
*/ |
| 810 |
static bool uidExists( userid_t uid ) |
| 811 |
{ |
| 812 |
bool ret = false; |
| 813 |
string sql; |
| 814 |
SQLRETURN sqlcode; |
| 815 |
|
| 816 |
sql = "SELECT * FROM " + dbprefix + "_xnpaccount_users "; |
| 817 |
sql += "WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 818 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 819 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 820 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 821 |
ret = true; |
| 822 |
}else{ |
| 823 |
string s( "SQLFetch in uidExists "); |
| 824 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 825 |
s += string( ", sql=" ) + string( sql ); |
| 826 |
setLastErrorString( s.c_str( ) ); |
| 827 |
ret = false; |
| 828 |
} |
| 829 |
}else{ |
| 830 |
string s( "SQLExecDirect in uidExists "); |
| 831 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 832 |
s += string( ", sql=" ) + string( sql ); |
| 833 |
setLastErrorString( s.c_str( ) ); |
| 834 |
ret = false; |
| 835 |
} |
| 836 |
}else{ |
| 837 |
string s( "SQLAllocHandle in uidExists "); |
| 838 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 839 |
setLastErrorString( s.c_str( ) ); |
| 840 |
ret = false; |
| 841 |
} |
| 842 |
return ret; |
| 843 |
} |
| 844 |
|
| 845 |
|
| 846 |
/** |
| 847 |
* |
| 848 |
* criteria 繧 SQL縺ォ螟画鋤縺吶k |
| 849 |
* |
| 850 |
* |
| 851 |
* |
| 852 |
*/ |
| 853 |
string criteria2str( criteria* cri ) |
| 854 |
{ |
| 855 |
string sql; |
| 856 |
|
| 857 |
const orderby* odrby = cri -> headOrderBy( ); |
| 858 |
if( odrby != 0 ){ |
| 859 |
sql += " ORDER BY " + string( odrby -> getColumn( ) ); |
| 860 |
sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " "; |
| 861 |
while( ( odrby = cri -> nextOrderBy( ) ) != 0 ){ |
| 862 |
sql += ", " + string( odrby -> getColumn( ) ); |
| 863 |
sql += ( odrby -> getOrder( ) == orderby::DESC ) ? " DESC" : " "; |
| 864 |
} |
| 865 |
} |
| 866 |
|
| 867 |
if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){ |
| 868 |
sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) ) |
| 869 |
+ ", " + string( intToString( cri -> getLimitRows( ) ) ); |
| 870 |
} |
| 871 |
return sql; |
| 872 |
} |
| 873 |
|
| 874 |
|
| 875 |
/** |
| 876 |
* |
| 877 |
* 繝??繧ソ繝吶?繧ケ縺ョ蛻晄悄蛹?/span> |
| 878 |
* |
| 879 |
* @param dsn DSN |
| 880 |
* @param user 繝??繧ソ繝吶?繧ケ縺ォ繧「繧ッ繧サ繧ケ縺吶k繝ヲ繝シ繧カ蜷?/span> |
| 881 |
* @param password 荳願ィ倥Θ繝シ繧カ縺ョ繝代せ繝ッ繝シ繝?/span> |
| 882 |
* @param dbname 繝?繝溘? |
| 883 |
* @param prefix XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX |
| 884 |
* @param dbtype DBTYPE_MYSQL or DBTYPE_SQLITE |
| 885 |
* @return RES_OK |
| 886 |
* @return RES_DB_INITIALIZE_ERROR |
| 887 |
* @return RES_DB_CONNECT_ERROR |
| 888 |
* @refer result_t |
| 889 |
*/ |
| 890 |
result_t initializeDB( const char* dsn, const char* user, const char* password, const char* dbname, const char* prefix, dbtype_t type ) |
| 891 |
{ |
| 892 |
SQLRETURN sqlcode; |
| 893 |
|
| 894 |
// 譌「縺ォ謗・邯壻クュ縺ェ繧峨?∽ク?譌ヲ蛻?妙 |
| 895 |
if ( hdbc != NULL ) |
| 896 |
SQLDisconnect( hdbc ); |
| 897 |
|
| 898 |
dbprefix = prefix; |
| 899 |
dbtype = type; |
| 900 |
|
| 901 |
// 蛻晄悄蛹悶→謗・邯?/span> |
| 902 |
// if( SQLAllocEnv( &henv ) != SQL_SUCCESS ) { |
| 903 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ) != SQL_SUCCESS ) { |
| 904 |
string s( "SQLAllocHandle(SQL_HANDLE_ENV,...) in initializeDB" ); |
| 905 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 906 |
setLastErrorString( s.c_str( ) ); |
| 907 |
syslog_printf( "initializeDB %s", getLastErrorString( ) ); |
| 908 |
return RES_DB_INITIALIZE_ERROR; |
| 909 |
} |
| 910 |
//ODBC Ver.3 縺ィ縺励※謖ッ闊槭≧繧医≧縺ォ螻樊?ァ繧定ィュ螳?/span> |
| 911 |
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); |
| 912 |
|
| 913 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ) != SQL_SUCCESS ) { |
| 914 |
string s( "SQLAllocHandle(SQL_HANDLE_DBC,...) in initializeDB" ); |
| 915 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 916 |
setLastErrorString( s.c_str( ) ); |
| 917 |
syslog_printf( "initializeDB %s", getLastErrorString( ) ); |
| 918 |
return RES_DB_INITIALIZE_ERROR; |
| 919 |
} |
| 920 |
//繝ュ繧ー繧、繝ウ縺ォ5遘剃サ・荳願ヲ√@縺溘i繧ソ繧、繝?繧「繧ヲ繝医☆繧玖ィュ螳?/span> |
| 921 |
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); |
| 922 |
|
| 923 |
if ( ( sqlcode = SQLConnect( hdbc, (SQLCHAR*)dsn, strlen( dsn ), (SQLCHAR*)user, strlen( user ), (SQLCHAR*)password, strlen( password ) ) ) != SQL_SUCCESS ){ |
| 924 |
string s( "SQLConnect in initializeDB " ); |
| 925 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 926 |
setLastErrorString( s.c_str( ) ); |
| 927 |
syslog_printf( "initializeDB %s", getLastErrorString( ) ); |
| 928 |
return RES_DB_CONNECT_ERROR; |
| 929 |
} |
| 930 |
syslog_printf( "initializeDB succeed" ); |
| 931 |
return RES_OK; |
| 932 |
} |
| 933 |
|
| 934 |
/** |
| 935 |
* |
| 936 |
* DB謗・邯壹′縺ゅl縺ー縲√◎繧後r髢区叛縺吶k縲?/span> |
| 937 |
* |
| 938 |
* @param 縺ェ縺?/span> |
| 939 |
* @return RES_OK |
| 940 |
*/ |
| 941 |
result_t uninitializeDB() |
| 942 |
{ |
| 943 |
if ( hdbc != NULL ){ |
| 944 |
SQLDisconnect( hdbc ); |
| 945 |
hdbc = NULL; |
| 946 |
} |
| 947 |
return RES_OK; |
| 948 |
} |
| 949 |
|
| 950 |
/** |
| 951 |
* |
| 952 |
* Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句叙蠕?/span> |
| 953 |
* |
| 954 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 955 |
* @param uid 迥カ諷九r蜿門セ励@縺溘>繝ヲ繝シ繧カ縺ョUID |
| 956 |
* @return true 謇ソ隱肴ク医∩ |
| 957 |
* @return false 譛ェ謇ソ隱?/span> |
| 958 |
* |
| 959 |
*/ |
| 960 |
bool isActivated( sessionid_t sid, userid_t uid ) |
| 961 |
{ |
| 962 |
if( hdbc == NULL ) return false; |
| 963 |
if( !isValidSessionID( sid ) ) return false; |
| 964 |
|
| 965 |
bool ret = false; |
| 966 |
string sql; |
| 967 |
SQLRETURN sqlcode; |
| 968 |
SQLHANDLE hstmt = NULL; |
| 969 |
|
| 970 |
sql = "SELECT * FROM " + dbprefix + "_xnpaccount_users "; |
| 971 |
sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) ); |
| 972 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 973 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 974 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 975 |
ret = true; |
| 976 |
}else{ |
| 977 |
string s( "SQLFetch in isActivated " ); |
| 978 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 979 |
s += ", sql=" + sql; |
| 980 |
setLastErrorString( s.c_str() ); |
| 981 |
ret = false; |
| 982 |
} |
| 983 |
}else{ |
| 984 |
string s( "SQLExecDirect in isActivated " ); |
| 985 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 986 |
s += ", sql=" + sql; |
| 987 |
setLastErrorString( s.c_str() ); |
| 988 |
ret = false; |
| 989 |
} |
| 990 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 991 |
}else{ |
| 992 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isActivated" ); |
| 993 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 994 |
setLastErrorString( s.c_str( ) ); |
| 995 |
ret = false; |
| 996 |
} |
| 997 |
return ret; |
| 998 |
} |
| 999 |
|
| 1000 |
/** |
| 1001 |
* |
| 1002 |
* Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句、画峩 |
| 1003 |
* |
| 1004 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1005 |
* @param uid 螟画峩縺励◆縺?Θ繝シ繧カ縺ョUID |
| 1006 |
* @param activate 謇ソ隱?true) / 譛ェ謇ソ隱?false)縺ョ謖?ョ?/span> |
| 1007 |
* @return RES_OK |
| 1008 |
* @return RES_DB_QUERY_ERROR |
| 1009 |
* @return RES_NO_SUCH_USER |
| 1010 |
*/ |
| 1011 |
result_t activate( sessionid_t sid, userid_t uid, bool activate ) |
| 1012 |
{ |
| 1013 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1014 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1015 |
|
| 1016 |
string sql; |
| 1017 |
SQLRETURN sqlcode; |
| 1018 |
result_t ret = RES_ERROR; |
| 1019 |
|
| 1020 |
sql = "UPDATE " + dbprefix + "_xnpaccount_users "; |
| 1021 |
sql += "SET activate=" + string( activate ? "1" : "0" ); |
| 1022 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 1023 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1024 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1025 |
SQLLEN count = 0; |
| 1026 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1027 |
ret = RES_OK; |
| 1028 |
}else{ |
| 1029 |
string s( "SQLRowCount in activate "); |
| 1030 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1031 |
s += string( ", sql=" ) + string( sql ); |
| 1032 |
setLastErrorString( s.c_str( ) ); |
| 1033 |
ret = RES_NO_SUCH_USER; |
| 1034 |
} |
| 1035 |
}else{ |
| 1036 |
string s( "SQLExecDirect in activate " ); |
| 1037 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1038 |
s += ", sql="; |
| 1039 |
s += string( sql ); |
| 1040 |
setLastErrorString( s.c_str( ) ); |
| 1041 |
ret = RES_DB_QUERY_ERROR; |
| 1042 |
} |
| 1043 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1044 |
}else{ |
| 1045 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in activate" ); |
| 1046 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1047 |
setLastErrorString( s.c_str( ) ); |
| 1048 |
ret = RES_ERROR; |
| 1049 |
} |
| 1050 |
return ret; |
| 1051 |
} |
| 1052 |
|
| 1053 |
/** |
| 1054 |
* |
| 1055 |
* 繧「繧ォ繧ヲ繝ウ繝域焚繧貞叙蠕励☆繧具シ?/span> |
| 1056 |
* |
| 1057 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1058 |
* @return 繧「繧ォ繧ヲ繝ウ繝域焚 |
| 1059 |
* |
| 1060 |
*/ |
| 1061 |
int getAccountCount( sessionid_t sid ) |
| 1062 |
{ |
| 1063 |
if( hdbc == NULL ) return 0; |
| 1064 |
if( !isValidSessionID( sid ) ) return 0; |
| 1065 |
|
| 1066 |
int ret = 0; |
| 1067 |
string sql; |
| 1068 |
SQLRETURN sqlcode; |
| 1069 |
SQLHANDLE hstmt = NULL; |
| 1070 |
|
| 1071 |
//繧「繧ォ繧ヲ繝ウ繝域焚繧呈アゅa繧?/span> |
| 1072 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_xnpaccount_users "; |
| 1073 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1074 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1075 |
SQLUINTEGER count = 0; |
| 1076 |
SQLLEN len = 0; |
| 1077 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 1078 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 1079 |
ret = count; |
| 1080 |
}else { |
| 1081 |
string s( "SQLFetch in getAccountCount sql=" ); |
| 1082 |
s += string( sql ); |
| 1083 |
setLastErrorString( s.c_str( ) ); |
| 1084 |
ret = 0; |
| 1085 |
} |
| 1086 |
}else{ |
| 1087 |
setLastErrorString( "SQLExecDirect in getAccountCount" ); |
| 1088 |
ret = 0; |
| 1089 |
} |
| 1090 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1091 |
}else{ |
| 1092 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccountCount" ); |
| 1093 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1094 |
setLastErrorString( s.c_str( ) ); |
| 1095 |
ret = 0; |
| 1096 |
} |
| 1097 |
return ret; |
| 1098 |
} |
| 1099 |
|
| 1100 |
/** |
| 1101 |
* |
| 1102 |
* 繧「繧ォ繧ヲ繝ウ繝亥炎髯、 |
| 1103 |
* 繧ー繝ォ繝シ繝励°繧峨?蜑企勁縺ィ繝ヲ繝シ繧カ諠??ア縺ョ蜑企勁繧定。後↑縺?∪縺呻シ?/span> |
| 1104 |
* |
| 1105 |
* @param |
| 1106 |
* @return RES_OK |
| 1107 |
* @return RES_ERROR |
| 1108 |
* @return RES_DB_NOT_INITIALIZED |
| 1109 |
* @return RES_NO_SUCH_SESSION |
| 1110 |
* @return RES_DB_QUERY_ERROR |
| 1111 |
* |
| 1112 |
*/ |
| 1113 |
result_t deleteAccount( sessionid_t sid, userid_t uid ) |
| 1114 |
{ |
| 1115 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1116 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1117 |
|
| 1118 |
result_t ret1 = RES_ERROR, ret2 = RES_ERROR; |
| 1119 |
criteria_t c; |
| 1120 |
string sql; |
| 1121 |
groupid_t* gids; |
| 1122 |
int gidsLen; |
| 1123 |
SQLRETURN sqlcode; |
| 1124 |
SQLHANDLE hstmt = NULL; |
| 1125 |
|
| 1126 |
/* |
| 1127 |
1. delete user from default platform group |
| 1128 |
2. delete user profile from xoops_users |
| 1129 |
3. delete platform user from xnpaccount_users |
| 1130 |
*/ |
| 1131 |
|
| 1132 |
//1. delete user from platform groups |
| 1133 |
c.clearAll(); |
| 1134 |
if( getGroupsByUid( sid, uid, &c, &gids, &gidsLen ) == RES_OK ){ |
| 1135 |
for( int i = 0; i < gidsLen; i++ ) |
| 1136 |
deleteMemberNoLimit( sid, gids[ i ], uid ); |
| 1137 |
freeGID( gids ); |
| 1138 |
} |
| 1139 |
|
| 1140 |
//2. delete user profile from xoops_users |
| 1141 |
sql = "DELETE FROM " + dbprefix + "_users "; |
| 1142 |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 1143 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1144 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1145 |
SQLLEN count = 0; |
| 1146 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1147 |
ret1 = RES_OK; |
| 1148 |
}else{ |
| 1149 |
string s( "SQLRowCount in deleteAccount" ); |
| 1150 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1151 |
s += string( ", sql=" ) + string( sql ); |
| 1152 |
setLastErrorString( s.c_str( ) ); |
| 1153 |
ret1 = RES_NO_SUCH_USER; |
| 1154 |
} |
| 1155 |
}else{ |
| 1156 |
string s( "SQLExecDirect in deleteAccount" ); |
| 1157 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1158 |
s += ", sql="; |
| 1159 |
s += string( sql ); |
| 1160 |
setLastErrorString( s.c_str( ) ); |
| 1161 |
ret1 = RES_DB_QUERY_ERROR; |
| 1162 |
} |
| 1163 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1164 |
}else{ |
| 1165 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" ); |
| 1166 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1167 |
setLastErrorString( s.c_str( ) ); |
| 1168 |
ret1 = RES_ERROR; |
| 1169 |
} |
| 1170 |
|
| 1171 |
//3. delete platform user from xnpaccount_users |
| 1172 |
sql = "DELETE FROM " + dbprefix + "_xnpaccount_users "; |
| 1173 |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 1174 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1175 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1176 |
SQLLEN count = 0; |
| 1177 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1178 |
ret2 = RES_OK; |
| 1179 |
}else{ |
| 1180 |
string s( "SQLRowCount in deleteAccount" ); |
| 1181 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1182 |
s += string( ", sql=" ) + string( sql ); |
| 1183 |
setLastErrorString( s.c_str( ) ); |
| 1184 |
ret2 = RES_NO_SUCH_USER; |
| 1185 |
} |
| 1186 |
}else{ |
| 1187 |
string s( "SQLExecDirect in deleteAccount" ); |
| 1188 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1189 |
s += ", sql="; |
| 1190 |
s += string( sql ); |
| 1191 |
setLastErrorString( s.c_str( ) ); |
| 1192 |
ret2 = RES_DB_QUERY_ERROR; |
| 1193 |
} |
| 1194 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1195 |
}else{ |
| 1196 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" ); |
| 1197 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1198 |
setLastErrorString( s.c_str( ) ); |
| 1199 |
ret2 = RES_ERROR; |
| 1200 |
} |
| 1201 |
|
| 1202 |
//荳?譁ケ縺ァ繧ゅお繝ゥ繝シ縺ェ繧峨お繝ゥ繝シ繧定ソ斐☆ |
| 1203 |
return ret1 != RES_OK ? ret1 : ret2; |
| 1204 |
} |
| 1205 |
|
| 1206 |
/** |
| 1207 |
* |
| 1208 |
* 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span> |
| 1209 |
* |
| 1210 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1211 |
* @param uid 蜿門セ励@縺溘>繝ヲ繝シ繧カ縺ョUID |
| 1212 |
* @param acc 蜿門セ励@縺溘い繧ォ繧ヲ繝ウ繝域ュ蝣ア(account_t)縺ョ繝昴う繝ウ繧ソ繧呈嶌縺崎セシ繧?蠑墓焚 |
| 1213 |
* @return RES_OK |
| 1214 |
* @return RES_DB_NOT_INITIALIZED |
| 1215 |
* @return RES_NO_SUCH_USER |
| 1216 |
* @return RES_NO_SUCH_SESSION |
| 1217 |
* @return RES_DB_QUERY_ERROR |
| 1218 |
* |
| 1219 |
*/ |
| 1220 |
result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc ) |
| 1221 |
{ |
| 1222 |
int len; |
| 1223 |
static criteria c; |
| 1224 |
result_t res = getAccounts( sid, &uid, 1, &c, acc, &len ); |
| 1225 |
if( len == 0 ) return RES_NO_SUCH_USER; |
| 1226 |
return res; |
| 1227 |
} |
| 1228 |
|
| 1229 |
/** |
| 1230 |
* |
| 1231 |
* 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span> |
| 1232 |
* |
| 1233 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1234 |
* @param uids 蜿門セ励@縺溘>繝ヲ繝シ繧カ縺ョUID縺ョ驟榊? |
| 1235 |
* @param uidsLen uids驟榊?縺ョ隕∫エ?謨ー |
| 1236 |
* @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span> |
| 1237 |
* @param accounts 讀懃エ「邨先棡縺ョ驟榊?縺ョ繝昴う繝ウ繧ソ繧呈嶌縺崎セシ繧?蠑墓焚 |
| 1238 |
* @param accountsLen 讀懃エ「邨先棡縺ョ謨ー(驟榊?*accounts縺ョ隕∫エ?謨ー) |
| 1239 |
* @return RES_OK |
| 1240 |
* @return RES_DB_NOT_INITIALIZED |
| 1241 |
* @return RES_NO_SUCH_SESSION |
| 1242 |
* @return RES_DB_QUERY_ERROR |
| 1243 |
* |
| 1244 |
*/ |
| 1245 |
result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen ) |
| 1246 |
{ |
| 1247 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1248 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1249 |
if( uidsLen <= 0 ){ |
| 1250 |
*accounts = new account_t[ 0 ]; |
| 1251 |
*accountsLen = 0; |
| 1252 |
syslog_printf( "getAccounts succeed len=0" ); |
| 1253 |
return RES_OK; |
| 1254 |
} |
| 1255 |
|
| 1256 |
syslog_printf( "begin of getAccounts" ); |
| 1257 |
result_t ret = RES_ERROR; |
| 1258 |
SQLRETURN sqlcode; |
| 1259 |
SQLHANDLE hstmt = NULL; |
| 1260 |
string sql; |
| 1261 |
account_t* dst = new account_t[ uidsLen ]; |
| 1262 |
|
| 1263 |
sql += "SELECT u1.uid, u1.name, u1.uname, u1.email, u1.url, u1.user_avatar, u1.user_regdate, u1.user_icq, u1.user_from, u1.user_sig, u1.user_viewemail, u1.actkey, u1.user_aim, u1.user_yim, u1.user_msnm, u1.pass, u1.posts, u1.attachsig, u1.rank, u1.level, u1.theme, u1.timezone_offset, u1.last_login, u1.umode, u1.uorder, u1.notify_method, u1.notify_mode, u1.user_occ, u1.bio, u1.user_intrest, u1.user_mailok, u2.activate, u2.address, u2.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.notice_mail, u2.notice_mail_since, u2.private_index_id, u2.private_item_number_limit, u2.private_index_number_limit, u2.private_item_storage_limit "; |
| 1264 |
sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_xnpaccount_users AS u2 "; |
| 1265 |
sql += "WHERE u1.uid = u2.uid "; |
| 1266 |
if( uidsLen > 0 ){ |
| 1267 |
syslog_printf( "set uid[%d] value=%d to ...", 0, uids[0] ); |
| 1268 |
sql += "AND ( u1.uid=" + string( unsignedIntToString( uids[ 0 ] ) ); |
| 1269 |
for( int i = 1; i < uidsLen; i++ ){ |
| 1270 |
syslog_printf( "set uid[%d] value=%d to ...", i, uids[i] ); |
| 1271 |
sql += " OR u1.uid=" + string( unsignedIntToString( uids[ i ] ) ); |
| 1272 |
} |
| 1273 |
sql += " ) "; |
| 1274 |
} |
| 1275 |
sql += criteria2str( cri ); |
| 1276 |
syslog_printf( "sql=%s", sql.c_str() ); |
| 1277 |
|
| 1278 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1279 |
syslog_printf( "SQLAllocHandle" ); |
| 1280 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1281 |
syslog_printf( "SQLExecDirect" ); |
| 1282 |
SQLLEN cbUid = 0, cbStorageLimit = 0; |
| 1283 |
userid_t uid = 0; |
| 1284 |
SQLDOUBLE storage_limit = 0; |
| 1285 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &cbUid ); |
| 1286 |
SQLBindCol( hstmt, 45, SQL_C_DOUBLE, &storage_limit, 0, &cbStorageLimit ); |
| 1287 |
syslog_printf( "SQLBindCol" ); |
| 1288 |
*accountsLen=0; |
| 1289 |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < uidsLen ; i++ ){ |
| 1290 |
syslog_printf( "SQLFetch" ); |
| 1291 |
dst[ i ].setUID( uid ); |
| 1292 |
dst[ i ].setName( getResultCol( hstmt, 2 ).c_str() ); |
| 1293 |
dst[ i ].setUname( getResultCol( hstmt, 3 ).c_str() ); |
| 1294 |
dst[ i ].setEmail( getResultCol( hstmt, 4 ).c_str() ); |
| 1295 |
dst[ i ].setURL( getResultCol( hstmt, 5 ).c_str() ); |
| 1296 |
dst[ i ].setUserAvatar( getResultCol( hstmt, 6 ).c_str() ); |
| 1297 |
dst[ i ].setUserRegdate( atoi( getResultCol( hstmt, 7 ).c_str() ) ); |
| 1298 |
dst[ i ].setUserIcq( getResultCol( hstmt, 8 ).c_str() ); |
| 1299 |
dst[ i ].setUserFrom( getResultCol( hstmt, 9 ).c_str() ); |
| 1300 |
dst[ i ].setUserSig( getResultCol( hstmt, 10 ).c_str() ); |
| 1301 |
dst[ i ].setUserViewemail( atoi( getResultCol( hstmt, 11 ).c_str() )); |
| 1302 |
dst[ i ].setActkey( getResultCol( hstmt, 12 ).c_str() ); |
| 1303 |
dst[ i ].setUserAim( getResultCol( hstmt, 13 ).c_str() ); |
| 1304 |
dst[ i ].setUserYim( getResultCol( hstmt, 14 ).c_str() ); |
| 1305 |
dst[ i ].setUserMsnm( getResultCol( hstmt, 15 ).c_str() ); |
| 1306 |
dst[ i ].setPass( getResultCol( hstmt, 16 ).c_str() ); |
| 1307 |
dst[ i ].setPosts( atoi( getResultCol( hstmt, 17 ).c_str() )); |
| 1308 |
dst[ i ].setAttachsig( atoi( getResultCol( hstmt, 18 ).c_str() )); |
| 1309 |
dst[ i ].setRank( atoi( getResultCol( hstmt, 19 ).c_str() )); |
| 1310 |
dst[ i ].setLevel( atoi( getResultCol( hstmt, 20 ).c_str() )); |
| 1311 |
dst[ i ].setTheme( getResultCol( hstmt, 21 ).c_str() ); |
| 1312 |
dst[ i ].setTimezoneOffset( atof( getResultCol( hstmt, 22 ).c_str() ) ); |
| 1313 |
dst[ i ].setLastLogin( atoi( getResultCol( hstmt, 23 ).c_str() )); |
| 1314 |
dst[ i ].setUmode( getResultCol( hstmt, 24 ).c_str() ); |
| 1315 |
dst[ i ].setUorder( atoi( getResultCol( hstmt, 25 ).c_str() )); |
| 1316 |
dst[ i ].setNotifyMethod( atoi( getResultCol( hstmt, 26 ).c_str() )); |
| 1317 |
dst[ i ].setNotifyMode( atoi( getResultCol( hstmt, 27 ).c_str() )); |
| 1318 |
dst[ i ].setUserOcc( getResultCol( hstmt, 28 ).c_str() ); |
| 1319 |
dst[ i ].setBio( getResultCol( hstmt, 29 ).c_str() ); |
| 1320 |
dst[ i ].setUserIntrest( getResultCol( hstmt, 30 ).c_str() ); |
| 1321 |
dst[ i ].setUserMailok( atoi( getResultCol( hstmt, 31 ).c_str() )); |
| 1322 |
dst[ i ].setActivate( atoi( getResultCol( hstmt, 32 ).c_str() )); |
| 1323 |
dst[ i ].setAddress( getResultCol( hstmt, 33 ).c_str() ); |
| 1324 |
dst[ i ].setDivision( getResultCol( hstmt, 34 ).c_str() ); |
| 1325 |
dst[ i ].setTel( getResultCol( hstmt, 35 ).c_str() ); |
| 1326 |
dst[ i ].setCompanyName( getResultCol( hstmt, 36 ).c_str() ); |
| 1327 |
dst[ i ].setCountry( getResultCol( hstmt, 37 ).c_str() ); |
| 1328 |
dst[ i ].setZipcode( getResultCol( hstmt, 38 ).c_str() ); |
| 1329 |
dst[ i ].setFax( getResultCol( hstmt, 39 ).c_str() ); |
| 1330 |
dst[ i ].setNoticeMail( atoi( getResultCol( hstmt, 40 ).c_str() )); |
| 1331 |
dst[ i ].setNoticeMailSince( atoi( getResultCol( hstmt, 41 ).c_str() )); |
| 1332 |
dst[ i ].setPrivateIndexID( atoi( getResultCol( hstmt, 42 ).c_str() )); |
| 1333 |
dst[ i ].setItemNumberLimit( atoi( getResultCol( hstmt, 43 ).c_str() )); |
| 1334 |
dst[ i ].setIndexNumberLimit( atoi( getResultCol( hstmt, 44 ).c_str() )); |
| 1335 |
dst[ i ].setItemStorageLimit( storage_limit ); |
| 1336 |
( *accountsLen )++; |
| 1337 |
} |
| 1338 |
*accounts = dst; |
| 1339 |
syslog_printf( "getAccounts succeed" ); |
| 1340 |
ret = RES_OK; |
| 1341 |
}else{ |
| 1342 |
string s( "SQLExecDirect in getAccounts" ); |
| 1343 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1344 |
s += string( ", sql=" ) + string( sql ); |
| 1345 |
setLastErrorString( s.c_str( ) ); |
| 1346 |
syslog_printf( "getAccounts %s", getLastErrorString( ) ); |
| 1347 |
ret = RES_DB_QUERY_ERROR; |
| 1348 |
} |
| 1349 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1350 |
}else{ |
| 1351 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" ); |
| 1352 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1353 |
setLastErrorString( s.c_str( ) ); |
| 1354 |
syslog_printf( "getAccounts %s", getLastErrorString( ) ); |
| 1355 |
ret = RES_DB_QUERY_ERROR; |
| 1356 |
} |
| 1357 |
return ret; |
| 1358 |
} |
| 1359 |
|
| 1360 |
/** |
| 1361 |
* |
| 1362 |
* 繧「繧ォ繧ヲ繝ウ繝育匳骭イ. |
| 1363 |
* |
| 1364 |
* 繝ヲ繝シ繧カ諠??ア繧偵ョ繝シ繧ソ繝吶?繧ケ縺ォ逋サ骭イ縺励∪縺呻シ?/span> |
| 1365 |
* 逋サ骭イ縺励◆繝ヲ繝シ繧カ諠??ア縺ォ蟇セ蠢懊☆繧九Θ繝シ繧カID繧置id縺ォ譬シ邏阪@縺セ縺呻シ?/span> |
| 1366 |
* |
| 1367 |
* @param sid 繧サ繝?す繝ァ繝ウ |
| 1368 |
* @param account 逋サ骭イ縺吶k繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア |
| 1369 |
* @param uid 逋サ骭イ縺励◆繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア縺ォ蟇セ蠢懊☆繧九Θ繝シ繧カID |
| 1370 |
* @return RES_OK |
| 1371 |
* @return RES_NO_SUCH_SESSION |
| 1372 |
* @return RES_DB_QUERY_ERROR |
| 1373 |
* @return RES_DB_NOT_INITIALIZED |
| 1374 |
* |
| 1375 |
*/ |
| 1376 |
result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid ) |
| 1377 |
{ |
| 1378 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1379 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1380 |
|
| 1381 |
string sql; |
| 1382 |
string tmp; |
| 1383 |
SQLRETURN sqlcode; |
| 1384 |
result_t ret = RES_ERROR; |
| 1385 |
|
| 1386 |
/* |
| 1387 |
1. insert user profile into xoops_users |
| 1388 |
2. insert platform user profile into xnpaccount_users |
| 1389 |
3. add user to default platform group |
| 1390 |
4. create private index |
| 1391 |
5. update account set private_index_id=... |
| 1392 |
*/ |
| 1393 |
|
| 1394 |
//1.xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧? |
| 1395 |
SQLCHAR uname[ACCOUNT_UNAME_LEN+1], name[ACCOUNT_NAME_LEN+1], email[ACCOUNT_EMAIL_LEN+1], url[ACCOUNT_URL_LEN+1], user_avatar[ACCOUNT_USER_AVATAR_LEN+1], user_icq[ACCOUNT_USER_ICQ_LEN+1], user_from[ACCOUNT_USER_FROM_LEN+1], user_sig[ACCOUNT_USER_SIG_LEN+1], actkey[ACCOUNT_ACTKEY_LEN+1], user_aim[ACCOUNT_USER_AIM_LEN+1], user_yim[ACCOUNT_USER_YIM_LEN+1], user_msnm[ACCOUNT_USER_MSNM_LEN+1], pass[ACCOUNT_PASS_LEN+1], theme[ACCOUNT_THEME_LEN+1], umode[ACCOUNT_UMODE_LEN+1], user_occ[ACCOUNT_USER_OCC_LEN+1], bio[ACCOUNT_BIO_LEN+1], user_intrest[ACCOUNT_USER_INTREST_LEN+1]; |
| 1396 |
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 1397 |
SQLDOUBLE timezone_offset; |
| 1398 |
|
| 1399 |
SQLLEN cbUname = SQL_NTS, cbName = SQL_NTS, cbEmail = SQL_NTS, cbUrl = SQL_NTS, cbUser_avatar = SQL_NTS, cbUser_icq = SQL_NTS, cbUser_from = SQL_NTS, cbUser_sig = SQL_NTS, cbActkey = SQL_NTS, cbUser_aim = SQL_NTS, cbUser_yim = SQL_NTS, cbUser_msnm = SQL_NTS, cbPass = SQL_NTS, cbTheme = SQL_NTS, cbUmode = SQL_NTS, cbUser_occ = SQL_NTS, cbBio = SQL_NTS, cbUser_intrest = SQL_NTS; |
| 1400 |
SQLLEN cbUser_regdate = 0, cbUser_viewemail = 0, cbPosts = 0, cbAttachsig = 0, cbRank = 0, cbLevel = 0, cbLast_login = 0, cbUorder = 0, cbNotify_method = 0, cbNotify_mode = 0, cbUser_mailok = 0, cbTimezone_offset = 0; |
| 1401 |
|
| 1402 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1403 |
string sql; |
| 1404 |
sql = "INSERT INTO " + dbprefix + "_users (uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
| 1405 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1406 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1407 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 1408 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_NAME_LEN, 0, name, 0, &cbName ); |
| 1409 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_EMAIL_LEN, 0, email, 0, &cbEmail ); |
| 1410 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_URL_LEN, 0, url, 0, &cbUrl ); |
| 1411 |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AVATAR_LEN, 0, user_avatar, 0, &cbUser_avatar ); |
| 1412 |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_regdate, 0, &cbUser_regdate ); |
| 1413 |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_ICQ_LEN, 0, user_icq, 0, &cbUser_icq ); |
| 1414 |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_FROM_LEN, 0, user_from, 0, &cbUser_from ); |
| 1415 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_SIG_LEN, 0, user_sig, 0, &cbUser_sig ); |
| 1416 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_viewemail, 0, &cbUser_viewemail ); |
| 1417 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_ACTKEY_LEN, 0, actkey, 0, &cbActkey ); |
| 1418 |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AIM_LEN, 0, user_aim, 0, &cbUser_aim ); |
| 1419 |
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_YIM_LEN, 0, user_yim, 0, &cbUser_yim ); |
| 1420 |
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_MSNM_LEN, 0, user_msnm, 0, &cbUser_msnm ); |
| 1421 |
SQLBindParameter(hstmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_PASS_LEN, 0, pass, 0, &cbPass ); |
| 1422 |
SQLBindParameter(hstmt, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &posts, 0, &cbPosts ); |
| 1423 |
SQLBindParameter(hstmt, 17, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &attachsig, 0, &cbAttachsig ); |
| 1424 |
SQLBindParameter(hstmt, 18, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &rank, 0, &cbRank ); |
| 1425 |
SQLBindParameter(hstmt, 19, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &level, 0, &cbLevel ); |
| 1426 |
SQLBindParameter(hstmt, 20, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_THEME_LEN, 0, theme, 0, &cbTheme ); |
| 1427 |
SQLBindParameter(hstmt, 21, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &timezone_offset, 0, &cbTimezone_offset ); |
| 1428 |
SQLBindParameter(hstmt, 22, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &last_login, 0, &cbLast_login ); |
| 1429 |
SQLBindParameter(hstmt, 23, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UMODE_LEN, 0, umode, 0, &cbUmode ); |
| 1430 |
SQLBindParameter(hstmt, 24, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uorder, 0, &cbUorder ); |
| 1431 |
SQLBindParameter(hstmt, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_method, 0, &cbNotify_method ); |
| 1432 |
SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_mode, 0, &cbNotify_mode ); |
| 1433 |
SQLBindParameter(hstmt, 27, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_OCC_LEN, 0, user_occ, 0, &cbUser_occ ); |
| 1434 |
SQLBindParameter(hstmt, 28, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_BIO_LEN, 0, bio, 0, &cbBio ); |
| 1435 |
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 1436 |
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 1437 |
|
| 1438 |
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 1439 |
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 1440 |
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 1441 |
strncpy2( (char*)url, account -> getURL( ), ACCOUNT_URL_LEN ); |
| 1442 |
strncpy2( (char*)user_avatar, account -> getUserAvatar( ), ACCOUNT_USER_AVATAR_LEN ); |
| 1443 |
user_regdate = time( NULL ); |
| 1444 |
strncpy2( (char*)user_icq, account -> getUserIcq( ), ACCOUNT_USER_ICQ_LEN ); |
| 1445 |
strncpy2( (char*)user_from, account -> getUserFrom( ), ACCOUNT_USER_FROM_LEN ); |
| 1446 |
strncpy2( (char*)user_sig, account -> getUserSig( ), ACCOUNT_USER_SIG_LEN ); |
| 1447 |
user_viewemail = account -> getUserViewemail( ); |
| 1448 |
strncpy2( (char*)actkey, account -> getActkey( ), ACCOUNT_ACTKEY_LEN ); |
| 1449 |
strncpy2( (char*)user_aim, account -> getUserAim( ), ACCOUNT_USER_AIM_LEN ); |
| 1450 |
strncpy2( (char*)user_yim, account -> getUserYim( ), ACCOUNT_USER_YIM_LEN ); |
| 1451 |
strncpy2( (char*)user_msnm, account -> getUserMsnm( ), ACCOUNT_USER_MSNM_LEN ); |
| 1452 |
strncpy2( (char*)pass, account -> getPass( ), ACCOUNT_PASS_LEN ); |
| 1453 |
posts = account -> getPosts( ); |
| 1454 |
attachsig = account -> getAttachsig( ); |
| 1455 |
rank = account -> getRank( ); |
| 1456 |
level = account -> getLevel( ); |
| 1457 |
strncpy2( (char*)theme, account -> getTheme( ), ACCOUNT_THEME_LEN ); |
| 1458 |
timezone_offset = account -> getTimezoneOffset( ); |
| 1459 |
last_login = 0; |
| 1460 |
strncpy2( (char*)umode, account -> getUmode( ), ACCOUNT_UMODE_LEN ); |
| 1461 |
uorder = account -> getUorder( ); |
| 1462 |
notify_method = account -> getNotifyMethod( ); |
| 1463 |
notify_mode = account -> getNotifyMode( ); |
| 1464 |
strncpy2( (char*)user_occ, account -> getUserOcc( ), ACCOUNT_USER_OCC_LEN ); |
| 1465 |
strncpy2( (char*)bio, account -> getBio( ), ACCOUNT_BIO_LEN ); |
| 1466 |
strncpy2( (char*)user_intrest, account -> getUserIntrest( ), ACCOUNT_USER_INTREST_LEN ); |
| 1467 |
user_mailok = account -> getUserMailok( ); |
| 1468 |
|
| 1469 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1470 |
SQLLEN count = 0; |
| 1471 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1472 |
//繝ヲ繝シ繧カID繧貞叙蠕励☆繧?/span> |
| 1473 |
if( dbtype == DBTYPE_MYSQL ){ |
| 1474 |
sql = "SELECT LAST_INSERT_ID()"; |
| 1475 |
}else if( dbtype == DBTYPE_SQLITE ){ |
| 1476 |
sql = "SELECT LAST_INSERT_ROWID()"; |
| 1477 |
} |
| 1478 |
ret = queryGetUnsignedInt( "insertAccount", sql, (unsigned int*)uid ); |
| 1479 |
}else{ |
| 1480 |
string s( "SQLRowCount in insertAccount sql=" ); |
| 1481 |
s += string( sql ); |
| 1482 |
setLastErrorString( s.c_str( ) ); |
| 1483 |
ret = RES_DB_QUERY_ERROR; |
| 1484 |
} |
| 1485 |
}else{ |
| 1486 |
string s( "SQLExecute in insertAccount " ); |
| 1487 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1488 |
setLastErrorString( s.c_str( ) ); |
| 1489 |
ret = RES_DB_QUERY_ERROR; |
| 1490 |
} |
| 1491 |
}else{ |
| 1492 |
string s( "SQLPrepare in insertAccount " ); |
| 1493 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1494 |
setLastErrorString( s.c_str( ) ); |
| 1495 |
ret = RES_ERROR; |
| 1496 |
} |
| 1497 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1498 |
}else{ |
| 1499 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 1500 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1501 |
setLastErrorString( s.c_str( ) ); |
| 1502 |
ret = RES_ERROR; |
| 1503 |
} |
| 1504 |
|
| 1505 |
if( ret == RES_OK ){ |
| 1506 |
//2.xnpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧呈嶌縺崎セシ繧? |
| 1507 |
SQLUINTEGER activate; |
| 1508 |
SQLCHAR address[XNP_ACCOUNT_ADDRESS_LEN+1]; |
| 1509 |
SQLCHAR division[XNP_ACCOUNT_DIVISION_LEN+1]; |
| 1510 |
SQLCHAR tel[XNP_ACCOUNT_TEL_LEN+1]; |
| 1511 |
SQLCHAR company_name[XNP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1512 |
SQLCHAR country[XNP_ACCOUNT_COUNTRY_LEN+1]; |
| 1513 |
SQLCHAR zipcode[XNP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1514 |
SQLCHAR fax[XNP_ACCOUNT_FAX_LEN+1]; |
| 1515 |
SQLLEN cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS; |
| 1516 |
SQLLEN cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0, cbItem_number_limit = 0, cbIndex_number_limit = 0, cbItem_storage_limit = 0; |
| 1517 |
SQLUINTEGER notice_mail; |
| 1518 |
SQLUINTEGER notice_mail_since; |
| 1519 |
SQLINTEGER item_number_limit; |
| 1520 |
SQLINTEGER index_number_limit; |
| 1521 |
SQLDOUBLE item_storage_limit; |
| 1522 |
|
| 1523 |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1524 |
string sql; |
| 1525 |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, notice_mail, notice_mail_since, private_item_number_limit, private_index_number_limit, private_item_storage_limit) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
| 1526 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1527 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1528 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
| 1529 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
| 1530 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1531 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1532 |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1533 |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1534 |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1535 |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1536 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1537 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1538 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1539 |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &item_number_limit, 0, &cbItem_number_limit); |
| 1540 |
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &index_number_limit, 0, &cbIndex_number_limit); |
| 1541 |
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &item_storage_limit, 0, &cbItem_storage_limit); |
| 1542 |
|
| 1543 |
activate = account -> getActivate() ? 1 : 0; |
| 1544 |
strncpy2( (char*)address, account -> getAddress(), XNP_ACCOUNT_ADDRESS_LEN ); |
| 1545 |
strncpy2( (char*)division, account -> getDivision(), XNP_ACCOUNT_DIVISION_LEN ); |
| 1546 |
strncpy2( (char*)tel, account -> getTel(), XNP_ACCOUNT_TEL_LEN ); |
| 1547 |
strncpy2( (char*)company_name, account -> getCompanyName(), XNP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1548 |
strncpy2( (char*)country, account -> getCountry(), XNP_ACCOUNT_COUNTRY_LEN ); |
| 1549 |
strncpy2( (char*)zipcode, account -> getZipcode(), XNP_ACCOUNT_ZIPCODE_LEN ); |
| 1550 |
strncpy2( (char*)fax, account -> getFax(), XNP_ACCOUNT_FAX_LEN ); |
| 1551 |
notice_mail = account -> getNoticeMail( ); |
| 1552 |
notice_mail_since = account -> getNoticeMailSince( ); |
| 1553 |
item_number_limit = account -> getItemNumberLimit( ); |
| 1554 |
index_number_limit = account -> getIndexNumberLimit( ); |
| 1555 |
item_storage_limit = account -> getItemStorageLimit( ); |
| 1556 |
|
| 1557 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1558 |
SQLLEN count = 0; |
| 1559 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1560 |
ret = RES_OK; |
| 1561 |
if( ret == RES_OK ){ |
| 1562 |
//3.add new user to default group(not a group admin) |
| 1563 |
ret = insertMember( sid, group_t::GID_DEFAULT, *uid, false ); |
| 1564 |
}else{ |
| 1565 |
//xoops_users縺クinsert縺励◆繝ャ繧ウ繝シ繝峨r蜑企勁縺吶k |
| 1566 |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1567 |
sql += unsignedIntToString( *uid ); |
| 1568 |
SQLHANDLE hstmt2 = NULL; |
| 1569 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1570 |
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1571 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1572 |
} |
| 1573 |
setLastErrorString( "insertMember in insertAccount" ); |
| 1574 |
ret = RES_DB_QUERY_ERROR; |
| 1575 |
} |
| 1576 |
}else{ |
| 1577 |
string s( "SQLRowCount in insertAccount sql=" ); |
| 1578 |
s += string( sql ); |
| 1579 |
setLastErrorString( s.c_str( ) ); |
| 1580 |
ret = RES_DB_QUERY_ERROR; |
| 1581 |
} |
| 1582 |
}else{ |
| 1583 |
string s( "SQLExecute in insertAccount " ); |
| 1584 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1585 |
setLastErrorString( s.c_str( ) ); |
| 1586 |
ret = RES_DB_QUERY_ERROR; |
| 1587 |
} |
| 1588 |
}else{ |
| 1589 |
//xoops_users縺クinsert縺励◆繝ャ繧ウ繝シ繝峨r蜑企勁縺吶k |
| 1590 |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1591 |
sql += unsignedIntToString( *uid ); |
| 1592 |
SQLHANDLE hstmt2 = NULL; |
| 1593 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1594 |
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1595 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1596 |
} |
| 1597 |
string s( "SQLExecDirect in insertAccount sql=" ); |
| 1598 |
s += string( sql ); |
| 1599 |
setLastErrorString( s.c_str( ) ); |
| 1600 |
ret = RES_DB_QUERY_ERROR; |
| 1601 |
} |
| 1602 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1603 |
}else{ |
| 1604 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 1605 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1606 |
setLastErrorString( s.c_str( ) ); |
| 1607 |
ret = RES_ERROR; |
| 1608 |
} |
| 1609 |
} |
| 1610 |
|
| 1611 |
if ( ret == RES_OK ){ |
| 1612 |
//4.private index繧剃ス懈? |
| 1613 |
|
| 1614 |
// private index逕ィ縺ョsort_number逕滓? |
| 1615 |
string sql = "select min(sort_number) from " + |
| 1616 |
dbprefix + "_xnpaccount_index where parent_index_id=" + unsignedIntToString(item::IID_ROOT) + |
| 1617 |
" and open_level=" + unsignedIntToString(index::OL_PRIVATE); |
| 1618 |
unsigned int sortNumber; |
| 1619 |
ret = queryGetUnsignedInt( "insertAccount", sql, &sortNumber ); |
| 1620 |
sortNumber--; |
| 1621 |
if ( ret == RES_OK ){ |
| 1622 |
// private index菴懈? |
| 1623 |
index_t index; |
| 1624 |
index.setItemTypeID(item::ITID_INDEX); |
| 1625 |
index.setContributorUID(*uid); |
| 1626 |
index.setParentIndexID(item::IID_ROOT); |
| 1627 |
index.setOwnerUID(*uid); |
| 1628 |
index.setOpenLevel(index::OL_PRIVATE); |
| 1629 |
index.setSortNumber(sortNumber); |
| 1630 |
index.setTitle(account->getUname()); |
| 1631 |
indexid_t privateXID; |
| 1632 |
ret = insertIndexInternal( sid, &index, &privateXID ); |
| 1633 |
if ( ret == RES_OK ){ |
| 1634 |
// xnpaccuont_users縺ョprivate_index_id縺ョ譖ク縺肴鋤縺?/span> |
| 1635 |
sql = "UPDATE " + dbprefix + "_xnpaccount_users SET private_index_id=" |
| 1636 |
+ unsignedIntToString(privateXID) + " WHERE uid=" + unsignedIntToString(*uid); |
| 1637 |
ret = querySimple( "insertAccount", sql ); |
| 1638 |
} |
| 1639 |
} |
| 1640 |
} |
| 1641 |
|
| 1642 |
return ret; |
| 1643 |
} |
| 1644 |
|
| 1645 |
/** |
| 1646 |
* |
| 1647 |
* 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞、画峩縺吶k. |
| 1648 |
* |
| 1649 |
* |
| 1650 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1651 |
* @param account 螟画峩縺励◆縺?い繧ォ繧ヲ繝ウ繝域ュ蝣ア |
| 1652 |
* @return RES_OK |
| 1653 |
* @return RES_DB_NOT_INITIALIZED |
| 1654 |
* @return RES_NO_SUCH_SESSION |
| 1655 |
* @return RES_DB_QUERY_ERROR |
| 1656 |
* @return RES_NO_SUCH_USER |
| 1657 |
* @return RES_ERROR |
| 1658 |
* |
| 1659 |
*/ |
| 1660 |
result_t updateAccount( sessionid_t sid, const account_t* account ) |
| 1661 |
{ |
| 1662 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1663 |
if( account == NULL ) return RES_ERROR; |
| 1664 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1665 |
if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER; |
| 1666 |
|
| 1667 |
SQLRETURN sqlcode; |
| 1668 |
result_t ret = RES_ERROR; |
| 1669 |
SQLHANDLE hstmt = NULL; |
| 1670 |
|
| 1671 |
//xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧? |
| 1672 |
SQLCHAR uname[ACCOUNT_UNAME_LEN+1], name[ACCOUNT_NAME_LEN+1], email[ACCOUNT_EMAIL_LEN+1], url[ACCOUNT_URL_LEN+1], user_avatar[ACCOUNT_USER_AVATAR_LEN+1], user_icq[ACCOUNT_USER_ICQ_LEN+1], user_from[ACCOUNT_USER_FROM_LEN+1], user_sig[ACCOUNT_USER_SIG_LEN+1], actkey[ACCOUNT_ACTKEY_LEN+1], user_aim[ACCOUNT_USER_AIM_LEN+1], user_yim[ACCOUNT_USER_YIM_LEN+1], user_msnm[ACCOUNT_USER_MSNM_LEN+1], pass[ACCOUNT_PASS_LEN+1], theme[ACCOUNT_THEME_LEN+1], umode[ACCOUNT_UMODE_LEN+1], user_occ[ACCOUNT_USER_OCC_LEN+1], bio[ACCOUNT_BIO_LEN+1], user_intrest[ACCOUNT_USER_INTREST_LEN+1]; |
| 1673 |
SQLINTEGER uid, user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 1674 |
SQLDOUBLE timezone_offset; |
| 1675 |
|
| 1676 |
SQLLEN cbUname = SQL_NTS, cbName = SQL_NTS, cbEmail = SQL_NTS, cbUrl = SQL_NTS, cbUser_avatar = SQL_NTS, cbUser_icq = SQL_NTS, cbUser_from = SQL_NTS, cbUser_sig = SQL_NTS, cbActkey = SQL_NTS, cbUser_aim = SQL_NTS, cbUser_yim = SQL_NTS, cbUser_msnm = SQL_NTS, cbPass = SQL_NTS, cbTheme = SQL_NTS, cbUmode = SQL_NTS, cbUser_occ = SQL_NTS, cbBio = SQL_NTS, cbUser_intrest = SQL_NTS; |
| 1677 |
SQLLEN cbUid = 0, cbUser_regdate = 0, cbUser_viewemail = 0, cbPosts = 0, cbAttachsig = 0, cbRank = 0, cbLevel = 0, cbLast_login = 0, cbUorder = 0, cbNotify_method = 0, cbNotify_mode = 0, cbUser_mailok = 0, cbTimezone_offset = 0; |
| 1678 |
|
| 1679 |
SQLUINTEGER activate; |
| 1680 |
SQLCHAR address[XNP_ACCOUNT_ADDRESS_LEN+1]; |
| 1681 |
SQLCHAR division[XNP_ACCOUNT_DIVISION_LEN+1]; |
| 1682 |
SQLCHAR tel[XNP_ACCOUNT_TEL_LEN+1]; |
| 1683 |
SQLCHAR company_name[XNP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1684 |
SQLCHAR country[XNP_ACCOUNT_COUNTRY_LEN+1]; |
| 1685 |
SQLCHAR zipcode[XNP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1686 |
SQLCHAR fax[XNP_ACCOUNT_FAX_LEN+1]; |
| 1687 |
SQLLEN cbActivate = 0, cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS; |
| 1688 |
SQLUINTEGER notice_mail, notice_mail_since; |
| 1689 |
SQLLEN cbNotice_mail = 0, cbNotice_mail_since = 0; |
| 1690 |
|
| 1691 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1692 |
string sql; |
| 1693 |
|
| 1694 |
sql = "UPDATE " + dbprefix + "_users SET "; |
| 1695 |
sql += "uname=?"; |
| 1696 |
sql += ", name=?"; |
| 1697 |
sql += ", email=?"; |
| 1698 |
sql += ", url=?"; |
| 1699 |
sql += ", user_avatar=?"; |
| 1700 |
sql += ", user_regdate=?"; |
| 1701 |
sql += ", user_icq=?"; |
| 1702 |
sql += ", user_from=?"; |
| 1703 |
sql += ", user_sig=?"; |
| 1704 |
sql += ", user_viewemail=?"; |
| 1705 |
sql += ", actkey=?"; |
| 1706 |
sql += ", user_aim=?"; |
| 1707 |
sql += ", user_yim=?"; |
| 1708 |
sql += ", user_msnm=?"; |
| 1709 |
sql += ", pass=?"; |
| 1710 |
sql += ", posts=?"; |
| 1711 |
sql += ", attachsig=?"; |
| 1712 |
sql += ", rank=?"; |
| 1713 |
sql += ", level=?"; |
| 1714 |
sql += ", theme=?"; |
| 1715 |
sql += ", timezone_offset=?"; |
| 1716 |
sql += ", last_login=?"; |
| 1717 |
sql += ", umode=?"; |
| 1718 |
sql += ", uorder=?"; |
| 1719 |
sql += ", notify_method=?"; |
| 1720 |
sql += ", notify_mode=?"; |
| 1721 |
sql += ", user_occ=?"; |
| 1722 |
sql += ", bio=?"; |
| 1723 |
sql += ", user_intrest=?"; |
| 1724 |
sql += ", user_mailok=? "; |
| 1725 |
sql += " WHERE uid = ?"; |
| 1726 |
|
| 1727 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1728 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1729 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 1730 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_NAME_LEN, 0, name, 0, &cbName ); |
| 1731 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_EMAIL_LEN, 0, email, 0, &cbEmail ); |
| 1732 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_URL_LEN, 0, url, 0, &cbUrl ); |
| 1733 |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AVATAR_LEN, 0, user_avatar, 0, &cbUser_avatar ); |
| 1734 |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_regdate, 0, &cbUser_regdate ); |
| 1735 |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_ICQ_LEN, 0, user_icq, 0, &cbUser_icq ); |
| 1736 |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_FROM_LEN, 0, user_from, 0, &cbUser_from ); |
| 1737 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_SIG_LEN, 0, user_sig, 0, &cbUser_sig ); |
| 1738 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_viewemail, 0, &cbUser_viewemail ); |
| 1739 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_ACTKEY_LEN, 0, actkey, 0, &cbActkey ); |
| 1740 |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AIM_LEN, 0, user_aim, 0, &cbUser_aim ); |
| 1741 |
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_YIM_LEN, 0, user_yim, 0, &cbUser_yim ); |
| 1742 |
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_MSNM_LEN, 0, user_msnm, 0, &cbUser_msnm ); |
| 1743 |
SQLBindParameter(hstmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_PASS_LEN, 0, pass, 0, &cbPass ); |
| 1744 |
SQLBindParameter(hstmt, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &posts, 0, &cbPosts ); |
| 1745 |
SQLBindParameter(hstmt, 17, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &attachsig, 0, &cbAttachsig ); |
| 1746 |
SQLBindParameter(hstmt, 18, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &rank, 0, &cbRank ); |
| 1747 |
SQLBindParameter(hstmt, 19, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &level, 0, &cbLevel ); |
| 1748 |
SQLBindParameter(hstmt, 20, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_THEME_LEN, 0, theme, 0, &cbTheme ); |
| 1749 |
SQLBindParameter(hstmt, 21, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &timezone_offset, 0, &cbTimezone_offset ); |
| 1750 |
SQLBindParameter(hstmt, 22, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &last_login, 0, &cbLast_login ); |
| 1751 |
SQLBindParameter(hstmt, 23, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UMODE_LEN, 0, umode, 0, &cbUmode ); |
| 1752 |
SQLBindParameter(hstmt, 24, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uorder, 0, &cbUorder ); |
| 1753 |
SQLBindParameter(hstmt, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_method, 0, &cbNotify_method ); |
| 1754 |
SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_mode, 0, &cbNotify_mode ); |
| 1755 |
SQLBindParameter(hstmt, 27, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_OCC_LEN, 0, user_occ, 0, &cbUser_occ ); |
| 1756 |
SQLBindParameter(hstmt, 28, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_BIO_LEN, 0, bio, 0, &cbBio ); |
| 1757 |
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 1758 |
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 1759 |
SQLBindParameter(hstmt, 31, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1760 |
|
| 1761 |
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 1762 |
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 1763 |
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 1764 |
strncpy2( (char*)url, account -> getURL( ), ACCOUNT_URL_LEN ); |
| 1765 |
strncpy2( (char*)user_avatar, account -> getUserAvatar( ), ACCOUNT_USER_AVATAR_LEN ); |
| 1766 |
user_regdate = time( NULL ); |
| 1767 |
strncpy2( (char*)user_icq, account -> getUserIcq( ), ACCOUNT_USER_ICQ_LEN ); |
| 1768 |
strncpy2( (char*)user_from, account -> getUserFrom( ), ACCOUNT_USER_FROM_LEN ); |
| 1769 |
strncpy2( (char*)user_sig, account -> getUserSig( ), ACCOUNT_USER_SIG_LEN ); |
| 1770 |
user_viewemail = account -> getUserViewemail( ); |
| 1771 |
strncpy2( (char*)actkey, account -> getActkey( ), ACCOUNT_ACTKEY_LEN ); |
| 1772 |
strncpy2( (char*)user_aim, account -> getUserAim( ), ACCOUNT_USER_AIM_LEN ); |
| 1773 |
strncpy2( (char*)user_yim, account -> getUserYim( ), ACCOUNT_USER_YIM_LEN ); |
| 1774 |
strncpy2( (char*)user_msnm, account -> getUserMsnm( ), ACCOUNT_USER_MSNM_LEN ); |
| 1775 |
strncpy2( (char*)pass, account -> getPass( ), ACCOUNT_PASS_LEN ); |
| 1776 |
posts = account -> getPosts( ); |
| 1777 |
attachsig = account -> getAttachsig( ); |
| 1778 |
rank = account -> getRank( ); |
| 1779 |
level = account -> getLevel( ); |
| 1780 |
strncpy2( (char*)theme, account -> getTheme( ), ACCOUNT_THEME_LEN ); |
| 1781 |
timezone_offset = account -> getTimezoneOffset( ); |
| 1782 |
last_login = 0; |
| 1783 |
strncpy2( (char*)umode, account -> getUmode( ), ACCOUNT_UMODE_LEN ); |
| 1784 |
uorder = account -> getUorder( ); |
| 1785 |
notify_method = account -> getNotifyMethod( ); |
| 1786 |
notify_mode = account -> getNotifyMode( ); |
| 1787 |
strncpy2( (char*)user_occ, account -> getUserOcc( ), ACCOUNT_USER_OCC_LEN ); |
| 1788 |
strncpy2( (char*)bio, account -> getBio( ), ACCOUNT_BIO_LEN ); |
| 1789 |
strncpy2( (char*)user_intrest, account -> getUserIntrest( ), ACCOUNT_USER_INTREST_LEN ); |
| 1790 |
user_mailok = account -> getUserMailok( ); |
| 1791 |
uid = account -> getUID( ); |
| 1792 |
|
| 1793 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1794 |
SQLLEN count = 0; |
| 1795 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1796 |
ret = RES_OK; |
| 1797 |
}else{ |
| 1798 |
string s( "SQLRowCount in updateAccount sql=" ); |
| 1799 |
s += string( sql ); |
| 1800 |
setLastErrorString( s.c_str( ) ); |
| 1801 |
ret = RES_DB_QUERY_ERROR; |
| 1802 |
} |
| 1803 |
}else{ |
| 1804 |
string s( "SQLExecute in updateAccount 1 " ); |
| 1805 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1806 |
setLastErrorString( s.c_str( ) ); |
| 1807 |
ret = RES_DB_QUERY_ERROR; |
| 1808 |
} |
| 1809 |
}else{ |
| 1810 |
setLastErrorString( "SQLPrepare in updateAccount sql=" ); |
| 1811 |
ret = RES_ERROR; |
| 1812 |
} |
| 1813 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1814 |
hstmt = NULL; |
| 1815 |
}else{ |
| 1816 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1817 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1818 |
setLastErrorString( s.c_str( ) ); |
| 1819 |
ret = RES_ERROR; |
| 1820 |
} |
| 1821 |
|
| 1822 |
if( ret != RES_OK ){ |
| 1823 |
return ret; |
| 1824 |
} |
| 1825 |
|
| 1826 |
//xnpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧剃ク頑嶌縺阪☆繧?/span> |
| 1827 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1828 |
string sql; |
| 1829 |
|
| 1830 |
sql = "UPDATE " + dbprefix + "_xnpaccount_users SET "; |
| 1831 |
sql += "activate=?, "; |
| 1832 |
sql += "address=?, "; |
| 1833 |
sql += "division=?, "; |
| 1834 |
sql += "tel=?, "; |
| 1835 |
sql += "company_name=?, "; |
| 1836 |
sql += "country=?, "; |
| 1837 |
sql += "zipcode=?, "; |
| 1838 |
sql += "fax=?, "; |
| 1839 |
sql += "notice_mail=?, "; |
| 1840 |
sql += "notice_mail_since=? ,"; |
| 1841 |
sql += "private_item_number_limit=" + unsignedIntToString( account -> getItemNumberLimit( ) ) + " ,"; |
| 1842 |
sql += "private_index_number_limit=" + unsignedIntToString( account -> getIndexNumberLimit( ) ) + " ,"; |
| 1843 |
sql += "private_item_storage_limit=" + doubleToString( account -> getItemStorageLimit( ) ) + " "; |
| 1844 |
sql += "WHERE uid=?"; |
| 1845 |
|
| 1846 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1847 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1848 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
| 1849 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1850 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1851 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1852 |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1853 |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1854 |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1855 |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1856 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1857 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1858 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1859 |
|
| 1860 |
activate = account -> getActivate() ? 1 : 0; |
| 1861 |
strncpy2( (char*)address, account -> getAddress( ) , XNP_ACCOUNT_ADDRESS_LEN ); |
| 1862 |
strncpy2( (char*)division, account -> getDivision(), XNP_ACCOUNT_DIVISION_LEN ); |
| 1863 |
strncpy2( (char*)tel, account -> getTel(), XNP_ACCOUNT_TEL_LEN ); |
| 1864 |
strncpy2( (char*)company_name, account -> getCompanyName(), XNP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1865 |
strncpy2( (char*)country, account -> getCountry(), XNP_ACCOUNT_COUNTRY_LEN ); |
| 1866 |
strncpy2( (char*)zipcode, account -> getZipcode(), XNP_ACCOUNT_ZIPCODE_LEN ); |
| 1867 |
strncpy2( (char*)fax, account -> getFax(), XNP_ACCOUNT_FAX_LEN ); |
| 1868 |
notice_mail = account -> getNoticeMail( ); |
| 1869 |
notice_mail_since = account -> getNoticeMailSince( ); |
| 1870 |
uid = account -> getUID( ); |
| 1871 |
|
| 1872 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1873 |
SQLLEN count = 0; |
| 1874 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1875 |
ret = RES_OK; |
| 1876 |
}else{ |
| 1877 |
string s( "SQLRowCount in updateAccount sql=" ); |
| 1878 |
s += string( sql ); |
| 1879 |
setLastErrorString( s.c_str( ) ); |
| 1880 |
ret = RES_DB_QUERY_ERROR; |
| 1881 |
} |
| 1882 |
}else{ |
| 1883 |
string s( "SQLExecute in updateAccount 2 " ); |
| 1884 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1885 |
setLastErrorString( s.c_str( ) ); |
| 1886 |
ret = RES_DB_QUERY_ERROR; |
| 1887 |
} |
| 1888 |
}else{ |
| 1889 |
setLastErrorString( "SQLPrepare in updateAccount sql=" ); |
| 1890 |
ret = RES_ERROR; |
| 1891 |
} |
| 1892 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1893 |
}else{ |
| 1894 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1895 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1896 |
setLastErrorString( s.c_str( ) ); |
| 1897 |
ret = RES_ERROR; |
| 1898 |
} |
| 1899 |
return ret; |
| 1900 |
} |
| 1901 |
|
| 1902 |
/** |
| 1903 |
* |
| 1904 |
* criteria_t縺ァ謖?ョ壹&繧後◆遽?峇縺ョ繝ヲ繝シ繧カID繧定ソ斐☆. |
| 1905 |
* 繝ヲ繝シ繧カID縺ョ驟榊?繧堤「コ菫昴@縺ヲ縺昴%縺ォ譖ク縺崎セシ縺ソ?碁?蛻励?繧「繝峨Ξ繧ケ繧?uids縺ォ譖ク縺崎セシ繧?. |
| 1906 |
* 驟榊?縺ョ繧オ繧、繧コ繧?uidsLen縺ォ譖ク縺崎セシ繧? |
| 1907 |
* |
| 1908 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1909 |
* @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span> |
| 1910 |
* @param uids 繝ヲ繝シ繧カ縺ョUID縺ョ驟榊?縺ョ蜃コ蜉帛? |
| 1911 |
* @param uidsLen uids驟榊?縺ョ隕∫エ?謨ー縺ョ蜃コ蜉帛? |
| 1912 |
* @return RES_OK |
| 1913 |
* @return RES_DB_NOT_INITIALIZED |
| 1914 |
* @return RES_NO_SUCH_SESSION |
| 1915 |
* @return RES_DB_QUERY_ERROR |
| 1916 |
* |
| 1917 |
*/ |
| 1918 |
result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1919 |
{ |
| 1920 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1921 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1922 |
|
| 1923 |
result_t ret = RES_ERROR; |
| 1924 |
userid_t* dst = 0; |
| 1925 |
string sql; |
| 1926 |
SQLRETURN sqlcode; |
| 1927 |
SQLLEN count = 0; |
| 1928 |
|
| 1929 |
|
| 1930 |
sql = "SELECT uid FROM " + dbprefix + "_xnpaccount_users "; |
| 1931 |
sql += criteria2str( cri ); |
| 1932 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1933 |
*uidsLen = count; |
| 1934 |
dst = new userid_t[ *uidsLen ]; |
| 1935 |
*uids = dst; |
| 1936 |
}else{ |
| 1937 |
return RES_ERROR; |
| 1938 |
} |
| 1939 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1940 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1941 |
userid_t uid = 0; |
| 1942 |
SQLLEN len = 0; |
| 1943 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 1944 |
|
| 1945 |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *uidsLen ; i++ ){ |
| 1946 |
dst[ i ] = uid; |
| 1947 |
} |
| 1948 |
|
| 1949 |
syslog_printf( "dumpUids succeed" ); |
| 1950 |
ret = RES_OK; |
| 1951 |
}else{ |
| 1952 |
string s( "SQLExecDirect in dumpUids " ); |
| 1953 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1954 |
s += "sql="; |
| 1955 |
s += string( sql ); |
| 1956 |
setLastErrorString( s.c_str( ) ); |
| 1957 |
syslog_printf( "dumpUids %s", getLastErrorString( ) ); |
| 1958 |
ret = RES_DB_QUERY_ERROR; |
| 1959 |
} |
| 1960 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1961 |
}else{ |
| 1962 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpUids" ); |
| 1963 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 1964 |
setLastErrorString( s.c_str( ) ); |
| 1965 |
syslog_printf( "dumpUids %s", getLastErrorString( ) ); |
| 1966 |
ret = RES_ERROR; |
| 1967 |
} |
| 1968 |
return ret; |
| 1969 |
} |
| 1970 |
|
| 1971 |
/** |
| 1972 |
* |
| 1973 |
* 繧ー繝ォ繝シ繝玲焚繧定ソ斐☆. |
| 1974 |
* 荳肴ュ」縺ェ繧サ繝?す繝ァ繝ウID縺ェ繧?繧定ソ斐☆. |
| 1975 |
* |
| 1976 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 1977 |
* @return 繧ー繝ォ繝シ繝玲焚 |
| 1978 |
* |
| 1979 |
*/ |
| 1980 |
int getGroupCount( sessionid_t sid ) |
| 1981 |
{ |
| 1982 |
if( hdbc == NULL ) return 0; |
| 1983 |
if( !isValidSessionID( sid ) ) return 0; |
| 1984 |
|
| 1985 |
SQLRETURN sqlcode; |
| 1986 |
SQLHANDLE hstmt = NULL; |
| 1987 |
string sql; |
| 1988 |
int ret = 0; |
| 1989 |
|
| 1990 |
//繧ー繝ォ繝シ繝玲焚繧呈アゅa繧?/span> |
| 1991 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_xnpaccount_groups"; |
| 1992 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1993 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1994 |
SQLUINTEGER count = 0; |
| 1995 |
SQLLEN len = 0; |
| 1996 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 1997 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 1998 |
ret = count; |
| 1999 |
}else { |
| 2000 |
string s( "SQLFetch in getGroupCount sql=" ); |
| 2001 |
s += string( sql ); |
| 2002 |
setLastErrorString( s.c_str( ) ); |
| 2003 |
ret = 0; |
| 2004 |
} |
| 2005 |
}else{ |
| 2006 |
setLastErrorString( "SQLExecDirect in getGroupCount" ); |
| 2007 |
ret = 0; |
| 2008 |
} |
| 2009 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2010 |
}else{ |
| 2011 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getGroupCount" ); |
| 2012 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2013 |
setLastErrorString( s.c_str( ) ); |
| 2014 |
ret = 0; |
| 2015 |
} |
| 2016 |
return ret; |
| 2017 |
} |
| 2018 |
|
| 2019 |
/** |
| 2020 |
* |
| 2021 |
* 謇?螻槭げ繝ォ繝シ繝嶺ク?隕ァ蜿門セ? |
| 2022 |
* 繝ヲ繝シ繧カ縺梧園螻槭@縺ヲ縺?k繧ー繝ォ繝シ繝励?ID繧貞叙蠕励☆繧?/span> |
| 2023 |
* |
| 2024 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2025 |
* @param uid 繝ヲ繝シ繧カ縺ョUID |
| 2026 |
* @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span> |
| 2027 |
* @param gids 繧ー繝ォ繝シ繝悠D縺ョ驟榊?縺ョ蜃コ蜉帛? |
| 2028 |
* @param gidsLen gids驟榊?縺ョ隕∫エ?謨ー縺ョ蜃コ蜉帛? |
| 2029 |
* @return RES_DB_NOT_INITIALIZED |
| 2030 |
* @return RES_NO_SUCH_SESSION |
| 2031 |
* @return RES_NO_SUCH_USER |
| 2032 |
* @return RES_DB_QUERY_ERROR |
| 2033 |
* @return RES_OK |
| 2034 |
* |
| 2035 |
*/ |
| 2036 |
result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 2037 |
{ |
| 2038 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2039 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2040 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid縺ョ蟄伜惠繧偵メ繧ァ繝?け |
| 2041 |
|
| 2042 |
result_t ret = RES_ERROR; |
| 2043 |
string sql; |
| 2044 |
SQLRETURN sqlcode; |
| 2045 |
SQLHANDLE hstmt = NULL; |
| 2046 |
SQLLEN count = 0; |
| 2047 |
groupid_t* dst = 0; |
| 2048 |
|
| 2049 |
sql = "SELECT gid FROM " + dbprefix + "_xnpaccount_groups_users_link"; |
| 2050 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 2051 |
sql += criteria2str( cri ); |
| 2052 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 2053 |
*gidsLen = count; |
| 2054 |
dst = new groupid_t[ *gidsLen ]; |
| 2055 |
*gids = dst; |
| 2056 |
}else{ |
| 2057 |
return RES_ERROR; |
| 2058 |
} |
| 2059 |
|
| 2060 |
//謇?螻槭☆繧九げ繝ォ繝シ繝励?譛?螟ァ蛟区焚繧呈アゅa繧?/span> |
| 2061 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2062 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2063 |
if( count > 0 ){ |
| 2064 |
SQLHANDLE hstmt2 = NULL; |
| 2065 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 2066 |
sql = "SELECT gid, uid, is_admin FROM " + dbprefix + "_xnpaccount_groups_users_link"; |
| 2067 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 2068 |
sql += criteria2str( cri ); |
| 2069 |
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2070 |
SQLLEN len = 0; |
| 2071 |
groupid_t gid = 0; |
| 2072 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 2073 |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *gidsLen ; i++ ){ |
| 2074 |
dst[ i ] = gid; |
| 2075 |
} |
| 2076 |
ret = RES_OK; |
| 2077 |
}else{ |
| 2078 |
string s( "SQLExecDirect in getGroupsByUid " ); |
| 2079 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2080 |
s += string( ", sql=" ) + string( sql ); |
| 2081 |
setLastErrorString( s.c_str( ) ); |
| 2082 |
ret = RES_DB_QUERY_ERROR; |
| 2083 |
} |
| 2084 |
}else{ |
| 2085 |
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 2086 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2087 |
setLastErrorString( s.c_str( ) ); |
| 2088 |
ret = RES_ERROR; |
| 2089 |
} |
| 2090 |
}else{ |
| 2091 |
ret = RES_OK; |
| 2092 |
} |
| 2093 |
}else{ |
| 2094 |
string s( "SQLExecDirect in getGroupsByUid " ); |
| 2095 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2096 |
s += string( ", sql=" ) + string( sql ); |
| 2097 |
setLastErrorString( s.c_str( ) ); |
| 2098 |
ret = RES_DB_QUERY_ERROR; |
| 2099 |
} |
| 2100 |
}else{ |
| 2101 |
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 2102 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2103 |
setLastErrorString( s.c_str( ) ); |
| 2104 |
ret = RES_ERROR; |
| 2105 |
} |
| 2106 |
return ret; |
| 2107 |
} |
| 2108 |
|
| 2109 |
/** |
| 2110 |
* |
| 2111 |
* 繧ー繝ォ繝シ繝礼ョ。逅?ィゥ髯仙撫蜷医○. |
| 2112 |
* 繝ヲ繝シ繧カ縺ォ繝ォ繝シ繝励?邂。逅?ィゥ髯舌′縺ゅk縺?繧ー繝ォ繝シ繝礼ョ。逅???〒縺ゅk縺?繧貞撫縺?粋繧上○繧? |
| 2113 |
* 繝ヲ繝シ繧カ繧?げ繝ォ繝シ繝励′蟄伜惠縺励↑縺?↑縺ゥ縺ョ逡ー蟶ク縺ョ蝣エ蜷茨シ掲alse繧定ソ斐☆. |
| 2114 |
* |
| 2115 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2116 |
* @param gid 繧ー繝ォ繝シ繝励?UID |
| 2117 |
* @param uid 繝ヲ繝シ繧カ縺ョUID |
| 2118 |
* @return true 邂。逅?ィゥ髯舌≠繧?/span> |
| 2119 |
* @return false 邂。逅?ィゥ髯舌↑縺暦シ後∪縺溘?荳肴? |
| 2120 |
* |
| 2121 |
*/ |
| 2122 |
bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 2123 |
{ |
| 2124 |
if( hdbc == NULL ) return false; |
| 2125 |
if( !isValidSessionID( sid ) ) return false; |
| 2126 |
if( !uidExists( uid ) ) return false; |
| 2127 |
if( !gidExists( gid ) ) return false; |
| 2128 |
|
| 2129 |
bool ret = false; |
| 2130 |
string sql; |
| 2131 |
SQLLEN count = 0; |
| 2132 |
|
| 2133 |
sql = "SELECT * FROM " + dbprefix + "_xnpaccount_groups_users_link "; |
| 2134 |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 2135 |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 2136 |
sql += " AND is_admin=1"; |
| 2137 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 2138 |
if( count > 0 ){ |
| 2139 |
ret = true; |
| 2140 |
}else{ |
| 2141 |
ret = false; |
| 2142 |
} |
| 2143 |
}else{ |
| 2144 |
ret = false; |
| 2145 |
} |
| 2146 |
return ret; |
| 2147 |
} |
| 2148 |
|
| 2149 |
/** |
| 2150 |
* |
| 2151 |
* 繧ー繝ォ繝シ繝悠D荳?隕ァ. |
| 2152 |
* 逋サ骭イ縺輔l縺ヲ縺?k繧ー繝ォ繝シ繝励?ID荳?隕ァ繧貞叙蠕励☆繧? |
| 2153 |
* |
| 2154 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2155 |
* @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span> |
| 2156 |
* @param gids 繧ー繝ォ繝シ繝悠D縺ョ驟榊?縺ョ蜃コ蜉帛? |
| 2157 |
* @param gidsLen gids驟榊?縺ョ隕∫エ?謨ー縺ョ蜃コ蜉帛? |
| 2158 |
* @return RES_DB_NOT_INITIALIZED |
| 2159 |
* @return RES_NO_SUCH_SESSION |
| 2160 |
* @return RES_DB_QUERY_ERROR |
| 2161 |
* @return RES_OK |
| 2162 |
* |
| 2163 |
*/ |
| 2164 |
result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 2165 |
{ |
| 2166 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2167 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2168 |
|
| 2169 |
result_t ret = RES_ERROR; |
| 2170 |
groupid_t* dst = 0; |
| 2171 |
string sql; |
| 2172 |
SQLRETURN sqlcode; |
| 2173 |
SQLLEN count = 0; |
| 2174 |
|
| 2175 |
sql = "SELECT gid FROM " + dbprefix + "_xnpaccount_groups "; |
| 2176 |
sql += criteria2str( cri ); |
| 2177 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 2178 |
*gidsLen = count; |
| 2179 |
dst = new groupid_t[ *gidsLen ]; |
| 2180 |
*gids = dst; |
| 2181 |
}else{ |
| 2182 |
return RES_ERROR; |
| 2183 |
} |
| 2184 |
|
| 2185 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2186 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2187 |
groupid_t gid = 0; |
| 2188 |
SQLLEN len = 0; |
| 2189 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 2190 |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *gidsLen ; i++ ){ |
| 2191 |
dst[ i ] = gid; |
| 2192 |
} |
| 2193 |
|
| 2194 |
ret = RES_OK; |
| 2195 |
}else{ |
| 2196 |
string s( "SQLExecDirect in dumpGids " ); |
| 2197 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2198 |
s += "sql="; |
| 2199 |
s += string( sql ); |
| 2200 |
setLastErrorString( s.c_str( ) ); |
| 2201 |
ret = RES_DB_QUERY_ERROR; |
| 2202 |
} |
| 2203 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2204 |
} |
| 2205 |
return ret; |
| 2206 |
} |
| 2207 |
|
| 2208 |
/** |
| 2209 |
* |
| 2210 |
* 繧ー繝ォ繝シ繝礼ョ。逅???D繧貞叙蠕励☆繧? |
| 2211 |
* 縺ゅk繧ー繝ォ繝シ繝励?邂。逅????繝ヲ繝シ繧カID繧貞叙蠕励☆繧? |
| 2212 |
* |
| 2213 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2214 |
* @param gid 蝠上>蜷医o縺帙k繧ー繝ォ繝シ繝励rID縺ァ謖?ョ壹☆繧?/span> |
| 2215 |
* @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span> |
| 2216 |
* @param uids 邂。逅????UID縺ョ驟榊?繧貞女縺大叙繧九?繧、繝ウ繧ソ |
| 2217 |
* @param uidsLen uids驟榊?縺ョ隕∫エ?謨ー |
| 2218 |
* @return RES_OK |
| 2219 |
* @return RES_DB_NOT_INITIALIZED |
| 2220 |
* @return RES_NO_SUCH_SESSION |
| 2221 |
* @return RES_DB_QUERY_ERROR |
| 2222 |
* @return RES_ERROR |
| 2223 |
* |
| 2224 |
*/ |
| 2225 |
result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 2226 |
{ |
| 2227 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2228 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2229 |
|
| 2230 |
result_t ret = RES_ERROR; |
| 2231 |
string sql; |
| 2232 |
SQLRETURN sqlcode; |
| 2233 |
SQLLEN count = 0; |
| 2234 |
|
| 2235 |
sql = "SELECT uid FROM " + dbprefix + "_xnpaccount_groups_users_link "; |
| 2236 |
sql += " WHERE is_admin=1 and gid=" + unsignedIntToString( gid ); |
| 2237 |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 2238 |
*uidsLen = count; |
| 2239 |
*uids = new groupid_t[ *uidsLen ]; |
| 2240 |
}else{ |
| 2241 |
return RES_ERROR; |
| 2242 |
} |
| 2243 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2244 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2245 |
userid_t uid; |
| 2246 |
SQLLEN len = 0; |
| 2247 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 2248 |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *uidsLen ; i++ ){ |
| 2249 |
(*uids)[ i ] = uid; |
| 2250 |
} |
| 2251 |
ret = RES_OK; |
| 2252 |
}else{ |
| 2253 |
string s( "SQLExecDirect in dumpGroupAdmins " ); |
| 2254 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2255 |
s += "sql="; |
| 2256 |
s += string( sql ); |
| 2257 |
setLastErrorString( s.c_str( ) ); |
| 2258 |
ret = RES_DB_QUERY_ERROR; |
| 2259 |
} |
| 2260 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2261 |
} |
| 2262 |
return ret; |
| 2263 |
} |
| 2264 |
|
| 2265 |
/** |
| 2266 |
* |
| 2267 |
* 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜑企勁. |
| 2268 |
* 繧ー繝ォ繝シ繝励↓謇?螻槭☆繧九Θ繝シ繧カ繧抵シ後げ繝ォ繝シ繝励°繧牙炎髯、縺吶k. |
| 2269 |
* 繝?ヵ繧ゥ繝ォ繝医げ繝ォ繝シ繝励°繧峨?蜑企勁縺ァ縺阪↑縺?/span> |
| 2270 |
* |
| 2271 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2272 |
* @param gid 縺ゥ縺ョ繧ー繝ォ繝シ繝励°繧牙炎髯、縺吶k縺九r謖?ョ壹☆繧九げ繝ォ繝シ繝悠D |
| 2273 |
* @param uid 蜑企勁蟇セ雎。縺ョ繝ヲ繝シ繧カ縺ョID |
| 2274 |
* @return RES_DB_NOT_INITIALIZED |
| 2275 |
* @return RES_NO_SUCH_SESSION |
| 2276 |
* @return RES_NO_SUCH_USER |
| 2277 |
* @return RES_NO_SUCH_GROUP |
| 2278 |
* @return RES_DB_QUERY_ERROR |
| 2279 |
* @return RES_OK |
| 2280 |
* @return RES_ERROR |
| 2281 |
* |
| 2282 |
*/ |
| 2283 |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 2284 |
{ |
| 2285 |
if( gid == group_t::GID_DEFAULT ) return RES_ERROR; |
| 2286 |
return deleteMemberNoLimit( sid, gid, uid ); |
| 2287 |
} |
| 2288 |
|
| 2289 |
/** |
| 2290 |
* |
| 2291 |
* 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜑企勁. |
| 2292 |
* 繧ー繝ォ繝シ繝励↓謇?螻槭☆繧九Θ繝シ繧カ繧抵シ後げ繝ォ繝シ繝励°繧牙炎髯、縺吶k. |
| 2293 |
* 繝?ヵ繧ゥ繝ォ繝医げ繝ォ繝シ繝励°繧峨b蜑企勁縺ァ縺阪k轤ケ縺鯉シ慧eleteMember縺ィ逡ー縺ェ繧?/span> |
| 2294 |
* |
| 2295 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2296 |
* @param gid 縺ゥ縺ョ繧ー繝ォ繝シ繝励°繧牙炎髯、縺吶k縺九r謖?ョ壹☆繧九げ繝ォ繝シ繝悠D |
| 2297 |
* @param uid 蜑企勁蟇セ雎。縺ョ繝ヲ繝シ繧カ縺ョID |
| 2298 |
* @return RES_DB_NOT_INITIALIZED |
| 2299 |
* @return RES_NO_SUCH_SESSION |
| 2300 |
* @return RES_NO_SUCH_USER |
| 2301 |
* @return RES_NO_SUCH_GROUP |
| 2302 |
* @return RES_DB_QUERY_ERROR |
| 2303 |
* @return RES_OK |
| 2304 |
* @return RES_ERROR |
| 2305 |
* |
| 2306 |
*/ |
| 2307 |
static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 2308 |
{ |
| 2309 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2310 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2311 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid縺ョ蟄伜惠繧偵メ繧ァ繝?け |
| 2312 |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid縺ョ蟄伜惠繧偵メ繧ァ繝?け |
| 2313 |
|
| 2314 |
result_t ret = RES_ERROR; |
| 2315 |
string sql; |
| 2316 |
SQLRETURN sqlcode; |
| 2317 |
SQLHANDLE hstmt = NULL; |
| 2318 |
|
| 2319 |
sql = "DELETE FROM " + dbprefix + "_xnpaccount_groups_users_link "; |
| 2320 |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 2321 |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 2322 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2323 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2324 |
SQLLEN count = 0; |
| 2325 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2326 |
ret = RES_OK; |
| 2327 |
}else{ |
| 2328 |
string s( "SQLRowCount in deleteMember" ); |
| 2329 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2330 |
s += string( ", sql=" ) + string( sql ); |
| 2331 |
setLastErrorString( s.c_str( ) ); |
| 2332 |
ret = RES_NO_SUCH_USER; |
| 2333 |
} |
| 2334 |
}else{ |
| 2335 |
string s( "SQLExecDirect in deleteMember" ); |
| 2336 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2337 |
s += ", sql="; |
| 2338 |
s += string( sql ); |
| 2339 |
setLastErrorString( s.c_str( ) ); |
| 2340 |
ret = RES_DB_QUERY_ERROR; |
| 2341 |
} |
| 2342 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2343 |
}else{ |
| 2344 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteMember" ); |
| 2345 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2346 |
setLastErrorString( s.c_str( ) ); |
| 2347 |
ret = RES_ERROR; |
| 2348 |
} |
| 2349 |
return ret; |
| 2350 |
} |
| 2351 |
|
| 2352 |
/** |
| 2353 |
* |
| 2354 |
* 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ霑ス蜉?. |
| 2355 |
* 繧ー繝ォ繝シ繝励?繝。繝ウ繝舌?縺ォ繝ヲ繝シ繧カ繧定ソス蜉?縺吶k. |
| 2356 |
* |
| 2357 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2358 |
* @param gid 謇?螻槫?繧ー繝ォ繝シ繝励?ID |
| 2359 |
* @param uid 謇?螻槭&縺帙k繝ヲ繝シ繧カ縺ョID |
| 2360 |
* @param admin 邂。逅???ィゥ髯舌r荳弱∴繧九↑繧液rue |
| 2361 |
* @return RES_OK |
| 2362 |
* @return RES_DB_NOT_INITIALIZED |
| 2363 |
* @return RES_NO_SUCH_SESSION |
| 2364 |
* @return RES_NO_SUCH_USER |
| 2365 |
* @return RES_NO_SUCH_GROUP |
| 2366 |
* @return RES_DB_QUERY_ERROR |
| 2367 |
* |
| 2368 |
*/ |
| 2369 |
result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid, bool admin ) |
| 2370 |
{ |
| 2371 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2372 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2373 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uid縺ョ蟄伜惠繧偵メ繧ァ繝?け |
| 2374 |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid縺ョ蟄伜惠繧偵メ繧ァ繝?け |
| 2375 |
|
| 2376 |
result_t ret = RES_ERROR; |
| 2377 |
string sql; |
| 2378 |
SQLRETURN sqlcode; |
| 2379 |
|
| 2380 |
//繝。繝ウ繝舌?繧定ソス蜉? |
| 2381 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2382 |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_groups_users_link ( gid, uid, is_admin ) VALUES ("; |
| 2383 |
sql += string( unsignedIntToString( gid ) ) + ", "; |
| 2384 |
sql += string( unsignedIntToString( uid ) ) + ", "; |
| 2385 |
sql += string( admin ? "1" : "0" ) + ") "; |
| 2386 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2387 |
SQLLEN count = 0; |
| 2388 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2389 |
ret = RES_OK; |
| 2390 |
}else{ |
| 2391 |
string s( "SQLRowCount in insertMember " ); |
| 2392 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2393 |
s += string( ", sql=" ) + string( sql ); |
| 2394 |
setLastErrorString( s.c_str( ) ); |
| 2395 |
ret = RES_DB_QUERY_ERROR; |
| 2396 |
} |
| 2397 |
}else{ |
| 2398 |
string s( "SQLExecDirect in insertMember " ); |
| 2399 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2400 |
s += string( ", sql=" ) + string( sql ); |
| 2401 |
setLastErrorString( s.c_str( ) ); |
| 2402 |
ret = RES_DB_QUERY_ERROR; |
| 2403 |
} |
| 2404 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2405 |
}else{ |
| 2406 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertMember" ); |
| 2407 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2408 |
setLastErrorString( s.c_str( ) ); |
| 2409 |
ret = RES_ERROR; |
| 2410 |
} |
| 2411 |
return ret; |
| 2412 |
} |
| 2413 |
|
| 2414 |
/** |
| 2415 |
* |
| 2416 |
* 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜿門セ? |
| 2417 |
* 縺ゅk繧ー繝ォ繝シ繝励?謇?螻槭@縺ヲ縺?k繝ヲ繝シ繧カ縺ョ繝ヲ繝シ繧カID繧貞叙蠕励☆繧?/span> |
| 2418 |
* |
| 2419 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2420 |
* @param gid 縺ゥ縺ョ繧ー繝ォ繝シ繝励?謇?螻槭Θ繝シ繧カ繧貞撫縺?粋繧上○繧九°繧偵げ繝ォ繝シ繝励rID縺ァ謖?ョ?/span> |
| 2421 |
* @param cri 邨先棡縺ョ遽?峇謖?ョ夲シ後た繝シ繝域擅莉カ謖?ョ?/span> |
| 2422 |
* @param uids 謇?螻槭Θ繝シ繧カ縺ョUID縺ョ驟榊?繧貞女縺大叙繧九?繧、繝ウ繧ソ |
| 2423 |
* @param uidsLen uids驟榊?縺ョ隕∫エ?謨ー |
| 2424 |
* @return RES_OK |
| 2425 |
* @return RES_DB_NOT_INITIALIZED |
| 2426 |
* @return RES_NO_SUCH_SESSION |
| 2427 |
* @return RES_NO_SUCH_GROUP |
| 2428 |
* @return RES_DB_QUERY_ERROR |
| 2429 |
* @return RES_ERROR |
| 2430 |
* |
| 2431 |
*/ |
| 2432 |
result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 2433 |
{ |
| 2434 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2435 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2436 |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gid縺ョ蟄伜惠繧偵メ繧ァ繝?け |
| 2437 |
|
| 2438 |
result_t ret = RES_ERROR; |
| 2439 |
string sql; |
| 2440 |
SQLRETURN sqlcode; |
| 2441 |
SQLHANDLE hstmt = NULL; |
| 2442 |
userid_t* dst = 0; |
| 2443 |
|
| 2444 |
//how many members ? |
| 2445 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_xnpaccount_groups_users_link "; |
| 2446 |
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 2447 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2448 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2449 |
SQLUINTEGER count = 0; |
| 2450 |
SQLLEN len = 0; |
| 2451 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 2452 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 2453 |
dst = new userid_t[ count ]; |
| 2454 |
*uids = dst; |
| 2455 |
*uidsLen = count; |
| 2456 |
if( count > 0 ){ |
| 2457 |
//retrieve member's IDs |
| 2458 |
SQLHANDLE hstmt2 = NULL; |
| 2459 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 2460 |
sql = "SELECT uid, gid, is_admin FROM " + dbprefix + "_xnpaccount_groups_users_link "; |
| 2461 |
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 2462 |
sql += " " + string( criteria2str( cri ) ); |
| 2463 |
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2464 |
SQLUINTEGER uid = 0; |
| 2465 |
SQLLEN len = 0; |
| 2466 |
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 2467 |
for( SQLUINTEGER i = 0; ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS && i < count ; i++ ){ |
| 2468 |
dst[ i ] = uid; |
| 2469 |
} |
| 2470 |
ret = RES_OK; |
| 2471 |
}else{ |
| 2472 |
setLastErrorString( "SQLExecDirect in getMembers" ); |
| 2473 |
ret = RES_DB_QUERY_ERROR; |
| 2474 |
} |
| 2475 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 2476 |
}else{ |
| 2477 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getMembers" ); |
| 2478 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2479 |
setLastErrorString( s.c_str( ) ); |
| 2480 |
ret = RES_ERROR; |
| 2481 |
} |
| 2482 |
}else{ |
| 2483 |
ret = RES_OK; |
| 2484 |
} |
| 2485 |
}else{ |
| 2486 |
string s( "SQLFetch in getMembers sql=" ); |
| 2487 |
s += string( sql ); |
| 2488 |
setLastErrorString( s.c_str( ) ); |
| 2489 |
ret = RES_DB_QUERY_ERROR; |
| 2490 |
} |
| 2491 |
}else{ |
| 2492 |
setLastErrorString( "SQLExecDirect in getMembers" ); |
| 2493 |
ret = RES_DB_QUERY_ERROR; |
| 2494 |
} |
| 2495 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2496 |
}else{ |
| 2497 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getMembers" ); |
| 2498 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2499 |
setLastErrorString( s.c_str( ) ); |
| 2500 |
ret = RES_ERROR; |
| 2501 |
} |
| 2502 |
return ret; |
| 2503 |
} |
| 2504 |
|
| 2505 |
/** |
| 2506 |
* |
| 2507 |
* 繧ー繝ォ繝シ繝励?蜑企勁. |
| 2508 |
* 繝??繧ソ繝吶?繧ケ縺九i繧ー繝ォ繝シ繝励r蜑企勁縺励∪縺? |
| 2509 |
* |
| 2510 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2511 |
* @param gid 縺ゥ縺ョ繧ー繝ォ繝シ繝励?謇?螻槭Θ繝シ繧カ繧貞撫縺?粋繧上○繧九°繧偵げ繝ォ繝シ繝励rID縺ァ謖?ョ?/span> |
| 2512 |
* @return RES_OK |
| 2513 |
* @return RES_DB_QUERY_ERROR |
| 2514 |
* @return RES_NO_SUCH_SESSION |
| 2515 |
* @return RES_DB_NOT_INITIALIZED |
| 2516 |
* |
| 2517 |
*/ |
| 2518 |
result_t deleteGroup( sessionid_t sid, groupid_t gid ) |
| 2519 |
{ |
| 2520 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2521 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2522 |
|
| 2523 |
result_t ret = RES_ERROR; |
| 2524 |
string sql; |
| 2525 |
SQLRETURN sqlcode; |
| 2526 |
SQLHANDLE hstmt = NULL; |
| 2527 |
|
| 2528 |
sql = "DELETE FROM " + dbprefix + "_xnpaccount_groups "; |
| 2529 |
sql += "WHERE gid = " + string( unsignedIntToString( gid ) ); |
| 2530 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2531 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2532 |
SQLLEN count = 0; |
| 2533 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2534 |
ret = RES_OK; |
| 2535 |
}else{ |
| 2536 |
string s( "SQLRowCount in deleteGroup" ); |
| 2537 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2538 |
s += string( ", sql=" ) + string( sql ); |
| 2539 |
setLastErrorString( s.c_str( ) ); |
| 2540 |
ret = RES_NO_SUCH_USER; |
| 2541 |
} |
| 2542 |
}else{ |
| 2543 |
string s( "SQLExecDirect in deleteGroup" ); |
| 2544 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2545 |
s += ", sql="; |
| 2546 |
s += string( sql ); |
| 2547 |
setLastErrorString( s.c_str( ) ); |
| 2548 |
ret = RES_DB_QUERY_ERROR; |
| 2549 |
} |
| 2550 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2551 |
}else{ |
| 2552 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteGroup" ); |
| 2553 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2554 |
setLastErrorString( s.c_str( ) ); |
| 2555 |
ret = RES_ERROR; |
| 2556 |
} |
| 2557 |
return ret; |
| 2558 |
} |
| 2559 |
|
| 2560 |
/** |
| 2561 |
* |
| 2562 |
* 繧ー繝ォ繝シ繝礼匳骭イ. |
| 2563 |
* 繧ー繝ォ繝シ繝励?諠??ア繧偵ョ繝シ繧ソ繝吶?繧ケ縺ォ險倬鹸縺吶k??/span> |
| 2564 |
* 逋サ骭イ縺励◆繧ー繝ォ繝シ繝励↓蟇セ蠢懊☆繧九げ繝ォ繝シ繝悠D繧暖id縺ォ譬シ邏阪☆繧具シ?/span> |
| 2565 |
* |
| 2566 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2567 |
* @param group 逋サ骭イ縺励◆縺?げ繝ォ繝シ繝励?諠??ア |
| 2568 |
* @param gid 逋サ骭イ縺励◆繧ー繝ォ繝シ繝励↓蟇セ蠢懊☆繧九げ繝ォ繝シ繝悠D |
| 2569 |
* @return RES_OK |
| 2570 |
* @return RES_DB_NOT_INITIALIZED |
| 2571 |
* @return RES_NO_SUCH_SESSION |
| 2572 |
* @return RES_DB_QUERY_ERROR |
| 2573 |
* |
| 2574 |
*/ |
| 2575 |
result_t insertGroup( sessionid_t sid, const group_t* group, groupid_t* gid ) |
| 2576 |
{ |
| 2577 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2578 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2579 |
|
| 2580 |
result_t ret = RES_ERROR; |
| 2581 |
string sql; |
| 2582 |
SQLCHAR gname[XNP_GROUP_GNAME_LEN+1], gdesc[XNP_GROUP_GDESC_LEN+1]; |
| 2583 |
SQLINTEGER item_number_limit; |
| 2584 |
SQLINTEGER index_number_limit; |
| 2585 |
SQLDOUBLE item_storage_limit; |
| 2586 |
SQLLEN cbGname = SQL_NTS, cbGdesc = SQL_NTS, cbItem_number_limit = 0, cbIndex_number_limit = 0, cbItem_storage_limit = 0; |
| 2587 |
SQLRETURN sqlcode; |
| 2588 |
|
| 2589 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2590 |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_groups ( gname, gdesc, group_item_number_limit, group_index_number_limit, group_item_storage_limit ) VALUES ( ?, ?, ?, ?, ? )"; |
| 2591 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2592 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2593 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2594 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
| 2595 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &item_number_limit, 0, &cbItem_number_limit); |
| 2596 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &index_number_limit, 0, &cbIndex_number_limit); |
| 2597 |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &item_storage_limit, 0, &cbItem_storage_limit); |
| 2598 |
strncpy2( (char*)gname, group -> getGname( ), XNP_GROUP_GNAME_LEN ); |
| 2599 |
strncpy2( (char*)gdesc, group -> getDesc( ), XNP_GROUP_GDESC_LEN ); |
| 2600 |
item_number_limit = group -> getItemNumberLimit( ); |
| 2601 |
index_number_limit = group -> getIndexNumberLimit( ); |
| 2602 |
item_storage_limit = group -> getItemStorageLimit( ); |
| 2603 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 2604 |
SQLLEN count = 0; |
| 2605 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2606 |
//繧ー繝ォ繝シ繝悠D繧貞叙蠕励☆繧?/span> |
| 2607 |
if( dbtype == DBTYPE_MYSQL ){ |
| 2608 |
sql = "SELECT LAST_INSERT_ID()"; |
| 2609 |
}else if( dbtype == DBTYPE_SQLITE ){ |
| 2610 |
sql = "SELECT LAST_INSERT_ROWID()"; |
| 2611 |
} |
| 2612 |
ret = queryGetUnsignedInt( "insertGroup", sql, (unsigned int*)gid ); |
| 2613 |
}else{ |
| 2614 |
string s( "SQLRowCount in insertGroup sql=" ); |
| 2615 |
s += string( sql ); |
| 2616 |
setLastErrorString( s.c_str( ) ); |
| 2617 |
ret = RES_DB_QUERY_ERROR; |
| 2618 |
} |
| 2619 |
}else{ |
| 2620 |
string s( "SQLExecute in insertGroup " ); |
| 2621 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2622 |
setLastErrorString( s.c_str( ) ); |
| 2623 |
ret = RES_DB_QUERY_ERROR; |
| 2624 |
} |
| 2625 |
}else{ |
| 2626 |
string s( "SQLPrepare in insertGroup " ); |
| 2627 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2628 |
setLastErrorString( s.c_str( ) ); |
| 2629 |
ret = RES_ERROR; |
| 2630 |
} |
| 2631 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2632 |
}else{ |
| 2633 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertGroup" ); |
| 2634 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2635 |
setLastErrorString( s.c_str( ) ); |
| 2636 |
ret = RES_ERROR; |
| 2637 |
} |
| 2638 |
|
| 2639 |
// |
| 2640 |
if ( ret == RES_OK ){ |
| 2641 |
//group index繧剃ス懈? |
| 2642 |
|
| 2643 |
//group index逕ィ縺ョsort_num逕滓? |
| 2644 |
string sql = "SELECT MAX(sort_number) FROM " + |
| 2645 |
dbprefix + "_xnpaccount_index WHERE parent_index_id=" + unsignedIntToString(item::IID_ROOT) + |
| 2646 |
" AND (open_level=" + unsignedIntToString(index::OL_GROUP_ONLY) + |
| 2647 |
" OR open_level=" + unsignedIntToString(index::OL_PUBLIC) + ")"; |
| 2648 |
unsigned int sortNumber; |
| 2649 |
ret = queryGetUnsignedInt( "insertGroup", sql, &sortNumber ); |
| 2650 |
sortNumber++; |
| 2651 |
if ( ret == RES_OK ){ |
| 2652 |
// group index菴懈? |
| 2653 |
index_t index; |
| 2654 |
userid_t uid; |
| 2655 |
ret = sessionID2UID( sid, &uid ); |
| 2656 |
if ( ret == RES_OK ){ |
| 2657 |
index.setItemTypeID(item::ITID_INDEX); |
| 2658 |
index.setContributorUID(uid); |
| 2659 |
index.setParentIndexID(item::IID_ROOT); |
| 2660 |
index.setOwnerGID(*gid); |
| 2661 |
index.setOpenLevel(index::OL_GROUP_ONLY); |
| 2662 |
index.setSortNumber(sortNumber); |
| 2663 |
index.setTitle(group->getGname()); |
| 2664 |
indexid_t groupXID; |
| 2665 |
ret = insertIndexInternal( sid, &index, &groupXID ); |
| 2666 |
if ( ret == RES_OK ){ |
| 2667 |
// xnpaccuont_groups縺ョgroup_index_id縺ョ譖ク縺肴鋤縺?/span> |
| 2668 |
sql = "UPDATE " + dbprefix + "_xnpaccount_groups SET group_index_id=" |
| 2669 |
+ unsignedIntToString(groupXID) + " WHERE gid=" + unsignedIntToString(*gid); |
| 2670 |
ret = querySimple( "insertGroup", sql ); |
| 2671 |
} |
| 2672 |
} |
| 2673 |
} |
| 2674 |
} |
| 2675 |
|
| 2676 |
return ret; |
| 2677 |
} |
| 2678 |
|
| 2679 |
/** |
| 2680 |
* |
| 2681 |
* 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞、画峩縺吶k |
| 2682 |
* |
| 2683 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2684 |
* @param group 譁ー縺励>繧ー繝ォ繝シ繝玲ュ蝣ア |
| 2685 |
* @return RES_OK |
| 2686 |
* @return RES_ERROR |
| 2687 |
* @return RES_DB_NOT_INITIALIZED |
| 2688 |
* @return RES_NO_SUCH_SESSION |
| 2689 |
* @return RES_NO_SUCH_GROUP |
| 2690 |
* @return RES_DB_QUERY_ERROR |
| 2691 |
* |
| 2692 |
*/ |
| 2693 |
result_t updateGroup( sessionid_t sid, const group_t* group ) |
| 2694 |
{ |
| 2695 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2696 |
if( group == NULL ) return RES_ERROR; |
| 2697 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2698 |
if( !gidExists( group -> getGID( ) ) ) return RES_NO_SUCH_GROUP; |
| 2699 |
|
| 2700 |
result_t ret = RES_ERROR; |
| 2701 |
string sql; |
| 2702 |
SQLCHAR gname[XNP_GROUP_GNAME_LEN+1], gdesc[XNP_GROUP_GDESC_LEN+1]; |
| 2703 |
SQLLEN cbGname = SQL_NTS, cbGdesc = SQL_NTS; |
| 2704 |
SQLRETURN sqlcode; |
| 2705 |
|
| 2706 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2707 |
sql = "UPDATE " + dbprefix + "_xnpaccount_groups SET gname=?, gdesc=?, "; |
| 2708 |
sql += "group_item_number_limit=" + unsignedIntToString( group -> getItemNumberLimit( ) ) + " ,"; |
| 2709 |
sql += "group_index_number_limit=" + unsignedIntToString( group -> getIndexNumberLimit( ) ) + " ,"; |
| 2710 |
sql += "group_item_storage_limit=" + doubleToString( group -> getItemStorageLimit( ) ) + " "; |
| 2711 |
sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) ); |
| 2712 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2713 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2714 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2715 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
| 2716 |
strncpy2( (char*)gname, group -> getGname( ), XNP_GROUP_GNAME_LEN ); |
| 2717 |
strncpy2( (char*)gdesc, group -> getDesc( ), XNP_GROUP_GDESC_LEN ); |
| 2718 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 2719 |
SQLLEN count = 0; |
| 2720 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2721 |
ret = RES_OK; |
| 2722 |
}else{ |
| 2723 |
string s( "SQLRowCount in updateGroup sql=" ); |
| 2724 |
s += string( sql ); |
| 2725 |
setLastErrorString( s.c_str( ) ); |
| 2726 |
ret = RES_DB_QUERY_ERROR; |
| 2727 |
} |
| 2728 |
}else{ |
| 2729 |
string s( "SQLExecute in updateGroup " ); |
| 2730 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2731 |
setLastErrorString( s.c_str( ) ); |
| 2732 |
ret = RES_DB_QUERY_ERROR; |
| 2733 |
} |
| 2734 |
}else{ |
| 2735 |
setLastErrorString( "SQLPrepare in updateGroup sql=" ); |
| 2736 |
ret = RES_ERROR; |
| 2737 |
} |
| 2738 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2739 |
}else{ |
| 2740 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateGroup" ); |
| 2741 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2742 |
setLastErrorString( s.c_str( ) ); |
| 2743 |
ret = RES_ERROR; |
| 2744 |
} |
| 2745 |
|
| 2746 |
if( ret == RES_OK ){ |
| 2747 |
// update縺吶∋縺絞ndex_id繧貞セ励k |
| 2748 |
sql = "SELECT group_index_id from " + dbprefix + "_xnpaccount_groups as tg " |
| 2749 |
" left join " + dbprefix + "_xnpaccount_item_basic as ti on tg.group_index_id = ti.item_id " |
| 2750 |
" left join " + dbprefix + "_xnpaccount_index as tx on ti.item_id = tx.index_id " |
| 2751 |
" where tg.gid=" + unsignedIntToString(group->getGID()) + |
| 2752 |
" and ti.item_type_id=" + unsignedIntToString(item::ITID_INDEX) + |
| 2753 |
" and tx.parent_index_id=" + unsignedIntToString(item::IID_ROOT); |
| 2754 |
indexid_t xid; |
| 2755 |
ret = queryGetUnsignedInt( "updateGroup", sql, &xid ); |
| 2756 |
|
| 2757 |
if ( ret == RES_OK ){ |
| 2758 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2759 |
sql = "UPDATE " + dbprefix + "_xnpaccount_item_basic set title=? " |
| 2760 |
"WHERE item_id=" + unsignedIntToString(xid); |
| 2761 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2762 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2763 |
cbGname = SQL_NTS; |
| 2764 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2765 |
strncpy2( (char*)gname, group -> getGname( ), XNP_GROUP_GNAME_LEN ); |
| 2766 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 2767 |
SQLLEN count = 0; |
| 2768 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2769 |
ret = RES_OK; |
| 2770 |
}else{ |
| 2771 |
string s( "SQLRowCount in updateGroup sql=" ); |
| 2772 |
s += string( sql ); |
| 2773 |
setLastErrorString( s.c_str( ) ); |
| 2774 |
ret = RES_DB_QUERY_ERROR; |
| 2775 |
} |
| 2776 |
}else{ |
| 2777 |
string s( "SQLExecute in updateGroup " ); |
| 2778 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2779 |
setLastErrorString( s.c_str( ) ); |
| 2780 |
ret = RES_DB_QUERY_ERROR; |
| 2781 |
} |
| 2782 |
}else{ |
| 2783 |
setLastErrorString( "SQLPrepare in updateGroup sql=" ); |
| 2784 |
ret = RES_ERROR; |
| 2785 |
} |
| 2786 |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2787 |
}else{ |
| 2788 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateGroup" ); |
| 2789 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2790 |
setLastErrorString( s.c_str( ) ); |
| 2791 |
ret = RES_ERROR; |
| 2792 |
} |
| 2793 |
} |
| 2794 |
} |
| 2795 |
return RES_OK; |
| 2796 |
} |
| 2797 |
|
| 2798 |
/** |
| 2799 |
* |
| 2800 |
* 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span> |
| 2801 |
* |
| 2802 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2803 |
* @param gid 蜿門セ励@縺溘>繧ー繝ォ繝シ繝励?GID |
| 2804 |
* @param group 蜿門セ励@縺溘げ繝ォ繝シ繝玲ュ蝣ア縺ョ繧「繝峨Ξ繧ケ繧呈嶌縺崎セシ繧?繝昴う繝ウ繧ソ |
| 2805 |
* @return RES_OK |
| 2806 |
* @return RES_DB_NOT_INITIALIZED |
| 2807 |
* @return RES_NO_SUCH_SESSION |
| 2808 |
* @return RES_NO_SUCH_GROUP |
| 2809 |
* @return RES_DB_QUERY_ERROR |
| 2810 |
* |
| 2811 |
*/ |
| 2812 |
result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group ) |
| 2813 |
{ |
| 2814 |
int len; |
| 2815 |
static criteria c; |
| 2816 |
result_t res = getGroups( sid, &gid, 1, &c, group, &len ); |
| 2817 |
if( len == 0 ) return RES_NO_SUCH_GROUP; |
| 2818 |
return res; |
| 2819 |
} |
| 2820 |
|
| 2821 |
/** |
| 2822 |
* |
| 2823 |
* 隍?焚縺ョ繧ー繝ォ繝シ繝玲ュ蝣ア繧剃ク?蠎ヲ縺ォ蜿門セ励☆繧? |
| 2824 |
* |
| 2825 |
* @param sid 繧サ繝?す繝ァ繝ウID |
| 2826 |
* @param gids 蜿門セ励@縺溘>繧ー繝ォ繝シ繝励?GID縺ョ驟榊? |
| 2827 |
* @param gidsLen gids驟榊?縺ョ隕∫エ?謨ー |
| 2828 |
* @param cri 邨先棡縺ョ蜿門セ礼ッ?峇?後た繝シ繝域擅莉カ繧呈欠螳?/span> |
| 2829 |
* @param groups 蜿門セ礼オ先棡縺ョ繧ー繝ォ繝シ繝玲ュ蝣ア縺ョ驟榊?縺ョ繧「繝峨Ξ繧ケ繧呈嶌縺崎セシ繧?繝昴う繝ウ繧ソ |
| 2830 |
* @param groupsLen 蜿門セ礼オ先棡縺ョ驟榊?縺ョ隕∫エ?謨ー |
| 2831 |
* @return RES_OK |
| 2832 |
* @return RES_DB_NOT_INITIALIZED |
| 2833 |
* @return RES_NO_SUCH_SESSION |
| 2834 |
* @return RES_DB_QUERY_ERROR |
| 2835 |
* |
| 2836 |
*/ |
| 2837 |
result_t getGroups( sessionid_t sid, groupid_t* gids, int |