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