Develop and Download Open Source Software

Browse CVS Repository

Annotation of /xoonips/AL/xnpal.cc

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


Revision 1.51 - (hide annotations) (download) (as text)
Thu Aug 11 07:38:26 2005 UTC (18 years, 8 months ago) by tani
Branch: MAIN
Changes since 1.50: +2 -2 lines
File MIME type: text/x-c++src
xnpalmod: uninitializeDBを実行しない.

1 aga 1.1 /*
2 tani 1.39 * --------------------------------------------------------------------------
3     * XooNiPs Xoops modules for Neuroinformatics Platforms
4     * Copyright (C) 2005 RIKEN, Japan. All rights reserved.
5     * http://sourceforge.jp/projects/xoonips/
6     * --------------------------------------------------------------------------
7     * This program is free software; you can redistribute it and/or
8     * modify it under the terms of the GNU General Public License
9     * as published by the Free Software Foundation; either version 2
10     * of the License, or (at your option) any later version.
11     *
12     * This program is distributed in the hope that it will be useful,
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     * GNU General Public License for more details.
16     *
17     * You should have received a copy of the GNU General Public License
18     * along with this program; if not, write to the Free Software
19     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20     * --------------------------------------------------------------------------
21     *
22 tani 1.51 * $Revision: 1.50 $
23 tani 1.39 * XNPAL: XooNiPs Platform Abstract Layer
24     * zend_parse_parameters?ス?スphp4.1.0?ス?ス?ス?ス?ス?ス
25     * .so?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
26     * C++?ス?ス?ス?ス?ス?スextern "C"{}, BEGIN/END_EXTERN_C()?ス?ス?ス?ス?ス?ス?ス?ス
27     */
28 aga 1.1
29    
30     #include <stdio.h>
31 aga 1.2 #include "criteria.h"
32     #include "common.h"
33     #include "commonal.h"
34     #include "session.h"
35     #include "group.h"
36 youi 1.24 #include "index.h"
37 youi 1.21 #include "xnpal.h"
38 youi 1.24 #include "amazonbook.h"
39 aga 1.1
40 aga 1.2 // for inet_aton
41     #include <sys/socket.h>
42     #include <netinet/in.h>
43     #include <arpa/inet.h>
44    
45 aga 1.1 // global variables
46    
47 youi 1.21 PHP_MSHUTDOWN_FUNCTION(xnpalmod)
48 aga 1.18 {
49 tani 1.51 //uninitializeDB();
50 aga 1.18 return SUCCESS;
51     }
52 aga 1.1
53     /* declaration of functions to be exported */
54     extern "C" {
55 aga 1.2 ZEND_FUNCTION(first_module );
56 youi 1.21 ZEND_FUNCTION(xnp_initialize_db );
57     ZEND_FUNCTION(xnp_login_user );
58     ZEND_FUNCTION(xnp_logout_user );
59     ZEND_FUNCTION(xnp_create_session );
60     ZEND_FUNCTION(xnp_get_session );
61     ZEND_FUNCTION(xnp_is_activated );
62     ZEND_FUNCTION(xnp_activate );
63     ZEND_FUNCTION(xnp_get_account_count );
64     ZEND_FUNCTION(xnp_delete_account );
65     ZEND_FUNCTION(xnp_get_account );
66     ZEND_FUNCTION(xnp_get_accounts );
67     ZEND_FUNCTION(xnp_insert_account );
68     ZEND_FUNCTION(xnp_update_account );
69     ZEND_FUNCTION(xnp_dump_uids );
70     ZEND_FUNCTION(xnp_get_group_count );
71     ZEND_FUNCTION(xnp_get_groups_by_uid );
72     ZEND_FUNCTION(xnp_is_group_admin );
73     ZEND_FUNCTION(xnp_dump_gids );
74     ZEND_FUNCTION(xnp_dump_group_admins );
75     ZEND_FUNCTION(xnp_delete_member );
76     ZEND_FUNCTION(xnp_insert_member );
77     ZEND_FUNCTION(xnp_get_members );
78     ZEND_FUNCTION(xnp_delete_group );
79     ZEND_FUNCTION(xnp_insert_group );
80     ZEND_FUNCTION(xnp_update_group );
81     ZEND_FUNCTION(xnp_get_group );
82     ZEND_FUNCTION(xnp_get_groups );
83     ZEND_FUNCTION(xnp_is_moderator );
84     ZEND_FUNCTION(xnp_get_uid );
85 aga 1.2
86 aga 1.22 ZEND_FUNCTION(xnp_get_all_indexes );
87     ZEND_FUNCTION(xnp_get_indexes );
88     ZEND_FUNCTION(xnp_insert_index );
89     ZEND_FUNCTION(xnp_update_index );
90     ZEND_FUNCTION(xnp_delete_index );
91     ZEND_FUNCTION(xnp_get_index );
92     ZEND_FUNCTION(xnp_is_index_readable );
93     ZEND_FUNCTION(xnp_is_index_writable );
94     ZEND_FUNCTION(xnp_swap_index_sort_number );
95    
96 youi 1.21 ZEND_FUNCTION(xnp_is_valid_session_id );
97     ZEND_FUNCTION(xnp_get_last_error_string );
98 aga 1.9
99 youi 1.21 ZEND_FUNCTION(xnp_test_criteria );
100     ZEND_FUNCTION(xnp_test_uids );
101 youi 1.24
102    
103     ZEND_FUNCTION(xnp_get_item_permission );
104     ZEND_FUNCTION(xnp_get_index_permission );
105     ZEND_FUNCTION(xnp_get_certify_permission );
106    
107     ZEND_FUNCTION(xnp_get_certify_state );
108     ZEND_FUNCTION(xnp_set_certify_state );
109    
110     ZEND_FUNCTION(xnp_insert_change_log );
111     ZEND_FUNCTION(xnp_get_change_logs );
112    
113     ZEND_FUNCTION(xnp_get_config_value );
114     ZEND_FUNCTION(xnp_set_config_value );
115    
116     ZEND_FUNCTION(xnp_dump_item_id );
117     ZEND_FUNCTION(xnp_get_item_id_by_binder_id );
118     ZEND_FUNCTION(xnp_get_item_id_by_index_id );
119     ZEND_FUNCTION(xnp_get_overlapped_items );
120    
121     ZEND_FUNCTION(xnp_insert_item );
122 tani 1.43 ZEND_FUNCTION(xnp_insert_item_direct );
123 youi 1.24 ZEND_FUNCTION(xnp_update_item );
124     ZEND_FUNCTION(xnp_delete_item );
125     ZEND_FUNCTION(xnp_get_item );
126     ZEND_FUNCTION(xnp_get_items );
127    
128     ZEND_FUNCTION(xnp_pubmed_complete );
129     ZEND_FUNCTION(xnp_amazon_complete );
130    
131     //ZEND_FUNCTION(xnp_uninitialize_db );
132    
133     ZEND_FUNCTION(xnp_register_binder_item );
134     ZEND_FUNCTION(xnp_unregister_binder_item );
135    
136     ZEND_FUNCTION(xnp_register_item );
137     ZEND_FUNCTION(xnp_unregister_item );
138    
139 youi 1.26 ZEND_FUNCTION(xnp_get_uncertified_link );
140     ZEND_FUNCTION(xnp_get_private_item_id );
141 tani 1.37 ZEND_FUNCTION(xnp_get_group_item_id );
142 youi 1.26
143 youi 1.28 ZEND_FUNCTION(xnp_get_item_types );
144     ZEND_FUNCTION(xnp_get_index_id_by_item_id );
145 youi 1.30 ZEND_FUNCTION(xnp_get_own_public_item_id );
146 youi 1.26
147 youi 1.33 ZEND_FUNCTION(xnp_zip_create );
148 tani 1.35 ZEND_FUNCTION(xnp_get_item_count );
149 aga4096 1.38 ZEND_FUNCTION(xnp_get_item_count_group_by_index );
150 aga4096 1.41
151     ZEND_FUNCTION(xnp_extract_public_item_id);
152     ZEND_FUNCTION(xnp_extract_nonbinder_item_id);
153 aga4096 1.42 ZEND_FUNCTION(xnp_insert_event);
154     ZEND_FUNCTION(xnp_get_events);
155 tani 1.48 ZEND_FUNCTION(xnp_get_events_for_rss);
156 aga 1.1 };
157 aga4096 1.47
158 aga4096 1.50
159     #ifdef ZEND_ENGINE_2
160     static
161     ZEND_BEGIN_ARG_INFO(second_and_third_args_force_ref, 0)
162     ZEND_ARG_PASS_INFO(0)
163     ZEND_ARG_PASS_INFO(1)
164     ZEND_ARG_PASS_INFO(1)
165     ZEND_END_ARG_INFO();
166     #else
167 aga4096 1.47 static unsigned char fourth_arg_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
168 aga4096 1.50 static unsigned char second_and_third_args_force_ref[] = { 3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
169     #endif
170    
171 aga4096 1.47
172 aga 1.1 /* compiled function list so Zend knows what's in this module */
173 youi 1.21 zend_function_entry xnpalmod_functions[] =
174 aga 1.1 {
175 aga4096 1.47 ZEND_FE(first_module ,NULL)
176 youi 1.24 ZEND_FE(xnp_initialize_db ,NULL)
177 aga4096 1.47 ZEND_FE(xnp_login_user ,third_arg_force_ref)
178 youi 1.24 ZEND_FE(xnp_logout_user ,NULL)
179 aga4096 1.47 ZEND_FE(xnp_create_session ,third_arg_force_ref)
180     ZEND_FE(xnp_get_session ,second_arg_force_ref )
181 youi 1.24 ZEND_FE(xnp_is_activated ,NULL)
182     ZEND_FE(xnp_activate ,NULL)
183     ZEND_FE(xnp_get_account_count ,NULL)
184     ZEND_FE(xnp_delete_account ,NULL)
185 aga4096 1.47 ZEND_FE(xnp_get_account ,third_arg_force_ref)
186     ZEND_FE(xnp_get_accounts ,fourth_arg_force_ref)
187     ZEND_FE(xnp_insert_account ,third_arg_force_ref)
188 youi 1.24 ZEND_FE(xnp_update_account ,NULL)
189 aga4096 1.47 ZEND_FE(xnp_dump_uids ,third_arg_force_ref)
190 youi 1.24 ZEND_FE(xnp_get_group_count ,NULL)
191 aga4096 1.47 ZEND_FE(xnp_get_groups_by_uid ,fourth_arg_force_ref)
192 youi 1.24 ZEND_FE(xnp_is_group_admin ,NULL)
193 aga4096 1.47 ZEND_FE(xnp_dump_gids ,third_arg_force_ref)
194 youi 1.24 ZEND_FE(xnp_dump_group_admins ,NULL)
195     ZEND_FE(xnp_delete_member ,NULL)
196     ZEND_FE(xnp_insert_member ,NULL)
197 aga4096 1.47 ZEND_FE(xnp_get_members ,fourth_arg_force_ref)
198 youi 1.24 ZEND_FE(xnp_delete_group ,NULL)
199 aga4096 1.47 ZEND_FE(xnp_insert_group ,third_arg_force_ref)
200 youi 1.24 ZEND_FE(xnp_update_group ,NULL)
201 aga4096 1.47 ZEND_FE(xnp_get_group ,third_arg_force_ref)
202     ZEND_FE(xnp_get_groups ,fourth_arg_force_ref)
203 youi 1.24 ZEND_FE(xnp_is_moderator ,NULL)
204 aga4096 1.47 ZEND_FE(xnp_get_uid ,second_arg_force_ref)
205 youi 1.24
206 aga4096 1.47 ZEND_FE(xnp_get_all_indexes ,third_arg_force_ref)
207     ZEND_FE(xnp_get_indexes ,fourth_arg_force_ref)
208     ZEND_FE(xnp_insert_index ,third_arg_force_ref)
209 youi 1.24 ZEND_FE(xnp_update_index ,NULL)
210     ZEND_FE(xnp_delete_index ,NULL)
211 aga4096 1.47 ZEND_FE(xnp_get_index ,third_arg_force_ref)
212 youi 1.24 ZEND_FE(xnp_is_index_readable ,NULL)
213     ZEND_FE(xnp_is_index_writable ,NULL)
214     ZEND_FE(xnp_swap_index_sort_number ,NULL)
215    
216     ZEND_FE(xnp_is_valid_session_id ,NULL)
217     ZEND_FE(xnp_get_last_error_string ,NULL)
218     ZEND_FE(xnp_test_criteria ,NULL)
219     ZEND_FE(xnp_test_uids ,NULL)
220    
221     ZEND_FE(xnp_get_item_permission ,NULL)
222     ZEND_FE(xnp_get_index_permission ,NULL)
223     ZEND_FE(xnp_get_certify_permission ,NULL)
224    
225 aga4096 1.47 ZEND_FE(xnp_get_certify_state ,fourth_arg_force_ref)
226 youi 1.24 ZEND_FE(xnp_set_certify_state ,NULL)
227    
228     ZEND_FE(xnp_insert_change_log ,NULL)
229 aga4096 1.47 ZEND_FE(xnp_get_change_logs ,third_arg_force_ref)
230 youi 1.24
231 aga4096 1.47 ZEND_FE(xnp_get_config_value ,second_arg_force_ref)
232 youi 1.24 ZEND_FE(xnp_set_config_value ,NULL)
233    
234     ZEND_FE(xnp_dump_item_id ,NULL)
235 aga4096 1.47 ZEND_FE(xnp_get_item_id_by_binder_id ,fourth_arg_force_ref)
236     ZEND_FE(xnp_get_item_id_by_index_id ,fourth_arg_force_ref)
237     ZEND_FE(xnp_get_overlapped_items ,NULL) /*?*/
238 youi 1.24
239 aga4096 1.47 ZEND_FE(xnp_insert_item ,third_arg_force_ref)
240     ZEND_FE(xnp_insert_item_direct ,third_arg_force_ref)
241 youi 1.24 ZEND_FE(xnp_update_item ,NULL)
242     ZEND_FE(xnp_delete_item ,NULL)
243 aga4096 1.47 ZEND_FE(xnp_get_item ,third_arg_force_ref)
244     ZEND_FE(xnp_get_items ,fourth_arg_force_ref)
245 youi 1.24
246 aga4096 1.47 ZEND_FE(xnp_pubmed_complete ,second_arg_force_ref)
247     ZEND_FE(xnp_amazon_complete ,second_arg_force_ref)
248 youi 1.24
249     // ZEND_FE(xnp_uninitialize_db ,NULL)
250    
251     ZEND_FE(xnp_register_binder_item ,NULL)
252     ZEND_FE(xnp_unregister_binder_item ,NULL)
253    
254     ZEND_FE(xnp_register_item ,NULL)
255     ZEND_FE(xnp_unregister_item ,NULL)
256    
257 aga4096 1.50 ZEND_FE(xnp_get_uncertified_link ,second_and_third_args_force_ref)
258 aga4096 1.47 ZEND_FE(xnp_get_private_item_id ,third_arg_force_ref)
259     ZEND_FE(xnp_get_group_item_id ,third_arg_force_ref)
260 youi 1.26
261 aga4096 1.47 ZEND_FE(xnp_get_item_types ,first_arg_force_ref)
262 youi 1.26
263 aga4096 1.47 ZEND_FE(xnp_get_index_id_by_item_id ,third_arg_force_ref)
264     ZEND_FE(xnp_get_own_public_item_id ,third_arg_force_ref)
265 youi 1.28
266 youi 1.33 ZEND_FE(xnp_zip_create ,NULL)
267 tani 1.35 ZEND_FE(xnp_get_item_count ,NULL)
268 aga4096 1.47 ZEND_FE(xnp_get_item_count_group_by_index ,second_arg_force_ref)
269 youi 1.33
270 aga4096 1.47 ZEND_FE(xnp_extract_public_item_id ,third_arg_force_ref)
271     ZEND_FE(xnp_extract_nonbinder_item_id,third_arg_force_ref)
272 aga4096 1.42 ZEND_FE(xnp_insert_event ,NULL)
273 tani 1.49 ZEND_FE(xnp_get_events ,second_arg_force_ref)
274 tani 1.48 ZEND_FE(xnp_get_events_for_rss ,NULL)
275 tani 1.49 {NULL, NULL, NULL}
276 aga 1.1 };
277    
278     /* compiled module information */
279 youi 1.21 zend_module_entry xnpalmod_module_entry =
280 aga 1.1 {
281 youi 1.24 STANDARD_MODULE_HEADER,
282 orrisroot 1.45 "XooNIps Abstract Layer",
283 youi 1.24 xnpalmod_functions,
284     NULL,
285 youi 1.21 PHP_MSHUTDOWN(xnpalmod),
286 youi 1.24 NULL,
287     NULL,
288     NULL,
289     NO_VERSION_YET,
290     STANDARD_MODULE_PROPERTIES
291 aga 1.1 };
292    
293     /* implement standard "stub" routine to introduce ourselves to Zend */
294     #if COMPILE_DL_FIRST_MODULE
295     BEGIN_EXTERN_C()
296 youi 1.21 ZEND_GET_MODULE(xnpalmod)
297 aga 1.1 END_EXTERN_C()
298     #endif
299    
300 aga 1.16
301 aga 1.1 /* implement function that is meant to be made available to PHP */
302     ZEND_FUNCTION(first_module)
303     {
304 youi 1.24 long parameter;
305 aga 1.1 // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
306 youi 1.24 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
307     return;
308     }
309 aga 1.1 parameter++;
310 youi 1.24 RETURN_LONG(parameter);
311 aga 1.1 }
312     /** zval?ス?ス?ス?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
313     */
314     char *getZvalString( zval **p ){
315     convert_to_string_ex(p);
316     return Z_STRVAL_PP(p); //(**p).value.str.val;
317     }
318    
319     /** zval?ス?ス?ス?スint?ス?ス?ス?ス?ス?ス?ス?ス
320     */
321     int getZvalInt( zval **p ){
322     convert_to_long_ex(p);
323     return Z_LVAL_PP(p); // (int)(**p).value.lval;
324     }
325    
326 aga 1.2 // keylen?ス?ス?ス?ス?ス?ス?ス?ス\0?ス?ス?ス?ス?ス?ス?ス?ス
327     static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
328     zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
329     if ( res == HASH_KEY_IS_STRING ){
330     char *p = new char[keyLen+1];
331     memcpy( p, key, keyLen );
332     p[keyLen] = 0;
333     zend_printf( " key is string[%s]<br>\n", p );
334     }
335     else {
336     zend_printf( " key is integer[%d]<br>\n", index );
337     }
338     }
339    
340    
341 aga 1.16 /** zval*?ス?ス?ス?スcriteria_t?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgetResult()!=RES_OK <br>
342 youi 1.24 criteria :
343     array( 'start'=>0, 'rows'=>10,
344     'orders'=>array(
345     array('name'=>'id','order'=>'0'),
346     array('name'=>'timestamp','name'=>'1'), ...)
347     ); ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
348 aga 1.2 */
349     class zCriteria_t : public criteria {
350     private:
351     result_t result;
352 aga 1.16
353 aga 1.2 // pz: array('name'=>'timestamp','name'=>'1')
354     // ?ス?ス?ス?ス?ス?ス?ス?スorderby?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
355     void setOrder( zval *pz ){
356     char *column = 0;
357     order_t order = (order_t)0;
358 youi 1.24
359 aga 1.2 HashPosition pos;
360     zval **ppzTmp = 0;
361     int res2;
362     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
363     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
364     char *key = 0;
365     uint keyLen = 0;
366     ulong index = 0;
367     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
368     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
369 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
370     if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
371 aga 1.2 SEPARATE_ZVAL(ppzTmp);
372     column = getZvalString(ppzTmp);
373     // zend_printf( "column=%s<br>\n", column );
374     }
375     else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
376     SEPARATE_ZVAL(ppzTmp);
377     order = (order_t)getZvalInt(ppzTmp);
378     // zend_printf( "order=%d<br>\n", order );
379     }
380     }
381 youi 1.24
382 aga 1.2 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
383     }
384     if ( column ){
385     orderby *o = new orderby( column, order );
386     addOrderBy( o );
387     }
388 youi 1.24
389 aga 1.2 result = RES_OK;
390     }
391 youi 1.24
392 aga 1.2 // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
393     void setOrders( zval *pz ){
394     HashPosition pos;
395 youi 1.24
396 aga 1.2 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
397 youi 1.24
398 aga 1.2 zval **ppzTmp = 0;
399     int res2;
400     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
401     char *key = 0;
402     uint keyLen = 0;
403     ulong index = 0;
404     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
405     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
406 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
407 aga 1.2 setOrder( *ppzTmp );
408     }
409     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
410     }
411     result = RES_OK;
412     }
413 youi 1.24
414 aga 1.2 void initialize( zval *pz ){
415     HashPosition pos;
416     zval **ppzTmp = 0;
417     int res2;
418     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
419     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
420     char *key = 0;
421     uint keyLen = 0;
422     ulong index = 0;
423     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
424     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
425 aga 1.14 //print_hash_key( keyType, key, keyLen, index );
426 aga 1.2 if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
427     SEPARATE_ZVAL(ppzTmp);
428     int tmp = getZvalInt(ppzTmp);
429     // zend_printf( "start=%d<br>\n", tmp );
430     setLimit( tmp, getLimitRows() );
431     }
432     else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
433     SEPARATE_ZVAL(ppzTmp);
434     int tmp = getZvalInt(ppzTmp);
435     // zend_printf( "rows=%d<br>\n", tmp );
436     setLimit( getLimitStart(), tmp );
437     }
438     else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
439     setOrders( *ppzTmp );
440     }
441     else
442     ; // ignore unknown key
443     }
444     else
445     ; // ignore bad key
446     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
447     }
448     result = RES_OK;
449     }
450 aga 1.16
451     public:
452 aga 1.2 zCriteria_t() : criteria(){ result = RES_ERROR; }
453     zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
454     zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
455     result_t getResult(){ return result; };
456 youi 1.24
457 aga 1.2 void dump(){
458     zend_printf( "dumping zCriteria...<br>\n" );
459     zend_printf( "result=%d<br>\n", (int)result );
460     zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
461     const orderby *p = headOrderBy();
462     while ( p ){
463     zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
464     p = nextOrderBy();
465     }
466     }
467     };
468    
469 aga 1.16
470     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スlong?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
471     @param ht ?ス?ス?ス?ス?ス?ス?ス?ス
472     @param key ?ス?ス?ス?ス
473     @param val long?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
474     @return ?ス?ス?ス?ス?ス?ス?ス?スtrue
475     */
476     static bool hashGetLong( HashTable *ht, const char *key, long *val ){
477 youi 1.24 zval **tmp;
478     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
479     convert_to_long_ex( tmp );
480     *val = Z_LVAL_PP(tmp);
481     return true;
482     }
483     return false;
484 aga 1.14 }
485    
486 aga 1.16 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
487     @param ht ?ス?ス?ス?ス?ス?ス?ス?ス
488     @param key ?ス?ス?ス?ス
489     @param val ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
490     @return ?ス?ス?ス?ス?ス?ス?ス?スtrue
491     */
492     static bool hashGetString( HashTable *ht, const char *key, char **val ){
493 youi 1.24 zval **tmp;
494     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
495     convert_to_string_ex( tmp );
496     *val = Z_STRVAL_PP(tmp);
497     return true;
498     }
499     return false;
500 aga 1.14 }
501    
502 aga 1.16 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スdouble?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
503     @param ht ?ス?ス?ス?ス?ス?ス?ス?ス
504     @param key ?ス?ス?ス?ス
505     @param val double?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
506     @return ?ス?ス?ス?ス?ス?ス?ス?スtrue
507     */
508     static bool hashGetDouble( HashTable *ht, const char *key, double *val ){
509 youi 1.24 zval **tmp;
510     if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
511     convert_to_double_ex( tmp );
512     *val = Z_DVAL_PP(tmp);
513     return true;
514     }
515     return false;
516 aga 1.14 }
517 aga 1.2
518 aga 1.16 /** zval*?ス?ス?ス?スaccount?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス <br>
519 youi 1.24 ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgetResult()!=RES_OK <br>
520 aga 1.16 */
521 aga 1.2 class zAccount_t : public account {
522     private:
523     result_t result;
524     void initialize(zval *pz){
525 aga 1.14 HashTable *ht = Z_ARRVAL_P(pz);
526     long l;
527     char *p;
528     double d;
529     if ( hashGetLong ( ht, "uid" , &l ) ) setUID ( l );
530     if ( hashGetString( ht, "uname" , &p ) ) setUname ( p );
531     if ( hashGetString( ht, "name" , &p ) ) setName ( p );
532     if ( hashGetString( ht, "email" , &p ) ) setEmail ( p );
533     if ( hashGetString( ht, "url" , &p ) ) setURL ( p );
534     if ( hashGetString( ht, "user_avatar" , &p ) ) setUserAvatar ( p );
535     if ( hashGetString( ht, "user_icq" , &p ) ) setUserIcq ( p );
536     if ( hashGetString( ht, "user_from" , &p ) ) setUserFrom ( p );
537     if ( hashGetString( ht, "user_sig" , &p ) ) setUserSig ( p );
538     if ( hashGetString( ht, "actkey" , &p ) ) setActkey ( p );
539     if ( hashGetString( ht, "user_aim" , &p ) ) setUserAim ( p );
540     if ( hashGetString( ht, "user_yim" , &p ) ) setUserYim ( p );
541     if ( hashGetString( ht, "user_msnm" , &p ) ) setUserMsnm ( p );
542     if ( hashGetString( ht, "pass" , &p ) ) setPass ( p );
543     if ( hashGetString( ht, "theme" , &p ) ) setTheme ( p );
544     if ( hashGetString( ht, "umode" , &p ) ) setUmode ( p );
545     if ( hashGetString( ht, "user_occ" , &p ) ) setUserOcc ( p );
546     if ( hashGetString( ht, "bio" , &p ) ) setBio ( p );
547     if ( hashGetString( ht, "user_intrest" , &p ) ) setUserIntrest ( p );
548     if ( hashGetDouble( ht, "timezone_offset" , &d ) ) setTimezoneOffset ( d );
549     if ( hashGetLong ( ht, "attachsig" , &l ) ) setAttachsig ( l );
550     if ( hashGetLong ( ht, "last_login" , &l ) ) setLastLogin ( l );
551     if ( hashGetLong ( ht, "level" , &l ) ) setLevel ( l );
552     if ( hashGetLong ( ht, "notify_method" , &l ) ) setNotifyMethod ( l );
553     if ( hashGetLong ( ht, "notify_mode" , &l ) ) setNotifyMode ( l );
554     if ( hashGetLong ( ht, "posts" , &l ) ) setPosts ( l );
555     if ( hashGetLong ( ht, "rank" , &l ) ) setRank ( l );
556     if ( hashGetLong ( ht, "uorder" , &l ) ) setUorder ( l );
557     if ( hashGetLong ( ht, "user_mailok" , &l ) ) setUserMailok ( l );
558     if ( hashGetLong ( ht, "user_regdate" , &l ) ) setUserRegdate ( l );
559     if ( hashGetLong ( ht, "user_viewemail" , &l ) ) setUserViewemail ( l );
560     if ( hashGetLong ( ht, "activate" , &l ) ) setActivate ( l );
561     if ( hashGetString( ht, "address" , &p ) ) setAddress ( p );
562 aga 1.16 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
563 aga 1.14 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
564 aga 1.16 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
565 aga 1.14 if ( hashGetString( ht, "country" , &p ) ) setCountry ( p );
566     if ( hashGetString( ht, "zipcode" , &p ) ) setZipcode ( p );
567     if ( hashGetString( ht, "fax" , &p ) ) setFax ( p );
568     if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
569     if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
570 aga 1.22 if ( hashGetLong ( ht, "private_index_id " , &l ) ) setPrivateIndexID ( l );
571 tani 1.36 if ( hashGetLong ( ht, "item_number_limit" , &l ) ) setItemNumberLimit ( l );
572     if ( hashGetLong ( ht, "index_number_limit", &l ) ) setIndexNumberLimit ( l );
573     if ( hashGetDouble( ht, "item_storage_limit", &d ) ) setItemStorageLimit ( d );
574 aga 1.14
575     result = RES_OK;
576 aga 1.2 }
577 aga 1.16 public:
578 aga 1.2 zAccount_t() : account(){ result = RES_ERROR; }
579 youi 1.24
580     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
581     @param pz array( 'uid'=>1, 'uname'=>'root', ... ); ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス */
582 aga 1.2 zAccount_t( zval *pz ) : account(){ initialize(pz); }
583     zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
584     result_t getResult(){ return result; };
585     };
586    
587 aga 1.22 class zIndex_t : public index {
588     private:
589     result_t result;
590 youi 1.24
591 aga 1.22 void initialize(zval *pz){
592     HashTable *ht = Z_ARRVAL_P(pz);
593     long l;
594     char *p;
595     if ( hashGetLong ( ht, "item_id" , &l ) ) setItemID ( l );
596     if ( hashGetLong ( ht, "item_type_id" , &l ) ) setItemTypeID ( l );
597     if ( hashGetLong ( ht, "contributor_uid" , &l ) ) setContributorUID ( l );
598     if ( hashGetString( ht, "title" , &p ) ) setTitle ( p );
599     if ( hashGetString( ht, "keywords" , &p ) ) setKeywords ( p );
600     if ( hashGetString( ht, "description" , &p ) ) setDescription ( p );
601     if ( hashGetLong ( ht, "last_update_date" , &l ) ) setLastUpdateDate ( l );
602     if ( hashGetLong ( ht, "creation_date" , &l ) ) setCreationDate ( l );
603     if ( hashGetLong ( ht, "parent_index_id" , &l ) ) setParentIndexID ( l );
604     if ( hashGetLong ( ht, "owner_uid" , &l ) ) setOwnerUID ( l );
605     if ( hashGetLong ( ht, "owner_gid" , &l ) ) setOwnerGID ( l );
606     if ( hashGetLong ( ht, "open_level" , &l ) ) setOpenLevel ( l );
607     if ( hashGetLong ( ht, "sort_number" , &l ) ) setSortNumber ( l );
608    
609     result = RES_OK;
610     }
611     public:
612     zIndex_t() : index(){ result = RES_ERROR; }
613     zIndex_t( zval *pz ) : index(){ initialize(pz); }
614     zIndex_t( zval **ppz ) : index() { initialize(*ppz); }
615     result_t getResult(){ return result; };
616 youi 1.24
617 aga 1.22 void dump(){
618     }
619     };
620    
621 aga 1.16 /** zval*?ス?ス?ス?ス(userid_t *puid,int uidLen)?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス <br>
622 youi 1.24 ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgetResult()!=RES_OK <br>
623 aga 1.2 */
624     class zUIDs_t {
625     private:
626     result_t result;
627     userid_t *pUID;
628     int len;
629     public:
630     zUIDs_t(){
631     pUID = 0;
632     len = 0;
633     result = RES_ERROR;
634     }
635 youi 1.24
636     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
637     @param pza array( '1', '3', '4', '6', ... ); ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス */
638 aga 1.2 zUIDs_t( zval *pza ){
639     pUID = 0;
640     len = 0;
641     result = RES_ERROR;
642 youi 1.24
643 aga 1.2 if ( Z_TYPE_P(pza) != IS_ARRAY ){
644     result = RES_ERROR;
645     }
646     else {
647     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
648     if(len == 0) {
649     pUID = new userid_t[1];
650     result = RES_OK;
651     }
652     else {
653     /* php/ext/standard/string.c ?ス?ス implode?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
654     zend_hash_*?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
655     */
656     zval **tmp;
657     HashPosition pos;
658     int i = 0;
659     pUID = new userid_t[len];
660 youi 1.24
661 aga 1.2 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
662     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
663     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ?ス?ス?ス?ス
664     convert_to_long_ex(tmp);
665     if ( i < len )
666     pUID[i++] = Z_LVAL_PP(tmp);
667     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
668     }
669     len = i;
670     result = RES_OK;
671     }
672     }
673     }
674 youi 1.24
675 aga 1.2 ~zUIDs_t(){
676     if ( pUID ) delete[] pUID;
677     }
678     result_t getResult(){ return result; }
679     userid_t *getPUID(){ return pUID; }
680     int getLen(){ return len; }
681     void dump(){
682 youi 1.24 zend_printf( "dumping zUIDs...<br>\n" );
683 aga 1.2 zend_printf( "result=%d<br>\n", (int)result );
684     zend_printf( "len=%d<br>\n", len );
685     for ( int i = 0; i < len; i++ ){
686     zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
687     }
688     }
689     };
690    
691 youi 1.24 /** zval*?ス?ス?ス?ス(itemid_t *piid,int iidLen)?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス <br>
692     ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgetResult()!=RES_OK <br>
693     */
694     class zIIDs_t {
695     private:
696     result_t result;
697     itemid_t *pIID;
698     int len;
699     public:
700     zIIDs_t(){
701     pIID = 0;
702     len = 0;
703     result = RES_ERROR;
704     }
705    
706     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
707     @param pza array( '1', '3', '4', '6', ... ); ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス */
708     zIIDs_t( zval *pza ){
709     pIID = 0;
710     len = 0;
711     result = RES_ERROR;
712    
713     if ( Z_TYPE_P(pza) != IS_ARRAY ){
714     result = RES_ERROR;
715     }
716     else {
717     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
718     if(len == 0) {
719     pIID = new itemid_t[1];
720     result = RES_OK;
721     }
722     else {
723     /* php/ext/standard/string.c ?ス?ス implode?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
724     zend_hash_*?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
725     */
726     zval **tmp;
727     HashPosition pos;
728     int i = 0;
729     pIID = new itemid_t[len];
730    
731     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
732     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
733     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ?ス?ス?ス?ス
734     convert_to_long_ex(tmp);
735     if ( i < len )
736     pIID[i++] = Z_LVAL_PP(tmp);
737     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
738     }
739     len = i;
740     result = RES_OK;
741     }
742     }
743     }
744    
745     ~zIIDs_t(){
746     if ( pIID ) delete[] pIID;
747     }
748     result_t getResult(){ return result; }
749     itemid_t *getPIID(){ return pIID; }
750     int getLen(){ return len; }
751     void dump(){
752     zend_printf( "dumping zIIDs...<br>\n" );
753     zend_printf( "result=%d<br>\n", (int)result );
754     zend_printf( "len=%d<br>\n", len );
755     for ( int i = 0; i < len; i++ ){
756     zend_printf( "pIID[%d] = %d<br>\n", i, pIID[i] );
757     }
758     }
759     };
760    
761     /**
762     *
763     * amazonbook_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
764     * @param pAmazonbook ?ス?ス?ス?ス?ス?ス?ス?スamazonbook_t*
765     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
766     * @return RES_OK
767     *
768     */
769     result_t amazonbookToZval( const amazonbook_t *pAmazonbook, zval *z )
770     {
771     zend_hash_clean( z -> value.ht );
772    
773     add_assoc_string( z, "title", ( char* )pAmazonbook -> getTitle( ), 1 );
774     add_assoc_string( z, "author", ( char* )pAmazonbook -> getAuthor( ), 1 );
775     add_assoc_string( z, "publisher", ( char* )pAmazonbook -> getPublisher( ), 1 );
776     add_assoc_long( z, "year_of_publication", pAmazonbook -> getYearOfPublication( ) );
777     add_assoc_string( z, "isbn", ( char* )pAmazonbook -> getISBN( ), 1 );
778     add_assoc_string( z, "url", ( char* )pAmazonbook -> getURL( ), 1 );
779    
780     return RES_OK;
781     }
782    
783     /**
784     *
785     * pubmed_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
786     * @param pPubmed ?ス?ス?ス?ス?ス?ス?ス?スpubmed_t*
787     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
788     * @return RES_OK
789     *
790     */
791     result_t pubmedToZval( const pubmed_t *pPubmed, zval *z )
792     {
793     zend_hash_clean( z -> value.ht );
794    
795     add_assoc_long( z, "pmid", pPubmed -> getID( ) );
796     add_assoc_string( z, "title", ( char* )pPubmed -> getTitle( ), 1 );
797     add_assoc_string( z, "author", ( char* )pPubmed -> getAuthor( ), 1 );
798     add_assoc_string( z, "journal", ( char* )pPubmed -> getJournal( ), 1 );
799     add_assoc_long( z, "year_of_publication", pPubmed -> getYearOfPublication( ) );
800     add_assoc_long( z, "volume", pPubmed -> getVolume( ) );
801     add_assoc_long( z, "number", pPubmed -> getNumber( ) );
802     add_assoc_string( z, "page", ( char* )pPubmed -> getPage( ), 1 );
803     add_assoc_string( z, "abstract", ( char* )pPubmed -> getAbstract( ), 1 );
804    
805     return RES_OK;
806     }
807    
808     /**
809     *
810     * itemid_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
811     * @param piid ?ス?ス?ス?ス?ス?ス?ス?スitemid_t?ス?ス?ス?ス?ス?ス
812     * @param len piid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
813     * @param ppz ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
814     * @return RES_OK
815     *
816     */
817 youi 1.25 result_t itemidsToZval( const itemid_t *piid, int len, zval **ppz )
818 youi 1.24 {
819     zend_hash_clean( Z_ARRVAL_PP(ppz) );
820    
821 youi 1.26 // add IDs
822     for ( int i = 0; i < len; i++ ){
823     add_next_index_long(*ppz, (long)(piid[i]) );
824     }
825    
826     return RES_OK;
827     }
828    
829     /**
830     *
831     * indexid_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
832     * @param piid ?ス?ス?ス?ス?ス?ス?ス?スindexid_t?ス?ス?ス?ス?ス?ス
833     * @param len piid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
834     * @param ppz ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
835     * @return RES_OK
836     *
837     */
838     result_t indexidsToZval( const indexid_t *piid, int len, zval **ppz )
839     {
840     zend_hash_clean( Z_ARRVAL_PP(ppz) );
841    
842     // add IDs
843 youi 1.24 for ( int i = 0; i < len; i++ ){
844     add_next_index_long(*ppz, (long)(piid[i]) );
845     }
846    
847     return RES_OK;
848     }
849    
850 aga 1.8 /**
851 youi 1.24 *
852 aga 1.8 * uids_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
853 youi 1.24 *
854 aga 1.16 * @param pUID ?ス?ス?ス?ス?ス?ス?ス?スuserid_t?ス?ス?ス?ス?ス?ス
855 aga 1.8 * @param len pUID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
856     * @param pz ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
857     * @return RES_OK
858 youi 1.24 *
859 aga 1.8 */
860 aga 1.4 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
861     {
862 youi 1.24 zend_hash_clean( Z_ARRVAL_PP(ppz) );
863    
864 aga 1.2 // add UIDs
865     for ( int i = 0; i < len; i++ ){
866 aga 1.8 add_next_index_long(*ppz, (long)(pUID[i]) );
867 aga 1.2 }
868 youi 1.24
869 aga 1.2 return RES_OK;
870     }
871 youi 1.24
872 aga 1.16 /**
873     *
874     * groupid_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
875     * @param pGID ?ス?ス?ス?ス?ス?ス?ス?スgroupid_t?ス?ス?ス?ス?ス?ス
876     * @param len pGID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
877     * @param ppz ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
878     * @return RES_OK
879     *
880     */
881 aga 1.4 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
882     {
883 youi 1.24 zend_hash_clean( Z_ARRVAL_PP(ppz) );
884    
885 aga 1.2 // add GIDs
886     for ( int i = 0; i < len; i++ ){
887 aga 1.8 add_next_index_long(*ppz, (long)(pGID[i]) );
888 aga 1.2 }
889 youi 1.24
890     return RES_OK;
891     }
892    
893     /**
894     *
895     * changelog_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
896     * @param pChangelog ?ス?ス?ス?ス?ス?ス?ス?スchangelog_t*
897     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
898     * @return RES_OK
899     *
900     */
901     result_t changelogToZval( const changelog_t *pChangelog, zval *z )
902     {
903     zend_hash_clean( z -> value.ht );
904    
905     add_assoc_long( z, "log_id", pChangelog -> getChangelogID( ) );
906     add_assoc_long( z, "item_id", pChangelog -> getItemID( ) );
907     add_assoc_long( z, "log_date", pChangelog -> getDate( ) );
908     add_assoc_string( z, "log", ( char* )pChangelog -> getLog( ), 1 );
909    
910     return RES_OK;
911     }
912    
913     /**
914     *
915     * item_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
916     * @param pItem ?ス?ス?ス?ス?ス?ス?ス?スitem_t*
917     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
918     * @return RES_OK
919     *
920     */
921     result_t itemToZval( const item_t *pItem, zval *z )
922     {
923     zend_hash_clean( z -> value.ht );
924    
925     add_assoc_long( z, "item_id", pItem -> getItemID( ) );
926     add_assoc_long( z, "item_type_id", pItem -> getItemTypeID( ) );
927     add_assoc_long( z, "uid", pItem -> getContributorUID( ) );
928     add_assoc_string( z, "title", ( char* )pItem -> getTitle( ), 1 );
929     add_assoc_string( z, "keywords", ( char* )pItem -> getKeywords( ), 1 );
930     add_assoc_string( z, "description", ( char* )pItem -> getDescription( ), 1 );
931     add_assoc_string( z, "doi", ( char* )pItem -> getDOI( ), 1 );
932     add_assoc_long( z, "last_update_date", pItem -> getLastUpdateDate( ) );
933     add_assoc_long( z, "creation_date", pItem -> getCreationDate( ) );
934 youi 1.34 add_assoc_long( z, "publication_year", pItem -> getPublicationYear( ) );
935     add_assoc_long( z, "publication_month", pItem -> getPublicationMonth( ) );
936     add_assoc_long( z, "publication_mday", pItem -> getPublicationMday( ) );
937 youi 1.24
938     return RES_OK;
939     }
940    
941    
942     result_t itemsToZval( const item_t *pItems, int itemsLen, zval *z )
943     {
944     zend_hash_clean( z -> value.ht );
945     for( int i = 0; i < itemsLen; i++ ){
946     zval *new_array;
947     MAKE_STD_ZVAL(new_array);
948     if(array_init(new_array) != SUCCESS){
949     return RES_ERROR;
950     }
951     add_index_zval( z, i, new_array );
952     itemToZval( &pItems[ i ], new_array );
953     }
954 aga 1.2 return RES_OK;
955     }
956    
957 youi 1.24 /**
958     *
959     * PHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgroup_t?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
960     *
961     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
962     * @param pGroup ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
963     * @return RES_OK
964     *
965     */
966     result_t zvalToItem( zval *z, item_t* pItem )
967     {
968     zval **tmp;
969     char* key = 0;
970    
971     key = "item_id";
972     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
973     convert_to_long_ex( tmp ) ;
974     pItem -> setItemID( (*tmp) -> value.lval );
975     }
976     key = "item_type_id";
977     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
978     convert_to_long_ex( tmp ) ;
979     pItem -> setItemTypeID( (*tmp) -> value.lval );
980     }
981     key = "uid";
982     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
983     convert_to_long_ex( tmp ) ;
984     pItem -> setContributorUID( (*tmp) -> value.lval );
985     }
986     key = "title";
987     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
988     convert_to_string_ex( tmp ) ;
989     pItem -> setTitle( (*tmp) -> value.str.val );
990     }
991     key = "keywords";
992     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
993     convert_to_string_ex( tmp ) ;
994     pItem -> setKeywords( (*tmp) -> value.str.val );
995     }
996     key = "description";
997     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
998     convert_to_string_ex( tmp ) ;
999     pItem -> setDescription( (*tmp) -> value.str.val );
1000     }
1001     key = "doi";
1002     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1003     convert_to_string_ex( tmp ) ;
1004     pItem -> setDOI( (*tmp) -> value.str.val );
1005     }
1006     key = "last_update_date";
1007     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1008     convert_to_long_ex( tmp ) ;
1009     pItem -> setLastUpdateDate( (*tmp) -> value.lval );
1010     }
1011     key = "creation_date";
1012     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1013     convert_to_long_ex( tmp ) ;
1014     pItem -> setCreationDate( (*tmp) -> value.lval );
1015 youi 1.34 }
1016     key = "publication_year";
1017     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1018     convert_to_long_ex( tmp ) ;
1019     pItem -> setPublicationYear( (*tmp) -> value.lval );
1020     }
1021     key = "publication_month";
1022     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1023     convert_to_long_ex( tmp ) ;
1024     pItem -> setPublicationMonth( (*tmp) -> value.lval );
1025     }
1026     key = "publication_mday";
1027     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1028     convert_to_long_ex( tmp ) ;
1029     pItem -> setPublicationMday( (*tmp) -> value.lval );
1030 youi 1.24 }
1031     return RES_OK;
1032     }
1033 aga 1.16
1034     /**
1035     *
1036     * account_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1037     * @param pAccount ?ス?ス?ス?ス?ス?ス?ス?スaccount_t*
1038     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1039     * @return RES_OK
1040     *
1041     */
1042 youi 1.6 result_t accountToZval( const account_t *pAccount, zval *z )
1043     {
1044 youi 1.24 zend_hash_clean( z -> value.ht );
1045    
1046     add_assoc_long( z, "uid", pAccount -> getUID( ) );
1047     add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
1048     add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
1049     add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
1050     add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
1051     add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
1052     add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
1053     add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
1054     add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
1055     add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
1056     add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
1057     add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
1058     add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
1059     add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
1060     add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
1061     add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
1062     add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
1063     add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
1064     add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
1065     add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
1066     add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
1067     add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
1068     add_assoc_long( z, "level", pAccount -> getLevel( ) );
1069     add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
1070     add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
1071     add_assoc_long( z, "posts", pAccount -> getPosts( ) );
1072     add_assoc_long( z, "rank", pAccount -> getRank( ) );
1073     add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
1074     add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
1075     add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
1076     add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
1077    
1078     add_assoc_long( z, "activate", pAccount -> getActivate( ) );
1079     add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
1080     add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
1081     add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
1082     add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
1083     add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
1084     add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
1085     add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
1086     add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
1087     add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
1088     add_assoc_long( z, "private_index_id", pAccount -> getPrivateIndexID( ) );
1089 tani 1.36 add_assoc_long( z, "item_number_limit", pAccount -> getItemNumberLimit( ) );
1090     add_assoc_long( z, "index_number_limit", pAccount -> getIndexNumberLimit( ) );
1091     add_assoc_double( z, "item_storage_limit", pAccount -> getItemStorageLimit( ) );
1092 youi 1.6 return RES_OK;
1093     }
1094 youi 1.24
1095 aga 1.16 /**
1096     *
1097     * ?ス?ス?ス?ス?ス?スaccount_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1098     * @param pAccounts ?ス?ス?ス?ス?ス?ス?ス?スaccount_t*
1099     * @param accountsLen pAccounts?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1100     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1101     * @return RES_OK
1102     *
1103     z: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス <br>
1104 youi 1.24 array(
1105     array(
1106     'uid'=>100,
1107     'activate'=>1,
1108     'division'=>'foo',
1109     'tel'=>'123-456-789',
1110     ...
1111     ),
1112     ...
1113     )
1114 aga 1.16 */
1115 youi 1.6 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
1116 aga 1.4 {
1117 youi 1.24 zend_hash_clean( z -> value.ht );
1118     for( int i = 0; i < accountsLen; i++ ){
1119     zval *new_array;
1120     MAKE_STD_ZVAL(new_array);
1121     if(array_init(new_array) != SUCCESS){
1122     return RES_ERROR;
1123     }
1124     add_index_zval( z, i, new_array );
1125     accountToZval( &pAccounts[ i ], new_array );
1126     }
1127 youi 1.6 return RES_OK;
1128 aga 1.2 }
1129    
1130 aga 1.16 /**
1131     *
1132     * ?ス?ス?ス?ス?ス?スgroup_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1133     * @param pGroups ?ス?ス?ス?ス?ス?ス?ス?スgroup_t*
1134     * @param groupsLen pGroups?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1135     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1136     * @return RES_OK
1137     *
1138     z: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス <br>
1139 youi 1.24 array(
1140     array(
1141     'gid'=>1,
1142     'gname'=>'foo group',
1143     'gdesc'=>'group of foo'
1144     ),
1145     ...
1146     )
1147 aga 1.16 */
1148 youi 1.6 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
1149 aga 1.4 {
1150 youi 1.24 zend_hash_clean( z -> value.ht );
1151     for( int i = 0; i < groupsLen; i++ ){
1152     zval *new_array;
1153     MAKE_STD_ZVAL(new_array);
1154     if(array_init(new_array) != SUCCESS){
1155     return RES_ERROR;
1156     }
1157     add_index_zval( z, i, new_array );
1158     add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
1159     add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
1160     add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
1161     add_assoc_long( new_array, "group_index_id", pGroups[ i ].getGroupIndexID( ) );
1162 tani 1.36 add_assoc_long( new_array, "item_number_limit", pGroups[ i ].getItemNumberLimit( ) );
1163     add_assoc_long( new_array, "index_number_limit", pGroups[ i ].getIndexNumberLimit( ) );
1164     add_assoc_double( new_array, "item_storage_limit", pGroups[ i ].getItemStorageLimit( ) );
1165 youi 1.24 }
1166 youi 1.6 return RES_OK;
1167 aga 1.2 }
1168    
1169 youi 1.7 /**
1170 youi 1.24 *
1171 youi 1.7 * group_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1172 youi 1.24 *
1173 aga 1.16 * @param pGroup ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1174 youi 1.7 * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1175     * @return RES_OK
1176 youi 1.24 *
1177 youi 1.7 */
1178     result_t groupToZval( const group_t *pGroup, zval *z )
1179 youi 1.6 {
1180 youi 1.24 zend_hash_clean( z -> value.ht );
1181     add_assoc_long( z, "gid", pGroup -> getGID( ) );
1182     add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
1183     add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
1184     add_assoc_long( z, "group_index_id", pGroup -> getGroupIndexID( ) );
1185 tani 1.36 add_assoc_long( z, "item_number_limit", pGroup -> getItemNumberLimit( ) );
1186     add_assoc_long( z, "index_number_limit", pGroup -> getIndexNumberLimit( ) );
1187     add_assoc_double( z, "item_storage_limit", pGroup -> getItemStorageLimit( ) );
1188 youi 1.6 return RES_OK;
1189     }
1190    
1191 aga 1.16 /**
1192 youi 1.24 *
1193 aga 1.16 * PHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgroup_t?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1194 youi 1.24 *
1195 aga 1.16 * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1196     * @param pGroup ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1197     * @return RES_OK
1198 youi 1.24 *
1199 aga 1.16 */
1200 youi 1.7 result_t zvalToGroup( zval *z, group_t *pGroup )
1201     {
1202 youi 1.24 zval **tmp;
1203     char* key = 0;
1204    
1205     key = "gid";
1206     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1207     convert_to_long_ex( tmp ) ;
1208     pGroup -> setGID( (*tmp) -> value.lval );
1209     }
1210     key = "gname";
1211     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1212     convert_to_string_ex( tmp ) ;
1213     pGroup -> setGname( (*tmp) -> value.str.val );
1214     }
1215     key = "gdesc";
1216     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1217     convert_to_string_ex( tmp ) ;
1218     pGroup -> setDesc( (*tmp) -> value.str.val );
1219     }
1220     key = "group_index_id";
1221     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1222     convert_to_long_ex( tmp ) ;
1223     pGroup -> setGroupIndexID( (*tmp) -> value.lval );
1224     }
1225 tani 1.36 key = "item_number_limit";
1226     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1227     convert_to_long_ex( tmp ) ;
1228     pGroup -> setItemNumberLimit( (*tmp) -> value.lval );
1229     }
1230     key = "index_number_limit";
1231     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1232     convert_to_long_ex( tmp ) ;
1233     pGroup -> setIndexNumberLimit( (*tmp) -> value.lval );
1234     }
1235     key = "item_storage_limit";
1236     if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1237     convert_to_double_ex( tmp ) ;
1238     pGroup -> setItemStorageLimit( (*tmp) -> value.dval );
1239     }
1240 youi 1.7 return RES_OK;
1241     }
1242    
1243 aga 1.16 /**
1244 youi 1.24 *
1245 aga 1.16 * session_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1246 youi 1.24 *
1247 aga 1.16 * @param pSession ?ス?ス?ス?ス?ス?ス?ス?スsession_t
1248     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1249     * @return RES_OK
1250 youi 1.24 *
1251 aga 1.16 */
1252     result_t sessionToZval( const session_t *pSession, zval *z )
1253     {
1254     string sessionID(unsignedIntToString(pSession->getSessionID()));
1255     add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
1256 youi 1.24
1257 aga 1.16 string date(unsignedIntToString((unsigned int)pSession->getDate()));
1258     add_assoc_string(z, "date", (char *)date.c_str(), 1);
1259 youi 1.24
1260 aga 1.20 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
1261 aga 1.16 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
1262 youi 1.24
1263 aga 1.16 return RES_OK;
1264     }
1265    
1266 aga 1.22 /**
1267     *
1268     * index_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1269     * @param pIndex ?ス?ス?ス?ス?ス?ス?ス?スindex_t*
1270     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1271     * @return RES_OK
1272     *
1273     */
1274     result_t indexToZval( const index_t *pIndex, zval *z )
1275     {
1276 youi 1.24 zend_hash_clean( z -> value.ht );
1277    
1278     add_assoc_long( z, "item_id", pIndex -> getItemID( ) );
1279     add_assoc_long( z, "item_type_id", pIndex -> getItemTypeID( ) );
1280     add_assoc_long( z, "contributor_uid", pIndex -> getContributorUID( ) );
1281     add_assoc_string( z, "title", ( char* )pIndex -> getTitle( ), 1 );
1282     add_assoc_string( z, "keywords", ( char* )pIndex -> getKeywords( ), 1 );
1283     add_assoc_string( z, "description", ( char* )pIndex -> getDescription( ), 1 );
1284     add_assoc_long( z, "last_update_date", pIndex -> getLastUpdateDate( ) );
1285     add_assoc_long( z, "creation_date", pIndex-> getCreationDate( ) );
1286     add_assoc_long( z, "parent_index_id", pIndex -> getParentIndexID( ) );
1287     add_assoc_long( z, "owner_uid", pIndex -> getOwnerUID( ) );
1288     add_assoc_long( z, "owner_gid", pIndex -> getOwnerGID( ) );
1289     add_assoc_long( z, "open_level", pIndex -> getOpenLevel( ) );
1290     add_assoc_long( z, "sort_number", pIndex -> getSortNumber( ) );
1291 aga 1.22 return RES_OK;
1292     }
1293    
1294     result_t indexesToZval( const index_t *pIndexes, int indexesLen, zval *z )
1295     {
1296 youi 1.24 zend_hash_clean( z -> value.ht );
1297     for( int i = 0; i < indexesLen; i++ ){
1298     zval *new_array;
1299     MAKE_STD_ZVAL(new_array);
1300     if(array_init(new_array) != SUCCESS){
1301     return RES_ERROR;
1302     }
1303     add_index_zval( z, i, new_array );
1304     indexToZval( &pIndexes[ i ], new_array );
1305     }
1306 aga 1.22 return RES_OK;
1307     }
1308    
1309 aga4096 1.42 /**
1310     *
1311     * event_t?ス?ス?ス?ス?ス?ス?ス?スPHP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1312     * @param pevent ?ス?ス?ス?ス?ス?ス?ス?スevent_t*
1313     * @param z ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス)
1314     * @return RES_OK
1315     *
1316     */
1317     result_t eventToZval( const event_t *pEvent, zval *z )
1318     {
1319     zend_hash_clean( z -> value.ht );
1320    
1321     add_assoc_long ( z, "event_id" , pEvent -> getEventID() );
1322     add_assoc_long ( z, "event_type_id" , pEvent -> getEventTypeID() );
1323    
1324 aga4096 1.44 if ( pEvent->isValidTimestamp () ) add_assoc_long ( z, "timestamp" , pEvent -> getTimestamp() );
1325     if ( pEvent->isValidExecUID () ) add_assoc_long ( z, "exec_uid" , pEvent -> getExecUID() );
1326     if ( pEvent->isValidIndexID () ) add_assoc_long ( z, "index_id" , pEvent -> getIndexID() );
1327     if ( pEvent->isValidItemID () ) add_assoc_long ( z, "item_id" , pEvent -> getItemID() );
1328     if ( pEvent->isValidFileID () ) add_assoc_long ( z, "file_id" , pEvent -> getFileID() );
1329     if ( pEvent->isValidUID () ) add_assoc_long ( z, "uid" , pEvent -> getUID() );
1330     if ( pEvent->isValidGID () ) add_assoc_long ( z, "gid" , pEvent -> getGID() );
1331     if ( pEvent->isValidRemoteHost () ) add_assoc_string( z, "remote_host" , (char*)pEvent -> getRemoteHost() , 1 );
1332     if ( pEvent->isValidSearchKeyword () ) add_assoc_string( z, "search_keyword" , (char*)pEvent -> getSearchKeyword() , 1 );
1333     if ( pEvent->isValidAdditionalInfo() ) add_assoc_string( z, "additional_info", (char*)pEvent -> getAdditionalInfo(), 1 );
1334 aga4096 1.42
1335     return RES_OK;
1336     }
1337    
1338     result_t eventsToZval( const event_t *pevents, int eventsLen, zval *z )
1339     {
1340     zend_hash_clean( z -> value.ht );
1341     for( int i = 0; i < eventsLen; i++ ){
1342     zval *new_array;
1343     MAKE_STD_ZVAL(new_array);
1344     if(array_init(new_array) != SUCCESS){
1345     return RES_ERROR;
1346     }
1347     add_index_zval( z, i, new_array );
1348     eventToZval( &pevents[ i ], new_array );
1349     }
1350     return RES_OK;
1351     }
1352    
1353 aga 1.22
1354 youi 1.7
1355 aga 1.16
1356     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1357 youi 1.24 int xnp_get_group( int sid, int gid, array group );
1358     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1359     @param gid XNP ?ス?ス group_id
1360     @param group ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1361     @return 0 success <br>
1362 aga 1.16 */
1363 youi 1.21 ZEND_FUNCTION(xnp_get_group)
1364 aga 1.4 {
1365 youi 1.6 long sid, gid;
1366     zval *zgroup;
1367 youi 1.24
1368 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1369 youi 1.24 &sid, &gid, &zgroup) == FAILURE) {
1370 youi 1.6 return;
1371     }
1372 youi 1.24
1373 youi 1.6 const group_t *pgroup;
1374     result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
1375     if ( RES_OK == result ){
1376 youi 1.7 groupToZval( pgroup, zgroup );
1377 youi 1.19 freeGroup( pgroup );
1378 youi 1.6 }
1379 youi 1.24
1380     RETURN_LONG(result);
1381 youi 1.6 }
1382    
1383 aga 1.2
1384 aga 1.16 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(?ス?ス?ス?ス)?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1385 youi 1.24 xnp_get_groups( int sid, array gids, array criteria, array groups );
1386     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1387     @param gids XNP ?ス?ス group_id ?ス?ス?ス?ス?ス?ス
1388     @param criteria ?ス?ス?ス?ス
1389     @param groups ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1390     @return 0 success <br>
1391 aga 1.16 */
1392 youi 1.21 ZEND_FUNCTION(xnp_get_groups)
1393 youi 1.6 {
1394     result_t result;
1395 youi 1.29 long sid;
1396 youi 1.6 zval *zcriteria;
1397     zval *zgids;
1398     zval *zgroups;
1399 youi 1.24 zval **ppzTmp = 0;
1400     HashPosition pos;
1401     int res2;
1402     int gidsLen;
1403     const group_t* groups;
1404     int groupsLen;
1405    
1406 youi 1.6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1407 youi 1.24 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
1408 youi 1.6 return;
1409     }
1410 youi 1.24
1411     //gids?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1412     gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
1413     groupid_t *gids = new groupid_t[ gidsLen ];
1414     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
1415     for( int i = 0; i < gidsLen; i++ ){
1416     if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
1417     SEPARATE_ZVAL(ppzTmp);
1418     convert_to_long_ex(ppzTmp);
1419     gids[ i ] = Z_LVAL_PP(ppzTmp);
1420     }
1421     zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
1422     }
1423    
1424 youi 1.6 zCriteria_t zcri(zcriteria);
1425     result = zcri.getResult();
1426     if ( RES_OK == result ){
1427 youi 1.24 result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
1428     if ( RES_OK == result ){
1429     groupsToZval( groups, groupsLen, zgroups );
1430     delete[] gids;
1431     freeGroup( groups );
1432     }
1433     }
1434     RETURN_LONG(result);
1435 youi 1.6 }
1436    
1437    
1438 aga 1.16 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1439 youi 1.24 int xnp_is_moderator(int sid, int uid)
1440     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1441     @param uid xoops ?ス?ス uid (xoops_users.uid)
1442     @return true ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス <br>
1443 aga 1.16 */
1444 youi 1.21 ZEND_FUNCTION(xnp_is_moderator)
1445 youi 1.6 {
1446 youi 1.21 long xnpSessionID;
1447 youi 1.6 userid_t uid;
1448 youi 1.24
1449     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1450     &xnpSessionID, &uid) == FAILURE) {
1451 youi 1.6 return;
1452     }
1453 youi 1.24
1454 youi 1.21 bool result = isModerator( (sessionid_t)xnpSessionID, uid );
1455 youi 1.24 RETURN_BOOL(result)
1456 youi 1.6 }
1457    
1458 aga 1.16 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス<br>
1459 youi 1.24 int xnp_get_uid(string uname,int &uid)
1460     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1461     @param uname xoops ?ス?ス uname (xoops_users.uname)
1462     @param uid xoops ?ス?ス uid (xoops_users.uid) ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1463     @return 0 success
1464 aga 1.16 */
1465 youi 1.21 ZEND_FUNCTION(xnp_get_uid)
1466 youi 1.6 {
1467     char *uname;
1468     int unameLen;
1469 aga 1.14 zval *zuid;
1470 youi 1.6 userid_t uid;
1471 youi 1.24
1472     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
1473 aga 1.14 &uname, &unameLen, &zuid) == FAILURE) {
1474 youi 1.6 return;
1475     }
1476 youi 1.24
1477 aga 1.14 if (!PZVAL_IS_REF(zuid)) {
1478     zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
1479     RETURN_LONG(RES_PHP_NONREF);
1480     }
1481 youi 1.24
1482 youi 1.6 string strUname( uname, unameLen );
1483     result_t result = getUid( strUname.c_str(), &uid );
1484 aga 1.14 ZVAL_LONG(zuid, (long)uid);
1485     RETURN_LONG((long)result);
1486 aga 1.2 }
1487    
1488 youi 1.21 ZEND_FUNCTION(xnp_test_criteria)
1489 aga 1.2 {
1490     zval *z;
1491 youi 1.24
1492     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1493 aga 1.2 &z) == FAILURE) {
1494     return;
1495     }
1496     zend_printf("zend_printf...<br>\n");
1497     zCriteria_t zcri(z);
1498     zcri.dump();
1499     RETURN_FALSE
1500     }
1501    
1502 youi 1.21 ZEND_FUNCTION(xnp_test_uids)
1503 aga 1.2 {
1504     zval *z;
1505 youi 1.24
1506     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1507 aga 1.2 &z) == FAILURE) {
1508     return;
1509     }
1510     zend_printf("zend_printf...<br>\n");
1511     zUIDs_t zuids(z);
1512     zuids.dump();
1513     RETURN_FALSE
1514     }
1515    
1516    
1517    
1518 aga 1.4 /** DB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1519 aga 1.31 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix, int dbtype]]]] );
1520 youi 1.24 @param host ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スNULL
1521     @param user DB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スNULL
1522     @param password DB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スNULL
1523     @param dbname DB?ス?ス?ス?ス?ス?ス?ス?スDB?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス""
1524     @param prefix XOOPS DB ?ス?スprefix?ス?ス
1525 aga 1.31 @param dbtype 1=MySQL 2=SQLite?ス?スcommon.h?ス?ス?ス?ス
1526 youi 1.24 @return 0 success <br>
1527 aga 1.1 */
1528 youi 1.21 ZEND_FUNCTION(xnp_initialize_db)
1529 aga 1.1 {
1530     zval **parameters[5];
1531     char *host;
1532     char *user;
1533 aga 1.2 char *password;
1534     char *dbname;
1535     char *prefix;
1536 aga 1.31 long dbtype;
1537 aga 1.1
1538     /* get the number of arguments */
1539     int argNum = ZEND_NUM_ARGS();
1540     if (argNum > 5)
1541     WRONG_PARAM_COUNT;
1542    
1543     /* argument count is correct, now retrieve arguments */
1544     if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
1545     WRONG_PARAM_COUNT;
1546    
1547 aga 1.2 if (argNum < 1) host = NULL;
1548 aga 1.1 else host = getZvalString( parameters[0] );
1549 youi 1.24
1550 aga 1.1 if (argNum < 2) user = NULL;
1551     else user = getZvalString( parameters[1] );
1552 youi 1.24
1553 aga 1.2 if (argNum < 3) password = NULL;
1554     else password = getZvalString( parameters[2] );
1555 youi 1.24
1556 aga 1.2 if (argNum < 4) dbname = "";
1557     else dbname = getZvalString( parameters[3] );
1558 youi 1.24
1559 aga 1.2 if (argNum < 5) prefix = "";
1560     else prefix = getZvalString( parameters[4] );
1561 youi 1.24
1562 aga 1.31 if (argNum < 6) dbtype = DBTYPE_MYSQL;
1563     else dbtype = getZvalInt( parameters[5] );
1564    
1565     result_t result = initializeDB( host, user, password, dbname, prefix, (dbtype_t)dbtype );
1566 youi 1.24
1567 aga 1.2 RETURN_LONG(result);
1568 aga 1.1 }
1569    
1570 aga 1.4 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1571 youi 1.24 int xnp_login_user(string uname, string password, int &session_id)
1572     @param uname ?ス?ス?ス?ス?ス?ス?ス?ス(xoops_users.uname)
1573     @param password ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス(md5(password)=xoops_users.pass)
1574     @return 0 success
1575 aga 1.4 */
1576 youi 1.21 ZEND_FUNCTION(xnp_login_user)
1577 aga 1.1 {
1578     char *uname;
1579     int unameLen;
1580     char *passwd;
1581     int passwdLen;
1582 youi 1.21 zval *zXNPSessionID;
1583 youi 1.24
1584     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
1585 youi 1.21 &uname, &unameLen, &passwd, &passwdLen, &zXNPSessionID) == FAILURE) {
1586 aga 1.1 return;
1587     }
1588 youi 1.24
1589 youi 1.21 if (!PZVAL_IS_REF(zXNPSessionID)) {
1590 aga 1.14 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1591     RETURN_LONG(RES_PHP_NONREF);
1592     }
1593 youi 1.24
1594 youi 1.21 sessionid_t xnpSessionID;
1595     result_t result = loginUser( uname, passwd, &xnpSessionID );
1596 aga 1.14 if ( result == RES_OK )
1597 youi 1.21 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1598 aga 1.14 RETURN_LONG((long)result);
1599 aga 1.1 }
1600    
1601 aga 1.4 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1602 youi 1.24 void xnp_logout_user(int xnp_session_id)
1603     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1604     @return ?ス?ス?ス?ス
1605 aga 1.4 */
1606 youi 1.21 ZEND_FUNCTION(xnp_logout_user)
1607 aga 1.1 {
1608 youi 1.21 long xnpSessionID;
1609 youi 1.24
1610 youi 1.21 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &xnpSessionID) == FAILURE) {
1611 aga 1.1 return;
1612     }
1613 youi 1.21 logoutUser( (sessionid_t)xnpSessionID );
1614 youi 1.24
1615     RETURN_NULL();
1616 aga 1.1 }
1617    
1618 youi 1.21 /** XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID ?ス?ス?ス?ス<br>
1619 youi 1.24 int xnp_create_session( string xoops_sess_id, int uid, int &session )
1620     @param xoops_sess_id xoops?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1621     @param uid xoops ?ス?ス uid (xoops_users.uid)
1622     @param session ?ス?ス?ス?ス?ス?ス?ス?スXNP?ス?スsession?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1623     @return 0 ?ス?ス?ス?ス
1624 aga 1.4 */
1625 youi 1.21 ZEND_FUNCTION(xnp_create_session)
1626 aga 1.2 {
1627     char *xoopsSessionID;
1628     int xoopsSessionIDLen;
1629 aga 1.5 long uid;
1630 youi 1.21 zval *zXNPSessionID;
1631 youi 1.24
1632 aga 1.14 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1633 youi 1.21 &xoopsSessionID, &xoopsSessionIDLen, &uid, &zXNPSessionID) == FAILURE) {
1634 aga 1.2 return;
1635     }
1636 youi 1.24
1637 youi 1.21 if (!PZVAL_IS_REF(zXNPSessionID)) {
1638 aga 1.14 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1639     RETURN_LONG(RES_PHP_NONREF);
1640     }
1641 youi 1.24
1642 youi 1.21 sessionid_t xnpSessionID = 0;
1643     result_t result = createSession( xoopsSessionID, (userid_t)uid, &xnpSessionID );
1644 aga 1.14 if ( result == RES_OK )
1645 youi 1.21 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1646 aga 1.14 RETURN_LONG((long)result);
1647 aga 1.4 }
1648    
1649 youi 1.21 /** XNP ?ス?ス session ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1650 youi 1.24 int xnp_get_session( int xnp_session_id, array session_info )
1651     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1652     @param session_info ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1653     @return 0 success
1654 aga 1.4 */
1655 youi 1.21 ZEND_FUNCTION(xnp_get_session)
1656 aga 1.4 {
1657 youi 1.21 long xnpSessionID;
1658 aga 1.4 zval *sessionInfo;
1659     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1660 youi 1.21 &xnpSessionID, &sessionInfo) == FAILURE) {
1661 aga 1.4 return;
1662     }
1663     const session_t *session = 0;
1664 youi 1.21 result_t result = getSession( (sessionid_t)xnpSessionID, &session );
1665 aga 1.4 if ( result == RES_OK ){
1666     sessionToZval( session, sessionInfo );
1667 youi 1.19 freeSession( session );
1668 aga 1.4 }
1669 youi 1.24
1670 aga 1.4 RETURN_LONG((long)result);
1671 aga 1.2 }
1672 aga 1.1
1673 aga 1.16 /** ?ス?ス?ス?ス?ス?ス?ス?スactivate?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1674 youi 1.24 bool xnp_is_activated( int xnp_session_id, int user_id )
1675     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1676     @param user_id xoops_users.uid
1677     @return 0 success
1678 aga 1.5 */
1679 youi 1.21 ZEND_FUNCTION(xnp_is_activated)
1680 aga 1.2 {
1681     long sid, uid;
1682 youi 1.24
1683 aga 1.5 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1684 aga 1.2 return;
1685     }
1686 youi 1.24
1687 aga 1.2 bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1688 youi 1.24
1689     RETURN_BOOL(result);
1690 aga 1.2 }
1691 aga 1.1
1692 youi 1.17 /** activate?ス?ス?ス?ス?ス?ス<br>
1693 youi 1.24 bool xnp_activate( int xnp_session_id, int user_id, bool activated )
1694     @param xnp_session_id xnp ?ス?ス session id
1695     @param user_id xoops_users.uid
1696     @param activated true:activate, false:inactivate
1697     @return 0 success
1698 aga 1.5 */
1699 youi 1.21 ZEND_FUNCTION(xnp_activate)
1700 aga 1.2 {
1701     long sid, uid;
1702     bool activated;
1703 youi 1.24
1704 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1705     &sid, &uid, &activated) == FAILURE) {
1706     return;
1707     }
1708 youi 1.24
1709 aga 1.2 result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1710 youi 1.24
1711     RETURN_LONG(result);
1712 aga 1.2 }
1713 aga 1.1
1714 youi 1.21 /** XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1715 youi 1.24 int xnp_get_account_count( int xnp_session_id )
1716     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1717     @return 0 success
1718 aga 1.5 */
1719 youi 1.21 ZEND_FUNCTION(xnp_get_account_count)
1720 aga 1.2 {
1721     long sid;
1722 youi 1.24
1723 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1724     &sid) == FAILURE) {
1725     return;
1726     }
1727 youi 1.24
1728 aga 1.2 long count = getAccountCount( (sessionid_t)sid );
1729 youi 1.24 RETURN_LONG(count);
1730 aga 1.2 }
1731 aga 1.1
1732 aga 1.5 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1733 youi 1.24 bool xnp_delete_account( int xnp_session_id, int user_id )
1734     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1735     @param user_id xoops_users.uid
1736     @return 0 success
1737 aga 1.5 */
1738 youi 1.21 ZEND_FUNCTION(xnp_delete_account)
1739 aga 1.2 {
1740     long sid, uid;
1741 youi 1.24
1742 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1743     &sid, &uid) == FAILURE) {
1744     return;
1745     }
1746 youi 1.24
1747 aga 1.2 result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1748 youi 1.24
1749     RETURN_LONG(result);
1750 aga 1.2 }
1751 aga 1.1
1752 aga 1.5 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1753 youi 1.24 int xnp_get_account( int xnp_session_id, int user_id, array account_info )
1754     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1755     @param user_id xoops_users.uid
1756     @param account_info ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1757     @return 0 success
1758 aga 1.5 */
1759 youi 1.21 ZEND_FUNCTION(xnp_get_account)
1760 aga 1.2 {
1761     long sid, uid;
1762     zval *zaccount;
1763 youi 1.24
1764 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1765     &sid, &uid, &zaccount) == FAILURE) {
1766 youi 1.24 fprintf( stderr, "error occured " );
1767 aga 1.2 return;
1768     }
1769 youi 1.24
1770 aga 1.2 const account_t *paccount;
1771     result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
1772     if ( RES_OK == result ){
1773     accountToZval( paccount, zaccount );
1774 youi 1.19 freeAccount( paccount );
1775 aga 1.2 }
1776 youi 1.24
1777     RETURN_LONG(result);
1778 aga 1.2 }
1779 aga 1.1
1780 aga 1.5 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1781 youi 1.24 int xnp_get_accoutns( int sid, array uids, array criteria, array accounts );
1782     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1783     @param user_id xoops_users.uid
1784     @param criteria ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1785     @param account_info ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1786     @return 0 success
1787 aga 1.5 */
1788 youi 1.21 ZEND_FUNCTION(xnp_get_accounts)
1789 aga 1.2 {
1790     result_t result;
1791     long sid;
1792     zval *zuids;
1793     zval *zcriteria;
1794     zval *zaccount;
1795 youi 1.24
1796 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1797     &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1798     return;
1799     }
1800 youi 1.24
1801 aga 1.2 zCriteria_t zcri(zcriteria);
1802     result = zcri.getResult();
1803     if ( RES_OK == result ){
1804     zUIDs_t zUIDs(zuids);
1805     result = zUIDs.getResult();
1806     if ( RES_OK == result ){
1807     const account_t *paccounts;
1808     int accountLen;
1809 youi 1.24 result = getAccounts( (sessionid_t)sid,
1810 aga 1.2 zUIDs.getPUID(), zUIDs.getLen(),
1811     &zcri, &paccounts, &accountLen );
1812     if ( RES_OK == result ){
1813     accountsToZval( paccounts, accountLen, zaccount );
1814 youi 1.19 freeAccount( paccounts );
1815 aga 1.2 }
1816     }
1817     }
1818 youi 1.24
1819     RETURN_LONG(result);
1820 aga 1.2 }
1821 aga 1.1
1822 youi 1.17 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1823 youi 1.24 int xnp_insert_account( int sid, array account_info, int &user_id );
1824     @param xnp_session_id xnp ?ス?ス session id
1825     @param account_info ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1826     @param user_id ?ス?ス?ス?ス?ス?スID(xoops_users.uid)?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1827     @return 0 success
1828 aga 1.5 */
1829 youi 1.21 ZEND_FUNCTION(xnp_insert_account)
1830 aga 1.2 {
1831     result_t result;
1832     long sid;
1833     zval *zaccount;
1834 youi 1.17 zval *zuid;
1835 youi 1.24 userid_t uid;
1836    
1837 youi 1.17 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1838     &sid, &zaccount, &zuid) == FAILURE) {
1839 aga 1.2 return;
1840     }
1841 youi 1.24
1842 aga 1.2 zAccount_t zacc(zaccount);
1843     result = zacc.getResult();
1844     if ( RES_OK == result ){
1845 youi 1.17 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1846 aga 1.2 }
1847 youi 1.24 zuid -> type = IS_LONG;
1848     zuid -> value.lval = uid;
1849     RETURN_LONG(result);
1850 aga 1.2 }
1851 aga 1.1
1852 aga 1.5 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1853 youi 1.24 int xnp_update_account( int sid, array account );
1854     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1855     @param account_info ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1856     @return 0 success
1857 aga 1.5 */
1858 youi 1.21 ZEND_FUNCTION(xnp_update_account)
1859 aga 1.2 {
1860     result_t result;
1861     long sid;
1862     zval *zaccount;
1863 youi 1.24
1864 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1865     &sid, &zaccount) == FAILURE) {
1866     return;
1867     }
1868 youi 1.24
1869 aga 1.2 zAccount_t zacc(zaccount);
1870     result = zacc.getResult();
1871     if ( RES_OK == result ){
1872     result = updateAccount( (sessionid_t)sid, &zacc );
1873     }
1874 youi 1.24
1875     RETURN_LONG(result);
1876 aga 1.2 }
1877 aga 1.1
1878 aga 1.5 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1879 youi 1.24 int xnp_dump_uids( int xnp_session_id, array criteria, array uids );
1880     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1881     @param criteria ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1882     @param uids uid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1883     @return 0 success
1884 aga 1.5 */
1885 youi 1.21 ZEND_FUNCTION(xnp_dump_uids)
1886 aga 1.2 {
1887     result_t result;
1888     long sid;
1889     zval *zcriteria;
1890     zval *zuids;
1891 youi 1.24
1892 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1893     &sid, &zcriteria, &zuids) == FAILURE) {
1894     return;
1895     }
1896 youi 1.24
1897 aga 1.2 zCriteria_t zcri(zcriteria);
1898     result = zcri.getResult();
1899     if ( RES_OK == result ){
1900     userid_t *puid;
1901     int uidLen;
1902     result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1903     if ( RES_OK == result ){
1904     uidsToZval( puid, uidLen, &zuids );
1905 youi 1.19 freeUID( puid );
1906 aga 1.2 }
1907     }
1908 youi 1.24
1909     RETURN_LONG(result);
1910 aga 1.2 }
1911 aga 1.1
1912 youi 1.21 /** XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1913 youi 1.24 int xnp_get_group_count( int xnp_session_id );
1914     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1915     @return ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1916 aga 1.5 */
1917 youi 1.21 ZEND_FUNCTION(xnp_get_group_count)
1918 aga 1.1 {
1919 aga 1.2 long sid;
1920 youi 1.24
1921 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1922     &sid) == FAILURE) {
1923     return;
1924     }
1925 youi 1.24
1926 aga 1.2 int count = getGroupCount( (sessionid_t)sid );
1927 youi 1.24
1928     RETURN_LONG(count);
1929 aga 1.2 }
1930 aga 1.1
1931 aga 1.5 /** uid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgid?ス?ス?ス?ス?ス?ス<br>
1932 youi 1.24 int xnp_get_group_by_uid( int xnp_session_id, int uid, array criteria, array gids );
1933     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1934     @param user_id xoops_users.uid
1935     @param criteria ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1936     @param gids gid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1937     @return 0 success
1938 aga 1.5 */
1939 youi 1.21 ZEND_FUNCTION(xnp_get_groups_by_uid)
1940 aga 1.2 {
1941     result_t result;
1942     long sid, uid;
1943     zval *zcriteria;
1944     zval *zgids;
1945 youi 1.24
1946 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1947     &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1948     return;
1949 aga 1.1 }
1950 youi 1.24
1951 aga 1.2 zCriteria_t zcri(zcriteria);
1952     result = zcri.getResult();
1953     if ( RES_OK == result ){
1954     groupid_t *pgids;
1955     int gidLen;
1956     result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1957     if ( RES_OK == result ){
1958     gidsToZval( pgids, gidLen, &zgids );
1959 youi 1.19 freeGID( pgids );
1960 aga 1.2 }
1961 aga 1.1 }
1962 youi 1.24
1963     RETURN_LONG(result);
1964 aga 1.2 }
1965    
1966    
1967 aga 1.5
1968     /** uid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1969 youi 1.24 int xnp_is_group_admin( int sid, int gid, int uid );
1970     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1971     @param group_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1972     @param user_id xoops_users.uid
1973     @return true: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1974     @return false: ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1975 aga 1.5 */
1976 youi 1.21 ZEND_FUNCTION(xnp_is_group_admin)
1977 aga 1.2 {
1978     long sid, gid, uid;
1979 youi 1.24
1980 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1981     &sid, &gid, &uid) == FAILURE) {
1982     return;
1983 aga 1.1 }
1984 youi 1.24
1985 aga 1.2 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1986 youi 1.24
1987     RETURN_BOOL(b);
1988 aga 1.2 }
1989    
1990 aga 1.5 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スgid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
1991 youi 1.24 int xnp_dump_gids( int sid, array criteria, array gids );
1992     @param xnp_session_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
1993     @param criteria ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1994     @param gids gid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
1995     @return 0 success
1996 aga 1.5 */
1997 youi 1.21 ZEND_FUNCTION(xnp_dump_gids)
1998 aga 1.2 {
1999     result_t result;
2000     long sid;
2001     zval *zcriteria;
2002     zval *zgids;
2003 youi 1.24
2004 aga 1.2 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2005     &sid, &zcriteria, &zgids) == FAILURE) {
2006     return;
2007     }
2008 youi 1.24
2009 aga 1.2 zCriteria_t zcri(zcriteria);
2010     result = zcri.getResult();
2011     if ( RES_OK == result ){
2012     groupid_t *pgid;
2013     int gidLen;
2014     result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
2015     if ( RES_OK == result ){
2016     gidsToZval( pgid, gidLen, &zgids );
2017 youi 1.19 freeGID( pgid );
2018 aga 1.1 }
2019     }
2020 youi 1.24
2021     RETURN_LONG(result);
2022 aga 1.1 }
2023 aga 1.8
2024     /** gid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2025 youi 1.24 int xnp_dump_group_admins(int sid, int group_id, array criteria, array uids )
2026     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2027     @param group_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2028     @param criteria ?ス?ス?ス?ス
2029     @param uids uid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2030     @return 0 success
2031 aga 1.8 */
2032    
2033 youi 1.21 ZEND_FUNCTION(xnp_dump_group_admins)
2034 aga 1.8 {
2035     long sid, gid;
2036     zval *zcriteria;
2037     zval *zuids;
2038 youi 1.24
2039     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2040     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2041 aga 1.8 return;
2042     }
2043 youi 1.24
2044 aga 1.8 zCriteria_t zcri(zcriteria);
2045     result_t result = zcri.getResult();
2046     if ( result == RES_OK ){
2047     userid_t *uids;
2048     int uidsLen;
2049     result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
2050     if ( result == RES_OK ){
2051     uidsToZval( uids, uidsLen, &zuids );
2052 youi 1.19 freeUID( uids );
2053 aga 1.8 }
2054     }
2055     RETURN_LONG( result );
2056     }
2057    
2058 aga 1.11 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2059 youi 1.24 int xnp_delete_member(int sid, int group_id, int user_id )
2060     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2061     @param group_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2062     @param user_id ?ス?ス?ス?ス?ス?スID
2063     @return 0 success
2064 aga 1.11 */
2065    
2066 youi 1.21 ZEND_FUNCTION(xnp_delete_member)
2067 aga 1.11 {
2068     long sid, gid, uid;
2069 youi 1.24
2070     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2071     &sid, &gid, &uid) == FAILURE) {
2072 aga 1.11 return;
2073     }
2074 youi 1.24
2075 aga 1.11 result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
2076     RETURN_LONG( result );
2077     }
2078    
2079     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2080 youi 1.24 int xnp_insert_member(int sid, int group_id, int user_id, bool admin )
2081     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2082     @param group_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2083     @param user_id ?ス?ス?ス?ス?ス?スID
2084     @param admin ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スtrue
2085     @return 0 success
2086 aga 1.11 */
2087    
2088 youi 1.21 ZEND_FUNCTION(xnp_insert_member)
2089 aga 1.11 {
2090     long sid, gid, uid;
2091     zend_bool admin;
2092 youi 1.24
2093     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
2094     &sid, &gid, &uid, &admin) == FAILURE) {
2095 aga 1.11 return;
2096     }
2097 youi 1.24
2098 aga 1.11 result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
2099     RETURN_LONG( result );
2100     }
2101    
2102     /** gid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スuid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2103 youi 1.24 int xnp_get_members(int sid, int group_id, array criteria, array uids )
2104     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2105     @param group_id XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2106     @param criteria ?ス?ス?ス?ス
2107     @param uids uid?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2108     @return 0 success
2109 aga 1.11 */
2110    
2111 youi 1.21 ZEND_FUNCTION(xnp_get_members)
2112 aga 1.11 {
2113     long sid, gid;
2114     zval *zcriteria;
2115     zval *zuids;
2116 youi 1.24
2117     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2118     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2119 aga 1.11 return;
2120     }
2121 youi 1.24
2122 aga 1.11 zCriteria_t zcri(zcriteria);
2123     result_t result = zcri.getResult();
2124     if ( result == RES_OK ){
2125     userid_t *uids;
2126     int uidsLen;
2127     result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
2128     if ( result == RES_OK ){
2129     uidsToZval( uids, uidsLen, &zuids );
2130 youi 1.19 freeUID( uids );
2131 aga 1.11 }
2132     }
2133     RETURN_LONG( result );
2134     }
2135 youi 1.7
2136     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2137 youi 1.24 int xnp_update_group(int sid, array group )
2138     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2139     @param group ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2140     @return 0 success
2141 youi 1.7 */
2142 youi 1.21 ZEND_FUNCTION(xnp_update_group)
2143 youi 1.7 {
2144     long sid;
2145     zval *zgroup;
2146 youi 1.24 group_t group;
2147    
2148     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2149     &sid, &zgroup) == FAILURE) {
2150 youi 1.7 return;
2151     }
2152 youi 1.24
2153     zvalToGroup( zgroup, &group );
2154     result_t result = updateGroup( sid, &group );
2155     RETURN_LONG( result );
2156 aga 1.10 }
2157    
2158 youi 1.12 /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2159 youi 1.24 int xnp_insert_group( int sid, array group, int &gid )
2160     @param sid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2161     @param group ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2162     @param gid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2163     @return RES_OK
2164     @return RES_DB_NOT_INITIALIZED
2165     @return RES_NO_SUCH_SESSION
2166     @return RES_DB_QUERY_ERROR
2167 youi 1.12 */
2168 youi 1.21 ZEND_FUNCTION(xnp_insert_group)
2169 youi 1.12 {
2170     long sid;
2171     zval *zgroup;
2172 youi 1.24 zval *zgid;
2173     group_t group;
2174     groupid_t gid;
2175    
2176     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2177     &sid, &zgroup, &zgid ) == FAILURE) {
2178 youi 1.12 return;
2179     }
2180 youi 1.24
2181     zvalToGroup( zgroup, &group );
2182     result_t result = insertGroup( sid, &group, &gid );
2183     zgid -> type = IS_LONG;
2184     zgid -> value.lval = gid;
2185     RETURN_LONG( result );
2186 youi 1.12 }
2187    
2188    
2189     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2190 youi 1.24 int xnp_delete_group( int sid, int gid )
2191     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2192     @param gid ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2193     @return RES_OK
2194     @return RES_DB_QUERY_ERROR
2195     @return RES_NO_SUCH_SESSION
2196     @return RES_DB_NOT_INITIALIZED
2197 youi 1.12 */
2198 youi 1.21 ZEND_FUNCTION(xnp_delete_group)
2199 youi 1.12 {
2200     long sid;
2201     long gid;
2202 youi 1.24
2203     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2204     &sid, &gid) == FAILURE) {
2205 youi 1.12 return;
2206     }
2207 youi 1.24 RETURN_LONG( deleteGroup( sid, gid ) );
2208 youi 1.12 }
2209    
2210     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2211 youi 1.24 int xnp_dump_group_admins( int sid, int gid, array criteria, array uids )
2212     @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2213     @param gid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2214     @param criteria uids?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2215     @param uids ?ス?ス?ス?ス?ス?ス?ス?スUID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2216     @return RES_OK
2217     @return RES_DB_QUERY_ERROR
2218     @return RES_NO_SUCH_SESSION
2219     @return RES_DB_NOT_INITIALIZED
2220 youi 1.12 */
2221     /*
2222 youi 1.21 ZEND_FUNCTION(xnp_dump_group_admins)
2223 youi 1.12 {
2224     long sid;
2225     long gid;
2226     zval *zcriteria;
2227     zval *zuids;
2228 youi 1.24
2229     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2230     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2231 youi 1.12 return;
2232     }
2233     zCriteria_t zcri(zcriteria);
2234     result_t result = zcri.getResult();
2235     if ( RES_OK == result ){
2236 youi 1.24 userid_t* uids;
2237     int uidsLen;
2238     result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
2239     if( result != RES_OK ) RETURN_LONG( result );
2240     uidsToZval( uids, uidsLen, &zuids );
2241     fprintf( stderr, "uidsLen=%d\n", uidsLen );
2242     for( int i = 0; i < uidsLen; i++ ){
2243     fprintf( stderr, "%d, \n", uids[ i ] );
2244     }
2245     freeUID( uids );
2246     RETURN_LONG( result );
2247     }
2248     RETURN_LONG( result );
2249 youi 1.12 }
2250     */
2251 aga 1.22
2252     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2253     * int xnp_get_all_indexes( int sid, array criteria, array indexes );
2254     * @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2255     * @param cri ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2256     * @return RES_OK
2257     */
2258     ZEND_FUNCTION(xnp_get_all_indexes)
2259     {
2260     long sid;
2261     zval *zcriteria;
2262     zval *zindexes;
2263 youi 1.24
2264     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2265     &sid, &zcriteria, &zindexes) == FAILURE) {
2266 aga 1.22 return;
2267     }
2268     zCriteria_t zcri(zcriteria);
2269     result_t result = zcri.getResult();
2270     if ( RES_OK == result ){
2271     const index_t *indexes;
2272     int indexesLen;
2273     result = getAllIndexes( sid, &zcri, &indexes, &indexesLen );
2274     if ( RES_OK == result ){
2275     result = indexesToZval( indexes, indexesLen, zindexes );
2276     freeIndex( indexes );
2277     }
2278     }
2279     RETURN_LONG(result);
2280     }
2281    
2282     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2283     * int xnp_get_indexes( int sid, int parentXID, array criteria, array indexes );
2284     * @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2285     * @param parentXID ?ス?ス?ス?スindexID
2286     * @param cri ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2287     * @param indexes ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2288     * @return RES_OK
2289     */
2290     ZEND_FUNCTION(xnp_get_indexes)
2291     {
2292     long sid;
2293     long parentXID;
2294     zval *zcriteria;
2295     zval *zindexes;
2296 youi 1.24
2297     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2298     &sid, &parentXID, &zcriteria, &zindexes) == FAILURE) {
2299 aga 1.22 return;
2300     }
2301     zCriteria_t zcri(zcriteria);
2302     result_t result = zcri.getResult();
2303     if ( RES_OK == result ){
2304     const index_t *indexes;
2305     int indexesLen;
2306     result = getIndexes( sid, parentXID, &zcri, &indexes, &indexesLen );
2307     if ( RES_OK == result ){
2308     result = indexesToZval( indexes, indexesLen, zindexes );
2309     freeIndex( indexes );
2310     }
2311     }
2312     RETURN_LONG(result);
2313     }
2314    
2315    
2316     /** ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス<br>
2317     * int xnp_insert_index( int sid, array index, int &indexID );
2318     * @param sid XNP?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID
2319     * @param index ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2320     * @param indexID ?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スID?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス
2321     * @return RES_OK
2322     */
2323     ZEND_FUNCTION(xnp_insert_index)
2324     {
2325     long sid;
2326     zval *zindex;
2327     zval *zIndexID;
2328 youi 1.24
2329     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2330     &sid, &zindex, &zIndexID) == FAILURE) {
2331 aga 1.22 return;
2332     }
2333 youi 1.24
2334 aga 1.22 if (!PZVAL_IS_REF(zIndexID)) {
2335     zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
2336     RETURN_LONG(RES_PHP_NONREF);
2337     }
2338     zIndex_t index( zindex );
2339     indexid_t xid;
2340     result_t result = insertIndex( sid, &index, &xid );
2341     if ( RES_OK == result )