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.12 - (hide annotations) (download) (as text)
Wed Dec 1 02:26:39 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.11: +105 -16 lines
File MIME type: text/x-c++src
vp_insert_group, vp_delete_groupを定義.

1 aga 1.1 /*
2     VPAL: Visiome Platform Abstract Layer
3    
4     zend_parse_parameters??hp4.1.0??綽?荀?
5     .so???<?ゃ?????????荀????????贋????舟??鴻????
6     C++?с????extern "C"{}, BEGIN/END_EXTERN_C()??綽?荀???
7     */
8    
9    
10     #include <stdio.h>
11 aga 1.2 #include "criteria.h"
12     #include "common.h"
13     #include "commonal.h"
14     #include "session.h"
15     #include "group.h"
16     #include "account.h"
17 aga 1.1 #include "vpal.h"
18    
19 aga 1.2 // for inet_aton
20     #include <sys/socket.h>
21     #include <netinet/in.h>
22     #include <arpa/inet.h>
23    
24 aga 1.1 // global variables
25     MYSQL *mysql = NULL;
26    
27    
28     /* declaration of functions to be exported */
29     extern "C" {
30 aga 1.2 ZEND_FUNCTION(first_module );
31     ZEND_FUNCTION(vp_initialize_db );
32     ZEND_FUNCTION(vp_login_user );
33     ZEND_FUNCTION(vp_logout_user );
34 aga 1.4 ZEND_FUNCTION(vp_create_session );
35     ZEND_FUNCTION(vp_get_session );
36 aga 1.2 ZEND_FUNCTION(vp_is_activated );
37     ZEND_FUNCTION(vp_activate );
38     ZEND_FUNCTION(vp_get_account_count );
39     ZEND_FUNCTION(vp_delete_account );
40     ZEND_FUNCTION(vp_get_account );
41     ZEND_FUNCTION(vp_get_accounts );
42     ZEND_FUNCTION(vp_insert_account );
43     ZEND_FUNCTION(vp_update_account );
44     ZEND_FUNCTION(vp_dump_uids );
45     ZEND_FUNCTION(vp_get_group_count );
46     ZEND_FUNCTION(vp_get_groups_by_uid );
47     ZEND_FUNCTION(vp_is_group_admin );
48     ZEND_FUNCTION(vp_dump_gids );
49 aga 1.8 ZEND_FUNCTION(vp_dump_group_admins );
50 youi 1.12 /*
51 aga 1.2 ZEND_FUNCTION(vp_delete_member );
52     ZEND_FUNCTION(vp_insert_member );
53     ZEND_FUNCTION(vp_get_members );
54 youi 1.12 */
55 aga 1.2 ZEND_FUNCTION(vp_delete_group );
56     ZEND_FUNCTION(vp_insert_group );
57     ZEND_FUNCTION(vp_update_group );
58     ZEND_FUNCTION(vp_get_group );
59     ZEND_FUNCTION(vp_get_groups );
60     ZEND_FUNCTION(vp_is_moderator );
61     ZEND_FUNCTION(vp_get_uid );
62    
63 aga 1.10 ZEND_FUNCTION(vp_is_valid_session_id );
64 aga 1.9 ZEND_FUNCTION(vp_get_last_error_string );
65    
66 aga 1.2 ZEND_FUNCTION(vp_test_criteria );
67     ZEND_FUNCTION(vp_test_uids );
68 aga 1.1 };
69     /* compiled function list so Zend knows what's in this module */
70     zend_function_entry vpalmod_functions[] =
71     {
72 aga 1.2 ZEND_FE(first_module ,NULL)
73     ZEND_FE(vp_initialize_db ,NULL)
74     ZEND_FE(vp_login_user ,NULL)
75     ZEND_FE(vp_logout_user ,NULL)
76 aga 1.4 ZEND_FE(vp_create_session ,NULL)
77     ZEND_FE(vp_get_session ,NULL)
78 aga 1.2 ZEND_FE(vp_is_activated ,NULL)
79     ZEND_FE(vp_activate ,NULL)
80     ZEND_FE(vp_get_account_count ,NULL)
81     ZEND_FE(vp_delete_account ,NULL)
82     ZEND_FE(vp_get_account ,NULL)
83     ZEND_FE(vp_get_accounts ,NULL)
84     ZEND_FE(vp_insert_account ,NULL)
85     ZEND_FE(vp_update_account ,NULL)
86     ZEND_FE(vp_dump_uids ,NULL)
87     ZEND_FE(vp_get_group_count ,NULL)
88     ZEND_FE(vp_get_groups_by_uid ,NULL)
89     ZEND_FE(vp_is_group_admin ,NULL)
90     ZEND_FE(vp_dump_gids ,NULL)
91 aga 1.8 ZEND_FE(vp_dump_group_admins ,NULL)
92 youi 1.12 /*
93 aga 1.2 ZEND_FE(vp_delete_member ,NULL)
94     ZEND_FE(vp_insert_member ,NULL)
95     ZEND_FE(vp_get_members ,NULL)
96 youi 1.12 */
97 aga 1.2 ZEND_FE(vp_delete_group ,NULL)
98     ZEND_FE(vp_insert_group ,NULL)
99     ZEND_FE(vp_update_group ,NULL)
100     ZEND_FE(vp_get_group ,NULL)
101     ZEND_FE(vp_get_groups ,NULL)
102     ZEND_FE(vp_is_moderator ,NULL)
103     ZEND_FE(vp_get_uid ,NULL)
104 aga 1.10 ZEND_FE(vp_is_valid_session_id ,NULL)
105 aga 1.9 ZEND_FE(vp_get_last_error_string ,NULL)
106 aga 1.2 ZEND_FE(vp_test_criteria ,NULL)
107     ZEND_FE(vp_test_uids ,NULL)
108 aga 1.1 {NULL, NULL, NULL}
109     };
110    
111     /* compiled module information */
112     zend_module_entry vpalmod_module_entry =
113     {
114     STANDARD_MODULE_HEADER,
115     "Visiome Platform Abstract Layer",
116     vpalmod_functions,
117     NULL,
118     NULL,
119     NULL,
120     NULL,
121     NULL,
122     NO_VERSION_YET,
123     STANDARD_MODULE_PROPERTIES
124     };
125    
126     /* implement standard "stub" routine to introduce ourselves to Zend */
127     #if COMPILE_DL_FIRST_MODULE
128     BEGIN_EXTERN_C()
129     ZEND_GET_MODULE(vpalmod)
130     END_EXTERN_C()
131     #endif
132    
133     /* implement function that is meant to be made available to PHP */
134     ZEND_FUNCTION(first_module)
135     {
136     long parameter;
137     // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
138     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
139     return;
140     }
141     parameter++;
142     RETURN_LONG(parameter);
143     }
144     /** zval????C????絖?????緇?????
145     */
146     char *getZvalString( zval **p ){
147     convert_to_string_ex(p);
148     return Z_STRVAL_PP(p); //(**p).value.str.val;
149     }
150    
151     /** zval????int??緇?????
152     */
153     int getZvalInt( zval **p ){
154     convert_to_long_ex(p);
155     return Z_LVAL_PP(p); // (int)(**p).value.lval;
156     }
157    
158 aga 1.2 // keylen????鮎??0????????
159     static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
160     zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
161     if ( res == HASH_KEY_IS_STRING ){
162     char *p = new char[keyLen+1];
163     memcpy( p, key, keyLen );
164     p[keyLen] = 0;
165     zend_printf( " key is string[%s]<br>\n", p );
166     }
167     else {
168     zend_printf( " key is integer[%d]<br>\n", index );
169     }
170     }
171    
172    
173     /** zval**????criteria_t?????????????????????鴻??????紊掩??????getResult()!=RES_OK
174     * criteria :
175     array( 'start'=>0, 'rows'=>10,
176     'orders'=>array(
177     array('name'=>'id','order'=>'0'),
178     array('name'=>'timestamp','name'=>'1'), ...)
179     ); ??????就???f?渇????
180     */
181     class zCriteria_t : public criteria {
182     private:
183     result_t result;
184     public:
185     // pz: array('name'=>'timestamp','name'=>'1')
186     // ????????orderby??篏???????申????
187     void setOrder( zval *pz ){
188     char *column = 0;
189     order_t order = (order_t)0;
190    
191     HashPosition pos;
192     zval **ppzTmp = 0;
193     int res2;
194     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
195     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
196     char *key = 0;
197     uint keyLen = 0;
198     ulong index = 0;
199     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
200     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
201     print_hash_key( keyType, key, keyLen, index );
202     if ( strncasecmp( key, "column", keyLen ) == 0 && keyLen == 7 ){
203     SEPARATE_ZVAL(ppzTmp);
204     column = getZvalString(ppzTmp);
205     // zend_printf( "column=%s<br>\n", column );
206     }
207     else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
208     SEPARATE_ZVAL(ppzTmp);
209     order = (order_t)getZvalInt(ppzTmp);
210     // zend_printf( "order=%d<br>\n", order );
211     }
212     }
213    
214     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
215     }
216     if ( column ){
217     orderby *o = new orderby( column, order );
218     addOrderBy( o );
219     }
220    
221     result = RES_OK;
222     }
223    
224     // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
225     void setOrders( zval *pz ){
226     HashPosition pos;
227    
228     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
229    
230     zval **ppzTmp = 0;
231     int res2;
232     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
233     char *key = 0;
234     uint keyLen = 0;
235     ulong index = 0;
236     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
237     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
238     print_hash_key( keyType, key, keyLen, index );
239     setOrder( *ppzTmp );
240     }
241     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
242     }
243     result = RES_OK;
244     }
245    
246     void initialize( zval *pz ){
247     HashPosition pos;
248     zval **ppzTmp = 0;
249     int res2;
250     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
251     while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
252     char *key = 0;
253     uint keyLen = 0;
254     ulong index = 0;
255     int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
256     if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
257     print_hash_key( keyType, key, keyLen, index );
258     if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
259     SEPARATE_ZVAL(ppzTmp);
260     int tmp = getZvalInt(ppzTmp);
261     // zend_printf( "start=%d<br>\n", tmp );
262     setLimit( tmp, getLimitRows() );
263     }
264     else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
265     SEPARATE_ZVAL(ppzTmp);
266     int tmp = getZvalInt(ppzTmp);
267     // zend_printf( "rows=%d<br>\n", tmp );
268     setLimit( getLimitStart(), tmp );
269     }
270     else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
271     setOrders( *ppzTmp );
272     }
273     else
274     ; // ignore unknown key
275     }
276     else
277     ; // ignore bad key
278     zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
279     }
280     result = RES_OK;
281     }
282     zCriteria_t() : criteria(){ result = RES_ERROR; }
283     zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
284     zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
285     result_t getResult(){ return result; };
286    
287     void dump(){
288     zend_printf( "dumping zCriteria...<br>\n" );
289     zend_printf( "result=%d<br>\n", (int)result );
290     zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
291     const orderby *p = headOrderBy();
292     while ( p ){
293     zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
294     p = nextOrderBy();
295     }
296     }
297     };
298    
299    
300     class zAccount_t : public account {
301     private:
302     result_t result;
303     public:
304     void initialize(zval *pz){
305     ; // todo
306     }
307     zAccount_t() : account(){ result = RES_ERROR; }
308     zAccount_t( zval *pz ) : account(){ initialize(pz); }
309     zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
310     result_t getResult(){ return result; };
311     };
312    
313     /** zval**????(userid_t *puid,int uidLen)?????????????????????鴻??????紊掩??????getResult()!=RES_OK
314     uids : array( '1', '3', '4', '6', ... ); ??????就??????
315     */
316     class zUIDs_t {
317     private:
318     result_t result;
319     userid_t *pUID;
320     int len;
321     public:
322     zUIDs_t(){
323     pUID = 0;
324     len = 0;
325     result = RES_ERROR;
326     }
327    
328     zUIDs_t( zval *pza ){
329     pUID = 0;
330     len = 0;
331     result = RES_ERROR;
332    
333     if ( Z_TYPE_P(pza) != IS_ARRAY ){
334     result = RES_ERROR;
335     }
336     else {
337     len = zend_hash_num_elements(Z_ARRVAL_P(pza));
338     if(len == 0) {
339     pUID = new userid_t[1];
340     result = RES_OK;
341     }
342     else {
343     /* php/ext/standard/string.c ? implode??????????????????
344     zend_hash_*???????ャ?<?潟???c????????????????鐚?
345     */
346     zval **tmp;
347     HashPosition pos;
348     int i = 0;
349     pUID = new userid_t[len];
350    
351     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
352     while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
353     SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html ????/span>
354     convert_to_long_ex(tmp);
355     if ( i < len )
356     pUID[i++] = Z_LVAL_PP(tmp);
357     zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
358     }
359     len = i;
360     result = RES_OK;
361     }
362     }
363     }
364    
365     ~zUIDs_t(){
366     if ( pUID ) delete[] pUID;
367     }
368     result_t getResult(){ return result; }
369     userid_t *getPUID(){ return pUID; }
370     int getLen(){ return len; }
371     void dump(){
372     zend_printf( "dumping zUIDs...<br>\n" );
373     zend_printf( "result=%d<br>\n", (int)result );
374     zend_printf( "len=%d<br>\n", len );
375     for ( int i = 0; i < len; i++ ){
376     zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
377     }
378     }
379     };
380    
381 aga 1.8 /**
382     *
383     * uids_t????????PHP???????????????
384     *
385     * @param pUID 紊?????????serid_t??????
386     * @param len pUID?????????激??
387     * @param pz 紊???腟??????吾??莨若??????(??????羝??帥?с????????
388     * @return RES_OK
389     *
390     */
391 aga 1.4 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
392     {
393 aga 1.8 zend_hash_clean( Z_ARRVAL_PP(ppz) );
394 aga 1.2
395     // add UIDs
396     for ( int i = 0; i < len; i++ ){
397 aga 1.8 add_next_index_long(*ppz, (long)(pUID[i]) );
398 aga 1.2 }
399    
400     return RES_OK;
401     }
402 aga 1.8 /** groupid_t ?? zval
403 aga 1.2 */
404 aga 1.4 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
405     {
406 aga 1.8 zend_hash_clean( Z_ARRVAL_PP(ppz) );
407 aga 1.2
408     // add GIDs
409     for ( int i = 0; i < len; i++ ){
410 aga 1.8 add_next_index_long(*ppz, (long)(pGID[i]) );
411 aga 1.2 }
412    
413     return RES_OK;
414     }
415    
416 youi 1.6 result_t accountToZval( const account_t *pAccount, zval *z )
417     {
418     zend_hash_clean( z -> value.ht );
419    
420 youi 1.7 add_assoc_long( z, "uid", pAccount -> getUID( ) );
421 youi 1.6 add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
422     add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
423     add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
424     add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
425     add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
426     add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
427     add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
428     add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
429     add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
430     add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
431     add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
432     add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
433     add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
434     add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
435     add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
436     add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
437     add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
438     add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
439     add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
440     add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
441     add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
442     add_assoc_long( z, "level", pAccount -> getLevel( ) );
443     add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
444     add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
445     add_assoc_long( z, "posts", pAccount -> getPosts( ) );
446     add_assoc_long( z, "rank", pAccount -> getRank( ) );
447     add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
448     add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
449     add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
450     add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
451    
452     add_assoc_long( z, "activate", pAccount -> getActivate( ) );
453     add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
454     add_assoc_string( z, "institute", ( char* )pAccount -> getInstitute( ), 1 );
455     add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
456     add_assoc_string( z, "organization", ( char* )pAccount -> getOrganization( ), 1 );
457     add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
458     add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
459     add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
460     add_assoc_string( z, "base_url", ( char* )pAccount -> getBaseURL( ), 1 );
461     add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
462     add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
463     return RES_OK;
464     }
465    
466 aga 1.2 /** accounts ?? zval
467     * accounts: ????????????????
468     array(
469     array(
470     'uid'=>100,
471     'activate'=>1,
472     'institute'=>'foo',
473     'tel'=>'123-456-789',
474     ...
475     ),
476     ...
477     )
478     */
479 youi 1.6 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
480 aga 1.4 {
481 youi 1.6 zend_hash_clean( z -> value.ht );
482     for( int i = 0; i < accountsLen; i++ ){
483     zval *new_array;
484     MAKE_STD_ZVAL(new_array);
485     if(array_init(new_array) != SUCCESS){
486     return RES_ERROR;
487     }
488     add_index_zval( z, i, new_array );
489     accountToZval( &pAccounts[ i ], new_array );
490     }
491     return RES_OK;
492 aga 1.2 }
493    
494 youi 1.6 /** groups ?? zval
495     */
496     result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
497 aga 1.4 {
498 youi 1.6 zend_hash_clean( z -> value.ht );
499     for( int i = 0; i < groupsLen; i++ ){
500     zval *new_array;
501     MAKE_STD_ZVAL(new_array);
502     if(array_init(new_array) != SUCCESS){
503     return RES_ERROR;
504     }
505     add_index_zval( z, i, new_array );
506     add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
507     add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
508     add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
509     }
510     return RES_OK;
511 aga 1.2 }
512    
513 youi 1.7 /**
514     *
515     * group_t????絎鴻??PHP???f?渇?????????????
516     *
517     * @param pGroup 紊??????????違???若??????/span>
518     * @param z 紊???腟??????吾??莨若???f?渇????(??????羝??帥?с????????
519     * @return RES_OK
520     *
521     */
522     result_t groupToZval( const group_t *pGroup, zval *z )
523 youi 1.6 {
524     zend_hash_clean( z -> value.ht );
525     add_assoc_long( z, "gid", pGroup -> getGID( ) );
526     add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
527     add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
528     return RES_OK;
529     }
530    
531 youi 1.7 /** zval ?? group
532     */
533     result_t zvalToGroup( zval *z, group_t *pGroup )
534     {
535     zval **tmp;
536     HashPosition pos;
537     int i = 0;
538     char* key = 0;
539    
540     key = "gid";
541 youi 1.12 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
542     convert_to_long_ex( tmp ) ;
543     pGroup -> setGID( (*tmp) -> value.lval );
544     }
545 youi 1.7 key = "gname";
546 youi 1.12 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
547     convert_to_string_ex( tmp ) ;
548     pGroup -> setGname( (*tmp) -> value.str.val );
549     }
550 youi 1.7 key = "gdesc";
551 youi 1.12 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
552     convert_to_string_ex( tmp ) ;
553     pGroup -> setDesc( (*tmp) -> value.str.val );
554     }
555 youi 1.7 return RES_OK;
556     }
557    
558    
559 youi 1.6 // int vp_get_group( int sid, int gid, array group );
560     ZEND_FUNCTION(vp_get_group)
561 aga 1.4 {
562 youi 1.6 long sid, gid;
563     zval *zgroup;
564    
565     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
566     &sid, &gid, &zgroup) == FAILURE) {
567     return;
568     }
569    
570     const group_t *pgroup;
571     result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
572     if ( RES_OK == result ){
573 youi 1.7 groupToZval( pgroup, zgroup );
574 youi 1.6 freeResult( pgroup );
575     }
576    
577     RETURN_LONG(result);
578     }
579    
580 aga 1.2
581 youi 1.6 // int vp_get_groups( int sid, array gids, array criteria, array groups );
582     ZEND_FUNCTION(vp_get_groups)
583     {
584     result_t result;
585     long sid, uid;
586     zval *zcriteria;
587     zval *zgids;
588     zval *zgroups;
589     zval **ppzTmp = 0;
590     HashPosition pos;
591     int res2;
592     int gidsLen;
593     const group_t* groups;
594     int groupsLen;
595    
596     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
597     &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
598     return;
599     }
600    
601     //gids???違???若??ID???潟???若????
602     gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
603     groupid_t *gids = new groupid_t[ gidsLen ];
604     zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
605     for( int i = 0; i < gidsLen; i++ ){
606     if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
607     SEPARATE_ZVAL(ppzTmp);
608     convert_to_long_ex(ppzTmp);
609     gids[ i ] = Z_LVAL_PP(ppzTmp);
610     }
611     zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
612     }
613    
614     zCriteria_t zcri(zcriteria);
615     result = zcri.getResult();
616     if ( RES_OK == result ){
617     result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
618     if ( RES_OK == result ){
619     delete[] gids;
620     freeResult( groups );
621     }
622     }
623     groupsToZval( groups, groupsLen, zgroups );
624     RETURN_LONG(result);
625     }
626    
627    
628     // int vp_is_moderator(string uname)
629     ZEND_FUNCTION(vp_is_moderator)
630     {
631     long vpSessionID;
632     userid_t uid;
633    
634     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
635     &vpSessionID, &uid) == FAILURE) {
636     return;
637     }
638    
639     bool result = isModerator( (sessionid_t)vpSessionID, uid );
640     RETURN_BOOL(result)
641     }
642    
643     // int vp_get_uid(string uname)
644     ZEND_FUNCTION(vp_get_uid)
645     {
646     char *uname;
647     int unameLen;
648     userid_t uid;
649    
650     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
651     &uname, &unameLen) == FAILURE) {
652     return;
653     }
654    
655     string strUname( uname, unameLen );
656     result_t result = getUid( strUname.c_str(), &uid );
657     if ( result == RES_OK ){
658     RETURN_LONG((long)uid);
659     }
660     else {
661     //zend_printf( "vpal_debug: vp_get_uid(%s): result=%d<br>\n", strUname.c_str(),(int)result );
662     RETURN_FALSE
663     }
664 aga 1.2 }
665    
666 aga 1.4 /** session ?? zval
667     */
668     result_t sessionToZval( const session_t *pSession, zval *z )
669     {
670     string sessionID(unsignedIntToString(pSession->getSessionID()));
671     add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
672    
673     string date(unsignedIntToString((unsigned int)pSession->getDate()));
674     add_assoc_string(z, "date", (char *)date.c_str(), 1);
675    
676     string userID(unsignedIntToString((unsigned int)pSession->getUserID()));
677     add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
678    
679     return RES_OK;
680     }
681    
682 aga 1.2 ZEND_FUNCTION(vp_test_criteria)
683     {
684     zval *z;
685    
686     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
687     &z) == FAILURE) {
688     return;
689     }
690     zend_printf("zend_printf...<br>\n");
691     zCriteria_t zcri(z);
692     zcri.dump();
693     RETURN_FALSE
694     }
695    
696     ZEND_FUNCTION(vp_test_uids)
697     {
698     zval *z;
699    
700     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
701     &z) == FAILURE) {
702     return;
703     }
704     zend_printf("zend_printf...<br>\n");
705     zUIDs_t zuids(z);
706     zuids.dump();
707     RETURN_FALSE
708     }
709    
710    
711    
712 aga 1.4 /** DB??・膓????????≪??・膓?筝???・膓???????????????<br>
713     int initialize_db( string host[, string user[, string password[, string dbname[, string prefix]]]] );
714 aga 1.2 @param host ?ョ????????ユ????ULL
715 aga 1.1 @param user DB?ョ????????若?九???????ユ????ULL
716     @param password DB?ョ????????鴻???若???????ユ????ULL
717 aga 1.2 @param dbname DB?ョ?????B???????ユ????quot;"
718     @param prefix XOOPS DB ??refix??
719 aga 1.1 @return 0 success <br>
720     */
721     ZEND_FUNCTION(vp_initialize_db)
722     {
723     zval **parameters[5];
724     char *host;
725     char *user;
726 aga 1.2 char *password;
727     char *dbname;
728     char *prefix;
729 aga 1.1
730     /* get the number of arguments */
731     int argNum = ZEND_NUM_ARGS();
732     if (argNum > 5)
733     WRONG_PARAM_COUNT;
734    
735     /* argument count is correct, now retrieve arguments */
736     if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
737     WRONG_PARAM_COUNT;
738    
739 aga 1.2 if (argNum < 1) host = NULL;
740 aga 1.1 else host = getZvalString( parameters[0] );
741    
742     if (argNum < 2) user = NULL;
743     else user = getZvalString( parameters[1] );
744    
745 aga 1.2 if (argNum < 3) password = NULL;
746     else password = getZvalString( parameters[2] );
747 aga 1.1
748 aga 1.2 if (argNum < 4) dbname = "";
749     else dbname = getZvalString( parameters[3] );
750 aga 1.1
751 aga 1.2 if (argNum < 5) prefix = "";
752     else prefix = getZvalString( parameters[4] );
753 aga 1.1
754 aga 1.2 result_t result = initializeDB( host, user, password, dbname, prefix );
755 aga 1.1
756 aga 1.2 RETURN_LONG(result);
757 aga 1.1 }
758    
759 aga 1.4 /** ???違?ゃ?潟??????<br>
760     int vp_login_user(string uname, string password)
761     @param uname ???若?九??(xoops_users.uname)
762     @param password ???鴻???若??(md5(password)=xoops_users.pass)
763     @return 0 success
764     */
765 aga 1.1 ZEND_FUNCTION(vp_login_user)
766     {
767     char *uname;
768     int unameLen;
769     char *passwd;
770     int passwdLen;
771    
772     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
773     &uname, &unameLen, &passwd, &passwdLen) == FAILURE) {
774     return;
775     }
776    
777 aga 1.4 sessionid_t vpSessionID;
778 aga 1.5 result_t result = loginUser( uname, passwd, &vpSessionID );
779 aga 1.2 if ( result == RES_OK ){
780 aga 1.4 RETURN_LONG((long)vpSessionID);
781 aga 1.2 }
782     else {
783     //zend_printf( "vpal_debug: vp_login_user(%s, %s): cannot login. result=%d<br>\n", strUname.c_str(), strPasswd.c_str(), (int)result );
784     RETURN_FALSE
785     }
786 aga 1.1 }
787    
788 aga 1.4 /** ???違?≪??????????<br>
789     void vp_logout_user(int vp_session_id)
790     @param vp_session_id vp??essionid
791     @return ????
792     */
793 aga 1.1 ZEND_FUNCTION(vp_logout_user)
794     {
795 aga 1.4 long vpSessionID;
796 aga 1.1
797 aga 1.4 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &vpSessionID) == FAILURE) {
798 aga 1.1 return;
799     }
800 aga 1.4 logoutUser( (sessionid_t)vpSessionID );
801 aga 1.1
802     RETURN_NULL();
803     }
804    
805 aga 1.4 /** vp ? session id 篏???<br>
806     int vp_create_session( string xoops_sess_id, int uid, string remote_host )
807     @param xoops_sess_id xoops??ession id
808     @param uid xoops ? uid (xoops_users.uid)
809     @return FALSE篁ュ?: vp ? session id
810     @return FALSE: 紊掩??
811     */
812 aga 1.2 ZEND_FUNCTION(vp_create_session)
813     {
814     char *xoopsSessionID;
815     int xoopsSessionIDLen;
816 aga 1.5 long uid;
817 aga 1.2
818 aga 1.3 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl",
819     &xoopsSessionID, &xoopsSessionIDLen, &uid) == FAILURE) {
820 aga 1.2 return;
821     }
822    
823 aga 1.4 sessionid_t vpSessionID = 0;
824     result_t result = createSession( xoopsSessionID, (userid_t)uid, &vpSessionID );
825     if ( result == RES_OK ){
826     RETURN_LONG((long)vpSessionID);
827     }
828     else {
829     RETURN_FALSE;
830     }
831     }
832    
833     /** vp ? session ???膣井???宴??緇???<br>
834     int vp_get_session( int vp_session_id, array session_info )
835     @param vp_session_id vp ? session id
836     @param session_info 腟?????????????????
837     @return 0 success
838     */
839     ZEND_FUNCTION(vp_get_session)
840     {
841     long vpSessionID;
842     zval *sessionInfo;
843     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
844     &vpSessionID, &sessionInfo) == FAILURE) {
845     return;
846     }
847     const session_t *session = 0;
848     result_t result = getSession( (sessionid_t)vpSessionID, &session );
849     if ( result == RES_OK ){
850     sessionToZval( session, sessionInfo );
851     freeResult( session );
852     }
853 aga 1.2
854 aga 1.4 RETURN_LONG((long)result);
855 aga 1.2 }
856 aga 1.1
857 aga 1.5 /** activate?倶?? ??緇?<br>
858     bool vp_is_activated( int vp_session_id, int user_id )
859     @param vp_session_id vp ? session id
860     @param user_id xoops_users.uid
861     @return 0 success
862     */
863 aga 1.2 ZEND_FUNCTION(vp_is_activated)
864     {
865     long sid, uid;
866    
867 aga 1.5 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
868 aga 1.2 return;
869     }
870    
871     bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
872    
873     RETURN_BOOL(result);
874     }
875 aga 1.1
876 aga 1.5 /** activate??????<br>
877     bool vp_activate( int vp_session_id, bool activated )
878     @param vp_session_id vp ? session id
879     @param user_id xoops_users.uid
880     @param activated true:activate, false:inactivate
881     @return 0 success
882     */
883 aga 1.2 ZEND_FUNCTION(vp_activate)
884     {
885     long sid, uid;
886     bool activated;
887    
888     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
889     &sid, &uid, &activated) == FAILURE) {
890     return;
891     }
892    
893     result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
894    
895     RETURN_LONG(result);
896     }
897 aga 1.1
898 aga 1.5 /** vp???≪?????潟???違??緇?????<br>
899     int vp_get_account_count( int vp_session_id )
900     @param vp_session_id vp ? session id
901     @return 0 success
902     */
903 aga 1.2 ZEND_FUNCTION(vp_get_account_count)
904     {
905     long sid;
906    
907     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
908     &sid) == FAILURE) {
909     return;
910     }
911    
912     long count = getAccountCount( (sessionid_t)sid );
913    
914     RETURN_LONG(count);
915     }
916 aga 1.1
917 aga 1.5 /** ?≪?????潟???????ゃ??????<br>
918     bool vp_delete_account( int vp_session_id, int user_id )
919     @param vp_session_id vp ? session id
920     @param user_id xoops_users.uid
921     @return 0 success
922     */
923 aga 1.2 ZEND_FUNCTION(vp_delete_account)
924     {
925     long sid, uid;
926    
927     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
928     &sid, &uid) == FAILURE) {
929     return;
930     }
931    
932     result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
933    
934     RETURN_LONG(result);
935     }
936 aga 1.1
937 aga 1.5 /** ?≪?????潟?????宴??緇?????<br>
938     int vp_get_account( int vp_session_id, int user_id, array account_info )
939     @param vp_session_id vp ? session id
940     @param user_id xoops_users.uid
941     @param account_info ?≪?????潟?????宴???????????f?渇????
942     @return 0 success
943     */
944 aga 1.2 ZEND_FUNCTION(vp_get_account)
945     {
946     long sid, uid;
947     zval *zaccount;
948    
949     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
950     &sid, &uid, &zaccount) == FAILURE) {
951 youi 1.6 fprintf( stderr, "error occured " );
952 aga 1.2 return;
953     }
954    
955     const account_t *paccount;
956     result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
957     if ( RES_OK == result ){
958     accountToZval( paccount, zaccount );
959     freeResult( paccount );
960     }
961    
962     RETURN_LONG(result);
963     }
964 aga 1.1
965 aga 1.5 /** ?>散????眼?????≪?????潟???????宴??緇?????<br>
966     int vp_get_accoutns( int sid, array uids, array criteria, array accounts );
967     @param vp_session_id vp ? session id
968     @param user_id xoops_users.uid
969     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
970     @param account_info ?≪?????潟?????宴???????????f?渇????
971     @return 0 success
972     */
973 aga 1.2 ZEND_FUNCTION(vp_get_accounts)
974     {
975     result_t result;
976     long sid;
977     zval *zuids;
978     zval *zcriteria;
979     zval *zaccount;
980    
981     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
982     &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
983     return;
984     }
985    
986     zCriteria_t zcri(zcriteria);
987     result = zcri.getResult();
988     if ( RES_OK == result ){
989     zUIDs_t zUIDs(zuids);
990     result = zUIDs.getResult();
991     if ( RES_OK == result ){
992     const account_t *paccounts;
993     int accountLen;
994     result = getAccounts( (sessionid_t)sid,
995     zUIDs.getPUID(), zUIDs.getLen(),
996     &zcri, &paccounts, &accountLen );
997     if ( RES_OK == result ){
998     accountsToZval( paccounts, accountLen, zaccount );
999     freeResult( paccounts );
1000     }
1001     }
1002     }
1003    
1004     RETURN_LONG(result);
1005     }
1006 aga 1.1
1007 aga 1.5 /** ?≪?????潟?????宴??緇?????<br>
1008     int vp_insert_account( int sid, array account_info );
1009     @param vp_session_id vp ? session id
1010     @param user_id xoops_users.uid
1011     @param account_info ?≪?????潟?????宴???????????f?渇????
1012     @return 0 success
1013     */
1014 aga 1.2 ZEND_FUNCTION(vp_insert_account)
1015     {
1016     result_t result;
1017     long sid;
1018     zval *zaccount;
1019    
1020     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1021     &sid, &zaccount) == FAILURE) {
1022     return;
1023     }
1024    
1025     zAccount_t zacc(zaccount);
1026     result = zacc.getResult();
1027     if ( RES_OK == result ){
1028     result = insertAccount( (sessionid_t)sid, &zacc );
1029     }
1030    
1031     RETURN_LONG(result);
1032     }
1033 aga 1.1
1034 aga 1.5 /** ?≪?????潟?????宴???贋?違??????<br>
1035     int vp_update_account( int sid, array account );
1036     @param vp_session_id vp ? session id
1037     @param account_info ?吾??莨若???鴻???≪?????潟?????宴??茵????f?渇????
1038     @return 0 success
1039     */
1040 aga 1.2 ZEND_FUNCTION(vp_update_account)
1041     {
1042     result_t result;
1043     long sid;
1044     zval *zaccount;
1045    
1046     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1047     &sid, &zaccount) == FAILURE) {
1048     return;
1049     }
1050    
1051     zAccount_t zacc(zaccount);
1052     result = zacc.getResult();
1053     if ( RES_OK == result ){
1054     result = updateAccount( (sessionid_t)sid, &zacc );
1055     }
1056    
1057     RETURN_LONG(result);
1058     }
1059 aga 1.1
1060 aga 1.5 /** ?>散???????≪?????潟????id???荀с??緇?????<br>
1061     int vp_dump_uids( int vp_session_id, array criteria, array uids );
1062     @param vp_session_id vp ? session id
1063     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1064     @param uids uid??????????????
1065     @return 0 success
1066     */
1067 aga 1.2 ZEND_FUNCTION(vp_dump_uids)
1068     {
1069     result_t result;
1070     long sid;
1071     zval *zcriteria;
1072     zval *zuids;
1073    
1074     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1075     &sid, &zcriteria, &zuids) == FAILURE) {
1076     return;
1077     }
1078    
1079     zCriteria_t zcri(zcriteria);
1080     result = zcri.getResult();
1081     if ( RES_OK == result ){
1082     userid_t *puid;
1083     int uidLen;
1084     result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1085     if ( RES_OK == result ){
1086     uidsToZval( puid, uidLen, &zuids );
1087     freeResult( puid );
1088     }
1089     }
1090    
1091     RETURN_LONG(result);
1092     }
1093 aga 1.1
1094 aga 1.5 /** VP???違???若?????違??緇???<br>
1095     int vp_get_group_count( int sid );
1096     @param vp_session_id vp ? session id
1097     @return ?違???若????/span>
1098     */
1099 aga 1.2 ZEND_FUNCTION(vp_get_group_count)
1100 aga 1.1 {
1101 aga 1.2 result_t result;
1102     long sid;
1103    
1104     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1105     &sid) == FAILURE) {
1106     return;
1107     }
1108    
1109     int count = getGroupCount( (sessionid_t)sid );
1110    
1111     RETURN_LONG(count);
1112     }
1113 aga 1.1
1114 aga 1.5 /** uid?ф??絎????????若?吟??絮????違???若???с?????ゆ?>散????眼?????違???若????id??緇???<br>
1115     int vp_get_group_by_uid( int sid, int uid, array criteria, array gids );
1116     @param vp_session_id vp ? session id
1117     @param user_id xoops_users.uid
1118     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1119     @param gids gid??????????????
1120     @return 0 success
1121     */
1122 aga 1.2 ZEND_FUNCTION(vp_get_groups_by_uid)
1123     {
1124     result_t result;
1125     long sid, uid;
1126     zval *zcriteria;
1127     zval *zgids;
1128    
1129     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1130     &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1131     return;
1132 aga 1.1 }
1133    
1134 aga 1.2 zCriteria_t zcri(zcriteria);
1135     result = zcri.getResult();
1136     if ( RES_OK == result ){
1137     groupid_t *pgids;
1138     int gidLen;
1139     result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1140     if ( RES_OK == result ){
1141     gidsToZval( pgids, gidLen, &zgids );
1142     freeResult( pgids );
1143     }
1144 aga 1.1 }
1145    
1146 aga 1.2 RETURN_LONG(result);
1147     }
1148    
1149    
1150 aga 1.5
1151     /** uid?ф??絎????????若?吟??gid?ф??絎??????違???若?????違???若??膊∞??????????????緇???<br>
1152     int vp_is_group_admin( int sid, int gid, int uid );
1153     @param vp_session_id vp ? session id
1154     @param group_id VP???違???若??ID
1155     @param user_id xoops_users.uid
1156     @return true: ?違???若??膊∞?????с??????
1157     @return false: ?違???若??膊∞?????с???????????????????若?с??????
1158     */
1159 aga 1.2 ZEND_FUNCTION(vp_is_group_admin)
1160     {
1161     result_t result;
1162     long sid, gid, uid;
1163    
1164     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1165     &sid, &gid, &uid) == FAILURE) {
1166     return;
1167 aga 1.1 }
1168    
1169 aga 1.2 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1170 aga 1.1
1171 aga 1.2 RETURN_BOOL(b);
1172     }
1173    
1174 aga 1.5 /** ?>散????眼?????違???若????id???荀с??緇?????<br>
1175     int vp_dump_gids( int sid, array criteria, array gids );
1176     @param vp_session_id vp ? session id
1177     @param criteria ??緇?膀??蚊?祉?純?若??????茵???????
1178     @param gids gid??????????????
1179     @return 0 success
1180     */
1181 aga 1.2 ZEND_FUNCTION(vp_dump_gids)
1182     {
1183     result_t result;
1184     long sid;
1185     zval *zcriteria;
1186     zval *zgids;
1187    
1188     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1189     &sid, &zcriteria, &zgids) == FAILURE) {
1190     return;
1191     }
1192 aga 1.1
1193 aga 1.2 zCriteria_t zcri(zcriteria);
1194     result = zcri.getResult();
1195     if ( RES_OK == result ){
1196     groupid_t *pgid;
1197     int gidLen;
1198     result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
1199     if ( RES_OK == result ){
1200     gidsToZval( pgid, gidLen, &zgids );
1201     freeResult( pgid );
1202 aga 1.1 }
1203     }
1204    
1205 aga 1.2 RETURN_LONG(result);
1206 aga 1.1 }
1207 aga 1.8
1208     /** gid?ф??絎??????違???若??????????с?????ゆ?>散????眼?????違???若??膊∞??????id???荀с??緇?????<br>
1209     int vp_dump_group_admins(int sid, int group_id, array criteria, array uids )
1210     @param sid ?祉???激?с??D
1211     @param group_id VP?違???若??ID
1212     @param criteria ?>散
1213     @param uids uid???荀с??????????????
1214     @return 0 success
1215     */
1216    
1217     ZEND_FUNCTION(vp_dump_group_admins)
1218     {
1219     long sid, gid;
1220     zval *zcriteria;
1221     zval *zuids;
1222    
1223     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1224     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1225     return;
1226     }
1227    
1228     zCriteria_t zcri(zcriteria);
1229     result_t result = zcri.getResult();
1230     if ( result == RES_OK ){
1231     userid_t *uids;
1232     int uidsLen;
1233     result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1234     if ( result == RES_OK ){
1235     uidsToZval( uids, uidsLen, &zuids );
1236     freeResult( uids );
1237     }
1238     }
1239     RETURN_LONG( result );
1240     }
1241    
1242 aga 1.11 /** ?違???若???????<?潟???若?????ゃ??????<br>
1243     int vp_delete_member(int sid, int group_id, int user_id )
1244     @param sid ?祉???激?с??D
1245     @param group_id VP?違???若??ID
1246     @param user_id ???若??D
1247     @return 0 success
1248     */
1249    
1250     ZEND_FUNCTION(vp_delete_member)
1251     {
1252     long sid, gid, uid;
1253    
1254     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1255     &sid, &gid, &uid) == FAILURE) {
1256     return;
1257     }
1258    
1259     result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1260     RETURN_LONG( result );
1261     }
1262    
1263     /** ?違???若?????<?潟???若??菴遵??????<br>
1264     int vp_insert_member(int sid, int group_id, int user_id, bool admin )
1265     @param sid ?祉???激?с??D
1266     @param group_id VP?違???若??ID
1267     @param user_id ???若??D
1268     @param admin ?違???若??膊∞????????true
1269     @return 0 success
1270     */
1271    
1272     ZEND_FUNCTION(vp_insert_member)
1273     {
1274     long sid, gid, uid;
1275     zend_bool admin;
1276    
1277     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
1278     &sid, &gid, &uid, &admin) == FAILURE) {
1279     return;
1280     }
1281    
1282     result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
1283     RETURN_LONG( result );
1284     }
1285    
1286     /** gid?ф??絎??????違???若?????<?潟???若??id???荀с??緇???<br>
1287     int vp_get_members(int sid, int group_id, array criteria, array uids )
1288     @param sid ?祉???激?с??D
1289     @param group_id VP?違???若??ID
1290     @param criteria ?>散
1291     @param uids uid???荀с??????????????
1292     @return 0 success
1293     */
1294    
1295     ZEND_FUNCTION(vp_get_members)
1296     {
1297     long sid, gid;
1298     zval *zcriteria;
1299     zval *zuids;
1300    
1301     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1302     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1303     return;
1304     }
1305    
1306     zCriteria_t zcri(zcriteria);
1307     result_t result = zcri.getResult();
1308     if ( result == RES_OK ){
1309     userid_t *uids;
1310     int uidsLen;
1311     result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
1312     if ( result == RES_OK ){
1313     uidsToZval( uids, uidsLen, &zuids );
1314     freeResult( uids );
1315     }
1316     }
1317     RETURN_LONG( result );
1318     }
1319 youi 1.7
1320     /** ?違???若?????宴??紊??眼??????<br>
1321     int vp_update_group(int sid, array group )
1322     @param sid ?祉???激?с??D
1323     @param group ?違???若?????宴???f?渇????
1324     @return 0 success
1325     */
1326     ZEND_FUNCTION(vp_update_group)
1327     {
1328     long sid;
1329     zval *zgroup;
1330     group_t group;
1331    
1332     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1333     &sid, &zgroup) == FAILURE) {
1334     return;
1335     }
1336    
1337     zvalToGroup( zgroup, &group );
1338     result_t result = updateGroup( sid, &group );
1339     RETURN_LONG( result );
1340 aga 1.10 }
1341    
1342 youi 1.12 /** ?違???若?????宴??菴遵????????<br>
1343     int vp_insert_group( int sid, array group )
1344     @param sid ?祉???激?с??D
1345     @param group ?違???若?????宴???f?渇????
1346     @return RES_OK
1347     @return RES_DB_NOT_INITIALIZED
1348     @return RES_NO_SUCH_SESSION
1349     @return RES_DB_QUERY_ERROR
1350     */
1351     ZEND_FUNCTION(vp_insert_group)
1352     {
1353     long sid;
1354     zval *zgroup;
1355     group_t group;
1356    
1357     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1358     &sid, &zgroup) == FAILURE) {
1359     return;
1360     }
1361    
1362     zvalToGroup( zgroup, &group );
1363     result_t result = insertGroup( sid, &group );
1364     RETURN_LONG( result );
1365     }
1366    
1367    
1368     /** ?違???若?????宴?????ゃ??????<br>
1369     int vp_delete_group( int sid, int gid )
1370     @param sid ?祉???激?с??D
1371     @param gid ???ゃ???????違???若????D
1372     @return RES_OK
1373     @return RES_DB_QUERY_ERROR
1374     @return RES_NO_SUCH_SESSION
1375     @return RES_DB_NOT_INITIALIZED
1376     */
1377     ZEND_FUNCTION(vp_delete_group)
1378     {
1379     long sid;
1380     long gid;
1381    
1382     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1383     &sid, &gid) == FAILURE) {
1384     return;
1385     }
1386     RETURN_LONG( deleteGroup( sid, gid ) );
1387     }
1388    
1389     /** ?違???若?????????????緇???<br>
1390     int vp_dump_group_admins( int sid, int gid, array criteria, array uids )
1391     @param sid ?祉???激?с??D
1392     @param gid ?違???若????D
1393     @param criteria uids???吾??莨若?????????純?若???>散鐚?膀??蚊????絎?
1394     @param uids 膊∞??????ID???吾??莨若??????
1395     @return RES_OK
1396     @return RES_DB_QUERY_ERROR
1397     @return RES_NO_SUCH_SESSION
1398     @return RES_DB_NOT_INITIALIZED
1399     */
1400     /*
1401     ZEND_FUNCTION(vp_dump_group_admins)
1402     {
1403     long sid;
1404     long gid;
1405     zval *zcriteria;
1406     zval *zuids;
1407    
1408     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1409     &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1410     return;
1411     }
1412     zCriteria_t zcri(zcriteria);
1413     result_t result = zcri.getResult();
1414     if ( RES_OK == result ){
1415     userid_t* uids;
1416     int uidsLen;
1417     result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1418     if( result != RES_OK ) RETURN_LONG( result );
1419     uidsToZval( uids, uidsLen, &zuids );
1420     fprintf( stderr, "uidsLen=%d\n", uidsLen );
1421     for( int i = 0; i < uidsLen; i++ ){
1422     fprintf( stderr, "%d, \n", uids[ i ] );
1423     }
1424     freeResult( uids );
1425     RETURN_LONG( result );
1426     }
1427     RETURN_LONG( result );
1428     }
1429     */
1430    
1431 aga 1.10 /** vp??ession_id???綵??с???с????lt;br>
1432     bool vp_is_valid_session_id( int vp_session_id)
1433     @return true ???鴻??p??ession_id?с????
1434     @return false ?≦?鴻??ession_id?障??????????/span>
1435     */
1436     ZEND_FUNCTION(vp_is_valid_session_id)
1437     {
1438     long sid;
1439     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
1440     return;
1441     }
1442    
1443     RETURN_BOOL(isValidSessionID((sessionid_t)sid));
1444 aga 1.9 }
1445    
1446     /** ?????惹??絖?????緇???<br>
1447     string vp_get_last_error_string()
1448     @return 0 success
1449     */
1450     ZEND_FUNCTION(vp_get_last_error_string)
1451     {
1452     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
1453     return;
1454     }
1455    
1456     string str( getLastErrorString() );
1457     RETURN_STRING((char *)str.c_str(), 1);
1458 youi 1.7 }
1459    

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26