Develop and Download Open Source Software

Browse CVS Repository

Annotation of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.102 - (hide annotations) (download) (as text)
Tue Aug 23 02:19:10 2005 UTC (18 years, 7 months ago) by tani
Branch: MAIN
Changes since 1.101: +57 -10 lines
File MIME type: text/x-c++src
getEventsForRSSの権限チェックを変更.

1 youi 1.1 /*
2 tani 1.86 * --------------------------------------------------------------------------
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 youi 1.1 *
22 tani 1.86 *
23 tani 1.102 * $Revision: 1.101 $
24 youi 1.2 * $Log: commonal.cc,v $
25 tani 1.102 * Revision 1.101 2005/08/08 01:57:00 aga4096
26     * ?ス?ス2?ス?ス?ス?ス?ス?ス?ス?ス?ス?スinitializeDB?ス?ス?ス?ス?ス?ス.
27     * ?ス?スvalgrind?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
28     *
29 aga4096 1.101 * Revision 1.100 2005/07/21 01:47:57 tani
30     * getEventsForRSS?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
31     *
32 tani 1.100 * Revision 1.99 2005/07/15 04:42:33 aga4096
33     * ?ス?スgetItemTypes?ス?ス?ス?スDB?ス?スNULL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
34     *
35 aga4096 1.99 * Revision 1.98 2005/07/12 06:40:44 aga4096
36     * ?ス?スsetConfigValue?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
37     *
38 aga4096 1.98 * Revision 1.97 2005/06/30 07:21:42 aga4096
39     * ?ス?スget_all_index?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スindex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
40     *
41 aga4096 1.97 * Revision 1.96 2005/06/29 00:10:18 aga4096
42     * ?ス?スlogin name -> additional info ?ス?ス?ス?ス?ス?ス.
43     *
44 aga4096 1.96 * Revision 1.95 2005/06/24 02:07:34 tani
45     * insertItemDirect?ス?ス?ス?ス?ス?ス(Import?ス?ス)
46     * getPrivateItemID?ス?ス?ス?スBINDER?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
47     *
48 tani 1.95 * Revision 1.94 2005/06/23 07:58:12 aga4096
49     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
50     *
51 aga4096 1.94 * Revision 1.93 2005/06/14 01:02:20 aga4096
52     * ?ス?ス?ス?ス?ス?スBinder?ス?ス?ス?ス?ス?ス?ス?ス. xnp_extract_public_item_id, xnp_extract_nonbinder_item_id ?ス?ス?ス?ス?ス?ス.
53     *
54 aga4096 1.93 * Revision 1.92 2005/06/08 04:27:08 tani
55     * default?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
56     *
57 tani 1.92 * Revision 1.91 2005/06/07 01:10:33 tani
58     * SQLGetData?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
59     * SQLExecDirect?ス?ス?ス?ス?ス?ス?ス?ス?ス?スSQLExecute?ス?ス?ス?ス?ス?ス.
60     *
61 tani 1.91 * Revision 1.90 2005/05/23 08:00:30 tani
62     * insertGroup, updateGroup: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
63     *
64 tani 1.90 * Revision 1.89 2005/05/18 10:00:17 aga4096
65     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
66     *
67 aga4096 1.89 * Revision 1.88 2005/03/17 16:02:40 orrisroot
68     * UNIX ?ス?ス?ス?ス?ス?ス?ス?ス SQLLEN ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スconfigure
69     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス config.h ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
70     * ?ス?ス ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス MacOS X ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
71     *
72 orrisroot 1.88 * Revision 1.87 2005/03/15 12:09:39 tani
73     * deleteItem ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
74     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
75     *
76 tani 1.87 * Revision 1.86 2005/03/15 04:49:40 tani
77     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
78     *
79 tani 1.86 * Revision 1.85 2005/03/14 09:30:50 aga4096
80     * ?ス?スgetItemCountByIndex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
81     *
82 aga4096 1.85 * Revision 1.84 2005/03/14 06:12:11 tani
83     * __BORLANDC__?ス?ス?ス?ス.
84     *
85 tani 1.84 * 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 orrisroot 1.83 * Revision 1.82 2005/03/11 07:11:30 tani
91     * itemid_t?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(*iidsLen)?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
92     *
93 tani 1.82 * Revision 1.81 2005/03/11 00:34:57 tani
94     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スcertify_state?ス?ス?ス?ス.
95     *
96 tani 1.81 * Revision 1.80 2005/03/09 07:27:37 aga4096
97     * ?ス?スactivate=0?ス?ス?ス?スloginUser?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
98     *
99 aga4096 1.80 * Revision 1.79 2005/03/07 01:20:09 aga4096
100     * ?ス?スgetItemCountGroupByIndex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
101     *
102 aga4096 1.79 * Revision 1.78 2005/03/05 02:28:05 aga4096
103     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス Private ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
104     *
105 aga4096 1.78 * Revision 1.77 2005/03/05 01:48:35 aga4096
106     * ?ス?スgetItemCountGroupByIndex?ス?ス?ス?ス?ス?ス.
107     *
108 aga4096 1.77 * Revision 1.76 2005/03/04 06:13:28 aga4096
109     * ?ス?スupdateIndex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
110     *
111 aga4096 1.76 * Revision 1.75 2005/03/03 10:13:00 aga4096
112     * ?ス?スisValidSession?ス?スtimestamp?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
113     * ?ス?スsession?ス?スisValidSession?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス1?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
114     * ?ス?スloginUser, createSession?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スsession?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
115     *
116 aga4096 1.75 * Revision 1.74 2005/02/26 05:11:31 tani
117     * getGroupItemID?ス?ス?ス?ス.
118     *
119 tani 1.74 * Revision 1.73 2005/02/25 07:41:35 tani
120     * getGroupItemID?ス?ス?ス?ス.
121     * item, index?ス?スlimit?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
122     *
123 tani 1.73 * Revision 1.72 2005/02/25 01:03:42 tani
124     * dbtype==DBTYPE_SQLITE?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
125     *
126 tani 1.72 * Revision 1.71 2005/02/24 11:32:55 aga4096
127     * ?ス?スupdateGroup?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
128     *
129 aga4096 1.71 * Revision 1.70 2005/02/23 06:39:28 tani
130     * isGuestEnabled: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
131     *
132 tani 1.70 * 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 tani 1.69 * Revision 1.68 2005/02/21 05:46:18 tani
139     * getItemCount?ス?ス?ス?ス?ス?ス.
140     * dumpItemID, getItems?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
141     *
142 tani 1.68 * Revision 1.67 2005/02/19 02:06:11 tani
143     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
144     *
145 tani 1.67 * Revision 1.66 2005/02/16 10:03:13 youi
146     * publication_year/month/mday?ス?ス?ス?ス?ス?ス.
147     *
148 youi 1.66 * Revision 1.65 2005/02/16 07:37:17 youi
149     * insertItem, updateItem, getItems: publication_date?ス?ス?ス?ス?ス?ス.
150     *
151 youi 1.65 * Revision 1.64 2005/02/15 02:35:47 youi
152     * SQLINTEGER?ス?ス?ス?スSQLLEN?ス?ス?ス?ス?ス?ス?ス?ス.
153     *
154 youi 1.64 * Revision 1.63 2005/02/10 02:33:16 aga
155     * ?ス?スzipCreate?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
156     *
157 aga 1.63 * Revision 1.62 2005/02/09 11:11:52 youi
158     * deleteItem?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
159     *
160 youi 1.62 * Revision 1.61 2005/02/09 07:23:50 aga
161     * ?ス?スURL to My Personal Archive ?ス?スDB?ス?スAL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
162     *
163 aga 1.61 * Revision 1.60 2005/02/09 02:14:15 aga
164     * ?ス?スinitializeDB()?ス?スdbtype?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(SQLite?ス?ス).
165     *
166 aga 1.60 * Revision 1.59 2005/02/08 07:15:02 youi
167     * pubmed?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス:
168     *
169 youi 1.59 * Revision 1.58 2005/02/08 06:40:51 youi
170     * pubmedComplete:?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スpubmed_t?ス?ス?ス?ス?ス?ス?ス?ス.
171     *
172 youi 1.58 * Revision 1.57 2005/02/03 12:04:58 youi
173     * getOwnPublicItemID?ス?ス?ス?ス?ス?ス.
174     * binder_item_link?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
175     *
176 youi 1.57 * Revision 1.56 2005/01/29 09:49:22 youi
177     * syslog_printf: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
178     * getCertifyPermission: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スsql?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
179     * SQLINTEGER->SQLLEN?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
180     * getItemPermission: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
181     *
182 youi 1.56 * Revision 1.55 2005/01/28 07:01:38 youi
183     * getItemIDByIndexID: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
184     * SQLAllocHandle?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
185     *
186 youi 1.55 * Revision 1.54 2005/01/28 00:36:58 aga
187     * ?ス?スfreeString?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
188     *
189 aga 1.54 * Revision 1.53 2005/01/27 08:30:35 youi
190     * getIndexIDByItemID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
191     *
192 youi 1.53 * Revision 1.52 2005/01/25 06:46:50 aga
193     * ?ス?スBinders?ス?ス?ス?ス?ス?スindex?ス?スdeleteIndex?ス?ス?ス?ス.
194     * ?ス?スgetItems?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
195     *
196 aga 1.52 * Revision 1.51 2005/01/24 10:50:29 youi
197     * freeItemType,getItemTypes?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
198     *
199 youi 1.51 * Revision 1.50 2005/01/24 01:54:38 youi
200     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
201     * dumpItemID, getItemIDByBinderID, getItemIDByIndexID
202     * ?ス?ス?ス?ス?ス?ス?ス?ス
203     * getPrivateItemID, getUncertifiedLink
204     *
205 youi 1.50 * Revision 1.49 2005/01/22 09:30:58 youi
206     * setLastErrorString?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
207     *
208 youi 1.49 * Revision 1.48 2005/01/22 04:18:22 aga
209     * ?ス?スloginUser, insertAccount?ス?ス?ス?ス?ス?スmd5()?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
210     *
211 aga 1.48 * Revision 1.47 2005/01/22 02:41:14 aga
212     * ?ス?スamazon?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
213     *
214 aga 1.47 * Revision 1.46 2005/01/21 01:36:11 youi
215     * pubmed?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
216     *
217 youi 1.46 * Revision 1.45 2005/01/19 10:07:53 aga
218     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
219     *
220 aga 1.45 * 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 youi 1.44 * Revision 1.43 2005/01/19 01:42:15 aga
243 aga4096 1.89 * ?ス?スx_xoonips_index?ス?スgid,uid?ス?ス0?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
244 youi 1.44 *
245 aga 1.43 * Revision 1.42 2005/01/19 00:51:29 aga
246 aga4096 1.89 * ?ス?スinsertIndex?ス?スx_xoonips_index.index_id?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
247 aga 1.43 *
248 aga 1.42 * Revision 1.41 2005/01/19 00:06:51 aga
249     * ?ス?スupdateIndex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
250     * ?ス?スcreateSession?ス?ス?ス?スuid?ス?スPlatform?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スactivate?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
251     *
252 aga 1.41 * Revision 1.40 2005/01/17 00:15:05 aga
253     * ?ス?スdeleteIndex, updateIndex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
254     *
255 aga 1.40 * 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 youi 1.39 * Revision 1.38 2005/01/15 00:39:16 aga
263 aga4096 1.89 * ?ス?スx_xoonips_item_basic?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
264 youi 1.39 *
265 aga 1.38 * Revision 1.37 2005/01/14 10:36:59 aga
266     * ?ス?スindex?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
267     * ?ス?スinsertAccount?ス?スprivate index?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
268     * ?ス?スinsertGroup?ス?スgroup index ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
269     *
270 aga 1.37 * Revision 1.36 2005/01/13 04:19:22 aga
271     * ?ス?スVP?ス?スXNP?ス?ス?ス?ス?ス?ス.
272     *
273 aga 1.36 * 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 youi 1.35 * Revision 1.34 2004/12/28 04:38:14 aga
282     * ?ス?スlogoutUser()?ス?ス?ス?ス?ス?ス.
283     *
284 aga 1.34 * Revision 1.33 2004/12/27 05:56:23 youi
285     * odbcDiagString: STMT?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
286     * syslog?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
287     *
288 youi 1.33 * Revision 1.32 2004/12/25 09:46:47 youi
289     * MySQL+MyODBC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
290     *
291 youi 1.32 * Revision 1.31 2004/12/21 11:42:59 youi
292     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
293     *
294 youi 1.31 * Revision 1.30 2004/12/18 10:24:54 youi
295     * IMPORT_MYSQLDLL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スMYSQL?ス?スDLL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
296     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
297     *
298 youi 1.30 * Revision 1.29 2004/12/18 01:12:29 youi
299     * freeResult?ス?ス?ス?ス?ス?ス?ス?ス?ス?スfree<?ス?ス?ス?ス?ス?ス?ス?ス>?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
300     *
301 youi 1.29 * Revision 1.28 2004/12/14 12:02:08 youi
302     * __WIN__?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スwindows?ス?スdll?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
303     * USE_SYSLOG?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スsyslogd?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
304     * getAccounts: uidsLen?ス?ス0?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
305     *
306 youi 1.28 * Revision 1.27 2004/12/06 11:34:47 aga
307     * ?ス?スuninitializeDB()?ス?ス?ス?ス?ス?ス.
308     *
309 aga 1.27 * Revision 1.26 2004/12/06 10:17:36 youi
310     * mysql_use_result?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
311     * while( row = mysql_fetch_row(result) );?ス?ス?ス?ス?ス?ス?ス?ス
312     *
313 youi 1.26 * Revision 1.25 2004/12/06 07:24:33 youi
314     * insertAccount, insertGroup:
315     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
316     *
317 youi 1.25 * Revision 1.24 2004/12/06 01:45:50 aga
318     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
319     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
320     *
321 aga 1.24 * Revision 1.23 2004/12/04 09:21:10 aga
322 aga4096 1.89 * ?ス?スxnp_config ?ス?ス xoonips_config.
323 aga 1.24 *
324 aga 1.23 * Revision 1.22 2004/12/03 07:17:21 youi
325     * isModerator?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
326     *
327 youi 1.22 * Revision 1.21 2004/12/01 10:28:58 youi
328     * DB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
329     * institute -> division
330     * organizaion -> company_name
331     *
332 aga 1.61 * Revis1.20 2004/12/01 04:37:04 youi
333 youi 1.21 * freeResult: unsigned int* ?ス?ス int* ?ス?ス?ス?ス?ス?ス.
334     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
335     *
336 youi 1.20 * 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 youi 1.19 * Revision 1.18 2004/11/30 05:46:32 aga
348     * ?ス?スsession?ス?ス?ス?スremoteHost?ス?ス?ス?ス?ス?ス.
349     *
350 aga 1.18 * Revision 1.17 2004/11/27 09:35:49 youi
351     * isActivated?ス?ス?ス?ス?ス?ス.
352     * activate?ス?ス?ス?ス?ス?ス.
353     * dumpUid?ス?ス?ス?ス?ス?ス.
354     *
355 youi 1.17 * 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 youi 1.16 * Revision 1.15 2004/11/27 02:22:22 aga
364     * ?ス?スinitializeDB?ス?ス?ス?スaddSlashes()?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
365     *
366 aga 1.15 * Revision 1.14 2004/11/27 01:07:31 youi
367     * criteria2str: LIMIT?ス?スORDER BY?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
368     *
369 youi 1.14 * Revision 1.13 2004/11/27 00:35:39 youi
370     * getAccounts?ス?ス?ス?ス?ス?ス.
371     * getAccount?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgetAccounts?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
372     * criteria2str?ス?ス?ス?ス?ス?ス.
373     *
374 youi 1.13 * Revision 1.12 2004/11/26 09:45:28 youi
375     * getAccount?ス?ス?ス?ス?ス?ス.
376     *
377 youi 1.12 * Revision 1.11 2004/11/26 08:16:26 aga
378     * ?ス?スgetSession, loginUser, createSession, freeResult(const session_t*) ?ス?ス?ス?ス.
379     *
380 aga 1.11 * Revision 1.10 2004/11/26 07:57:42 youi
381     * updateAccount, deleteAccount?ス?ス?ス?ス?ス?ス.
382     * mysql_query?ス?ス?ス?ス?ス?ス?ス?スstderr?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
383     *
384 youi 1.10 * Revision 1.9 2004/11/26 07:38:02 aga
385     * ?ス?スFAILUE -> FAILURE.
386     *
387 aga 1.9 * Revision 1.8 2004/11/26 06:36:55 aga
388     * ?ス?スcreateSession, getSession ?ス?ス?ス?ス?ス?ス.
389     *
390 aga 1.8 * Revision 1.7 2004/11/26 04:51:47 youi
391     * dbprefix?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
392     * insertAccount?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
393     * isValidSessionID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
394     *
395 youi 1.7 * Revision 1.6 2004/11/26 04:35:55 aga
396     * ?ス?スloginUser(), logoutUser()?ス?ス?ス?ス?ス?ス.
397     *
398 aga 1.6 * Revision 1.5 2004/11/26 01:08:25 aga
399     * ?ス?スaddSlashes()?ス?ス?ス?ス.
400     *
401 aga 1.5 * Revision 1.4 2004/11/25 12:14:29 youi
402     * getUid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
403     *
404 youi 1.4 * Revision 1.3 2004/11/25 11:13:59 youi
405     * getLastErrorString/setLastErrorString?ス?ス?ス?ス?ス?ス.
406     *
407 youi 1.3 * Revision 1.2 2004/11/25 08:55:19 youi
408     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
409     * freeResult?ス?ス?ス?ス?ス?ス.
410     *
411 youi 1.2 * Revision 1.1 2004/11/25 05:14:58 youi
412     * initial version
413     *
414 youi 1.1 *
415     */
416 orrisroot 1.88 #ifdef HAVE_CONFIG_H
417     # include <config.h>
418     #endif
419    
420 youi 1.35 #ifdef WIN32
421     #include <windows.h>
422 youi 1.28 #endif
423    
424     #ifdef USE_SYSLOG
425     #include <syslog.h>
426     #endif
427    
428 youi 1.1 #include <stdio.h>
429 aga 1.6 #include <stdlib.h>
430 youi 1.1 #include <string.h>
431 youi 1.3 #include <string>
432 aga 1.27 #include <assert.h>
433 orrisroot 1.83 #include <time.h>
434 youi 1.32 #include <sql.h>
435     #include <sqlext.h>
436 youi 1.46 #include <libxml/xmlreader.h>
437    
438 youi 1.7 using namespace std;
439 youi 1.1
440     #include "common.h"
441     #include "account.h"
442     #include "group.h"
443     #include "session.h"
444 youi 1.39 #include "item.h"
445     #include "itemtype.h"
446 youi 1.1 #include "criteria.h"
447     #include "commonal.h"
448 aga 1.37 #include "item.h"
449     #include "index.h"
450 youi 1.44 #include "changelog.h"
451 youi 1.46 #include "pubmed.h"
452 aga 1.47 #include "amazonbook.h"
453 youi 1.1
454 youi 1.32 static string dbprefix; //!< XOOPS?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スPREFIX
455 aga 1.60 static dbtype_t dbtype; //!< MySQL/SQLite
456 youi 1.32
457     static SQLHANDLE henv = NULL;
458     static SQLHANDLE hdbc = NULL;
459    
460 youi 1.58 static bool processEsummary(xmlTextReaderPtr reader, pubmed_t* p);
461     static bool processEsearch(xmlTextReaderPtr reader, pubmed_t* p, int* DocID );
462 youi 1.46 static void processEfetch(xmlTextReaderPtr reader, pubmed_t* p);
463     static int streamPubmedFile(const char *filename, pubmed_t* p);
464 aga 1.37 static result_t insertIndexInternal( sessionid_t sid, index_t *index, indexid_t *xid );
465 youi 1.33 static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode );
466 youi 1.35 static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid );
467 youi 1.56 static result_t getXoopsModuleConfigValue( const char *module, const char *key, char **value );
468 youi 1.49 static void setLastErrorString( const char* str );
469 aga4096 1.76 static result_t checkTitleConflict( sessionid_t sid, indexid_t parentIndexID, const char *title, bool *conflict );
470 tani 1.95 static result_t _insertItem( sessionid_t sid, const item_t* item, itemid_t* itemid, bool direct );
471 tani 1.100 static result_t getEvents(sessionid_t sid, event_t** events, int* eventsLen, string condition );
472 youi 1.32
473 tani 1.86 static void syslog_printf( char* format, ... )
474 youi 1.56 {
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 tani 1.90 #endif
481 youi 1.56 }
482    
483 tani 1.69 /**
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 youi 1.56 static result_t countResultRows( const char* sql, SQLLEN* count )
501 youi 1.32 {
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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
513 youi 1.32 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 youi 1.44
524 youi 1.39 /**
525     *
526 youi 1.44 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
527     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
528     *
529 youi 1.39 */
530 youi 1.44 static certify_t getInitialCertifyStateFromConfig( )
531 youi 1.39 {
532 youi 1.44 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 tani 1.72 syslog_printf( "\ngetInitialCertifyStateFromConfig certify_item_val=%s", certify_item_val );
544 youi 1.44 freeString( certify_item_val );
545 youi 1.39 }
546 youi 1.44 return ret;
547 youi 1.39 }
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 aga 1.45
592    
593    
594 aga 1.37 /** 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in querySimple " );
618     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
619     setLastErrorString( s.c_str( ) );
620 aga 1.37 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 youi 1.53
635 aga 1.37 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 youi 1.56 SQLLEN len = 0;
639 aga 1.37 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 youi 1.44 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
649 aga 1.37 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in queryGetUnsignedInt " );
665     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
666     setLastErrorString( s.c_str( ) );
667 aga 1.37 ret = RES_ERROR;
668     }
669     return ret;
670     }
671    
672 youi 1.32 /**
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 youi 1.56 syslog_printf( "\nstrncpy2 '%s'\n", dst );
684 youi 1.32 return dst;
685     }
686    
687     /**
688     *
689     * SQL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
690     *
691     * @param hstmt SQL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
692     * @param sqlcode SQLExecDirect,SQLExecute?ス?ス?ス?ス?ス?ス?ス?ス
693     * @return ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
694     */
695 youi 1.33 static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode )
696 youi 1.32 {
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 youi 1.33 SQLGetDiagRec( HandleType, hstmt, 1, SQLState, &NativeError, MessageText, 1024, &TextLength );
704 youi 1.32
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 aga4096 1.94 string getResultCol( SQLHANDLE hstmt, int col, SQLSMALLINT targetType = SQL_C_CHAR )
721 youi 1.32 {
722     string s;
723 youi 1.64 SQLRETURN sqlcode;
724     SQLCHAR BinaryPtr[5000];
725     SQLLEN BinaryLenOrInd;
726     SQLINTEGER NumBytes;
727 youi 1.32
728 tani 1.72 syslog_printf( "getResultCol" );
729 aga4096 1.94 while ( ( sqlcode = SQLGetData(hstmt, col, targetType, BinaryPtr, sizeof(BinaryPtr),
730 youi 1.32 &BinaryLenOrInd)) != SQL_NO_DATA) {
731 tani 1.72 syslog_printf( "SQLGetData BinaryLenOrInd=%d", BinaryLenOrInd );
732 youi 1.32 NumBytes = (BinaryLenOrInd > 5000) || (BinaryLenOrInd == SQL_NO_TOTAL) ? 5000 : BinaryLenOrInd;
733 tani 1.72 if( NumBytes <= 0 ) break;
734     else if( NumBytes > 0 ){
735 youi 1.33 s += string( (char*)BinaryPtr, NumBytes );
736     }
737 youi 1.32 }
738 tani 1.72 syslog_printf( "getResultCol returns %s", s.c_str() );
739 youi 1.32 return s;
740     }
741 youi 1.7
742 aga 1.5
743     /**
744     *
745 youi 1.32 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス\?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
746 aga 1.5 *
747 youi 1.32 * @param str addslashes?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スNULL?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
748     * @return ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
749 aga 1.5 */
750     string addSlashes( const char *str )
751     {
752 youi 1.32 if ( hdbc == NULL ){
753 aga 1.15 string s;
754     return s;
755 youi 1.32 }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 aga 1.5 return s;
779     }
780    
781 aga 1.45 /** 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 youi 1.56 SQLLEN cbModule = SQL_NTS, cbKey = SQL_NTS;
798 aga 1.45 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 tani 1.91 sqlcode = SQLExecute( hstmt );
801     if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){
802 aga 1.45 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 aga 1.54 *value = 0;
810 aga 1.45 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getXoopsModuleConfig " );
832     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
833     setLastErrorString( s.c_str( ) );
834 aga 1.45 result = RES_ERROR;
835     }
836     return result;
837     }
838    
839     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スXooNiPs?ス?スPublic?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
840     */
841     static bool isGuestEnabled(){
842     char *value = 0;
843 tani 1.70 result_t result = getConfigValue( XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_KEY, &value );
844 aga 1.45 if ( result != RES_OK )
845     return false;
846     if ( value == 0 )
847     return false;
848 tani 1.70 bool enabled = ( strcmp( value, XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_ALL ) == 0 );
849 aga 1.45 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 aga4096 1.89 string sql = "SELECT uid FROM " + dbprefix + "_xoonips_session WHERE sid=" + unsignedIntToString(sid);
873 tani 1.72 syslog_printf( "sql=%s", sql.c_str() );
874 aga 1.45 return queryGetUnsignedInt( "sessionID2UID", sql, uid );
875     }
876     }
877    
878    
879    
880 youi 1.13 /**
881     *
882 youi 1.19 * 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 youi 1.32 SQLRETURN sqlcode;
894     SQLHANDLE hstmt = NULL;
895 youi 1.19
896 youi 1.32 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) != SQL_SUCCESS ) {
897 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in gidExists" );
898     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
899     setLastErrorString( s.c_str( ) );
900 youi 1.32 return false;
901     }
902    
903 aga4096 1.89 sql = "SELECT * FROM " + dbprefix + "_xoonips_groups ";
904 youi 1.19 sql += "WHERE gid=" + string( unsignedIntToString( gid ) );
905 youi 1.32 if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) != SQL_SUCCESS ){
906     setLastErrorString( "SQLExecDirect in gidExists" );
907     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
908 youi 1.19 return false;
909     }
910 youi 1.32
911     if( ( sqlcode = SQLFetch( hstmt ) ) != SQL_SUCCESS ){
912     setLastErrorString( "SQLFetch in gidExists" );
913     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
914 youi 1.19 return false;
915     }
916 youi 1.32
917     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
918 youi 1.19 return true;
919     }
920    
921    
922     /**
923     *
924 youi 1.20 * Platform?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
925 youi 1.19 * DB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スfalse?ス?ス?ス?ス?ス?ス?ス?ス
926     *
927     * @param uid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スUID
928     * @return true ?ス?ス?ス?ス?ス?ス?ス?ス
929     * @return false ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
930     *
931     */
932     static bool uidExists( userid_t uid )
933     {
934 youi 1.32 bool ret = false;
935 youi 1.19 string sql;
936 tani 1.102 SQLHANDLE hstmt = NULL;
937 youi 1.32 SQLRETURN sqlcode;
938 youi 1.19
939 aga4096 1.89 sql = "SELECT * FROM " + dbprefix + "_xoonips_users ";
940 youi 1.19 sql += "WHERE uid=" + string( unsignedIntToString( uid ) );
941 youi 1.32 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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
948 youi 1.32 s += string( ", sql=" ) + string( sql );
949     setLastErrorString( s.c_str( ) );
950     ret = false;
951     }
952     }else{
953     string s( "SQLExecDirect in uidExists ");
954 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
955 youi 1.32 s += string( ", sql=" ) + string( sql );
956     setLastErrorString( s.c_str( ) );
957     ret = false;
958     }
959     }else{
960     string s( "SQLAllocHandle in uidExists ");
961 youi 1.35 s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
962 youi 1.32 setLastErrorString( s.c_str( ) );
963     ret = false;
964 youi 1.19 }
965 youi 1.32 return ret;
966 youi 1.19 }
967    
968    
969     /**
970     *
971 youi 1.13 * 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 youi 1.14 }
989    
990     if( cri -> getLimitStart( ) != 0 || cri -> getLimitRows( ) != 0 ){
991     sql += " LIMIT " + string( intToString( cri -> getLimitStart( ) ) )
992     + ", " + string( intToString( cri -> getLimitRows( ) ) );
993 youi 1.13 }
994     return sql;
995     }
996 youi 1.1
997 youi 1.32
998 youi 1.1 /**
999     *
1000 tani 1.86 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1001 youi 1.1 *
1002 tani 1.86 * @param dsn ODBC?ス?スDSN
1003 youi 1.1 * @param user ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1004     * @param password ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1005 tani 1.86 * @param reserve ?ス?ス?ス?ス?ス?ス(NULL)
1006 youi 1.1 * @param prefix XOOPS?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スPREFIX
1007 tani 1.86 * @param type DBTYPE_MYSQL or DBTYPE_SQLITE
1008 youi 1.31 * @return RES_OK
1009     * @return RES_DB_INITIALIZE_ERROR
1010     * @return RES_DB_CONNECT_ERROR
1011 tani 1.86 * @see result_t
1012 youi 1.1 */
1013 tani 1.86 result_t initializeDB( const char* dsn, const char* user, const char* password, const char* reserve, const char* prefix, dbtype_t type )
1014 youi 1.1 {
1015 youi 1.32 SQLRETURN sqlcode;
1016    
1017 tani 1.102 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1018     if ( hdbc != NULL ){
1019 youi 1.32 SQLDisconnect( hdbc );
1020 tani 1.102 hdbc = NULL;
1021     }
1022 youi 1.1
1023 youi 1.7 dbprefix = prefix;
1024 aga 1.60 dbtype = type;
1025 youi 1.7
1026 youi 1.32 // ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1027     // if( SQLAllocEnv( &henv ) != SQL_SUCCESS ) {
1028 youi 1.56 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) ) != SQL_SUCCESS ) {
1029 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_ENV,...) in initializeDB" );
1030     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1031     setLastErrorString( s.c_str( ) );
1032 tani 1.72 syslog_printf( "initializeDB %s", getLastErrorString( ) );
1033 youi 1.32 return RES_DB_INITIALIZE_ERROR;
1034     }
1035     //ODBC Ver.3 ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1036     SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
1037 aga 1.27
1038 youi 1.32 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ) != SQL_SUCCESS ) {
1039 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_DBC,...) in initializeDB" );
1040     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1041     setLastErrorString( s.c_str( ) );
1042 tani 1.72 syslog_printf( "initializeDB %s", getLastErrorString( ) );
1043 youi 1.1 return RES_DB_INITIALIZE_ERROR;
1044     }
1045 youi 1.32 //?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス5?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1046 tani 1.86 //SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);
1047 youi 1.33
1048 youi 1.32 if ( ( sqlcode = SQLConnect( hdbc, (SQLCHAR*)dsn, strlen( dsn ), (SQLCHAR*)user, strlen( user ), (SQLCHAR*)password, strlen( password ) ) ) != SQL_SUCCESS ){
1049 youi 1.33 string s( "SQLConnect in initializeDB " );
1050     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1051     setLastErrorString( s.c_str( ) );
1052 tani 1.72 syslog_printf( "initializeDB %s", getLastErrorString( ) );
1053 youi 1.1 return RES_DB_CONNECT_ERROR;
1054 aga 1.27 }
1055 tani 1.72 syslog_printf( "initializeDB succeed" );
1056 aga 1.27 return RES_OK;
1057     }
1058    
1059     /**
1060     *
1061 tani 1.86 * ?ス?ス?ス?スDB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1062 aga 1.27 *
1063     * @param ?ス?ス?ス?ス
1064     * @return RES_OK
1065     */
1066     result_t uninitializeDB()
1067     {
1068 youi 1.32 if ( hdbc != NULL ){
1069     SQLDisconnect( hdbc );
1070     hdbc = NULL;
1071 youi 1.1 }
1072 youi 1.2 return RES_OK;
1073 youi 1.1 }
1074    
1075     /**
1076     *
1077     * Platform?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1078     *
1079 youi 1.31 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1080     * @param uid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スUID
1081     * @return true ?ス?ス?ス?ス?ス?ス?ス?ス
1082     * @return false ?ス?ス?ス?ス?ス?ス
1083 youi 1.1 *
1084     */
1085 youi 1.2 bool isActivated( sessionid_t sid, userid_t uid )
1086 youi 1.1 {
1087 youi 1.32 if( hdbc == NULL ) return false;
1088 youi 1.17 if( !isValidSessionID( sid ) ) return false;
1089    
1090 youi 1.32 bool ret = false;
1091 youi 1.17 string sql;
1092 youi 1.32 SQLRETURN sqlcode;
1093     SQLHANDLE hstmt = NULL;
1094 youi 1.17
1095 aga4096 1.89 sql = "SELECT * FROM " + dbprefix + "_xoonips_users ";
1096 youi 1.17 sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) );
1097 youi 1.32 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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1104 youi 1.32 s += ", sql=" + sql;
1105     setLastErrorString( s.c_str() );
1106     ret = false;
1107     }
1108     }else{
1109     string s( "SQLExecDirect in isActivated " );
1110 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1111 youi 1.32 s += ", sql=" + sql;
1112     setLastErrorString( s.c_str() );
1113     ret = false;
1114     }
1115     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
1116     }else{
1117 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isActivated" );
1118     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1119     setLastErrorString( s.c_str( ) );
1120 youi 1.32 ret = false;
1121 youi 1.17 }
1122 youi 1.32 return ret;
1123 youi 1.1 }
1124    
1125     /**
1126     *
1127     * Platform?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1128     *
1129 youi 1.31 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1130     * @param uid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スUID
1131     * @param activate ?ス?ス?ス?ス(true) / ?ス?ス?ス?ス?ス?ス(false)?ス?ス?ス?ス?ス?ス
1132     * @return RES_OK
1133 tani 1.86 * @return RES_ERROR
1134 youi 1.31 * @return RES_DB_QUERY_ERROR
1135     * @return RES_NO_SUCH_USER
1136 tani 1.86 * @return RES_NO_SUCH_SESSION
1137     * @return RES_DB_NOT_INITIALIZED;
1138 youi 1.1 */
1139 youi 1.2 result_t activate( sessionid_t sid, userid_t uid, bool activate )
1140 youi 1.1 {
1141 youi 1.32 if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
1142 youi 1.17 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1143    
1144     string sql;
1145 tani 1.102 SQLHANDLE hstmt = NULL;
1146 youi 1.32 SQLRETURN sqlcode;
1147     result_t ret = RES_ERROR;
1148 youi 1.17
1149 aga4096 1.89 sql = "UPDATE " + dbprefix + "_xoonips_users ";
1150 youi 1.17 sql += "SET activate=" + string( activate ? "1" : "0" );
1151     sql += " WHERE uid=" + string( unsignedIntToString( uid ) );
1152 youi 1.32 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1153     if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
1154 youi 1.64 SQLLEN count = 0;
1155 youi 1.32 if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){
1156     ret = RES_OK;
1157     }else{
1158     string s( "SQLRowCount in activate ");
1159 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1160 youi 1.32 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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1167 youi 1.32 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in activate" );
1175     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1176     setLastErrorString( s.c_str( ) );
1177 youi 1.32 ret = RES_ERROR;
1178 youi 1.17 }
1179 youi 1.32 return ret;
1180 youi 1.1 }
1181    
1182     /**
1183     *
1184 youi 1.31 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1185 youi 1.1 *
1186 youi 1.31 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1187 tani 1.86 * @return ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス0)
1188 youi 1.1 *
1189     */
1190 youi 1.2 int getAccountCount( sessionid_t sid )
1191 youi 1.1 {
1192 youi 1.32 if( hdbc == NULL ) return 0;
1193 youi 1.16 if( !isValidSessionID( sid ) ) return 0;
1194    
1195     int ret = 0;
1196     string sql;
1197 youi 1.32 SQLRETURN sqlcode;
1198     SQLHANDLE hstmt = NULL;
1199 youi 1.16
1200     //?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1201 aga4096 1.89 sql = "SELECT COUNT(*) FROM " + dbprefix + "_xoonips_users ";
1202 youi 1.32 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 youi 1.56 SQLLEN len = 0;
1206 youi 1.32 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 youi 1.16 }else{
1221 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccountCount" );
1222     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1223     setLastErrorString( s.c_str( ) );
1224 youi 1.32 ret = 0;
1225 youi 1.16 }
1226     return ret;
1227 youi 1.1 }
1228    
1229     /**
1230     *
1231     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1232 youi 1.35 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1233 youi 1.1 *
1234     * @param
1235 youi 1.20 * @return RES_OK
1236 youi 1.35 * @return RES_ERROR
1237 youi 1.31 * @return RES_DB_NOT_INITIALIZED
1238 youi 1.20 * @return RES_NO_SUCH_SESSION
1239     * @return RES_DB_QUERY_ERROR
1240 youi 1.1 *
1241     */
1242 youi 1.2 result_t deleteAccount( sessionid_t sid, userid_t uid )
1243 youi 1.1 {
1244 youi 1.32 if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
1245 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1246 youi 1.32
1247     result_t ret1 = RES_ERROR, ret2 = RES_ERROR;
1248 youi 1.35 criteria_t c;
1249 youi 1.32 string sql;
1250 youi 1.35 groupid_t* gids;
1251     int gidsLen;
1252 youi 1.32 SQLRETURN sqlcode;
1253     SQLHANDLE hstmt = NULL;
1254 youi 1.10
1255 youi 1.35 /*
1256     1. delete user from default platform group
1257     2. delete user profile from xoops_users
1258 aga4096 1.89 3. delete platform user from xoonips_users
1259 youi 1.35 */
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 youi 1.10 sql = "DELETE FROM " + dbprefix + "_users ";
1271     sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
1272 youi 1.32 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1273     if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
1274 youi 1.64 SQLLEN count = 0;
1275 youi 1.32 if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){
1276     ret1 = RES_OK;
1277     }else{
1278     string s( "SQLRowCount in deleteAccount" );
1279 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1280 youi 1.32 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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1287 youi 1.32 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" );
1295     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1296     setLastErrorString( s.c_str( ) );
1297 youi 1.32 ret1 = RES_ERROR;
1298 youi 1.10 }
1299    
1300 aga4096 1.89 //3. delete platform user from xoonips_users
1301     sql = "DELETE FROM " + dbprefix + "_xoonips_users ";
1302 youi 1.10 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
1303 youi 1.32 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1304     if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
1305 youi 1.64 SQLLEN count = 0;
1306 youi 1.32 if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){
1307     ret2 = RES_OK;
1308     }else{
1309     string s( "SQLRowCount in deleteAccount" );
1310 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1311 youi 1.32 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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1318 youi 1.32 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" );
1326     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1327     setLastErrorString( s.c_str( ) );
1328 youi 1.32 ret2 = RES_ERROR;
1329 youi 1.10 }
1330    
1331 youi 1.32 //?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1332     return ret1 != RES_OK ? ret1 : ret2;
1333 youi 1.1 }
1334    
1335     /**
1336     *
1337     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1338     *
1339 youi 1.13 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1340     * @param uid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スUID
1341     * @param acc ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(account_t)?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1342 youi 1.20 * @return RES_OK
1343 youi 1.31 * @return RES_DB_NOT_INITIALIZED
1344 youi 1.20 * @return RES_NO_SUCH_USER
1345     * @return RES_NO_SUCH_SESSION
1346     * @return RES_DB_QUERY_ERROR
1347 tani 1.86 * @see freeAccount
1348 youi 1.1 *
1349     */
1350 youi 1.12 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc )
1351 youi 1.1 {
1352 aga4096 1.101 int len = 0;
1353 youi 1.13 static criteria c;
1354     result_t res = getAccounts( sid, &uid, 1, &c, acc, &len );
1355 tani 1.102 if( res == RES_OK && len == 0 ) return RES_NO_SUCH_USER;
1356 youi 1.13 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 youi 1.31 * @return RES_OK
1370     * @return RES_DB_NOT_INITIALIZED
1371     * @return RES_NO_SUCH_SESSION
1372 youi 1.20 * @return RES_DB_QUERY_ERROR
1373 tani 1.86 * @see freeAccount
1374 youi 1.13 *
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 youi 1.32 if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
1379 youi 1.12 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1380 youi 1.28 if( uidsLen <= 0 ){
1381     *accounts = new account_t[ 0 ];
1382     *accountsLen = 0;
1383 tani 1.72 syslog_printf( "getAccounts succeed len=0" );
1384 youi 1.28 return RES_OK;
1385     }
1386 youi 1.12
1387 tani 1.72 syslog_printf( "begin of getAccounts" );
1388 youi 1.32 result_t ret = RES_ERROR;
1389     SQLRETURN sqlcode;
1390     SQLHANDLE hstmt = NULL;
1391 youi 1.12 string sql;
1392 youi 1.13 account_t* dst = new account_t[ uidsLen ];
1393 youi 1.12
1394 tani 1.73 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 aga4096 1.89 sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_xoonips_users AS u2 ";
1396 youi 1.28 sql += "WHERE u1.uid = u2.uid ";
1397     if( uidsLen > 0 ){
1398 tani 1.72 syslog_printf( "set uid[%d] value=%d to ...", 0, uids[0] );
1399 youi 1.28 sql += "AND ( u1.uid=" + string( unsignedIntToString( uids[ 0 ] ) );
1400     for( int i = 1; i < uidsLen; i++ ){
1401 tani 1.72 syslog_printf( "set uid[%d] value=%d to ...", i, uids[i] );
1402 youi 1.28 sql += " OR u1.uid=" + string( unsignedIntToString( uids[ i ] ) );
1403     }
1404     sql += " ) ";
1405 youi 1.12 }
1406 youi 1.13 sql += criteria2str( cri );
1407 tani 1.72 syslog_printf( "sql=%s", sql.c_str() );
1408 youi 1.32
1409     if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1410 tani 1.72 syslog_printf( "SQLAllocHandle" );
1411 youi 1.32 if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
1412 tani 1.72 syslog_printf( "SQLExecDirect" );
1413 tani 1.73 SQLLEN cbUid = 0, cbStorageLimit = 0;
1414 youi 1.32 userid_t uid = 0;
1415 tani 1.73 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 tani 1.72 syslog_printf( "SQLBindCol" );
1419 youi 1.32 *accountsLen=0;
1420     for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < uidsLen ; i++ ){
1421 tani 1.72 syslog_printf( "SQLFetch" );
1422 youi 1.32 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 aga 1.61 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 tani 1.73 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 youi 1.32 ( *accountsLen )++;
1468     }
1469     *accounts = dst;
1470 tani 1.72 syslog_printf( "getAccounts succeed" );
1471 youi 1.32 ret = RES_OK;
1472     }else{
1473 youi 1.33 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 tani 1.72 syslog_printf( "getAccounts %s", getLastErrorString( ) );
1478 youi 1.32 ret = RES_DB_QUERY_ERROR;
1479     }
1480     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
1481     }else{
1482 youi 1.33 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" );
1483     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1484     setLastErrorString( s.c_str( ) );
1485 tani 1.72 syslog_printf( "getAccounts %s", getLastErrorString( ) );
1486 youi 1.32 ret = RES_DB_QUERY_ERROR;
1487 youi 1.12 }
1488 youi 1.32 return ret;
1489 youi 1.1 }
1490    
1491     /**
1492     *
1493 tani 1.86 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1494 youi 1.35 *
1495 youi 1.25 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1496 youi 1.35 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1497 youi 1.1 *
1498 youi 1.7 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1499 youi 1.10 * @param account ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1500 youi 1.25 * @param uid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1501 youi 1.20 * @return RES_OK
1502     * @return RES_NO_SUCH_SESSION
1503     * @return RES_DB_QUERY_ERROR
1504 youi 1.31 * @return RES_DB_NOT_INITIALIZED
1505 youi 1.1 *
1506     */
1507 youi 1.25 result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid )
1508 youi 1.1 {
1509 youi 1.32 if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
1510 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1511    
1512 youi 1.7 string sql;
1513     string tmp;
1514 tani 1.102 SQLHANDLE hstmt = NULL;
1515 youi 1.32 SQLRETURN sqlcode;
1516     result_t ret = RES_ERROR;
1517 youi 1.7
1518 youi 1.35 /*
1519     1. insert user profile into xoops_users
1520 aga4096 1.89 2. insert platform user profile into xoonips_users
1521 youi 1.35 3. add user to default platform group
1522 aga 1.37 4. create private index
1523     5. update account set private_index_id=...
1524 youi 1.35 */
1525    
1526     //1.xoops?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1527 youi 1.39 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 youi 1.32 SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok;
1529     SQLDOUBLE timezone_offset;
1530    
1531 youi 1.56 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 youi 1.32
1534     if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1535     string sql;
1536 aga 1.48 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 youi 1.32 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, &notify_method, 0, &cbNotify_method );
1564     SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &notify_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 youi 1.64 SQLLEN count = 0;
1603 youi 1.32 if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){
1604     //?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1605 tani 1.72 if( dbtype == DBTYPE_MYSQL ){
1606     sql = "SELECT LAST_INSERT_ID()";
1607     }else if( dbtype == DBTYPE_SQLITE ){
1608     sql = "SELECT LAST_INSERT_ROWID()";
1609     }
1610 youi 1.44 ret = queryGetUnsignedInt( "insertAccount", sql, (unsigned int*)uid );
1611 youi 1.32 }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 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1620 youi 1.32 setLastErrorString( s.c_str( ) );
1621     ret = RES_DB_QUERY_ERROR;
1622     }
1623     }else{
1624     string s( "SQLPrepare in insertAccount " );
1625 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1626 youi 1.32 setLastErrorString( s.c_str( ) );
1627     ret = RES_ERROR;
1628     }
1629     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
1630     }else{
1631 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" );
1632     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1633     setLastErrorString( s.c_str( ) );
1634 youi 1.32 ret = RES_ERROR;
1635 youi 1.7 }
1636    
1637 youi 1.35 if( ret == RES_OK ){
1638 aga4096 1.89 //2.xoonips?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1639 youi 1.35 SQLUINTEGER activate;
1640 aga 1.36 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 aga 1.61 SQLLEN cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS;
1648 tani 1.73 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 youi 1.35 SQLUINTEGER notice_mail;
1650     SQLUINTEGER notice_mail_since;
1651 tani 1.73 SQLINTEGER item_number_limit;
1652     SQLINTEGER index_number_limit;
1653     SQLDOUBLE item_storage_limit;
1654    
1655 youi 1.35 if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1656     string sql;
1657 aga4096 1.89 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 youi 1.35 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 aga 1.36 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 aga 1.61 SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail, 0, &cbNotice_mail);
1670     SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail_since, 0, &cbNotice_mail_since);
1671 tani 1.73 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 youi 1.32
1675 youi 1.35 activate = account -> getActivate() ? 1 : 0;
1676 aga 1.36 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 youi 1.35 notice_mail = account -> getNoticeMail( );
1684 tani 1.81 notice_mail_since = time( NULL );
1685 tani 1.73 item_number_limit = account -> getItemNumberLimit( );
1686     index_number_limit = account -> getIndexNumberLimit( );
1687     item_storage_limit = account -> getItemStorageLimit( );
1688 youi 1.32
1689 youi 1.35 if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){
1690 youi 1.64 SQLLEN count = 0;
1691 youi 1.35 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 youi 1.39 ret = insertMember( sid, group_t::GID_DEFAULT, *uid, false );
1696 youi 1.35 }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 youi 1.32 }else{
1715 youi 1.35 string s( "SQLExecute in insertAccount " );
1716     s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1717 youi 1.32 setLastErrorString( s.c_str( ) );
1718     ret = RES_DB_QUERY_ERROR;
1719     }
1720     }else{
1721 youi 1.35 //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 youi 1.32 setLastErrorString( s.c_str( ) );
1732     ret = RES_DB_QUERY_ERROR;
1733     }
1734 youi 1.35 SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
1735 youi 1.32 }else{
1736 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" );
1737     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1738     setLastErrorString( s.c_str( ) );
1739 youi 1.35 ret = RES_ERROR;
1740 youi 1.32 }
1741 youi 1.7 }
1742 aga 1.37
1743     if ( ret == RES_OK ){
1744     //4.private index?ス?ス?ス?ス?ス?ス
1745    
1746     // private index?ス?ス?ス?スsort_number?ス?ス?ス?ス
1747     string sql = "select min(sort_number) from " +
1748 aga4096 1.89 dbprefix + "_xoonips_index where parent_index_id=" + unsignedIntToString(item::IID_ROOT) +
1749 aga 1.37 " 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 aga4096 1.89 sql = "UPDATE " + dbprefix + "_xoonips_users SET private_index_id="
1768 aga 1.37 + unsignedIntToString(privateXID) + " WHERE uid=" + unsignedIntToString(*uid);
1769     ret = querySimple( "insertAccount", sql );
1770     }
1771     }
1772     }
1773    
1774 youi 1.32 return ret;
1775 youi 1.1 }
1776    
1777     /**
1778     *
1779 youi 1.20 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
1780 tani 1.86 * account?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1781 youi 1.1 *
1782 youi 1.20 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1783     * @param account ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1784     * @return RES_OK
1785 youi 1.31 * @return RES_DB_NOT_INITIALIZED
1786 youi 1.20 * @return RES_NO_SUCH_SESSION
1787     * @return RES_DB_QUERY_ERROR
1788     * @return RES_NO_SUCH_USER
1789 youi 1.31 * @return RES_ERROR
1790 youi 1.1 *
1791     */
1792 youi 1.2 result_t updateAccount( sessionid_t sid, const account_t* account )
1793 youi 1.1 {
1794 youi 1.32 if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
1795 youi 1.20 if( account == NULL ) return RES_ERROR;
1796 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
1797 youi 1.20 if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER;
1798 youi 1.39
1799 youi 1.32 SQLRETURN sqlcode;
1800     result_t ret = RES_ERROR;
1801 youi 1.39 SQLHANDLE hstmt = NULL;
1802 youi 1.10
1803     //xoops?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1804 youi 1.39 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 youi 1.32 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 youi 1.56 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 youi 1.32
1811     SQLUINTEGER activate;
1812 aga 1.36 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 aga 1.61 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 youi 1.39 SQLUINTEGER notice_mail, notice_mail_since;
1821 youi 1.56 SQLLEN cbNotice_mail = 0, cbNotice_mail_since = 0;
1822 youi 1.32
1823     if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1824     string sql;
1825    
1826     sql = "UPDATE " + dbprefix + "_users SET ";
1827 youi 1.39 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 youi 1.32 sql += " WHERE uid = ?";
1858 youi 1.39
1859 youi 1.32 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, &notify_method, 0, &cbNotify_method );
1886     SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &notify_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 youi 1.39
1893 youi 1.32 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 youi 1.64 SQLLEN count = 0;
1927 youi 1.32 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 youi 1.39 string s( "SQLExecute in updateAccount 1 " );
1937 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
1938 youi 1.32 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 youi 1.39 hstmt = NULL;
1947 youi 1.32 }else{
1948 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" );
1949     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
1950     setLastErrorString( s.c_str( ) );
1951 youi 1.32 ret = RES_ERROR;
1952 youi 1.10 }
1953    
1954 youi 1.39 if( ret != RES_OK ){
1955     return ret;
1956     }
1957    
1958 aga4096 1.89 //xoonips?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1959 youi 1.39 if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
1960 youi 1.32 string sql;
1961    
1962 aga4096 1.89 sql = "UPDATE " + dbprefix + "_xoonips_users SET ";
1963 youi 1.32 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 tani 1.73 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 youi 1.32 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 youi 1.39 SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate);
1981 aga 1.36 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 aga 1.61 SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail, 0, &cbNotice_mail);
1989     SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail_since, 0, &cbNotice_mail_since);
1990     SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid );
1991 youi 1.32
1992     activate = account -> getActivate() ? 1 : 0;
1993 aga 1.36 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 youi 1.32 notice_mail = account -> getNoticeMail( );
2001     notice_mail_since = account -> getNoticeMailSince( );
2002     uid = account -> getUID( );
2003    
2004     if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){
2005 youi 1.64 SQLLEN count = 0;
2006 youi 1.32 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 youi 1.39 string s( "SQLExecute in updateAccount 2 " );
2016 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
2017 youi 1.32 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" );
2027     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
2028     setLastErrorString( s.c_str( ) );
2029 youi 1.32 ret = RES_ERROR;
2030 youi 1.10 }
2031 youi 1.32 return ret;
2032 youi 1.1 }
2033    
2034     /**
2035     *
2036 youi 1.17 * criteria_t?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス.
2037     * ?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス*uids?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
2038     * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス*uidsLen?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2039 youi 1.1 *
2040 youi 1.17 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2041     * @param cri ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2042 youi 1.31 * @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 tani 1.86 * @see freeUID
2049 youi 1.1 */
2050 youi 1.13 result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen )
2051 youi 1.1 {
2052 youi 1.32 if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
2053 youi 1.17 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
2054    
2055 youi 1.32 result_t ret = RES_ERROR;
2056     userid_t* dst = 0;
2057 youi 1.17 string sql;
2058 tani 1.102 SQLHANDLE hstmt = NULL;
2059 youi 1.32 SQLRETURN sqlcode;
2060 youi 1.64 SQLLEN count = 0;
2061 youi 1.32
2062    
2063 aga4096 1.89 sql = "SELECT uid FROM " + dbprefix + "_xoonips_users ";
2064 youi 1.17 sql += criteria2str( cri );
2065 youi 1.32 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 youi 1.44 userid_t uid = 0;
2075 youi 1.56 SQLLEN len = 0;
2076 youi 1.32 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 tani 1.72 syslog_printf( "dumpUids succeed" );
2083 youi 1.32 ret = RES_OK;
2084     }else{
2085     string s( "SQLExecDirect in dumpUids " );
2086 youi 1.33 s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
2087 youi 1.32 s += "sql=";
2088     s += string( sql );
2089     setLastErrorString( s.c_str( ) );
2090 tani 1.72 syslog_printf( "dumpUids %s", getLastErrorString( ) );
2091 youi 1.32 ret = RES_DB_QUERY_ERROR;
2092     }
2093     SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
2094     }else{
2095 youi 1.33 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpUids" );
2096     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
2097     setLastErrorString( s.c_str( ) );
2098 tani 1.72 syslog_printf( "dumpUids %s", getLastErrorString( ) );
2099 youi 1.44 ret = RES_ERROR;
2100 youi 1.17 }
2101 youi 1.32 return ret;
2102 youi 1.1 }
2103    
2104     /**
2105     *
2106 tani 1.92 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(default?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス).
2107 youi 1.19 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス0?ス?ス?ス?ス?ス?ス.
2108 youi 1.1 *
2109 youi 1.19 * @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2110     * @return ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2111 youi 1.1 *
2112     */
2113 youi 1.2 int getGroupCount( sessionid_t sid )
2114 youi 1.1 {
2115 youi 1.32 if( hdbc == NULL ) return 0;
2116 youi 1.19 if( !isValidSessionID( sid ) ) return 0;
2117    
2118 youi 1.32 SQLRETURN sqlcode;
2119     SQLHANDLE hstmt = NULL;
2120 youi 1.19 string sql;
2121 youi 1.32 int ret = 0;
2122 youi 1.19
2123     //?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2124 aga4096 1.89 sql = "SELECT COUNT(*) FROM " + dbprefix + "_xoonips_groups";
2125 tani 1.92 sql += " WHERE gid != " + unsignedIntToString( group::GID_DEFAULT );
2126 youi 1.32 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 youi 1.56 SQLLEN len = 0;
2130 youi 1.32 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 youi 1.55 string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getGroupCount" );
2146     s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
2147     setLastErrorString( s.c_str( ) );
2148 youi 1.32 ret = 0;
2149 youi 1.19 }
2150 youi 1.32 return ret;
2151 youi 1.1 }
2152    
2153     /**
2154     *
2155 youi 1.31 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス.
2156 tani 1.92 * ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(default?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス).
2157 youi 1.1 *
2158 youi 1.31 * @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 tani 1.86 * @see freeGID
2169 youi 1.1 */
2170 youi 1.13 result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri