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.45 - (hide annotations) (download) (as text)
Wed Jul 6 10:53:08 2005 UTC (18 years, 9 months ago) by orrisroot
Branch: MAIN
Changes since 1.44: +2 -2 lines
File MIME type: text/x-c++src
changed module name from 'Visiome Platform Abstract Layer' to 'XooNIps Abstract Layer'.

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