Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/xnpal.cc

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


Revision 1.20 - (show annotations) (download) (as text)
Wed Jan 12 04:37:43 2005 UTC (19 years, 3 months ago) by aga
Branch: MAIN
Changes since 1.19: +2 -2 lines
File MIME type: text/x-c++src
。ヲgetUserID() -> getUID().

1 /*
2 $Revision: 1.19 $
3 VPAL: Visiome Platform Abstract Layer
4
5 zend_parse_parameters縺ッphp4.1.0縺悟ソ?ヲ?/span>
6 .so繝輔ぃ繧、繝ォ縺ッ螟悶°繧芽ヲ九∴縺ェ縺??エ謇?縺ォ鄂ョ縺上∋縺阪??/span>
7 C++縺ァ縺ッ縲‘xtern "C"{}, BEGIN/END_EXTERN_C()縺悟ソ?ヲ√??/span>
8 */
9
10
11 #include <stdio.h>
12 #include "criteria.h"
13 #include "common.h"
14 #include "commonal.h"
15 #include "session.h"
16 #include "group.h"
17 #include "account.h"
18 #include "vpal.h"
19
20 // for inet_aton
21 #include <sys/socket.h>
22 #include <netinet/in.h>
23 #include <arpa/inet.h>
24
25 // global variables
26
27 PHP_MSHUTDOWN_FUNCTION(vpalmod)
28 {
29 uninitializeDB();
30 return SUCCESS;
31 }
32
33 /* declaration of functions to be exported */
34 extern "C" {
35 ZEND_FUNCTION(first_module );
36 ZEND_FUNCTION(vp_initialize_db );
37 ZEND_FUNCTION(vp_login_user );
38 ZEND_FUNCTION(vp_logout_user );
39 ZEND_FUNCTION(vp_create_session );
40 ZEND_FUNCTION(vp_get_session );
41 ZEND_FUNCTION(vp_is_activated );
42 ZEND_FUNCTION(vp_activate );
43 ZEND_FUNCTION(vp_get_account_count );
44 ZEND_FUNCTION(vp_delete_account );
45 ZEND_FUNCTION(vp_get_account );
46 ZEND_FUNCTION(vp_get_accounts );
47 ZEND_FUNCTION(vp_insert_account );
48 ZEND_FUNCTION(vp_update_account );
49 ZEND_FUNCTION(vp_dump_uids );
50 ZEND_FUNCTION(vp_get_group_count );
51 ZEND_FUNCTION(vp_get_groups_by_uid );
52 ZEND_FUNCTION(vp_is_group_admin );
53 ZEND_FUNCTION(vp_dump_gids );
54 ZEND_FUNCTION(vp_dump_group_admins );
55 ZEND_FUNCTION(vp_delete_member );
56 ZEND_FUNCTION(vp_insert_member );
57 ZEND_FUNCTION(vp_get_members );
58 ZEND_FUNCTION(vp_delete_group );
59 ZEND_FUNCTION(vp_insert_group );
60 ZEND_FUNCTION(vp_update_group );
61 ZEND_FUNCTION(vp_get_group );
62 ZEND_FUNCTION(vp_get_groups );
63 ZEND_FUNCTION(vp_is_moderator );
64 ZEND_FUNCTION(vp_get_uid );
65
66 ZEND_FUNCTION(vp_is_valid_session_id );
67 ZEND_FUNCTION(vp_get_last_error_string );
68
69 ZEND_FUNCTION(vp_test_criteria );
70 ZEND_FUNCTION(vp_test_uids );
71 };
72 /* compiled function list so Zend knows what's in this module */
73 zend_function_entry vpalmod_functions[] =
74 {
75 ZEND_FE(first_module ,NULL)
76 ZEND_FE(vp_initialize_db ,NULL)
77 ZEND_FE(vp_login_user ,NULL)
78 ZEND_FE(vp_logout_user ,NULL)
79 ZEND_FE(vp_create_session ,NULL)
80 ZEND_FE(vp_get_session ,NULL)
81 ZEND_FE(vp_is_activated ,NULL)
82 ZEND_FE(vp_activate ,NULL)
83 ZEND_FE(vp_get_account_count ,NULL)
84 ZEND_FE(vp_delete_account ,NULL)
85 ZEND_FE(vp_get_account ,NULL)
86 ZEND_FE(vp_get_accounts ,NULL)
87 ZEND_FE(vp_insert_account ,NULL)
88 ZEND_FE(vp_update_account ,NULL)
89 ZEND_FE(vp_dump_uids ,NULL)
90 ZEND_FE(vp_get_group_count ,NULL)
91 ZEND_FE(vp_get_groups_by_uid ,NULL)
92 ZEND_FE(vp_is_group_admin ,NULL)
93 ZEND_FE(vp_dump_gids ,NULL)
94 ZEND_FE(vp_dump_group_admins ,NULL)
95 ZEND_FE(vp_delete_member ,NULL)
96 ZEND_FE(vp_insert_member ,NULL)
97 ZEND_FE(vp_get_members ,NULL)
98 ZEND_FE(vp_delete_group ,NULL)
99 ZEND_FE(vp_insert_group ,NULL)
100 ZEND_FE(vp_update_group ,NULL)
101 ZEND_FE(vp_get_group ,NULL)
102 ZEND_FE(vp_get_groups ,NULL)
103 ZEND_FE(vp_is_moderator ,NULL)
104 ZEND_FE(vp_get_uid ,NULL)
105 ZEND_FE(vp_is_valid_session_id ,NULL)
106 ZEND_FE(vp_get_last_error_string ,NULL)
107 ZEND_FE(vp_test_criteria ,NULL)
108 ZEND_FE(vp_test_uids ,NULL)
109 {NULL, NULL, NULL}
110 };
111
112 /* compiled module information */
113 zend_module_entry vpalmod_module_entry =
114 {
115 STANDARD_MODULE_HEADER,
116 "Visiome Platform Abstract Layer",
117 vpalmod_functions,
118 NULL,
119 PHP_MSHUTDOWN(vpalmod),
120 NULL,
121 NULL,
122 NULL,
123 NO_VERSION_YET,
124 STANDARD_MODULE_PROPERTIES
125 };
126
127 /* implement standard "stub" routine to introduce ourselves to Zend */
128 #if COMPILE_DL_FIRST_MODULE
129 BEGIN_EXTERN_C()
130 ZEND_GET_MODULE(vpalmod)
131 END_EXTERN_C()
132 #endif
133
134
135 /* implement function that is meant to be made available to PHP */
136 ZEND_FUNCTION(first_module)
137 {
138 long parameter;
139 // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
140 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
141 return;
142 }
143 parameter++;
144 RETURN_LONG(parameter);
145 }
146 /** zval縺九iC縺ョ譁?ュ怜?繧貞セ励k縲?/span>
147 */
148 char *getZvalString( zval **p ){
149 convert_to_string_ex(p);
150 return Z_STRVAL_PP(p); //(**p).value.str.val;
151 }
152
153 /** zval縺九iint繧貞セ励k縲?/span>
154 */
155 int getZvalInt( zval **p ){
156 convert_to_long_ex(p);
157 return Z_LVAL_PP(p); // (int)(**p).value.lval;
158 }
159
160 // keylen縺ッ譛ォ蟆セ縺ョ\0繧貞性繧?縲?/span>
161 static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
162 zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
163 if ( res == HASH_KEY_IS_STRING ){
164 char *p = new char[keyLen+1];
165 memcpy( p, key, keyLen );
166 p[keyLen] = 0;
167 zend_printf( " key is string[%s]<br>\n", p );
168 }
169 else {
170 zend_printf( " key is integer[%d]<br>\n", index );
171 }
172 }
173
174
175 /** zval*縺九icriteria_t繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲ら函謌仙、ア謨励↑繧曳etResult()!=RES_OK <br>
176 criteria :
177 array( 'start'=>0, 'rows'=>10,
178 'orders'=>array(
179 array('name'=>'id','order'=>'0'),
180 array('name'=>'timestamp','name'=>'1'), ...)
181 ); 縺薙s縺ェ蠖「縺ョ騾」諠ウ驟榊?
182 */
183 class zCriteria_t : public criteria {
184 private:
185 result_t result;
186
187 // pz: array('name'=>'timestamp','name'=>'1')
188 // 縺薙l縺九iorderby繧剃ス懈?縺励※霑ス蜉?縲?/span>
189 void setOrder( zval *pz ){
190 char *column = 0;
191 order_t order = (order_t)0;
192
193 HashPosition pos;
194 zval **ppzTmp = 0;
195 int res2;
196 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
197 while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
198 char *key = 0;
199 uint keyLen = 0;
200 ulong index = 0;
201 int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
202 if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
203 //print_hash_key( keyType, key, keyLen, index );
204 if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
205 SEPARATE_ZVAL(ppzTmp);
206 column = getZvalString(ppzTmp);
207 // zend_printf( "column=%s<br>\n", column );
208 }
209 else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
210 SEPARATE_ZVAL(ppzTmp);
211 order = (order_t)getZvalInt(ppzTmp);
212 // zend_printf( "order=%d<br>\n", order );
213 }
214 }
215
216 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
217 }
218 if ( column ){
219 orderby *o = new orderby( column, order );
220 addOrderBy( o );
221 }
222
223 result = RES_OK;
224 }
225
226 // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
227 void setOrders( zval *pz ){
228 HashPosition pos;
229
230 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
231
232 zval **ppzTmp = 0;
233 int res2;
234 while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
235 char *key = 0;
236 uint keyLen = 0;
237 ulong index = 0;
238 int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
239 if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
240 //print_hash_key( keyType, key, keyLen, index );
241 setOrder( *ppzTmp );
242 }
243 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
244 }
245 result = RES_OK;
246 }
247
248 void initialize( zval *pz ){
249 HashPosition pos;
250 zval **ppzTmp = 0;
251 int res2;
252 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
253 while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
254 char *key = 0;
255 uint keyLen = 0;
256 ulong index = 0;
257 int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
258 if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
259 //print_hash_key( keyType, key, keyLen, index );
260 if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
261 SEPARATE_ZVAL(ppzTmp);
262 int tmp = getZvalInt(ppzTmp);
263 // zend_printf( "start=%d<br>\n", tmp );
264 setLimit( tmp, getLimitRows() );
265 }
266 else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
267 SEPARATE_ZVAL(ppzTmp);
268 int tmp = getZvalInt(ppzTmp);
269 // zend_printf( "rows=%d<br>\n", tmp );
270 setLimit( getLimitStart(), tmp );
271 }
272 else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
273 setOrders( *ppzTmp );
274 }
275 else
276 ; // ignore unknown key
277 }
278 else
279 ; // ignore bad key
280 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
281 }
282 result = RES_OK;
283 }
284
285 public:
286 zCriteria_t() : criteria(){ result = RES_ERROR; }
287 zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
288 zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
289 result_t getResult(){ return result; };
290
291 void dump(){
292 zend_printf( "dumping zCriteria...<br>\n" );
293 zend_printf( "result=%d<br>\n", (int)result );
294 zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
295 const orderby *p = headOrderBy();
296 while ( p ){
297 zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
298 p = nextOrderBy();
299 }
300 }
301 };
302
303
304 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※long蛟、繧貞セ励k縲?/span>
305 @param ht 騾」諠ウ驟榊?
306 @param key 繧ュ繝シ
307 @param val long蛟、繧貞女縺大叙繧九?繧、繝ウ繧ソ
308 @return 謌仙粥縺ェ繧液rue
309 */
310 static bool hashGetLong( HashTable *ht, const char *key, long *val ){
311 zval **tmp;
312 if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
313 convert_to_long_ex( tmp );
314 *val = Z_LVAL_PP(tmp);
315 return true;
316 }
317 return false;
318 }
319
320 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※譁?ュ怜?繧貞セ励k縲?/span>
321 @param ht 騾」諠ウ驟榊?
322 @param key 繧ュ繝シ
323 @param val 譁?ュ怜?繧貞女縺大叙繧九?繧、繝ウ繧ソ
324 @return 謌仙粥縺ェ繧液rue
325 */
326 static bool hashGetString( HashTable *ht, const char *key, char **val ){
327 zval **tmp;
328 if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
329 convert_to_string_ex( tmp );
330 *val = Z_STRVAL_PP(tmp);
331 return true;
332 }
333 return false;
334 }
335
336 /** 騾」諠ウ驟榊?縺ォ繧「繧ッ繧サ繧ケ縺励※double蛟、繧貞セ励k縲?/span>
337 @param ht 騾」諠ウ驟榊?
338 @param key 繧ュ繝シ
339 @param val double蛟、繧貞女縺大叙繧九?繧、繝ウ繧ソ
340 @return 謌仙粥縺ェ繧液rue
341 */
342 static bool hashGetDouble( HashTable *ht, const char *key, double *val ){
343 zval **tmp;
344 if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
345 convert_to_double_ex( tmp );
346 *val = Z_DVAL_PP(tmp);
347 return true;
348 }
349 return false;
350 }
351
352 /** zval*縺九iaccount繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲 <br>
353 逕滓?螟ア謨励↑繧曳etResult()!=RES_OK <br>
354 */
355 class zAccount_t : public account {
356 private:
357 result_t result;
358 void initialize(zval *pz){
359 HashTable *ht = Z_ARRVAL_P(pz);
360 long l;
361 char *p;
362 double d;
363 if ( hashGetLong ( ht, "uid" , &l ) ) setUID ( l );
364 if ( hashGetString( ht, "uname" , &p ) ) setUname ( p );
365 if ( hashGetString( ht, "name" , &p ) ) setName ( p );
366 if ( hashGetString( ht, "email" , &p ) ) setEmail ( p );
367 if ( hashGetString( ht, "url" , &p ) ) setURL ( p );
368 if ( hashGetString( ht, "user_avatar" , &p ) ) setUserAvatar ( p );
369 if ( hashGetString( ht, "user_icq" , &p ) ) setUserIcq ( p );
370 if ( hashGetString( ht, "user_from" , &p ) ) setUserFrom ( p );
371 if ( hashGetString( ht, "user_sig" , &p ) ) setUserSig ( p );
372 if ( hashGetString( ht, "actkey" , &p ) ) setActkey ( p );
373 if ( hashGetString( ht, "user_aim" , &p ) ) setUserAim ( p );
374 if ( hashGetString( ht, "user_yim" , &p ) ) setUserYim ( p );
375 if ( hashGetString( ht, "user_msnm" , &p ) ) setUserMsnm ( p );
376 if ( hashGetString( ht, "pass" , &p ) ) setPass ( p );
377 if ( hashGetString( ht, "theme" , &p ) ) setTheme ( p );
378 if ( hashGetString( ht, "umode" , &p ) ) setUmode ( p );
379 if ( hashGetString( ht, "user_occ" , &p ) ) setUserOcc ( p );
380 if ( hashGetString( ht, "bio" , &p ) ) setBio ( p );
381 if ( hashGetString( ht, "user_intrest" , &p ) ) setUserIntrest ( p );
382 if ( hashGetDouble( ht, "timezone_offset" , &d ) ) setTimezoneOffset ( d );
383 if ( hashGetLong ( ht, "attachsig" , &l ) ) setAttachsig ( l );
384 if ( hashGetLong ( ht, "last_login" , &l ) ) setLastLogin ( l );
385 if ( hashGetLong ( ht, "level" , &l ) ) setLevel ( l );
386 if ( hashGetLong ( ht, "notify_method" , &l ) ) setNotifyMethod ( l );
387 if ( hashGetLong ( ht, "notify_mode" , &l ) ) setNotifyMode ( l );
388 if ( hashGetLong ( ht, "posts" , &l ) ) setPosts ( l );
389 if ( hashGetLong ( ht, "rank" , &l ) ) setRank ( l );
390 if ( hashGetLong ( ht, "uorder" , &l ) ) setUorder ( l );
391 if ( hashGetLong ( ht, "user_mailok" , &l ) ) setUserMailok ( l );
392 if ( hashGetLong ( ht, "user_regdate" , &l ) ) setUserRegdate ( l );
393 if ( hashGetLong ( ht, "user_viewemail" , &l ) ) setUserViewemail ( l );
394 if ( hashGetLong ( ht, "activate" , &l ) ) setActivate ( l );
395 if ( hashGetString( ht, "address" , &p ) ) setAddress ( p );
396 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
397 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
398 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
399 if ( hashGetString( ht, "country" , &p ) ) setCountry ( p );
400 if ( hashGetString( ht, "zipcode" , &p ) ) setZipcode ( p );
401 if ( hashGetString( ht, "fax" , &p ) ) setFax ( p );
402 if ( hashGetString( ht, "base_url" , &p ) ) setBaseURL ( p );
403 if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
404 if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
405
406 result = RES_OK;
407 }
408 public:
409 zAccount_t() : account(){ result = RES_ERROR; }
410
411 /** 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
412 @param pz array( 'uid'=>1, 'uname'=>'root', ... ); 縺薙s縺ェ蠖「縺ョ騾」諠ウ驟榊? */
413 zAccount_t( zval *pz ) : account(){ initialize(pz); }
414 zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
415 result_t getResult(){ return result; };
416 };
417
418 /** zval*縺九i(userid_t *puid,int uidLen)繧堤函謌舌☆繧九◆繧√?繧ッ繝ゥ繧ケ縲 <br>
419 逕滓?螟ア謨励↑繧曳etResult()!=RES_OK <br>
420 */
421 class zUIDs_t {
422 private:
423 result_t result;
424 userid_t *pUID;
425 int len;
426 public:
427 zUIDs_t(){
428 pUID = 0;
429 len = 0;
430 result = RES_ERROR;
431 }
432
433 /** 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
434 @param pza array( '1', '3', '4', '6', ... ); 縺薙s縺ェ蠖「縺ョ驟榊? */
435 zUIDs_t( zval *pza ){
436 pUID = 0;
437 len = 0;
438 result = RES_ERROR;
439
440 if ( Z_TYPE_P(pza) != IS_ARRAY ){
441 result = RES_ERROR;
442 }
443 else {
444 len = zend_hash_num_elements(Z_ARRVAL_P(pza));
445 if(len == 0) {
446 pUID = new userid_t[1];
447 result = RES_OK;
448 }
449 else {
450 /* php/ext/standard/string.c 縺ョ implode縺ョ縺ゅ◆繧翫r蜿り??↓縲?/span>
451 zend_hash_*縺ョ繝峨く繝・繝。繝ウ繝医▲縺ヲ縺ゅk縺ョ縺?繧阪≧縺具シ?/span>
452 */
453 zval **tmp;
454 HashPosition pos;
455 int i = 0;
456 pUID = new userid_t[len];
457
458 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
459 while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
460 SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html 蜿ら?
461 convert_to_long_ex(tmp);
462 if ( i < len )
463 pUID[i++] = Z_LVAL_PP(tmp);
464 zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
465 }
466 len = i;
467 result = RES_OK;
468 }
469 }
470 }
471
472 ~zUIDs_t(){
473 if ( pUID ) delete[] pUID;
474 }
475 result_t getResult(){ return result; }
476 userid_t *getPUID(){ return pUID; }
477 int getLen(){ return len; }
478 void dump(){
479 zend_printf( "dumping zUIDs...<br>\n" );
480 zend_printf( "result=%d<br>\n", (int)result );
481 zend_printf( "len=%d<br>\n", len );
482 for ( int i = 0; i < len; i++ ){
483 zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
484 }
485 }
486 };
487
488 /**
489 *
490 * uids_t縺ョ驟榊?繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
491 *
492 * @param pUID 螟画鋤蜈??userid_t縺ョ驟榊?
493 * @param len pUID縺ョ驟榊?縺ョ髟キ縺?/span>
494 * @param pz 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
495 * @return RES_OK
496 *
497 */
498 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
499 {
500 zend_hash_clean( Z_ARRVAL_PP(ppz) );
501
502 // add UIDs
503 for ( int i = 0; i < len; i++ ){
504 add_next_index_long(*ppz, (long)(pUID[i]) );
505 }
506
507 return RES_OK;
508 }
509 /**
510 *
511 * groupid_t縺ョ驟榊?繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
512 * @param pGID 螟画鋤蜈??groupid_t縺ョ驟榊?
513 * @param len pGID縺ョ驟榊?縺ョ髟キ縺?/span>
514 * @param ppz 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
515 * @return RES_OK
516 *
517 */
518 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
519 {
520 zend_hash_clean( Z_ARRVAL_PP(ppz) );
521
522 // add GIDs
523 for ( int i = 0; i < len; i++ ){
524 add_next_index_long(*ppz, (long)(pGID[i]) );
525 }
526
527 return RES_OK;
528 }
529
530
531 /**
532 *
533 * account_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ォ螟画鋤縺吶k
534 * @param pAccount 螟画鋤蜈??account_t*
535 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
536 * @return RES_OK
537 *
538 */
539 result_t accountToZval( const account_t *pAccount, zval *z )
540 {
541 zend_hash_clean( z -> value.ht );
542
543 add_assoc_long( z, "uid", pAccount -> getUID( ) );
544 add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
545 add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
546 add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
547 add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
548 add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
549 add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
550 add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
551 add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
552 add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
553 add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
554 add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
555 add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
556 add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
557 add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
558 add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
559 add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
560 add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
561 add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
562 add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
563 add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
564 add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
565 add_assoc_long( z, "level", pAccount -> getLevel( ) );
566 add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
567 add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
568 add_assoc_long( z, "posts", pAccount -> getPosts( ) );
569 add_assoc_long( z, "rank", pAccount -> getRank( ) );
570 add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
571 add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
572 add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
573 add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
574
575 add_assoc_long( z, "activate", pAccount -> getActivate( ) );
576 add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
577 add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
578 add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
579 add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
580 add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
581 add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
582 add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
583 add_assoc_string( z, "base_url", ( char* )pAccount -> getBaseURL( ), 1 );
584 add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
585 add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
586 return RES_OK;
587 }
588 /**
589 *
590 * 隍?焚縺ョaccount_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ョ驟榊?縺ォ螟画鋤縺吶k
591 * @param pAccounts 螟画鋤蜈??account_t*
592 * @param accountsLen pAccounts縺ョ驟榊?縺ョ髟キ縺?/span>
593 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
594 * @return RES_OK
595 *
596 z: 縺薙s縺ェ諢溘§縺ョ驟榊?縺ォ縺ェ繧九?や? <br>
597 array(
598 array(
599 'uid'=>100,
600 'activate'=>1,
601 'division'=>'foo',
602 'tel'=>'123-456-789',
603 ...
604 ),
605 ...
606 )
607 */
608 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
609 {
610 zend_hash_clean( z -> value.ht );
611 for( int i = 0; i < accountsLen; i++ ){
612 zval *new_array;
613 MAKE_STD_ZVAL(new_array);
614 if(array_init(new_array) != SUCCESS){
615 return RES_ERROR;
616 }
617 add_index_zval( z, i, new_array );
618 accountToZval( &pAccounts[ i ], new_array );
619 }
620 return RES_OK;
621 }
622
623 /**
624 *
625 * 隍?焚縺ョgroup_t縺ョ蜀?ョケ繧単HP縺ョ驟榊?縺ョ驟榊?縺ォ螟画鋤縺吶k
626 * @param pGroups 螟画鋤蜈??group_t*
627 * @param groupsLen pGroups縺ョ驟榊?縺ョ髟キ縺?/span>
628 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
629 * @return RES_OK
630 *
631 z: 縺薙s縺ェ諢溘§縺ョ驟榊?縺ォ縺ェ繧九?や? <br>
632 array(
633 array(
634 'gid'=>1,
635 'gname'=>'foo group',
636 'gdesc'=>'group of foo'
637 ),
638 ...
639 )
640 */
641 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
642 {
643 zend_hash_clean( z -> value.ht );
644 for( int i = 0; i < groupsLen; i++ ){
645 zval *new_array;
646 MAKE_STD_ZVAL(new_array);
647 if(array_init(new_array) != SUCCESS){
648 return RES_ERROR;
649 }
650 add_index_zval( z, i, new_array );
651 add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
652 add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
653 add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
654 }
655 return RES_OK;
656 }
657
658 /**
659 *
660 * group_t縺ョ蜀?ョケ繧単HP縺ョ騾」諠ウ驟榊?縺ォ螟画鋤縺吶k
661 *
662 * @param pGroup 螟画鋤蜈??繧ー繝ォ繝シ繝玲ュ蝣ア
663 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?騾」諠ウ驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
664 * @return RES_OK
665 *
666 */
667 result_t groupToZval( const group_t *pGroup, zval *z )
668 {
669 zend_hash_clean( z -> value.ht );
670 add_assoc_long( z, "gid", pGroup -> getGID( ) );
671 add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
672 add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
673 return RES_OK;
674 }
675
676 /**
677 *
678 * PHP縺ョ騾」諠ウ驟榊?縺ョ蜀?ョケ繧暖roup_t縺ォ螟画鋤縺吶k
679 *
680 * @param z 螟画鋤蜈??騾」諠ウ驟榊?
681 * @param pGroup 螟画鋤邨先棡繧呈嶌縺崎セシ繧?繧ー繝ォ繝シ繝?/span>
682 * @return RES_OK
683 *
684 */
685 result_t zvalToGroup( zval *z, group_t *pGroup )
686 {
687 zval **tmp;
688 HashPosition pos;
689 int i = 0;
690 char* key = 0;
691
692 key = "gid";
693 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
694 convert_to_long_ex( tmp ) ;
695 pGroup -> setGID( (*tmp) -> value.lval );
696 }
697 key = "gname";
698 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
699 convert_to_string_ex( tmp ) ;
700 pGroup -> setGname( (*tmp) -> value.str.val );
701 }
702 key = "gdesc";
703 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
704 convert_to_string_ex( tmp ) ;
705 pGroup -> setDesc( (*tmp) -> value.str.val );
706 }
707 return RES_OK;
708 }
709
710 /**
711 *
712 * session_t縺ョ蜀?ョケ繧単HP縺ョ騾」諠ウ驟榊?縺ォ螟画鋤縺吶k
713 *
714 * @param pSession 螟画鋤蜈??session_t
715 * @param z 螟画鋤邨先棡繧呈嶌縺崎セシ繧?騾」諠ウ驟榊?(蛻晄悄蛹匁ク医∩縺ァ縺ゅk縺薙→)
716 * @return RES_OK
717 *
718 */
719 result_t sessionToZval( const session_t *pSession, zval *z )
720 {
721 string sessionID(unsignedIntToString(pSession->getSessionID()));
722 add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
723
724 string date(unsignedIntToString((unsigned int)pSession->getDate()));
725 add_assoc_string(z, "date", (char *)date.c_str(), 1);
726
727 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
728 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
729
730 return RES_OK;
731 }
732
733
734
735 /** 謖?ョ壹@縺溘げ繝ォ繝シ繝励?諠??ア繧貞セ励k<br>
736 int vp_get_group( int sid, int gid, array group );
737 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
738 @param gid VP 縺ョ group_id
739 @param group 邨先棡繧貞女縺大叙繧矩?蛻?/span>
740 @return 0 success <br>
741 */
742 ZEND_FUNCTION(vp_get_group)
743 {
744 long sid, gid;
745 zval *zgroup;
746
747 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
748 &sid, &gid, &zgroup) == FAILURE) {
749 return;
750 }
751
752 const group_t *pgroup;
753 result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
754 if ( RES_OK == result ){
755 groupToZval( pgroup, zgroup );
756 freeGroup( pgroup );
757 }
758
759 RETURN_LONG(result);
760 }
761
762
763 /** 謖?ョ壹@縺溘げ繝ォ繝シ繝?隍?焚)縺ョ諠??ア繧貞セ励k<br>
764 vp_get_groups( int sid, array gids, array criteria, array groups );
765 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
766 @param gids VP 縺ョ group_id 縺ョ驟榊?
767 @param criteria 譚。莉カ
768 @param groups 邨先棡繧貞女縺大叙繧矩?蛻励?驟榊?
769 @return 0 success <br>
770 */
771 ZEND_FUNCTION(vp_get_groups)
772 {
773 result_t result;
774 long sid, uid;
775 zval *zcriteria;
776 zval *zgids;
777 zval *zgroups;
778 zval **ppzTmp = 0;
779 HashPosition pos;
780 int res2;
781 int gidsLen;
782 const group_t* groups;
783 int groupsLen;
784
785 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
786 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
787 return;
788 }
789
790 //gids縺ォ繧ー繝ォ繝シ繝悠D繧偵さ繝斐?縺吶k
791 gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
792 groupid_t *gids = new groupid_t[ gidsLen ];
793 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
794 for( int i = 0; i < gidsLen; i++ ){
795 if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
796 SEPARATE_ZVAL(ppzTmp);
797 convert_to_long_ex(ppzTmp);
798 gids[ i ] = Z_LVAL_PP(ppzTmp);
799 }
800 zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
801 }
802
803 zCriteria_t zcri(zcriteria);
804 result = zcri.getResult();
805 if ( RES_OK == result ){
806 result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
807 if ( RES_OK == result ){
808 groupsToZval( groups, groupsLen, zgroups );
809 delete[] gids;
810 freeGroup( groups );
811 }
812 }
813 RETURN_LONG(result);
814 }
815
816
817 /** 謖?ョ壹@縺溘Θ繝シ繧カ縺後Δ繝?Ξ繝シ繧ソ縺九←縺?°繧定ェソ縺ケ繧?lt;br>
818 int vp_is_moderator(int sid, int uid)
819 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
820 @param uid xoops 縺ョ uid (xoops_users.uid)
821 @return true 繝「繝?Ξ繝シ繧ソ縺ァ縺ゅk <br>
822 */
823 ZEND_FUNCTION(vp_is_moderator)
824 {
825 long vpSessionID;
826 userid_t uid;
827
828 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
829 &vpSessionID, &uid) == FAILURE) {
830 return;
831 }
832
833 bool result = isModerator( (sessionid_t)vpSessionID, uid );
834 RETURN_BOOL(result)
835 }
836
837 /** 繝ヲ繝シ繧カ蜷阪°繧疫id繧定ェソ縺ケ繧?lt;br>
838 int vp_get_uid(string uname,int &uid)
839 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
840 @param uname xoops 縺ョ uname (xoops_users.uname)
841 @param uid xoops 縺ョ uid (xoops_users.uid) 繧貞女縺大叙繧句、画焚
842 @return 0 success
843 */
844 ZEND_FUNCTION(vp_get_uid)
845 {
846 char *uname;
847 int unameLen;
848 zval *zuid;
849 userid_t uid;
850
851 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
852 &uname, &unameLen, &zuid) == FAILURE) {
853 return;
854 }
855
856 if (!PZVAL_IS_REF(zuid)) {
857 zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
858 RETURN_LONG(RES_PHP_NONREF);
859 }
860
861 string strUname( uname, unameLen );
862 result_t result = getUid( strUname.c_str(), &uid );
863 ZVAL_LONG(zuid, (long)uid);
864 RETURN_LONG((long)result);
865 }
866
867 ZEND_FUNCTION(vp_test_criteria)
868 {
869 zval *z;
870
871 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
872 &z) == FAILURE) {
873 return;
874 }
875 zend_printf("zend_printf...<br>\n");
876 zCriteria_t zcri(z);
877 zcri.dump();
878 RETURN_FALSE
879 }
880
881 ZEND_FUNCTION(vp_test_uids)
882 {
883 zval *z;
884
885 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
886 &z) == FAILURE) {
887 return;
888 }
889 zend_printf("zend_printf...<br>\n");
890 zUIDs_t zuids(z);
891 zuids.dump();
892 RETURN_FALSE
893 }
894
895
896
897 /** DB縺ォ謗・邯壹☆繧九?よ里縺ォ謗・邯壻クュ縺ョ謗・邯壹?髢峨§繧峨l繧九??lt;br>
898 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix]]]] );
899 @param host 謗・邯壼?縲ら怐逡・譎ゅ?NULL
900 @param user DB謗・邯壽凾縺ョ繝ヲ繝シ繧カ蜷阪?ら怐逡・譎ゅ?NULL
901 @param password DB謗・邯壽凾縺ョ繝代せ繝ッ繝シ繝峨?ら怐逡・譎ゅ?NULL
902 @param dbname DB謗・邯壽凾縺ョDB蜷阪?ら怐逡・譎ゅ?""
903 @param prefix XOOPS DB 縺ョprefix縲?/span>
904 @return 0 success <br>
905 */
906 ZEND_FUNCTION(vp_initialize_db)
907 {
908 zval **parameters[5];
909 char *host;
910 char *user;
911 char *password;
912 char *dbname;
913 char *prefix;
914
915 /* get the number of arguments */
916 int argNum = ZEND_NUM_ARGS();
917 if (argNum > 5)
918 WRONG_PARAM_COUNT;
919
920 /* argument count is correct, now retrieve arguments */
921 if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
922 WRONG_PARAM_COUNT;
923
924 if (argNum < 1) host = NULL;
925 else host = getZvalString( parameters[0] );
926
927 if (argNum < 2) user = NULL;
928 else user = getZvalString( parameters[1] );
929
930 if (argNum < 3) password = NULL;
931 else password = getZvalString( parameters[2] );
932
933 if (argNum < 4) dbname = "";
934 else dbname = getZvalString( parameters[3] );
935
936 if (argNum < 5) prefix = "";
937 else prefix = getZvalString( parameters[4] );
938
939 result_t result = initializeDB( host, user, password, dbname, prefix );
940
941 RETURN_LONG(result);
942 }
943
944 /** 繝ュ繧ー繧、繝ウ縺吶k縲?lt;br>
945 int vp_login_user(string uname, string password, int &session_id)
946 @param uname 繝ヲ繝シ繧カ蜷?xoops_users.uname)
947 @param password 繝代せ繝ッ繝シ繝?md5(password)=xoops_users.pass)
948 @return 0 success
949 */
950 ZEND_FUNCTION(vp_login_user)
951 {
952 char *uname;
953 int unameLen;
954 char *passwd;
955 int passwdLen;
956 zval *zVPSessionID;
957
958 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
959 &uname, &unameLen, &passwd, &passwdLen, &zVPSessionID) == FAILURE) {
960 return;
961 }
962
963 if (!PZVAL_IS_REF(zVPSessionID)) {
964 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
965 RETURN_LONG(RES_PHP_NONREF);
966 }
967
968 sessionid_t vpSessionID;
969 result_t result = loginUser( uname, passwd, &vpSessionID );
970 if ( result == RES_OK )
971 ZVAL_LONG(zVPSessionID, (long)vpSessionID);
972 RETURN_LONG((long)result);
973 }
974
975 /** 繝ュ繧ー繧「繧ヲ繝医☆繧九??lt;br>
976 void vp_logout_user(int vp_session_id)
977 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
978 @return 縺ェ縺?/span>
979 */
980 ZEND_FUNCTION(vp_logout_user)
981 {
982 long vpSessionID;
983
984 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &vpSessionID) == FAILURE) {
985 return;
986 }
987 logoutUser( (sessionid_t)vpSessionID );
988
989 RETURN_NULL();
990 }
991
992 /** VP縺ョ繧サ繝?す繝ァ繝ウID 菴懈?<br>
993 int vp_create_session( string xoops_sess_id, int uid, int &session )
994 @param xoops_sess_id xoops縺ョ繧サ繝?す繝ァ繝ウID
995 @param uid xoops 縺ョ uid (xoops_users.uid)
996 @param session 菴懈?縺励◆VP縺ョsession繧貞女縺大叙繧句、画焚
997 @return 0 謌仙粥
998 */
999 ZEND_FUNCTION(vp_create_session)
1000 {
1001 char *xoopsSessionID;
1002 int xoopsSessionIDLen;
1003 long uid;
1004 zval *zVPSessionID;
1005
1006 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1007 &xoopsSessionID, &xoopsSessionIDLen, &uid, &zVPSessionID) == FAILURE) {
1008 return;
1009 }
1010
1011 if (!PZVAL_IS_REF(zVPSessionID)) {
1012 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1013 RETURN_LONG(RES_PHP_NONREF);
1014 }
1015
1016 sessionid_t vpSessionID = 0;
1017 result_t result = createSession( xoopsSessionID, (userid_t)uid, &vpSessionID );
1018 if ( result == RES_OK )
1019 ZVAL_LONG(zVPSessionID, (long)vpSessionID);
1020 RETURN_LONG((long)result);
1021 }
1022
1023 /** VP 縺ョ session 縺ョ隧ウ邏ー諠??ア繧貞セ励k<br>
1024 int vp_get_session( int vp_session_id, array session_info )
1025 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1026 @param session_info 邨先棡繧貞女縺大叙繧矩?蛻?/span>
1027 @return 0 success
1028 */
1029 ZEND_FUNCTION(vp_get_session)
1030 {
1031 long vpSessionID;
1032 zval *sessionInfo;
1033 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1034 &vpSessionID, &sessionInfo) == FAILURE) {
1035 return;
1036 }
1037 const session_t *session = 0;
1038 result_t result = getSession( (sessionid_t)vpSessionID, &session );
1039 if ( result == RES_OK ){
1040 sessionToZval( session, sessionInfo );
1041 freeSession( session );
1042 }
1043
1044 RETURN_LONG((long)result);
1045 }
1046
1047 /** 繝ヲ繝シ繧カ縺ョactivate迥カ諷九r蜿門セ励☆繧?lt;br>
1048 bool vp_is_activated( int vp_session_id, int user_id )
1049 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1050 @param user_id xoops_users.uid
1051 @return 0 success
1052 */
1053 ZEND_FUNCTION(vp_is_activated)
1054 {
1055 long sid, uid;
1056
1057 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1058 return;
1059 }
1060
1061 bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1062
1063 RETURN_BOOL(result);
1064 }
1065
1066 /** activate縺吶k縲?lt;br>
1067 bool vp_activate( int vp_session_id, int user_id, bool activated )
1068 @param vp_session_id vp 縺ョ session id
1069 @param user_id xoops_users.uid
1070 @param activated true:activate, false:inactivate
1071 @return 0 success
1072 */
1073 ZEND_FUNCTION(vp_activate)
1074 {
1075 long sid, uid;
1076 bool activated;
1077
1078 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1079 &sid, &uid, &activated) == FAILURE) {
1080 return;
1081 }
1082
1083 result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1084
1085 RETURN_LONG(result);
1086 }
1087
1088 /** VP縺ョ繧「繧ォ繧ヲ繝ウ繝域焚繧貞セ励k縲?lt;br>
1089 int vp_get_account_count( int vp_session_id )
1090 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1091 @return 0 success
1092 */
1093 ZEND_FUNCTION(vp_get_account_count)
1094 {
1095 long sid;
1096
1097 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1098 &sid) == FAILURE) {
1099 return;
1100 }
1101
1102 long count = getAccountCount( (sessionid_t)sid );
1103 RETURN_LONG(count);
1104 }
1105
1106 /** 繧「繧ォ繧ヲ繝ウ繝医r蜑企勁縺吶k縲?lt;br>
1107 bool vp_delete_account( int vp_session_id, int user_id )
1108 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1109 @param user_id xoops_users.uid
1110 @return 0 success
1111 */
1112 ZEND_FUNCTION(vp_delete_account)
1113 {
1114 long sid, uid;
1115
1116 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1117 &sid, &uid) == FAILURE) {
1118 return;
1119 }
1120
1121 result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1122
1123 RETURN_LONG(result);
1124 }
1125
1126 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞セ励k縲?lt;br>
1127 int vp_get_account( int vp_session_id, int user_id, array account_info )
1128 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1129 @param user_id xoops_users.uid
1130 @param account_info 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞女縺大叙繧矩?」諠ウ驟榊?
1131 @return 0 success
1132 */
1133 ZEND_FUNCTION(vp_get_account)
1134 {
1135 long sid, uid;
1136 zval *zaccount;
1137
1138 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1139 &sid, &uid, &zaccount) == FAILURE) {
1140 fprintf( stderr, "error occured " );
1141 return;
1142 }
1143
1144 const account_t *paccount;
1145 result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
1146 if ( RES_OK == result ){
1147 accountToZval( paccount, zaccount );
1148 freeAccount( paccount );
1149 }
1150
1151 RETURN_LONG(result);
1152 }
1153
1154 /** 譚。莉カ縺ォ荳?閾エ縺吶k繧「繧ォ繧ヲ繝ウ繝医?諠??ア繧貞セ励k縲?lt;br>
1155 int vp_get_accoutns( int sid, array uids, array criteria, array accounts );
1156 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1157 @param user_id xoops_users.uid
1158 @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1159 @param account_info 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧貞女縺大叙繧矩?」諠ウ驟榊?
1160 @return 0 success
1161 */
1162 ZEND_FUNCTION(vp_get_accounts)
1163 {
1164 result_t result;
1165 long sid;
1166 zval *zuids;
1167 zval *zcriteria;
1168 zval *zaccount;
1169
1170 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1171 &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1172 return;
1173 }
1174
1175 zCriteria_t zcri(zcriteria);
1176 result = zcri.getResult();
1177 if ( RES_OK == result ){
1178 zUIDs_t zUIDs(zuids);
1179 result = zUIDs.getResult();
1180 if ( RES_OK == result ){
1181 const account_t *paccounts;
1182 int accountLen;
1183 result = getAccounts( (sessionid_t)sid,
1184 zUIDs.getPUID(), zUIDs.getLen(),
1185 &zcri, &paccounts, &accountLen );
1186 if ( RES_OK == result ){
1187 accountsToZval( paccounts, accountLen, zaccount );
1188 freeAccount( paccounts );
1189 }
1190 }
1191 }
1192
1193 RETURN_LONG(result);
1194 }
1195
1196 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧定ィ倬鹸縺吶k縲?lt;br>
1197 int vp_insert_account( int sid, array account_info, int &user_id );
1198 @param vp_session_id vp 縺ョ session id
1199 @param account_info 險倬鹸縺励◆縺?い繧ォ繧ヲ繝ウ繝医?諠??ア
1200 @param user_id 繝ヲ繝シ繧カID(xoops_users.uid)繧呈嶌縺崎セシ繧?繝ェ繝輔ぃ繝ャ繝ウ繧ケ
1201 @return 0 success
1202 */
1203 ZEND_FUNCTION(vp_insert_account)
1204 {
1205 result_t result;
1206 long sid;
1207 zval *zaccount;
1208 zval *zuid;
1209 userid_t uid;
1210
1211 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1212 &sid, &zaccount, &zuid) == FAILURE) {
1213 return;
1214 }
1215
1216 zAccount_t zacc(zaccount);
1217 result = zacc.getResult();
1218 if ( RES_OK == result ){
1219 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1220 }
1221 zuid -> type = IS_LONG;
1222 zuid -> value.lval = uid;
1223 RETURN_LONG(result);
1224 }
1225
1226 /** 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア繧呈峩譁ー縺吶k縲?lt;br>
1227 int vp_update_account( int sid, array account );
1228 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1229 @param account_info 譖ク縺崎セシ繧?縺ケ縺阪い繧ォ繧ヲ繝ウ繝域ュ蝣ア繧定。ィ縺咎?」諠ウ驟榊?
1230 @return 0 success
1231 */
1232 ZEND_FUNCTION(vp_update_account)
1233 {
1234 result_t result;
1235 long sid;
1236 zval *zaccount;
1237
1238 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1239 &sid, &zaccount) == FAILURE) {
1240 return;
1241 }
1242
1243 zAccount_t zacc(zaccount);
1244 result = zacc.getResult();
1245 if ( RES_OK == result ){
1246 result = updateAccount( (sessionid_t)sid, &zacc );
1247 }
1248
1249 RETURN_LONG(result);
1250 }
1251
1252 /** 譚。莉カ縺ォ蜷医≧繧「繧ォ繧ヲ繝ウ繝医?uid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1253 int vp_dump_uids( int vp_session_id, array criteria, array uids );
1254 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1255 @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1256 @param uids uid繧貞女縺大叙繧矩?蛻?/span>
1257 @return 0 success
1258 */
1259 ZEND_FUNCTION(vp_dump_uids)
1260 {
1261 result_t result;
1262 long sid;
1263 zval *zcriteria;
1264 zval *zuids;
1265
1266 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1267 &sid, &zcriteria, &zuids) == FAILURE) {
1268 return;
1269 }
1270
1271 zCriteria_t zcri(zcriteria);
1272 result = zcri.getResult();
1273 if ( RES_OK == result ){
1274 userid_t *puid;
1275 int uidLen;
1276 result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1277 if ( RES_OK == result ){
1278 uidsToZval( puid, uidLen, &zuids );
1279 freeUID( puid );
1280 }
1281 }
1282
1283 RETURN_LONG(result);
1284 }
1285
1286 /** VP縺ョ繧ー繝ォ繝シ繝励?謨ー繧貞セ励k<br>
1287 int vp_get_group_count( int vp_session_id );
1288 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1289 @return 繧ー繝ォ繝シ繝玲焚
1290 */
1291 ZEND_FUNCTION(vp_get_group_count)
1292 {
1293 result_t result;
1294 long sid;
1295
1296 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1297 &sid) == FAILURE) {
1298 return;
1299 }
1300
1301 int count = getGroupCount( (sessionid_t)sid );
1302
1303 RETURN_LONG(count);
1304 }
1305
1306 /** uid縺ァ謖?ョ壹@縺溘Θ繝シ繧カ縺悟ア槭☆繧ー繝ォ繝シ繝励〒縲√°縺、譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝励?gid繧貞セ励k<br>
1307 int vp_get_group_by_uid( int vp_session_id, int uid, array criteria, array gids );
1308 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1309 @param user_id xoops_users.uid
1310 @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1311 @param gids gid繧貞女縺大叙繧矩?蛻?/span>
1312 @return 0 success
1313 */
1314 ZEND_FUNCTION(vp_get_groups_by_uid)
1315 {
1316 result_t result;
1317 long sid, uid;
1318 zval *zcriteria;
1319 zval *zgids;
1320
1321 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1322 &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1323 return;
1324 }
1325
1326 zCriteria_t zcri(zcriteria);
1327 result = zcri.getResult();
1328 if ( RES_OK == result ){
1329 groupid_t *pgids;
1330 int gidLen;
1331 result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1332 if ( RES_OK == result ){
1333 gidsToZval( pgids, gidLen, &zgids );
1334 freeGID( pgids );
1335 }
1336 }
1337
1338 RETURN_LONG(result);
1339 }
1340
1341
1342
1343 /** uid縺ァ謖?ョ壹@縺溘Θ繝シ繧カ縺携id縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?繧ー繝ォ繝シ繝礼ョ。逅???°縺ゥ縺?°繧貞セ励k<br>
1344 int vp_is_group_admin( int sid, int gid, int uid );
1345 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1346 @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1347 @param user_id xoops_users.uid
1348 @return true: 繧ー繝ォ繝シ繝礼ョ。逅???〒縺ゅk縲?/span>
1349 @return false: 繧ー繝ォ繝シ繝礼ョ。逅???〒縺ェ縺??ゅ≠繧九>縺ッ繧ィ繝ゥ繝シ縺ァ縺ゅk縲?/span>
1350 */
1351 ZEND_FUNCTION(vp_is_group_admin)
1352 {
1353 result_t result;
1354 long sid, gid, uid;
1355
1356 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1357 &sid, &gid, &uid) == FAILURE) {
1358 return;
1359 }
1360
1361 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1362
1363 RETURN_BOOL(b);
1364 }
1365
1366 /** 譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝励?gid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1367 int vp_dump_gids( int sid, array criteria, array gids );
1368 @param vp_session_id VP縺ョ繧サ繝?す繝ァ繝ウID
1369 @param criteria 蜿門セ礼ッ?峇繝サ繧ス繝シ繝磯??r陦ィ縺咎?蛻?/span>
1370 @param gids gid繧貞女縺大叙繧矩?蛻?/span>
1371 @return 0 success
1372 */
1373 ZEND_FUNCTION(vp_dump_gids)
1374 {
1375 result_t result;
1376 long sid;
1377 zval *zcriteria;
1378 zval *zgids;
1379
1380 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1381 &sid, &zcriteria, &zgids) == FAILURE) {
1382 return;
1383 }
1384
1385 zCriteria_t zcri(zcriteria);
1386 result = zcri.getResult();
1387 if ( RES_OK == result ){
1388 groupid_t *pgid;
1389 int gidLen;
1390 result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
1391 if ( RES_OK == result ){
1392 gidsToZval( pgid, gidLen, &zgids );
1393 freeGID( pgid );
1394 }
1395 }
1396
1397 RETURN_LONG(result);
1398 }
1399
1400 /** gid縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?邂。逅???〒縲√°縺、譚。莉カ縺ォ荳?閾エ縺吶k繧ー繝ォ繝シ繝礼ョ。逅????uid縺ョ荳?隕ァ繧貞セ励k縲?lt;br>
1401 int vp_dump_group_admins(int sid, int group_id, array criteria, array uids )
1402 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1403 @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1404 @param criteria 譚。莉カ
1405 @param uids uid縺ョ荳?隕ァ繧貞女縺大叙繧矩?蛻?/span>
1406 @return 0 success
1407 */
1408
1409 ZEND_FUNCTION(vp_dump_group_admins)
1410 {
1411 long sid, gid;
1412 zval *zcriteria;
1413 zval *zuids;
1414
1415 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1416 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1417 return;
1418 }
1419
1420 zCriteria_t zcri(zcriteria);
1421 result_t result = zcri.getResult();
1422 if ( result == RES_OK ){
1423 userid_t *uids;
1424 int uidsLen;
1425 result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1426 if ( result == RES_OK ){
1427 uidsToZval( uids, uidsLen, &zuids );
1428 freeUID( uids );
1429 }
1430 }
1431 RETURN_LONG( result );
1432 }
1433
1434 /** 繧ー繝ォ繝シ繝励°繧峨Γ繝ウ繝舌?繧貞炎髯、縺吶k縲?lt;br>
1435 int vp_delete_member(int sid, int group_id, int user_id )
1436 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1437 @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1438 @param user_id 繝ヲ繝シ繧カID
1439 @return 0 success
1440 */
1441
1442 ZEND_FUNCTION(vp_delete_member)
1443 {
1444 long sid, gid, uid;
1445
1446 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1447 &sid, &gid, &uid) == FAILURE) {
1448 return;
1449 }
1450
1451 result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1452 RETURN_LONG( result );
1453 }
1454
1455 /** 繧ー繝ォ繝シ繝励↓繝。繝ウ繝舌?繧定ソス蜉?縺吶k<br>
1456 int vp_insert_member(int sid, int group_id, int user_id, bool admin )
1457 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1458 @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1459 @param user_id 繝ヲ繝シ繧カID
1460 @param admin 繧ー繝ォ繝シ繝礼ョ。逅???↑繧液rue
1461 @return 0 success
1462 */
1463
1464 ZEND_FUNCTION(vp_insert_member)
1465 {
1466 long sid, gid, uid;
1467 zend_bool admin;
1468
1469 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
1470 &sid, &gid, &uid, &admin) == FAILURE) {
1471 return;
1472 }
1473
1474 result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
1475 RETURN_LONG( result );
1476 }
1477
1478 /** gid縺ァ謖?ョ壹@縺溘げ繝ォ繝シ繝励?繝。繝ウ繝舌?縺ョuid縺ョ荳?隕ァ繧貞セ励k<br>
1479 int vp_get_members(int sid, int group_id, array criteria, array uids )
1480 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1481 @param group_id VP縺ョ繧ー繝ォ繝シ繝悠D
1482 @param criteria 譚。莉カ
1483 @param uids uid縺ョ荳?隕ァ繧貞女縺大叙繧矩?蛻?/span>
1484 @return 0 success
1485 */
1486
1487 ZEND_FUNCTION(vp_get_members)
1488 {
1489 long sid, gid;
1490 zval *zcriteria;
1491 zval *zuids;
1492
1493 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1494 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1495 return;
1496 }
1497
1498 zCriteria_t zcri(zcriteria);
1499 result_t result = zcri.getResult();
1500 if ( result == RES_OK ){
1501 userid_t *uids;
1502 int uidsLen;
1503 result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
1504 if ( result == RES_OK ){
1505 uidsToZval( uids, uidsLen, &zuids );
1506 freeUID( uids );
1507 }
1508 }
1509 RETURN_LONG( result );
1510 }
1511
1512 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞、画峩縺吶k縲?lt;br>
1513 int vp_update_group(int sid, array group )
1514 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1515 @param group 繧ー繝ォ繝シ繝玲ュ蝣ア縺ョ騾」諠ウ驟榊?
1516 @return 0 success
1517 */
1518 ZEND_FUNCTION(vp_update_group)
1519 {
1520 long sid;
1521 zval *zgroup;
1522 group_t group;
1523
1524 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1525 &sid, &zgroup) == FAILURE) {
1526 return;
1527 }
1528
1529 zvalToGroup( zgroup, &group );
1530 result_t result = updateGroup( sid, &group );
1531 RETURN_LONG( result );
1532 }
1533
1534 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧定ソス蜉?縺吶k縲?lt;br>
1535 int vp_insert_group( int sid, array group, int &gid )
1536 @param sid 繧サ繝?す繝ァ繝ウID
1537 @param group 繧ー繝ォ繝シ繝玲ュ蝣ア縺ョ騾」諠ウ驟榊?
1538 @param gid 蟇セ蠢懊☆繧九げ繝ォ繝シ繝悠D繧呈嶌縺崎セシ繧?繝ェ繝輔ぃ繝ャ繝ウ繧ケ
1539 @return RES_OK
1540 @return RES_DB_NOT_INITIALIZED
1541 @return RES_NO_SUCH_SESSION
1542 @return RES_DB_QUERY_ERROR
1543 */
1544 ZEND_FUNCTION(vp_insert_group)
1545 {
1546 long sid;
1547 zval *zgroup;
1548 zval *zgid;
1549 group_t group;
1550 groupid_t gid;
1551
1552 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1553 &sid, &zgroup, &zgid ) == FAILURE) {
1554 return;
1555 }
1556
1557 zvalToGroup( zgroup, &group );
1558 result_t result = insertGroup( sid, &group, &gid );
1559 zgid -> type = IS_LONG;
1560 zgid -> value.lval = gid;
1561 RETURN_LONG( result );
1562 }
1563
1564
1565 /** 繧ー繝ォ繝シ繝玲ュ蝣ア繧貞炎髯、縺吶k縲?lt;br>
1566 int vp_delete_group( int sid, int gid )
1567 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1568 @param gid 蜑企勁縺励◆縺?げ繝ォ繝シ繝励?ID
1569 @return RES_OK
1570 @return RES_DB_QUERY_ERROR
1571 @return RES_NO_SUCH_SESSION
1572 @return RES_DB_NOT_INITIALIZED
1573 */
1574 ZEND_FUNCTION(vp_delete_group)
1575 {
1576 long sid;
1577 long gid;
1578
1579 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1580 &sid, &gid) == FAILURE) {
1581 return;
1582 }
1583 RETURN_LONG( deleteGroup( sid, gid ) );
1584 }
1585
1586 /** 繧ー繝ォ繝シ繝励?邂。逅???r蜿門セ励??lt;br>
1587 int vp_dump_group_admins( int sid, int gid, array criteria, array uids )
1588 @param sid VP縺ョ繧サ繝?す繝ァ繝ウID
1589 @param gid VP繧ー繝ォ繝シ繝励?ID
1590 @param criteria uids縺ォ譖ク縺崎セシ繧?縺ィ縺阪?繧ス繝シ繝域擅莉カ?檎ッ?峇縺ョ謖?ョ?/span>
1591 @param uids 邂。逅????UID繧呈嶌縺崎セシ繧?驟榊?
1592 @return RES_OK
1593 @return RES_DB_QUERY_ERROR
1594 @return RES_NO_SUCH_SESSION
1595 @return RES_DB_NOT_INITIALIZED
1596 */
1597 /*
1598 ZEND_FUNCTION(vp_dump_group_admins)
1599 {
1600 long sid;
1601 long gid;
1602 zval *zcriteria;
1603 zval *zuids;
1604
1605 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1606 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
1607 return;
1608 }
1609 zCriteria_t zcri(zcriteria);
1610 result_t result = zcri.getResult();
1611 if ( RES_OK == result ){
1612 userid_t* uids;
1613 int uidsLen;
1614 result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
1615 if( result != RES_OK ) RETURN_LONG( result );
1616 uidsToZval( uids, uidsLen, &zuids );
1617 fprintf( stderr, "uidsLen=%d\n", uidsLen );
1618 for( int i = 0; i < uidsLen; i++ ){
1619 fprintf( stderr, "%d, \n", uids[ i ] );
1620 }
1621 freeUID( uids );
1622 RETURN_LONG( result );
1623 }
1624 RETURN_LONG( result );
1625 }
1626 */
1627
1628 /** VP縺ョsession_id縺ョ豁」蠖捺?ァ繝√ぉ繝?け<br>
1629 bool vp_is_valid_session_id( int vp_session_id)
1630 @return true 譛牙柑縺ェVP縺ョsession_id縺ァ縺ゅk<br>
1631 @return false 辟。蜉ケ縺ェsession_id縺セ縺溘?繧ィ繝ゥ繝シ
1632 */
1633 ZEND_FUNCTION(vp_is_valid_session_id)
1634 {
1635 long sid;
1636 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
1637 return;
1638 }
1639
1640 RETURN_BOOL(isValidSessionID((sessionid_t)sid));
1641 }
1642
1643 /** 繧ィ繝ゥ繝シ譁?ュ怜?繧貞セ励k<br>
1644 string vp_get_last_error_string()
1645 @return 0 success
1646 */
1647 ZEND_FUNCTION(vp_get_last_error_string)
1648 {
1649 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
1650 return;
1651 }
1652
1653 string str( getLastErrorString() );
1654 RETURN_STRING((char *)str.c_str(), 1);
1655 }
1656

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