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