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.47 - (show annotations) (download) (as text)
Fri Jul 15 04:47:08 2005 UTC (18 years, 8 months ago) by aga4096
Branch: MAIN
Changes since 1.46: +47 -43 lines
File MIME type: text/x-c++src
・xnp_get_config_value等で、参照渡しをしなかった場合に動作がおかしくなることがあるのを修正.

1 /*
2 * --------------------------------------------------------------------------
3 * XooNiPs Xoops modules for Neuroinformatics Platforms
4 * Copyright (C) 2005 RIKEN, Japan. All rights reserved.
5 * http://sourceforge.jp/projects/xoonips/
6 * --------------------------------------------------------------------------
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 * --------------------------------------------------------------------------
21 *
22 * $Revision: 1.46 $
23 * XNPAL: XooNiPs Platform Abstract Layer
24 * zend_parse_parameters鐃緒申php4.1.0鐃緒申鐃緒申鐃緒申
25 * .so鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
26 * C++鐃緒申鐃緒申鐃緒申extern "C"{}, BEGIN/END_EXTERN_C()鐃緒申鐃緒申鐃緒申鐃緒申
27 */
28
29
30 #include <stdio.h>
31 #include "criteria.h"
32 #include "common.h"
33 #include "commonal.h"
34 #include "session.h"
35 #include "group.h"
36 #include "index.h"
37 #include "xnpal.h"
38 #include "amazonbook.h"
39
40 // for inet_aton
41 #include <sys/socket.h>
42 #include <netinet/in.h>
43 #include <arpa/inet.h>
44
45 // global variables
46
47 PHP_MSHUTDOWN_FUNCTION(xnpalmod)
48 {
49 uninitializeDB();
50 return SUCCESS;
51 }
52
53 /* declaration of functions to be exported */
54 extern "C" {
55 ZEND_FUNCTION(first_module );
56 ZEND_FUNCTION(xnp_initialize_db );
57 ZEND_FUNCTION(xnp_login_user );
58 ZEND_FUNCTION(xnp_logout_user );
59 ZEND_FUNCTION(xnp_create_session );
60 ZEND_FUNCTION(xnp_get_session );
61 ZEND_FUNCTION(xnp_is_activated );
62 ZEND_FUNCTION(xnp_activate );
63 ZEND_FUNCTION(xnp_get_account_count );
64 ZEND_FUNCTION(xnp_delete_account );
65 ZEND_FUNCTION(xnp_get_account );
66 ZEND_FUNCTION(xnp_get_accounts );
67 ZEND_FUNCTION(xnp_insert_account );
68 ZEND_FUNCTION(xnp_update_account );
69 ZEND_FUNCTION(xnp_dump_uids );
70 ZEND_FUNCTION(xnp_get_group_count );
71 ZEND_FUNCTION(xnp_get_groups_by_uid );
72 ZEND_FUNCTION(xnp_is_group_admin );
73 ZEND_FUNCTION(xnp_dump_gids );
74 ZEND_FUNCTION(xnp_dump_group_admins );
75 ZEND_FUNCTION(xnp_delete_member );
76 ZEND_FUNCTION(xnp_insert_member );
77 ZEND_FUNCTION(xnp_get_members );
78 ZEND_FUNCTION(xnp_delete_group );
79 ZEND_FUNCTION(xnp_insert_group );
80 ZEND_FUNCTION(xnp_update_group );
81 ZEND_FUNCTION(xnp_get_group );
82 ZEND_FUNCTION(xnp_get_groups );
83 ZEND_FUNCTION(xnp_is_moderator );
84 ZEND_FUNCTION(xnp_get_uid );
85
86 ZEND_FUNCTION(xnp_get_all_indexes );
87 ZEND_FUNCTION(xnp_get_indexes );
88 ZEND_FUNCTION(xnp_insert_index );
89 ZEND_FUNCTION(xnp_update_index );
90 ZEND_FUNCTION(xnp_delete_index );
91 ZEND_FUNCTION(xnp_get_index );
92 ZEND_FUNCTION(xnp_is_index_readable );
93 ZEND_FUNCTION(xnp_is_index_writable );
94 ZEND_FUNCTION(xnp_swap_index_sort_number );
95
96 ZEND_FUNCTION(xnp_is_valid_session_id );
97 ZEND_FUNCTION(xnp_get_last_error_string );
98
99 ZEND_FUNCTION(xnp_test_criteria );
100 ZEND_FUNCTION(xnp_test_uids );
101
102
103 ZEND_FUNCTION(xnp_get_item_permission );
104 ZEND_FUNCTION(xnp_get_index_permission );
105 ZEND_FUNCTION(xnp_get_certify_permission );
106
107 ZEND_FUNCTION(xnp_get_certify_state );
108 ZEND_FUNCTION(xnp_set_certify_state );
109
110 ZEND_FUNCTION(xnp_insert_change_log );
111 ZEND_FUNCTION(xnp_get_change_logs );
112
113 ZEND_FUNCTION(xnp_get_config_value );
114 ZEND_FUNCTION(xnp_set_config_value );
115
116 ZEND_FUNCTION(xnp_dump_item_id );
117 ZEND_FUNCTION(xnp_get_item_id_by_binder_id );
118 ZEND_FUNCTION(xnp_get_item_id_by_index_id );
119 ZEND_FUNCTION(xnp_get_overlapped_items );
120
121 ZEND_FUNCTION(xnp_insert_item );
122 ZEND_FUNCTION(xnp_insert_item_direct );
123 ZEND_FUNCTION(xnp_update_item );
124 ZEND_FUNCTION(xnp_delete_item );
125 ZEND_FUNCTION(xnp_get_item );
126 ZEND_FUNCTION(xnp_get_items );
127
128 ZEND_FUNCTION(xnp_pubmed_complete );
129 ZEND_FUNCTION(xnp_amazon_complete );
130
131 //ZEND_FUNCTION(xnp_uninitialize_db );
132
133 ZEND_FUNCTION(xnp_register_binder_item );
134 ZEND_FUNCTION(xnp_unregister_binder_item );
135
136 ZEND_FUNCTION(xnp_register_item );
137 ZEND_FUNCTION(xnp_unregister_item );
138
139 ZEND_FUNCTION(xnp_get_uncertified_link );
140 ZEND_FUNCTION(xnp_get_private_item_id );
141 ZEND_FUNCTION(xnp_get_group_item_id );
142
143 ZEND_FUNCTION(xnp_get_item_types );
144 ZEND_FUNCTION(xnp_get_index_id_by_item_id );
145 ZEND_FUNCTION(xnp_get_own_public_item_id );
146
147 ZEND_FUNCTION(xnp_zip_create );
148 ZEND_FUNCTION(xnp_get_item_count );
149 ZEND_FUNCTION(xnp_get_item_count_group_by_index );
150
151 ZEND_FUNCTION(xnp_extract_public_item_id);
152 ZEND_FUNCTION(xnp_extract_nonbinder_item_id);
153 ZEND_FUNCTION(xnp_insert_event);
154 ZEND_FUNCTION(xnp_get_events);
155 };
156
157 static unsigned char fourth_arg_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
158 static unsigned char second_and_third_arg_force_ref[] = { 3, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
159
160 /* compiled function list so Zend knows what's in this module */
161 zend_function_entry xnpalmod_functions[] =
162 {
163 ZEND_FE(first_module ,NULL)
164 ZEND_FE(xnp_initialize_db ,NULL)
165 ZEND_FE(xnp_login_user ,third_arg_force_ref)
166 ZEND_FE(xnp_logout_user ,NULL)
167 ZEND_FE(xnp_create_session ,third_arg_force_ref)
168 ZEND_FE(xnp_get_session ,second_arg_force_ref )
169 ZEND_FE(xnp_is_activated ,NULL)
170 ZEND_FE(xnp_activate ,NULL)
171 ZEND_FE(xnp_get_account_count ,NULL)
172 ZEND_FE(xnp_delete_account ,NULL)
173 ZEND_FE(xnp_get_account ,third_arg_force_ref)
174 ZEND_FE(xnp_get_accounts ,fourth_arg_force_ref)
175 ZEND_FE(xnp_insert_account ,third_arg_force_ref)
176 ZEND_FE(xnp_update_account ,NULL)
177 ZEND_FE(xnp_dump_uids ,third_arg_force_ref)
178 ZEND_FE(xnp_get_group_count ,NULL)
179 ZEND_FE(xnp_get_groups_by_uid ,fourth_arg_force_ref)
180 ZEND_FE(xnp_is_group_admin ,NULL)
181 ZEND_FE(xnp_dump_gids ,third_arg_force_ref)
182 ZEND_FE(xnp_dump_group_admins ,NULL)
183 ZEND_FE(xnp_delete_member ,NULL)
184 ZEND_FE(xnp_insert_member ,NULL)
185 ZEND_FE(xnp_get_members ,fourth_arg_force_ref)
186 ZEND_FE(xnp_delete_group ,NULL)
187 ZEND_FE(xnp_insert_group ,third_arg_force_ref)
188 ZEND_FE(xnp_update_group ,NULL)
189 ZEND_FE(xnp_get_group ,third_arg_force_ref)
190 ZEND_FE(xnp_get_groups ,fourth_arg_force_ref)
191 ZEND_FE(xnp_is_moderator ,NULL)
192 ZEND_FE(xnp_get_uid ,second_arg_force_ref)
193
194 ZEND_FE(xnp_get_all_indexes ,third_arg_force_ref)
195 ZEND_FE(xnp_get_indexes ,fourth_arg_force_ref)
196 ZEND_FE(xnp_insert_index ,third_arg_force_ref)
197 ZEND_FE(xnp_update_index ,NULL)
198 ZEND_FE(xnp_delete_index ,NULL)
199 ZEND_FE(xnp_get_index ,third_arg_force_ref)
200 ZEND_FE(xnp_is_index_readable ,NULL)
201 ZEND_FE(xnp_is_index_writable ,NULL)
202 ZEND_FE(xnp_swap_index_sort_number ,NULL)
203
204 ZEND_FE(xnp_is_valid_session_id ,NULL)
205 ZEND_FE(xnp_get_last_error_string ,NULL)
206 ZEND_FE(xnp_test_criteria ,NULL)
207 ZEND_FE(xnp_test_uids ,NULL)
208
209 ZEND_FE(xnp_get_item_permission ,NULL)
210 ZEND_FE(xnp_get_index_permission ,NULL)
211 ZEND_FE(xnp_get_certify_permission ,NULL)
212
213 ZEND_FE(xnp_get_certify_state ,fourth_arg_force_ref)
214 ZEND_FE(xnp_set_certify_state ,NULL)
215
216 ZEND_FE(xnp_insert_change_log ,NULL)
217 ZEND_FE(xnp_get_change_logs ,third_arg_force_ref)
218
219 ZEND_FE(xnp_get_config_value ,second_arg_force_ref)
220 ZEND_FE(xnp_set_config_value ,NULL)
221
222 ZEND_FE(xnp_dump_item_id ,NULL)
223 ZEND_FE(xnp_get_item_id_by_binder_id ,fourth_arg_force_ref)
224 ZEND_FE(xnp_get_item_id_by_index_id ,fourth_arg_force_ref)
225 ZEND_FE(xnp_get_overlapped_items ,NULL) /*?*/
226
227 ZEND_FE(xnp_insert_item ,third_arg_force_ref)
228 ZEND_FE(xnp_insert_item_direct ,third_arg_force_ref)
229 ZEND_FE(xnp_update_item ,NULL)
230 ZEND_FE(xnp_delete_item ,NULL)
231 ZEND_FE(xnp_get_item ,third_arg_force_ref)
232 ZEND_FE(xnp_get_items ,fourth_arg_force_ref)
233
234 ZEND_FE(xnp_pubmed_complete ,second_arg_force_ref)
235 ZEND_FE(xnp_amazon_complete ,second_arg_force_ref)
236
237 // ZEND_FE(xnp_uninitialize_db ,NULL)
238
239 ZEND_FE(xnp_register_binder_item ,NULL)
240 ZEND_FE(xnp_unregister_binder_item ,NULL)
241
242 ZEND_FE(xnp_register_item ,NULL)
243 ZEND_FE(xnp_unregister_item ,NULL)
244
245 ZEND_FE(xnp_get_uncertified_link ,second_and_third_arg_force_ref)
246 ZEND_FE(xnp_get_private_item_id ,third_arg_force_ref)
247 ZEND_FE(xnp_get_group_item_id ,third_arg_force_ref)
248
249 ZEND_FE(xnp_get_item_types ,first_arg_force_ref)
250
251 ZEND_FE(xnp_get_index_id_by_item_id ,third_arg_force_ref)
252 ZEND_FE(xnp_get_own_public_item_id ,third_arg_force_ref)
253
254 ZEND_FE(xnp_zip_create ,NULL)
255 ZEND_FE(xnp_get_item_count ,NULL)
256 ZEND_FE(xnp_get_item_count_group_by_index ,second_arg_force_ref)
257
258 ZEND_FE(xnp_extract_public_item_id ,third_arg_force_ref)
259 ZEND_FE(xnp_extract_nonbinder_item_id,third_arg_force_ref)
260 ZEND_FE(xnp_insert_event ,NULL)
261 ZEND_FE(xnp_get_events ,second_arg_force_ref)
262 {NULL, NULL, NULL}
263 };
264
265 /* compiled module information */
266 zend_module_entry xnpalmod_module_entry =
267 {
268 STANDARD_MODULE_HEADER,
269 "XooNIps Abstract Layer",
270 xnpalmod_functions,
271 NULL,
272 PHP_MSHUTDOWN(xnpalmod),
273 NULL,
274 NULL,
275 NULL,
276 NO_VERSION_YET,
277 STANDARD_MODULE_PROPERTIES
278 };
279
280 /* implement standard "stub" routine to introduce ourselves to Zend */
281 #if COMPILE_DL_FIRST_MODULE
282 BEGIN_EXTERN_C()
283 ZEND_GET_MODULE(xnpalmod)
284 END_EXTERN_C()
285 #endif
286
287
288 /* implement function that is meant to be made available to PHP */
289 ZEND_FUNCTION(first_module)
290 {
291 long parameter;
292 // if(ZEND_NUM_ARGS() != 2) WRONG_PARAM_COUNT;
293 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &parameter) == FAILURE) {
294 return;
295 }
296 parameter++;
297 RETURN_LONG(parameter);
298 }
299 /** zval鐃緒申鐃緒申C鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
300 */
301 char *getZvalString( zval **p ){
302 convert_to_string_ex(p);
303 return Z_STRVAL_PP(p); //(**p).value.str.val;
304 }
305
306 /** zval鐃緒申鐃緒申int鐃緒申鐃緒申鐃緒申鐃緒申
307 */
308 int getZvalInt( zval **p ){
309 convert_to_long_ex(p);
310 return Z_LVAL_PP(p); // (int)(**p).value.lval;
311 }
312
313 // keylen鐃緒申鐃緒申鐃緒申鐃緒申\0鐃緒申鐃緒申鐃緒申鐃緒申
314 static void print_hash_key( int res, const char *key, uint keyLen, ulong index ){
315 zend_printf( "print_hash_key : key=0x%08x keylen=%08d index=%08d<br> ", key, keyLen, index );
316 if ( res == HASH_KEY_IS_STRING ){
317 char *p = new char[keyLen+1];
318 memcpy( p, key, keyLen );
319 p[keyLen] = 0;
320 zend_printf( " key is string[%s]<br>\n", p );
321 }
322 else {
323 zend_printf( " key is integer[%d]<br>\n", index );
324 }
325 }
326
327
328 /** zval*鐃緒申鐃緒申criteria_t鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申getResult()!=RES_OK <br>
329 criteria :
330 array( 'start'=>0, 'rows'=>10,
331 'orders'=>array(
332 array('name'=>'id','order'=>'0'),
333 array('name'=>'timestamp','name'=>'1'), ...)
334 ); 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
335 */
336 class zCriteria_t : public criteria {
337 private:
338 result_t result;
339
340 // pz: array('name'=>'timestamp','name'=>'1')
341 // 鐃緒申鐃緒申鐃緒申鐃緒申orderby鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
342 void setOrder( zval *pz ){
343 char *column = 0;
344 order_t order = (order_t)0;
345
346 HashPosition pos;
347 zval **ppzTmp = 0;
348 int res2;
349 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
350 while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
351 char *key = 0;
352 uint keyLen = 0;
353 ulong index = 0;
354 int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
355 if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
356 //print_hash_key( keyType, key, keyLen, index );
357 if ( strncasecmp( key, "name", keyLen ) == 0 && keyLen == 5 ){
358 SEPARATE_ZVAL(ppzTmp);
359 column = getZvalString(ppzTmp);
360 // zend_printf( "column=%s<br>\n", column );
361 }
362 else if ( strncasecmp( key, "order", keyLen ) == 0 && keyLen == 6 ){
363 SEPARATE_ZVAL(ppzTmp);
364 order = (order_t)getZvalInt(ppzTmp);
365 // zend_printf( "order=%d<br>\n", order );
366 }
367 }
368
369 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
370 }
371 if ( column ){
372 orderby *o = new orderby( column, order );
373 addOrderBy( o );
374 }
375
376 result = RES_OK;
377 }
378
379 // pz: array( array('column'=>'hoge','order'=>'1'), array('column'=>'huga','order'=>'2'), ...)
380 void setOrders( zval *pz ){
381 HashPosition pos;
382
383 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
384
385 zval **ppzTmp = 0;
386 int res2;
387 while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
388 char *key = 0;
389 uint keyLen = 0;
390 ulong index = 0;
391 int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
392 if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
393 //print_hash_key( keyType, key, keyLen, index );
394 setOrder( *ppzTmp );
395 }
396 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
397 }
398 result = RES_OK;
399 }
400
401 void initialize( zval *pz ){
402 HashPosition pos;
403 zval **ppzTmp = 0;
404 int res2;
405 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pz), &pos);
406 while ( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(pz), (void **)&ppzTmp, &pos)) == SUCCESS ) {
407 char *key = 0;
408 uint keyLen = 0;
409 ulong index = 0;
410 int keyType = zend_hash_get_current_key_ex(Z_ARRVAL_P(pz), &key, &keyLen, &index, false/*duplicate flag*/, &pos );
411 if ( keyType == HASH_KEY_IS_STRING/*1*/ || keyType == HASH_KEY_IS_LONG/*2*/ ){
412 //print_hash_key( keyType, key, keyLen, index );
413 if ( strncasecmp( key, "start", keyLen ) == 0 && keyLen == 6 ){
414 SEPARATE_ZVAL(ppzTmp);
415 int tmp = getZvalInt(ppzTmp);
416 // zend_printf( "start=%d<br>\n", tmp );
417 setLimit( tmp, getLimitRows() );
418 }
419 else if ( strncasecmp( key, "rows", keyLen ) == 0 && keyLen == 5 ){
420 SEPARATE_ZVAL(ppzTmp);
421 int tmp = getZvalInt(ppzTmp);
422 // zend_printf( "rows=%d<br>\n", tmp );
423 setLimit( getLimitStart(), tmp );
424 }
425 else if ( strncasecmp( key, "orders", keyLen ) == 0 && keyLen == 7 ){
426 setOrders( *ppzTmp );
427 }
428 else
429 ; // ignore unknown key
430 }
431 else
432 ; // ignore bad key
433 zend_hash_move_forward_ex(Z_ARRVAL_P(pz), &pos);
434 }
435 result = RES_OK;
436 }
437
438 public:
439 zCriteria_t() : criteria(){ result = RES_ERROR; }
440 zCriteria_t( zval *pz ) : criteria(){ initialize(pz); }
441 zCriteria_t( zval **ppz ) : criteria() { initialize(*ppz); }
442 result_t getResult(){ return result; };
443
444 void dump(){
445 zend_printf( "dumping zCriteria...<br>\n" );
446 zend_printf( "result=%d<br>\n", (int)result );
447 zend_printf( "start=%d, rows=%d<br>\n", getLimitStart(), getLimitRows() );
448 const orderby *p = headOrderBy();
449 while ( p ){
450 zend_printf( "column=%s, order=%d<br>\n", p->getColumn(), p->getOrder() );
451 p = nextOrderBy();
452 }
453 }
454 };
455
456
457 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申long鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
458 @param ht 鐃緒申鐃緒申鐃緒申鐃緒申
459 @param key 鐃緒申鐃緒申
460 @param val long鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
461 @return 鐃緒申鐃緒申鐃緒申鐃緒申true
462 */
463 static bool hashGetLong( HashTable *ht, const char *key, long *val ){
464 zval **tmp;
465 if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
466 convert_to_long_ex( tmp );
467 *val = Z_LVAL_PP(tmp);
468 return true;
469 }
470 return false;
471 }
472
473 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
474 @param ht 鐃緒申鐃緒申鐃緒申鐃緒申
475 @param key 鐃緒申鐃緒申
476 @param val 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
477 @return 鐃緒申鐃緒申鐃緒申鐃緒申true
478 */
479 static bool hashGetString( HashTable *ht, const char *key, char **val ){
480 zval **tmp;
481 if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
482 convert_to_string_ex( tmp );
483 *val = Z_STRVAL_PP(tmp);
484 return true;
485 }
486 return false;
487 }
488
489 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申double鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
490 @param ht 鐃緒申鐃緒申鐃緒申鐃緒申
491 @param key 鐃緒申鐃緒申
492 @param val double鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
493 @return 鐃緒申鐃緒申鐃緒申鐃緒申true
494 */
495 static bool hashGetDouble( HashTable *ht, const char *key, double *val ){
496 zval **tmp;
497 if( zend_hash_find( ht, (char *)key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
498 convert_to_double_ex( tmp );
499 *val = Z_DVAL_PP(tmp);
500 return true;
501 }
502 return false;
503 }
504
505 /** zval*鐃緒申鐃緒申account鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 <br>
506 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申getResult()!=RES_OK <br>
507 */
508 class zAccount_t : public account {
509 private:
510 result_t result;
511 void initialize(zval *pz){
512 HashTable *ht = Z_ARRVAL_P(pz);
513 long l;
514 char *p;
515 double d;
516 if ( hashGetLong ( ht, "uid" , &l ) ) setUID ( l );
517 if ( hashGetString( ht, "uname" , &p ) ) setUname ( p );
518 if ( hashGetString( ht, "name" , &p ) ) setName ( p );
519 if ( hashGetString( ht, "email" , &p ) ) setEmail ( p );
520 if ( hashGetString( ht, "url" , &p ) ) setURL ( p );
521 if ( hashGetString( ht, "user_avatar" , &p ) ) setUserAvatar ( p );
522 if ( hashGetString( ht, "user_icq" , &p ) ) setUserIcq ( p );
523 if ( hashGetString( ht, "user_from" , &p ) ) setUserFrom ( p );
524 if ( hashGetString( ht, "user_sig" , &p ) ) setUserSig ( p );
525 if ( hashGetString( ht, "actkey" , &p ) ) setActkey ( p );
526 if ( hashGetString( ht, "user_aim" , &p ) ) setUserAim ( p );
527 if ( hashGetString( ht, "user_yim" , &p ) ) setUserYim ( p );
528 if ( hashGetString( ht, "user_msnm" , &p ) ) setUserMsnm ( p );
529 if ( hashGetString( ht, "pass" , &p ) ) setPass ( p );
530 if ( hashGetString( ht, "theme" , &p ) ) setTheme ( p );
531 if ( hashGetString( ht, "umode" , &p ) ) setUmode ( p );
532 if ( hashGetString( ht, "user_occ" , &p ) ) setUserOcc ( p );
533 if ( hashGetString( ht, "bio" , &p ) ) setBio ( p );
534 if ( hashGetString( ht, "user_intrest" , &p ) ) setUserIntrest ( p );
535 if ( hashGetDouble( ht, "timezone_offset" , &d ) ) setTimezoneOffset ( d );
536 if ( hashGetLong ( ht, "attachsig" , &l ) ) setAttachsig ( l );
537 if ( hashGetLong ( ht, "last_login" , &l ) ) setLastLogin ( l );
538 if ( hashGetLong ( ht, "level" , &l ) ) setLevel ( l );
539 if ( hashGetLong ( ht, "notify_method" , &l ) ) setNotifyMethod ( l );
540 if ( hashGetLong ( ht, "notify_mode" , &l ) ) setNotifyMode ( l );
541 if ( hashGetLong ( ht, "posts" , &l ) ) setPosts ( l );
542 if ( hashGetLong ( ht, "rank" , &l ) ) setRank ( l );
543 if ( hashGetLong ( ht, "uorder" , &l ) ) setUorder ( l );
544 if ( hashGetLong ( ht, "user_mailok" , &l ) ) setUserMailok ( l );
545 if ( hashGetLong ( ht, "user_regdate" , &l ) ) setUserRegdate ( l );
546 if ( hashGetLong ( ht, "user_viewemail" , &l ) ) setUserViewemail ( l );
547 if ( hashGetLong ( ht, "activate" , &l ) ) setActivate ( l );
548 if ( hashGetString( ht, "address" , &p ) ) setAddress ( p );
549 if ( hashGetString( ht, "division" , &p ) ) setDivision ( p );
550 if ( hashGetString( ht, "tel" , &p ) ) setTel ( p );
551 if ( hashGetString( ht, "company_name" , &p ) ) setCompanyName ( p );
552 if ( hashGetString( ht, "country" , &p ) ) setCountry ( p );
553 if ( hashGetString( ht, "zipcode" , &p ) ) setZipcode ( p );
554 if ( hashGetString( ht, "fax" , &p ) ) setFax ( p );
555 if ( hashGetLong ( ht, "notice_mail" , &l ) ) setNoticeMail ( l );
556 if ( hashGetLong ( ht, "notice_mail_since" , &l ) ) setNoticeMailSince ( l );
557 if ( hashGetLong ( ht, "private_index_id " , &l ) ) setPrivateIndexID ( l );
558 if ( hashGetLong ( ht, "item_number_limit" , &l ) ) setItemNumberLimit ( l );
559 if ( hashGetLong ( ht, "index_number_limit", &l ) ) setIndexNumberLimit ( l );
560 if ( hashGetDouble( ht, "item_storage_limit", &d ) ) setItemStorageLimit ( d );
561
562 result = RES_OK;
563 }
564 public:
565 zAccount_t() : account(){ result = RES_ERROR; }
566
567 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
568 @param pz array( 'uid'=>1, 'uname'=>'root', ... ); 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 */
569 zAccount_t( zval *pz ) : account(){ initialize(pz); }
570 zAccount_t( zval **ppz ) : account() { initialize(*ppz); }
571 result_t getResult(){ return result; };
572 };
573
574 class zIndex_t : public index {
575 private:
576 result_t result;
577
578 void initialize(zval *pz){
579 HashTable *ht = Z_ARRVAL_P(pz);
580 long l;
581 char *p;
582 if ( hashGetLong ( ht, "item_id" , &l ) ) setItemID ( l );
583 if ( hashGetLong ( ht, "item_type_id" , &l ) ) setItemTypeID ( l );
584 if ( hashGetLong ( ht, "contributor_uid" , &l ) ) setContributorUID ( l );
585 if ( hashGetString( ht, "title" , &p ) ) setTitle ( p );
586 if ( hashGetString( ht, "keywords" , &p ) ) setKeywords ( p );
587 if ( hashGetString( ht, "description" , &p ) ) setDescription ( p );
588 if ( hashGetLong ( ht, "last_update_date" , &l ) ) setLastUpdateDate ( l );
589 if ( hashGetLong ( ht, "creation_date" , &l ) ) setCreationDate ( l );
590 if ( hashGetLong ( ht, "parent_index_id" , &l ) ) setParentIndexID ( l );
591 if ( hashGetLong ( ht, "owner_uid" , &l ) ) setOwnerUID ( l );
592 if ( hashGetLong ( ht, "owner_gid" , &l ) ) setOwnerGID ( l );
593 if ( hashGetLong ( ht, "open_level" , &l ) ) setOpenLevel ( l );
594 if ( hashGetLong ( ht, "sort_number" , &l ) ) setSortNumber ( l );
595
596 result = RES_OK;
597 }
598 public:
599 zIndex_t() : index(){ result = RES_ERROR; }
600 zIndex_t( zval *pz ) : index(){ initialize(pz); }
601 zIndex_t( zval **ppz ) : index() { initialize(*ppz); }
602 result_t getResult(){ return result; };
603
604 void dump(){
605 }
606 };
607
608 /** zval*鐃緒申鐃緒申(userid_t *puid,int uidLen)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 <br>
609 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申getResult()!=RES_OK <br>
610 */
611 class zUIDs_t {
612 private:
613 result_t result;
614 userid_t *pUID;
615 int len;
616 public:
617 zUIDs_t(){
618 pUID = 0;
619 len = 0;
620 result = RES_ERROR;
621 }
622
623 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
624 @param pza array( '1', '3', '4', '6', ... ); 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 */
625 zUIDs_t( zval *pza ){
626 pUID = 0;
627 len = 0;
628 result = RES_ERROR;
629
630 if ( Z_TYPE_P(pza) != IS_ARRAY ){
631 result = RES_ERROR;
632 }
633 else {
634 len = zend_hash_num_elements(Z_ARRVAL_P(pza));
635 if(len == 0) {
636 pUID = new userid_t[1];
637 result = RES_OK;
638 }
639 else {
640 /* php/ext/standard/string.c 鐃緒申 implode鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
641 zend_hash_*鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
642 */
643 zval **tmp;
644 HashPosition pos;
645 int i = 0;
646 pUID = new userid_t[len];
647
648 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
649 while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
650 SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html 鐃緒申鐃緒申
651 convert_to_long_ex(tmp);
652 if ( i < len )
653 pUID[i++] = Z_LVAL_PP(tmp);
654 zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
655 }
656 len = i;
657 result = RES_OK;
658 }
659 }
660 }
661
662 ~zUIDs_t(){
663 if ( pUID ) delete[] pUID;
664 }
665 result_t getResult(){ return result; }
666 userid_t *getPUID(){ return pUID; }
667 int getLen(){ return len; }
668 void dump(){
669 zend_printf( "dumping zUIDs...<br>\n" );
670 zend_printf( "result=%d<br>\n", (int)result );
671 zend_printf( "len=%d<br>\n", len );
672 for ( int i = 0; i < len; i++ ){
673 zend_printf( "pUID[%d] = %d<br>\n", i, pUID[i] );
674 }
675 }
676 };
677
678 /** zval*鐃緒申鐃緒申(itemid_t *piid,int iidLen)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 <br>
679 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申getResult()!=RES_OK <br>
680 */
681 class zIIDs_t {
682 private:
683 result_t result;
684 itemid_t *pIID;
685 int len;
686 public:
687 zIIDs_t(){
688 pIID = 0;
689 len = 0;
690 result = RES_ERROR;
691 }
692
693 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
694 @param pza array( '1', '3', '4', '6', ... ); 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 */
695 zIIDs_t( zval *pza ){
696 pIID = 0;
697 len = 0;
698 result = RES_ERROR;
699
700 if ( Z_TYPE_P(pza) != IS_ARRAY ){
701 result = RES_ERROR;
702 }
703 else {
704 len = zend_hash_num_elements(Z_ARRVAL_P(pza));
705 if(len == 0) {
706 pIID = new itemid_t[1];
707 result = RES_OK;
708 }
709 else {
710 /* php/ext/standard/string.c 鐃緒申 implode鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
711 zend_hash_*鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
712 */
713 zval **tmp;
714 HashPosition pos;
715 int i = 0;
716 pIID = new itemid_t[len];
717
718 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pza), &pos);
719 while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pza), (void **) &tmp, &pos) == SUCCESS ) {
720 SEPARATE_ZVAL(tmp); // zend.arguments.write-safety.html 鐃緒申鐃緒申
721 convert_to_long_ex(tmp);
722 if ( i < len )
723 pIID[i++] = Z_LVAL_PP(tmp);
724 zend_hash_move_forward_ex(Z_ARRVAL_P(pza), &pos);
725 }
726 len = i;
727 result = RES_OK;
728 }
729 }
730 }
731
732 ~zIIDs_t(){
733 if ( pIID ) delete[] pIID;
734 }
735 result_t getResult(){ return result; }
736 itemid_t *getPIID(){ return pIID; }
737 int getLen(){ return len; }
738 void dump(){
739 zend_printf( "dumping zIIDs...<br>\n" );
740 zend_printf( "result=%d<br>\n", (int)result );
741 zend_printf( "len=%d<br>\n", len );
742 for ( int i = 0; i < len; i++ ){
743 zend_printf( "pIID[%d] = %d<br>\n", i, pIID[i] );
744 }
745 }
746 };
747
748 /**
749 *
750 * amazonbook_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
751 * @param pAmazonbook 鐃緒申鐃緒申鐃緒申鐃緒申amazonbook_t*
752 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
753 * @return RES_OK
754 *
755 */
756 result_t amazonbookToZval( const amazonbook_t *pAmazonbook, zval *z )
757 {
758 zend_hash_clean( z -> value.ht );
759
760 add_assoc_string( z, "title", ( char* )pAmazonbook -> getTitle( ), 1 );
761 add_assoc_string( z, "author", ( char* )pAmazonbook -> getAuthor( ), 1 );
762 add_assoc_string( z, "publisher", ( char* )pAmazonbook -> getPublisher( ), 1 );
763 add_assoc_long( z, "year_of_publication", pAmazonbook -> getYearOfPublication( ) );
764 add_assoc_string( z, "isbn", ( char* )pAmazonbook -> getISBN( ), 1 );
765 add_assoc_string( z, "url", ( char* )pAmazonbook -> getURL( ), 1 );
766
767 return RES_OK;
768 }
769
770 /**
771 *
772 * pubmed_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
773 * @param pPubmed 鐃緒申鐃緒申鐃緒申鐃緒申pubmed_t*
774 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
775 * @return RES_OK
776 *
777 */
778 result_t pubmedToZval( const pubmed_t *pPubmed, zval *z )
779 {
780 zend_hash_clean( z -> value.ht );
781
782 add_assoc_long( z, "pmid", pPubmed -> getID( ) );
783 add_assoc_string( z, "title", ( char* )pPubmed -> getTitle( ), 1 );
784 add_assoc_string( z, "author", ( char* )pPubmed -> getAuthor( ), 1 );
785 add_assoc_string( z, "journal", ( char* )pPubmed -> getJournal( ), 1 );
786 add_assoc_long( z, "year_of_publication", pPubmed -> getYearOfPublication( ) );
787 add_assoc_long( z, "volume", pPubmed -> getVolume( ) );
788 add_assoc_long( z, "number", pPubmed -> getNumber( ) );
789 add_assoc_string( z, "page", ( char* )pPubmed -> getPage( ), 1 );
790 add_assoc_string( z, "abstract", ( char* )pPubmed -> getAbstract( ), 1 );
791
792 return RES_OK;
793 }
794
795 /**
796 *
797 * itemid_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
798 * @param piid 鐃緒申鐃緒申鐃緒申鐃緒申itemid_t鐃緒申鐃緒申鐃緒申
799 * @param len piid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
800 * @param ppz 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
801 * @return RES_OK
802 *
803 */
804 result_t itemidsToZval( const itemid_t *piid, int len, zval **ppz )
805 {
806 zend_hash_clean( Z_ARRVAL_PP(ppz) );
807
808 // add IDs
809 for ( int i = 0; i < len; i++ ){
810 add_next_index_long(*ppz, (long)(piid[i]) );
811 }
812
813 return RES_OK;
814 }
815
816 /**
817 *
818 * indexid_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
819 * @param piid 鐃緒申鐃緒申鐃緒申鐃緒申indexid_t鐃緒申鐃緒申鐃緒申
820 * @param len piid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
821 * @param ppz 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
822 * @return RES_OK
823 *
824 */
825 result_t indexidsToZval( const indexid_t *piid, int len, zval **ppz )
826 {
827 zend_hash_clean( Z_ARRVAL_PP(ppz) );
828
829 // add IDs
830 for ( int i = 0; i < len; i++ ){
831 add_next_index_long(*ppz, (long)(piid[i]) );
832 }
833
834 return RES_OK;
835 }
836
837 /**
838 *
839 * uids_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
840 *
841 * @param pUID 鐃緒申鐃緒申鐃緒申鐃緒申userid_t鐃緒申鐃緒申鐃緒申
842 * @param len pUID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
843 * @param pz 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
844 * @return RES_OK
845 *
846 */
847 result_t uidsToZval( userid_t *pUID, int len, zval **ppz )
848 {
849 zend_hash_clean( Z_ARRVAL_PP(ppz) );
850
851 // add UIDs
852 for ( int i = 0; i < len; i++ ){
853 add_next_index_long(*ppz, (long)(pUID[i]) );
854 }
855
856 return RES_OK;
857 }
858
859 /**
860 *
861 * groupid_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
862 * @param pGID 鐃緒申鐃緒申鐃緒申鐃緒申groupid_t鐃緒申鐃緒申鐃緒申
863 * @param len pGID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
864 * @param ppz 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
865 * @return RES_OK
866 *
867 */
868 result_t gidsToZval( groupid_t *pGID, int len, zval **ppz )
869 {
870 zend_hash_clean( Z_ARRVAL_PP(ppz) );
871
872 // add GIDs
873 for ( int i = 0; i < len; i++ ){
874 add_next_index_long(*ppz, (long)(pGID[i]) );
875 }
876
877 return RES_OK;
878 }
879
880 /**
881 *
882 * changelog_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
883 * @param pChangelog 鐃緒申鐃緒申鐃緒申鐃緒申changelog_t*
884 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
885 * @return RES_OK
886 *
887 */
888 result_t changelogToZval( const changelog_t *pChangelog, zval *z )
889 {
890 zend_hash_clean( z -> value.ht );
891
892 add_assoc_long( z, "log_id", pChangelog -> getChangelogID( ) );
893 add_assoc_long( z, "item_id", pChangelog -> getItemID( ) );
894 add_assoc_long( z, "log_date", pChangelog -> getDate( ) );
895 add_assoc_string( z, "log", ( char* )pChangelog -> getLog( ), 1 );
896
897 return RES_OK;
898 }
899
900 /**
901 *
902 * item_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
903 * @param pItem 鐃緒申鐃緒申鐃緒申鐃緒申item_t*
904 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
905 * @return RES_OK
906 *
907 */
908 result_t itemToZval( const item_t *pItem, zval *z )
909 {
910 zend_hash_clean( z -> value.ht );
911
912 add_assoc_long( z, "item_id", pItem -> getItemID( ) );
913 add_assoc_long( z, "item_type_id", pItem -> getItemTypeID( ) );
914 add_assoc_long( z, "uid", pItem -> getContributorUID( ) );
915 add_assoc_string( z, "title", ( char* )pItem -> getTitle( ), 1 );
916 add_assoc_string( z, "keywords", ( char* )pItem -> getKeywords( ), 1 );
917 add_assoc_string( z, "description", ( char* )pItem -> getDescription( ), 1 );
918 add_assoc_string( z, "doi", ( char* )pItem -> getDOI( ), 1 );
919 add_assoc_long( z, "last_update_date", pItem -> getLastUpdateDate( ) );
920 add_assoc_long( z, "creation_date", pItem -> getCreationDate( ) );
921 add_assoc_long( z, "publication_year", pItem -> getPublicationYear( ) );
922 add_assoc_long( z, "publication_month", pItem -> getPublicationMonth( ) );
923 add_assoc_long( z, "publication_mday", pItem -> getPublicationMday( ) );
924
925 return RES_OK;
926 }
927
928
929 result_t itemsToZval( const item_t *pItems, int itemsLen, zval *z )
930 {
931 zend_hash_clean( z -> value.ht );
932 for( int i = 0; i < itemsLen; i++ ){
933 zval *new_array;
934 MAKE_STD_ZVAL(new_array);
935 if(array_init(new_array) != SUCCESS){
936 return RES_ERROR;
937 }
938 add_index_zval( z, i, new_array );
939 itemToZval( &pItems[ i ], new_array );
940 }
941 return RES_OK;
942 }
943
944 /**
945 *
946 * PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申group_t鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
947 *
948 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
949 * @param pGroup 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
950 * @return RES_OK
951 *
952 */
953 result_t zvalToItem( zval *z, item_t* pItem )
954 {
955 zval **tmp;
956 char* key = 0;
957
958 key = "item_id";
959 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
960 convert_to_long_ex( tmp ) ;
961 pItem -> setItemID( (*tmp) -> value.lval );
962 }
963 key = "item_type_id";
964 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
965 convert_to_long_ex( tmp ) ;
966 pItem -> setItemTypeID( (*tmp) -> value.lval );
967 }
968 key = "uid";
969 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
970 convert_to_long_ex( tmp ) ;
971 pItem -> setContributorUID( (*tmp) -> value.lval );
972 }
973 key = "title";
974 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
975 convert_to_string_ex( tmp ) ;
976 pItem -> setTitle( (*tmp) -> value.str.val );
977 }
978 key = "keywords";
979 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
980 convert_to_string_ex( tmp ) ;
981 pItem -> setKeywords( (*tmp) -> value.str.val );
982 }
983 key = "description";
984 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
985 convert_to_string_ex( tmp ) ;
986 pItem -> setDescription( (*tmp) -> value.str.val );
987 }
988 key = "doi";
989 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
990 convert_to_string_ex( tmp ) ;
991 pItem -> setDOI( (*tmp) -> value.str.val );
992 }
993 key = "last_update_date";
994 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
995 convert_to_long_ex( tmp ) ;
996 pItem -> setLastUpdateDate( (*tmp) -> value.lval );
997 }
998 key = "creation_date";
999 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1000 convert_to_long_ex( tmp ) ;
1001 pItem -> setCreationDate( (*tmp) -> value.lval );
1002 }
1003 key = "publication_year";
1004 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1005 convert_to_long_ex( tmp ) ;
1006 pItem -> setPublicationYear( (*tmp) -> value.lval );
1007 }
1008 key = "publication_month";
1009 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1010 convert_to_long_ex( tmp ) ;
1011 pItem -> setPublicationMonth( (*tmp) -> value.lval );
1012 }
1013 key = "publication_mday";
1014 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1015 convert_to_long_ex( tmp ) ;
1016 pItem -> setPublicationMday( (*tmp) -> value.lval );
1017 }
1018 return RES_OK;
1019 }
1020
1021 /**
1022 *
1023 * account_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1024 * @param pAccount 鐃緒申鐃緒申鐃緒申鐃緒申account_t*
1025 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1026 * @return RES_OK
1027 *
1028 */
1029 result_t accountToZval( const account_t *pAccount, zval *z )
1030 {
1031 zend_hash_clean( z -> value.ht );
1032
1033 add_assoc_long( z, "uid", pAccount -> getUID( ) );
1034 add_assoc_string( z, "uname", ( char* )pAccount -> getUname( ), 1 );
1035 add_assoc_string( z, "name", ( char* )pAccount -> getName( ), 1 );
1036 add_assoc_string( z, "email", ( char* )pAccount -> getEmail( ), 1 );
1037 add_assoc_string( z, "url", ( char* )pAccount -> getURL( ), 1 );
1038 add_assoc_string( z, "user_avatar", ( char* )pAccount -> getUserAvatar( ), 1 );
1039 add_assoc_string( z, "user_icq", ( char* )pAccount -> getUserIcq( ), 1 );
1040 add_assoc_string( z, "user_from", ( char* )pAccount -> getUserFrom( ), 1 );
1041 add_assoc_string( z, "user_sig", ( char* )pAccount -> getUserSig( ), 1 );
1042 add_assoc_string( z, "actkey", ( char* )pAccount -> getActkey( ), 1 );
1043 add_assoc_string( z, "user_aim", ( char* )pAccount -> getUserAim( ), 1 );
1044 add_assoc_string( z, "user_yim", ( char* )pAccount -> getUserYim( ), 1 );
1045 add_assoc_string( z, "user_msnm", ( char* )pAccount -> getUserMsnm( ), 1 );
1046 add_assoc_string( z, "pass", ( char* )pAccount -> getPass( ), 1 );
1047 add_assoc_string( z, "theme", ( char* )pAccount -> getTheme( ), 1 );
1048 add_assoc_string( z, "umode", ( char* )pAccount -> getUmode( ), 1 );
1049 add_assoc_string( z, "user_occ", ( char* )pAccount -> getUserOcc( ), 1 );
1050 add_assoc_string( z, "bio", ( char* )pAccount -> getBio( ), 1 );
1051 add_assoc_string( z, "user_intrest", ( char* )pAccount -> getUserIntrest( ), 1 );
1052 add_assoc_double( z, "timezone_offset", pAccount -> getTimezoneOffset( ) );
1053 add_assoc_long( z, "attachsig", pAccount -> getAttachsig( ) );
1054 add_assoc_long( z, "last_login", pAccount -> getLastLogin( ) );
1055 add_assoc_long( z, "level", pAccount -> getLevel( ) );
1056 add_assoc_long( z, "notify_method", pAccount -> getNotifyMethod( ) );
1057 add_assoc_long( z, "notify_mode", pAccount -> getNotifyMode( ) );
1058 add_assoc_long( z, "posts", pAccount -> getPosts( ) );
1059 add_assoc_long( z, "rank", pAccount -> getRank( ) );
1060 add_assoc_long( z, "uorder", pAccount -> getUorder( ) );
1061 add_assoc_long( z, "user_mailok", pAccount -> getUserMailok( ) );
1062 add_assoc_long( z, "user_regdate", pAccount -> getUserRegdate( ) );
1063 add_assoc_long( z, "user_viewemail", pAccount -> getUserViewemail( ) );
1064
1065 add_assoc_long( z, "activate", pAccount -> getActivate( ) );
1066 add_assoc_string( z, "address", ( char* )pAccount -> getAddress( ), 1 );
1067 add_assoc_string( z, "division", ( char* )pAccount -> getDivision( ), 1 );
1068 add_assoc_string( z, "tel", ( char* )pAccount -> getTel( ), 1 );
1069 add_assoc_string( z, "company_name", ( char* )pAccount -> getCompanyName( ), 1 );
1070 add_assoc_string( z, "country", ( char* )pAccount -> getCountry( ), 1 );
1071 add_assoc_string( z, "zipcode", ( char* )pAccount -> getZipcode( ), 1 );
1072 add_assoc_string( z, "fax", ( char* )pAccount -> getFax( ), 1 );
1073 add_assoc_long( z, "notice_mail", pAccount -> getNoticeMail( ) );
1074 add_assoc_long( z, "notice_mail_since", pAccount -> getNoticeMailSince( ) );
1075 add_assoc_long( z, "private_index_id", pAccount -> getPrivateIndexID( ) );
1076 add_assoc_long( z, "item_number_limit", pAccount -> getItemNumberLimit( ) );
1077 add_assoc_long( z, "index_number_limit", pAccount -> getIndexNumberLimit( ) );
1078 add_assoc_double( z, "item_storage_limit", pAccount -> getItemStorageLimit( ) );
1079 return RES_OK;
1080 }
1081
1082 /**
1083 *
1084 * 鐃緒申鐃緒申鐃緒申account_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1085 * @param pAccounts 鐃緒申鐃緒申鐃緒申鐃緒申account_t*
1086 * @param accountsLen pAccounts鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1087 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1088 * @return RES_OK
1089 *
1090 z: 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 <br>
1091 array(
1092 array(
1093 'uid'=>100,
1094 'activate'=>1,
1095 'division'=>'foo',
1096 'tel'=>'123-456-789',
1097 ...
1098 ),
1099 ...
1100 )
1101 */
1102 result_t accountsToZval( const account_t *pAccounts, int accountsLen, zval *z )
1103 {
1104 zend_hash_clean( z -> value.ht );
1105 for( int i = 0; i < accountsLen; i++ ){
1106 zval *new_array;
1107 MAKE_STD_ZVAL(new_array);
1108 if(array_init(new_array) != SUCCESS){
1109 return RES_ERROR;
1110 }
1111 add_index_zval( z, i, new_array );
1112 accountToZval( &pAccounts[ i ], new_array );
1113 }
1114 return RES_OK;
1115 }
1116
1117 /**
1118 *
1119 * 鐃緒申鐃緒申鐃緒申group_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1120 * @param pGroups 鐃緒申鐃緒申鐃緒申鐃緒申group_t*
1121 * @param groupsLen pGroups鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1122 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1123 * @return RES_OK
1124 *
1125 z: 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 <br>
1126 array(
1127 array(
1128 'gid'=>1,
1129 'gname'=>'foo group',
1130 'gdesc'=>'group of foo'
1131 ),
1132 ...
1133 )
1134 */
1135 result_t groupsToZval( const group_t *pGroups, int groupsLen, zval *z )
1136 {
1137 zend_hash_clean( z -> value.ht );
1138 for( int i = 0; i < groupsLen; i++ ){
1139 zval *new_array;
1140 MAKE_STD_ZVAL(new_array);
1141 if(array_init(new_array) != SUCCESS){
1142 return RES_ERROR;
1143 }
1144 add_index_zval( z, i, new_array );
1145 add_assoc_long( new_array, "gid", pGroups[ i ].getGID( ) );
1146 add_assoc_string( new_array, "gname", ( char* )pGroups[ i ].getGname( ), 1 );
1147 add_assoc_string( new_array, "gdesc", ( char* )pGroups[ i ].getDesc( ), 1 );
1148 add_assoc_long( new_array, "group_index_id", pGroups[ i ].getGroupIndexID( ) );
1149 add_assoc_long( new_array, "item_number_limit", pGroups[ i ].getItemNumberLimit( ) );
1150 add_assoc_long( new_array, "index_number_limit", pGroups[ i ].getIndexNumberLimit( ) );
1151 add_assoc_double( new_array, "item_storage_limit", pGroups[ i ].getItemStorageLimit( ) );
1152 }
1153 return RES_OK;
1154 }
1155
1156 /**
1157 *
1158 * group_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1159 *
1160 * @param pGroup 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1161 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1162 * @return RES_OK
1163 *
1164 */
1165 result_t groupToZval( const group_t *pGroup, zval *z )
1166 {
1167 zend_hash_clean( z -> value.ht );
1168 add_assoc_long( z, "gid", pGroup -> getGID( ) );
1169 add_assoc_string( z, "gname", ( char* )pGroup -> getGname( ), 1 );
1170 add_assoc_string( z, "gdesc", ( char* )pGroup -> getDesc( ), 1 );
1171 add_assoc_long( z, "group_index_id", pGroup -> getGroupIndexID( ) );
1172 add_assoc_long( z, "item_number_limit", pGroup -> getItemNumberLimit( ) );
1173 add_assoc_long( z, "index_number_limit", pGroup -> getIndexNumberLimit( ) );
1174 add_assoc_double( z, "item_storage_limit", pGroup -> getItemStorageLimit( ) );
1175 return RES_OK;
1176 }
1177
1178 /**
1179 *
1180 * PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申group_t鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1181 *
1182 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1183 * @param pGroup 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1184 * @return RES_OK
1185 *
1186 */
1187 result_t zvalToGroup( zval *z, group_t *pGroup )
1188 {
1189 zval **tmp;
1190 char* key = 0;
1191
1192 key = "gid";
1193 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1194 convert_to_long_ex( tmp ) ;
1195 pGroup -> setGID( (*tmp) -> value.lval );
1196 }
1197 key = "gname";
1198 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1199 convert_to_string_ex( tmp ) ;
1200 pGroup -> setGname( (*tmp) -> value.str.val );
1201 }
1202 key = "gdesc";
1203 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1204 convert_to_string_ex( tmp ) ;
1205 pGroup -> setDesc( (*tmp) -> value.str.val );
1206 }
1207 key = "group_index_id";
1208 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1209 convert_to_long_ex( tmp ) ;
1210 pGroup -> setGroupIndexID( (*tmp) -> value.lval );
1211 }
1212 key = "item_number_limit";
1213 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1214 convert_to_long_ex( tmp ) ;
1215 pGroup -> setItemNumberLimit( (*tmp) -> value.lval );
1216 }
1217 key = "index_number_limit";
1218 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1219 convert_to_long_ex( tmp ) ;
1220 pGroup -> setIndexNumberLimit( (*tmp) -> value.lval );
1221 }
1222 key = "item_storage_limit";
1223 if( zend_hash_find( z -> value.ht, key, strlen( key ) + 1, ( void** )&tmp ) == SUCCESS ){
1224 convert_to_double_ex( tmp ) ;
1225 pGroup -> setItemStorageLimit( (*tmp) -> value.dval );
1226 }
1227 return RES_OK;
1228 }
1229
1230 /**
1231 *
1232 * session_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1233 *
1234 * @param pSession 鐃緒申鐃緒申鐃緒申鐃緒申session_t
1235 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1236 * @return RES_OK
1237 *
1238 */
1239 result_t sessionToZval( const session_t *pSession, zval *z )
1240 {
1241 string sessionID(unsignedIntToString(pSession->getSessionID()));
1242 add_assoc_string(z, "session_id", (char *)sessionID.c_str(), 1);
1243
1244 string date(unsignedIntToString((unsigned int)pSession->getDate()));
1245 add_assoc_string(z, "date", (char *)date.c_str(), 1);
1246
1247 string userID(unsignedIntToString((unsigned int)pSession->getUID()));
1248 add_assoc_string(z, "user_id", (char *)userID.c_str(), 1);
1249
1250 return RES_OK;
1251 }
1252
1253 /**
1254 *
1255 * index_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1256 * @param pIndex 鐃緒申鐃緒申鐃緒申鐃緒申index_t*
1257 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1258 * @return RES_OK
1259 *
1260 */
1261 result_t indexToZval( const index_t *pIndex, zval *z )
1262 {
1263 zend_hash_clean( z -> value.ht );
1264
1265 add_assoc_long( z, "item_id", pIndex -> getItemID( ) );
1266 add_assoc_long( z, "item_type_id", pIndex -> getItemTypeID( ) );
1267 add_assoc_long( z, "contributor_uid", pIndex -> getContributorUID( ) );
1268 add_assoc_string( z, "title", ( char* )pIndex -> getTitle( ), 1 );
1269 add_assoc_string( z, "keywords", ( char* )pIndex -> getKeywords( ), 1 );
1270 add_assoc_string( z, "description", ( char* )pIndex -> getDescription( ), 1 );
1271 add_assoc_long( z, "last_update_date", pIndex -> getLastUpdateDate( ) );
1272 add_assoc_long( z, "creation_date", pIndex-> getCreationDate( ) );
1273 add_assoc_long( z, "parent_index_id", pIndex -> getParentIndexID( ) );
1274 add_assoc_long( z, "owner_uid", pIndex -> getOwnerUID( ) );
1275 add_assoc_long( z, "owner_gid", pIndex -> getOwnerGID( ) );
1276 add_assoc_long( z, "open_level", pIndex -> getOpenLevel( ) );
1277 add_assoc_long( z, "sort_number", pIndex -> getSortNumber( ) );
1278 return RES_OK;
1279 }
1280
1281 result_t indexesToZval( const index_t *pIndexes, int indexesLen, zval *z )
1282 {
1283 zend_hash_clean( z -> value.ht );
1284 for( int i = 0; i < indexesLen; i++ ){
1285 zval *new_array;
1286 MAKE_STD_ZVAL(new_array);
1287 if(array_init(new_array) != SUCCESS){
1288 return RES_ERROR;
1289 }
1290 add_index_zval( z, i, new_array );
1291 indexToZval( &pIndexes[ i ], new_array );
1292 }
1293 return RES_OK;
1294 }
1295
1296 /**
1297 *
1298 * event_t鐃緒申鐃緒申鐃緒申鐃緒申PHP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1299 * @param pevent 鐃緒申鐃緒申鐃緒申鐃緒申event_t*
1300 * @param z 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申)
1301 * @return RES_OK
1302 *
1303 */
1304 result_t eventToZval( const event_t *pEvent, zval *z )
1305 {
1306 zend_hash_clean( z -> value.ht );
1307
1308 add_assoc_long ( z, "event_id" , pEvent -> getEventID() );
1309 add_assoc_long ( z, "event_type_id" , pEvent -> getEventTypeID() );
1310
1311 if ( pEvent->isValidTimestamp () ) add_assoc_long ( z, "timestamp" , pEvent -> getTimestamp() );
1312 if ( pEvent->isValidExecUID () ) add_assoc_long ( z, "exec_uid" , pEvent -> getExecUID() );
1313 if ( pEvent->isValidIndexID () ) add_assoc_long ( z, "index_id" , pEvent -> getIndexID() );
1314 if ( pEvent->isValidItemID () ) add_assoc_long ( z, "item_id" , pEvent -> getItemID() );
1315 if ( pEvent->isValidFileID () ) add_assoc_long ( z, "file_id" , pEvent -> getFileID() );
1316 if ( pEvent->isValidUID () ) add_assoc_long ( z, "uid" , pEvent -> getUID() );
1317 if ( pEvent->isValidGID () ) add_assoc_long ( z, "gid" , pEvent -> getGID() );
1318 if ( pEvent->isValidRemoteHost () ) add_assoc_string( z, "remote_host" , (char*)pEvent -> getRemoteHost() , 1 );
1319 if ( pEvent->isValidSearchKeyword () ) add_assoc_string( z, "search_keyword" , (char*)pEvent -> getSearchKeyword() , 1 );
1320 if ( pEvent->isValidAdditionalInfo() ) add_assoc_string( z, "additional_info", (char*)pEvent -> getAdditionalInfo(), 1 );
1321
1322 return RES_OK;
1323 }
1324
1325 result_t eventsToZval( const event_t *pevents, int eventsLen, zval *z )
1326 {
1327 zend_hash_clean( z -> value.ht );
1328 for( int i = 0; i < eventsLen; i++ ){
1329 zval *new_array;
1330 MAKE_STD_ZVAL(new_array);
1331 if(array_init(new_array) != SUCCESS){
1332 return RES_ERROR;
1333 }
1334 add_index_zval( z, i, new_array );
1335 eventToZval( &pevents[ i ], new_array );
1336 }
1337 return RES_OK;
1338 }
1339
1340
1341
1342
1343 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1344 int xnp_get_group( int sid, int gid, array group );
1345 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1346 @param gid XNP 鐃緒申 group_id
1347 @param group 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1348 @return 0 success <br>
1349 */
1350 ZEND_FUNCTION(xnp_get_group)
1351 {
1352 long sid, gid;
1353 zval *zgroup;
1354
1355 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1356 &sid, &gid, &zgroup) == FAILURE) {
1357 return;
1358 }
1359
1360 const group_t *pgroup;
1361 result_t result = getGroup( (sessionid_t)sid, (groupid_t)gid, &pgroup );
1362 if ( RES_OK == result ){
1363 groupToZval( pgroup, zgroup );
1364 freeGroup( pgroup );
1365 }
1366
1367 RETURN_LONG(result);
1368 }
1369
1370
1371 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1372 xnp_get_groups( int sid, array gids, array criteria, array groups );
1373 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1374 @param gids XNP 鐃緒申 group_id 鐃緒申鐃緒申鐃緒申
1375 @param criteria 鐃緒申鐃緒申
1376 @param groups 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1377 @return 0 success <br>
1378 */
1379 ZEND_FUNCTION(xnp_get_groups)
1380 {
1381 result_t result;
1382 long sid;
1383 zval *zcriteria;
1384 zval *zgids;
1385 zval *zgroups;
1386 zval **ppzTmp = 0;
1387 HashPosition pos;
1388 int res2;
1389 int gidsLen;
1390 const group_t* groups;
1391 int groupsLen;
1392
1393 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1394 &sid, &zgids, &zcriteria, &zgroups) == FAILURE) {
1395 return;
1396 }
1397
1398 //gids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1399 gidsLen = zend_hash_num_elements(Z_ARRVAL_P(zgids));
1400 groupid_t *gids = new groupid_t[ gidsLen ];
1401 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(zgids), &pos);
1402 for( int i = 0; i < gidsLen; i++ ){
1403 if( (res2=zend_hash_get_current_data_ex(Z_ARRVAL_P(zgids), (void **)&ppzTmp, &pos)) == SUCCESS ){
1404 SEPARATE_ZVAL(ppzTmp);
1405 convert_to_long_ex(ppzTmp);
1406 gids[ i ] = Z_LVAL_PP(ppzTmp);
1407 }
1408 zend_hash_move_forward_ex(Z_ARRVAL_P(zgids), &pos);
1409 }
1410
1411 zCriteria_t zcri(zcriteria);
1412 result = zcri.getResult();
1413 if ( RES_OK == result ){
1414 result = getGroups( (sessionid_t)sid, gids, gidsLen, &zcri, &groups, &groupsLen );
1415 if ( RES_OK == result ){
1416 groupsToZval( groups, groupsLen, zgroups );
1417 delete[] gids;
1418 freeGroup( groups );
1419 }
1420 }
1421 RETURN_LONG(result);
1422 }
1423
1424
1425 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1426 int xnp_is_moderator(int sid, int uid)
1427 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1428 @param uid xoops 鐃緒申 uid (xoops_users.uid)
1429 @return true 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申 <br>
1430 */
1431 ZEND_FUNCTION(xnp_is_moderator)
1432 {
1433 long xnpSessionID;
1434 userid_t uid;
1435
1436 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1437 &xnpSessionID, &uid) == FAILURE) {
1438 return;
1439 }
1440
1441 bool result = isModerator( (sessionid_t)xnpSessionID, uid );
1442 RETURN_BOOL(result)
1443 }
1444
1445 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申uid鐃緒申鐃緒申鐃緒申鐃緒申<br>
1446 int xnp_get_uid(string uname,int &uid)
1447 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1448 @param uname xoops 鐃緒申 uname (xoops_users.uname)
1449 @param uid xoops 鐃緒申 uid (xoops_users.uid) 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1450 @return 0 success
1451 */
1452 ZEND_FUNCTION(xnp_get_uid)
1453 {
1454 char *uname;
1455 int unameLen;
1456 zval *zuid;
1457 userid_t uid;
1458
1459 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
1460 &uname, &unameLen, &zuid) == FAILURE) {
1461 return;
1462 }
1463
1464 if (!PZVAL_IS_REF(zuid)) {
1465 zend_error(E_WARNING, "2nd parameter wasn't passed by reference");
1466 RETURN_LONG(RES_PHP_NONREF);
1467 }
1468
1469 string strUname( uname, unameLen );
1470 result_t result = getUid( strUname.c_str(), &uid );
1471 ZVAL_LONG(zuid, (long)uid);
1472 RETURN_LONG((long)result);
1473 }
1474
1475 ZEND_FUNCTION(xnp_test_criteria)
1476 {
1477 zval *z;
1478
1479 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1480 &z) == FAILURE) {
1481 return;
1482 }
1483 zend_printf("zend_printf...<br>\n");
1484 zCriteria_t zcri(z);
1485 zcri.dump();
1486 RETURN_FALSE
1487 }
1488
1489 ZEND_FUNCTION(xnp_test_uids)
1490 {
1491 zval *z;
1492
1493 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
1494 &z) == FAILURE) {
1495 return;
1496 }
1497 zend_printf("zend_printf...<br>\n");
1498 zUIDs_t zuids(z);
1499 zuids.dump();
1500 RETURN_FALSE
1501 }
1502
1503
1504
1505 /** DB鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1506 int initialize_db( string host[, string user[, string password[, string dbname[, string prefix, int dbtype]]]] );
1507 @param host 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申NULL
1508 @param user DB鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申NULL
1509 @param password DB鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申NULL
1510 @param dbname DB鐃緒申鐃緒申鐃緒申鐃緒申DB鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申""
1511 @param prefix XOOPS DB 鐃緒申prefix鐃緒申
1512 @param dbtype 1=MySQL 2=SQLite鐃緒申common.h鐃緒申鐃緒申
1513 @return 0 success <br>
1514 */
1515 ZEND_FUNCTION(xnp_initialize_db)
1516 {
1517 zval **parameters[5];
1518 char *host;
1519 char *user;
1520 char *password;
1521 char *dbname;
1522 char *prefix;
1523 long dbtype;
1524
1525 /* get the number of arguments */
1526 int argNum = ZEND_NUM_ARGS();
1527 if (argNum > 5)
1528 WRONG_PARAM_COUNT;
1529
1530 /* argument count is correct, now retrieve arguments */
1531 if(zend_get_parameters_array_ex(argNum, parameters) != SUCCESS)
1532 WRONG_PARAM_COUNT;
1533
1534 if (argNum < 1) host = NULL;
1535 else host = getZvalString( parameters[0] );
1536
1537 if (argNum < 2) user = NULL;
1538 else user = getZvalString( parameters[1] );
1539
1540 if (argNum < 3) password = NULL;
1541 else password = getZvalString( parameters[2] );
1542
1543 if (argNum < 4) dbname = "";
1544 else dbname = getZvalString( parameters[3] );
1545
1546 if (argNum < 5) prefix = "";
1547 else prefix = getZvalString( parameters[4] );
1548
1549 if (argNum < 6) dbtype = DBTYPE_MYSQL;
1550 else dbtype = getZvalInt( parameters[5] );
1551
1552 result_t result = initializeDB( host, user, password, dbname, prefix, (dbtype_t)dbtype );
1553
1554 RETURN_LONG(result);
1555 }
1556
1557 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1558 int xnp_login_user(string uname, string password, int &session_id)
1559 @param uname 鐃緒申鐃緒申鐃緒申鐃緒申(xoops_users.uname)
1560 @param password 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(md5(password)=xoops_users.pass)
1561 @return 0 success
1562 */
1563 ZEND_FUNCTION(xnp_login_user)
1564 {
1565 char *uname;
1566 int unameLen;
1567 char *passwd;
1568 int passwdLen;
1569 zval *zXNPSessionID;
1570
1571 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssz",
1572 &uname, &unameLen, &passwd, &passwdLen, &zXNPSessionID) == FAILURE) {
1573 return;
1574 }
1575
1576 if (!PZVAL_IS_REF(zXNPSessionID)) {
1577 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1578 RETURN_LONG(RES_PHP_NONREF);
1579 }
1580
1581 sessionid_t xnpSessionID;
1582 result_t result = loginUser( uname, passwd, &xnpSessionID );
1583 if ( result == RES_OK )
1584 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1585 RETURN_LONG((long)result);
1586 }
1587
1588 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1589 void xnp_logout_user(int xnp_session_id)
1590 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1591 @return 鐃緒申鐃緒申
1592 */
1593 ZEND_FUNCTION(xnp_logout_user)
1594 {
1595 long xnpSessionID;
1596
1597 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &xnpSessionID) == FAILURE) {
1598 return;
1599 }
1600 logoutUser( (sessionid_t)xnpSessionID );
1601
1602 RETURN_NULL();
1603 }
1604
1605 /** XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID 鐃緒申鐃緒申<br>
1606 int xnp_create_session( string xoops_sess_id, int uid, int &session )
1607 @param xoops_sess_id xoops鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1608 @param uid xoops 鐃緒申 uid (xoops_users.uid)
1609 @param session 鐃緒申鐃緒申鐃緒申鐃緒申XNP鐃緒申session鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1610 @return 0 鐃緒申鐃緒申
1611 */
1612 ZEND_FUNCTION(xnp_create_session)
1613 {
1614 char *xoopsSessionID;
1615 int xoopsSessionIDLen;
1616 long uid;
1617 zval *zXNPSessionID;
1618
1619 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slz",
1620 &xoopsSessionID, &xoopsSessionIDLen, &uid, &zXNPSessionID) == FAILURE) {
1621 return;
1622 }
1623
1624 if (!PZVAL_IS_REF(zXNPSessionID)) {
1625 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
1626 RETURN_LONG(RES_PHP_NONREF);
1627 }
1628
1629 sessionid_t xnpSessionID = 0;
1630 result_t result = createSession( xoopsSessionID, (userid_t)uid, &xnpSessionID );
1631 if ( result == RES_OK )
1632 ZVAL_LONG(zXNPSessionID, (long)xnpSessionID);
1633 RETURN_LONG((long)result);
1634 }
1635
1636 /** XNP 鐃緒申 session 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1637 int xnp_get_session( int xnp_session_id, array session_info )
1638 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1639 @param session_info 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1640 @return 0 success
1641 */
1642 ZEND_FUNCTION(xnp_get_session)
1643 {
1644 long xnpSessionID;
1645 zval *sessionInfo;
1646 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1647 &xnpSessionID, &sessionInfo) == FAILURE) {
1648 return;
1649 }
1650 const session_t *session = 0;
1651 result_t result = getSession( (sessionid_t)xnpSessionID, &session );
1652 if ( result == RES_OK ){
1653 sessionToZval( session, sessionInfo );
1654 freeSession( session );
1655 }
1656
1657 RETURN_LONG((long)result);
1658 }
1659
1660 /** 鐃緒申鐃緒申鐃緒申鐃緒申activate鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1661 bool xnp_is_activated( int xnp_session_id, int user_id )
1662 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1663 @param user_id xoops_users.uid
1664 @return 0 success
1665 */
1666 ZEND_FUNCTION(xnp_is_activated)
1667 {
1668 long sid, uid;
1669
1670 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &sid, &uid) == FAILURE) {
1671 return;
1672 }
1673
1674 bool result = isActivated( (sessionid_t)sid, (userid_t)uid );
1675
1676 RETURN_BOOL(result);
1677 }
1678
1679 /** activate鐃緒申鐃緒申鐃緒申<br>
1680 bool xnp_activate( int xnp_session_id, int user_id, bool activated )
1681 @param xnp_session_id xnp 鐃緒申 session id
1682 @param user_id xoops_users.uid
1683 @param activated true:activate, false:inactivate
1684 @return 0 success
1685 */
1686 ZEND_FUNCTION(xnp_activate)
1687 {
1688 long sid, uid;
1689 bool activated;
1690
1691 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llb",
1692 &sid, &uid, &activated) == FAILURE) {
1693 return;
1694 }
1695
1696 result_t result = activate( (sessionid_t)sid, (userid_t)uid, activated );
1697
1698 RETURN_LONG(result);
1699 }
1700
1701 /** XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1702 int xnp_get_account_count( int xnp_session_id )
1703 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1704 @return 0 success
1705 */
1706 ZEND_FUNCTION(xnp_get_account_count)
1707 {
1708 long sid;
1709
1710 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1711 &sid) == FAILURE) {
1712 return;
1713 }
1714
1715 long count = getAccountCount( (sessionid_t)sid );
1716 RETURN_LONG(count);
1717 }
1718
1719 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1720 bool xnp_delete_account( int xnp_session_id, int user_id )
1721 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1722 @param user_id xoops_users.uid
1723 @return 0 success
1724 */
1725 ZEND_FUNCTION(xnp_delete_account)
1726 {
1727 long sid, uid;
1728
1729 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
1730 &sid, &uid) == FAILURE) {
1731 return;
1732 }
1733
1734 result_t result = deleteAccount( (sessionid_t)sid, (userid_t)uid );
1735
1736 RETURN_LONG(result);
1737 }
1738
1739 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1740 int xnp_get_account( int xnp_session_id, int user_id, array account_info )
1741 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1742 @param user_id xoops_users.uid
1743 @param account_info 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1744 @return 0 success
1745 */
1746 ZEND_FUNCTION(xnp_get_account)
1747 {
1748 long sid, uid;
1749 zval *zaccount;
1750
1751 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
1752 &sid, &uid, &zaccount) == FAILURE) {
1753 fprintf( stderr, "error occured " );
1754 return;
1755 }
1756
1757 const account_t *paccount;
1758 result_t result = getAccount( (sessionid_t)sid, (userid_t)uid, &paccount );
1759 if ( RES_OK == result ){
1760 accountToZval( paccount, zaccount );
1761 freeAccount( paccount );
1762 }
1763
1764 RETURN_LONG(result);
1765 }
1766
1767 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1768 int xnp_get_accoutns( int sid, array uids, array criteria, array accounts );
1769 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1770 @param user_id xoops_users.uid
1771 @param criteria 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1772 @param account_info 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1773 @return 0 success
1774 */
1775 ZEND_FUNCTION(xnp_get_accounts)
1776 {
1777 result_t result;
1778 long sid;
1779 zval *zuids;
1780 zval *zcriteria;
1781 zval *zaccount;
1782
1783 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
1784 &sid, &zuids, &zcriteria, &zaccount) == FAILURE) {
1785 return;
1786 }
1787
1788 zCriteria_t zcri(zcriteria);
1789 result = zcri.getResult();
1790 if ( RES_OK == result ){
1791 zUIDs_t zUIDs(zuids);
1792 result = zUIDs.getResult();
1793 if ( RES_OK == result ){
1794 const account_t *paccounts;
1795 int accountLen;
1796 result = getAccounts( (sessionid_t)sid,
1797 zUIDs.getPUID(), zUIDs.getLen(),
1798 &zcri, &paccounts, &accountLen );
1799 if ( RES_OK == result ){
1800 accountsToZval( paccounts, accountLen, zaccount );
1801 freeAccount( paccounts );
1802 }
1803 }
1804 }
1805
1806 RETURN_LONG(result);
1807 }
1808
1809 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1810 int xnp_insert_account( int sid, array account_info, int &user_id );
1811 @param xnp_session_id xnp 鐃緒申 session id
1812 @param account_info 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1813 @param user_id 鐃緒申鐃緒申鐃緒申ID(xoops_users.uid)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1814 @return 0 success
1815 */
1816 ZEND_FUNCTION(xnp_insert_account)
1817 {
1818 result_t result;
1819 long sid;
1820 zval *zaccount;
1821 zval *zuid;
1822 userid_t uid;
1823
1824 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
1825 &sid, &zaccount, &zuid) == FAILURE) {
1826 return;
1827 }
1828
1829 zAccount_t zacc(zaccount);
1830 result = zacc.getResult();
1831 if ( RES_OK == result ){
1832 result = insertAccount( (sessionid_t)sid, &zacc, &uid );
1833 }
1834 zuid -> type = IS_LONG;
1835 zuid -> value.lval = uid;
1836 RETURN_LONG(result);
1837 }
1838
1839 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1840 int xnp_update_account( int sid, array account );
1841 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1842 @param account_info 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1843 @return 0 success
1844 */
1845 ZEND_FUNCTION(xnp_update_account)
1846 {
1847 result_t result;
1848 long sid;
1849 zval *zaccount;
1850
1851 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
1852 &sid, &zaccount) == FAILURE) {
1853 return;
1854 }
1855
1856 zAccount_t zacc(zaccount);
1857 result = zacc.getResult();
1858 if ( RES_OK == result ){
1859 result = updateAccount( (sessionid_t)sid, &zacc );
1860 }
1861
1862 RETURN_LONG(result);
1863 }
1864
1865 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1866 int xnp_dump_uids( int xnp_session_id, array criteria, array uids );
1867 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1868 @param criteria 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1869 @param uids uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1870 @return 0 success
1871 */
1872 ZEND_FUNCTION(xnp_dump_uids)
1873 {
1874 result_t result;
1875 long sid;
1876 zval *zcriteria;
1877 zval *zuids;
1878
1879 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1880 &sid, &zcriteria, &zuids) == FAILURE) {
1881 return;
1882 }
1883
1884 zCriteria_t zcri(zcriteria);
1885 result = zcri.getResult();
1886 if ( RES_OK == result ){
1887 userid_t *puid;
1888 int uidLen;
1889 result = dumpUids( (sessionid_t)sid, &zcri, &puid, &uidLen );
1890 if ( RES_OK == result ){
1891 uidsToZval( puid, uidLen, &zuids );
1892 freeUID( puid );
1893 }
1894 }
1895
1896 RETURN_LONG(result);
1897 }
1898
1899 /** XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1900 int xnp_get_group_count( int xnp_session_id );
1901 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1902 @return 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1903 */
1904 ZEND_FUNCTION(xnp_get_group_count)
1905 {
1906 long sid;
1907
1908 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
1909 &sid) == FAILURE) {
1910 return;
1911 }
1912
1913 int count = getGroupCount( (sessionid_t)sid );
1914
1915 RETURN_LONG(count);
1916 }
1917
1918 /** uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申gid鐃緒申鐃緒申鐃緒申<br>
1919 int xnp_get_group_by_uid( int xnp_session_id, int uid, array criteria, array gids );
1920 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1921 @param user_id xoops_users.uid
1922 @param criteria 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1923 @param gids gid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1924 @return 0 success
1925 */
1926 ZEND_FUNCTION(xnp_get_groups_by_uid)
1927 {
1928 result_t result;
1929 long sid, uid;
1930 zval *zcriteria;
1931 zval *zgids;
1932
1933 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
1934 &sid, &uid, &zcriteria, &zgids) == FAILURE) {
1935 return;
1936 }
1937
1938 zCriteria_t zcri(zcriteria);
1939 result = zcri.getResult();
1940 if ( RES_OK == result ){
1941 groupid_t *pgids;
1942 int gidLen;
1943 result = getGroupsByUid( (sessionid_t)sid, (userid_t)uid, &zcri, &pgids, &gidLen );
1944 if ( RES_OK == result ){
1945 gidsToZval( pgids, gidLen, &zgids );
1946 freeGID( pgids );
1947 }
1948 }
1949
1950 RETURN_LONG(result);
1951 }
1952
1953
1954
1955 /** uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申gid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1956 int xnp_is_group_admin( int sid, int gid, int uid );
1957 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1958 @param group_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1959 @param user_id xoops_users.uid
1960 @return true: 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1961 @return false: 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1962 */
1963 ZEND_FUNCTION(xnp_is_group_admin)
1964 {
1965 long sid, gid, uid;
1966
1967 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
1968 &sid, &gid, &uid) == FAILURE) {
1969 return;
1970 }
1971
1972 bool b = isGroupAdmin( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
1973
1974 RETURN_BOOL(b);
1975 }
1976
1977 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申gid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
1978 int xnp_dump_gids( int sid, array criteria, array gids );
1979 @param xnp_session_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
1980 @param criteria 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1981 @param gids gid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
1982 @return 0 success
1983 */
1984 ZEND_FUNCTION(xnp_dump_gids)
1985 {
1986 result_t result;
1987 long sid;
1988 zval *zcriteria;
1989 zval *zgids;
1990
1991 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
1992 &sid, &zcriteria, &zgids) == FAILURE) {
1993 return;
1994 }
1995
1996 zCriteria_t zcri(zcriteria);
1997 result = zcri.getResult();
1998 if ( RES_OK == result ){
1999 groupid_t *pgid;
2000 int gidLen;
2001 result = dumpGids( (sessionid_t)sid, &zcri, &pgid, &gidLen );
2002 if ( RES_OK == result ){
2003 gidsToZval( pgid, gidLen, &zgids );
2004 freeGID( pgid );
2005 }
2006 }
2007
2008 RETURN_LONG(result);
2009 }
2010
2011 /** gid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2012 int xnp_dump_group_admins(int sid, int group_id, array criteria, array uids )
2013 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2014 @param group_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2015 @param criteria 鐃緒申鐃緒申
2016 @param uids uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2017 @return 0 success
2018 */
2019
2020 ZEND_FUNCTION(xnp_dump_group_admins)
2021 {
2022 long sid, gid;
2023 zval *zcriteria;
2024 zval *zuids;
2025
2026 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2027 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2028 return;
2029 }
2030
2031 zCriteria_t zcri(zcriteria);
2032 result_t result = zcri.getResult();
2033 if ( result == RES_OK ){
2034 userid_t *uids;
2035 int uidsLen;
2036 result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
2037 if ( result == RES_OK ){
2038 uidsToZval( uids, uidsLen, &zuids );
2039 freeUID( uids );
2040 }
2041 }
2042 RETURN_LONG( result );
2043 }
2044
2045 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2046 int xnp_delete_member(int sid, int group_id, int user_id )
2047 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2048 @param group_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2049 @param user_id 鐃緒申鐃緒申鐃緒申ID
2050 @return 0 success
2051 */
2052
2053 ZEND_FUNCTION(xnp_delete_member)
2054 {
2055 long sid, gid, uid;
2056
2057 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2058 &sid, &gid, &uid) == FAILURE) {
2059 return;
2060 }
2061
2062 result_t result = deleteMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid );
2063 RETURN_LONG( result );
2064 }
2065
2066 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2067 int xnp_insert_member(int sid, int group_id, int user_id, bool admin )
2068 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2069 @param group_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2070 @param user_id 鐃緒申鐃緒申鐃緒申ID
2071 @param admin 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申true
2072 @return 0 success
2073 */
2074
2075 ZEND_FUNCTION(xnp_insert_member)
2076 {
2077 long sid, gid, uid;
2078 zend_bool admin;
2079
2080 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllb",
2081 &sid, &gid, &uid, &admin) == FAILURE) {
2082 return;
2083 }
2084
2085 result_t result = insertMember( (sessionid_t)sid, (groupid_t)gid, (userid_t)uid, (bool)admin );
2086 RETURN_LONG( result );
2087 }
2088
2089 /** gid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2090 int xnp_get_members(int sid, int group_id, array criteria, array uids )
2091 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2092 @param group_id XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2093 @param criteria 鐃緒申鐃緒申
2094 @param uids uid鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2095 @return 0 success
2096 */
2097
2098 ZEND_FUNCTION(xnp_get_members)
2099 {
2100 long sid, gid;
2101 zval *zcriteria;
2102 zval *zuids;
2103
2104 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2105 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2106 return;
2107 }
2108
2109 zCriteria_t zcri(zcriteria);
2110 result_t result = zcri.getResult();
2111 if ( result == RES_OK ){
2112 userid_t *uids;
2113 int uidsLen;
2114 result = getMembers( (sessionid_t)sid, (groupid_t)gid, &zcri, &uids, &uidsLen );
2115 if ( result == RES_OK ){
2116 uidsToZval( uids, uidsLen, &zuids );
2117 freeUID( uids );
2118 }
2119 }
2120 RETURN_LONG( result );
2121 }
2122
2123 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2124 int xnp_update_group(int sid, array group )
2125 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2126 @param group 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2127 @return 0 success
2128 */
2129 ZEND_FUNCTION(xnp_update_group)
2130 {
2131 long sid;
2132 zval *zgroup;
2133 group_t group;
2134
2135 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2136 &sid, &zgroup) == FAILURE) {
2137 return;
2138 }
2139
2140 zvalToGroup( zgroup, &group );
2141 result_t result = updateGroup( sid, &group );
2142 RETURN_LONG( result );
2143 }
2144
2145 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2146 int xnp_insert_group( int sid, array group, int &gid )
2147 @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2148 @param group 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2149 @param gid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2150 @return RES_OK
2151 @return RES_DB_NOT_INITIALIZED
2152 @return RES_NO_SUCH_SESSION
2153 @return RES_DB_QUERY_ERROR
2154 */
2155 ZEND_FUNCTION(xnp_insert_group)
2156 {
2157 long sid;
2158 zval *zgroup;
2159 zval *zgid;
2160 group_t group;
2161 groupid_t gid;
2162
2163 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2164 &sid, &zgroup, &zgid ) == FAILURE) {
2165 return;
2166 }
2167
2168 zvalToGroup( zgroup, &group );
2169 result_t result = insertGroup( sid, &group, &gid );
2170 zgid -> type = IS_LONG;
2171 zgid -> value.lval = gid;
2172 RETURN_LONG( result );
2173 }
2174
2175
2176 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2177 int xnp_delete_group( int sid, int gid )
2178 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2179 @param gid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2180 @return RES_OK
2181 @return RES_DB_QUERY_ERROR
2182 @return RES_NO_SUCH_SESSION
2183 @return RES_DB_NOT_INITIALIZED
2184 */
2185 ZEND_FUNCTION(xnp_delete_group)
2186 {
2187 long sid;
2188 long gid;
2189
2190 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2191 &sid, &gid) == FAILURE) {
2192 return;
2193 }
2194 RETURN_LONG( deleteGroup( sid, gid ) );
2195 }
2196
2197 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2198 int xnp_dump_group_admins( int sid, int gid, array criteria, array uids )
2199 @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2200 @param gid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2201 @param criteria uids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2202 @param uids 鐃緒申鐃緒申鐃緒申鐃緒申UID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2203 @return RES_OK
2204 @return RES_DB_QUERY_ERROR
2205 @return RES_NO_SUCH_SESSION
2206 @return RES_DB_NOT_INITIALIZED
2207 */
2208 /*
2209 ZEND_FUNCTION(xnp_dump_group_admins)
2210 {
2211 long sid;
2212 long gid;
2213 zval *zcriteria;
2214 zval *zuids;
2215
2216 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2217 &sid, &gid, &zcriteria, &zuids) == FAILURE) {
2218 return;
2219 }
2220 zCriteria_t zcri(zcriteria);
2221 result_t result = zcri.getResult();
2222 if ( RES_OK == result ){
2223 userid_t* uids;
2224 int uidsLen;
2225 result_t result = dumpGroupAdmins( sid, gid, &zcri, &uids, &uidsLen );
2226 if( result != RES_OK ) RETURN_LONG( result );
2227 uidsToZval( uids, uidsLen, &zuids );
2228 fprintf( stderr, "uidsLen=%d\n", uidsLen );
2229 for( int i = 0; i < uidsLen; i++ ){
2230 fprintf( stderr, "%d, \n", uids[ i ] );
2231 }
2232 freeUID( uids );
2233 RETURN_LONG( result );
2234 }
2235 RETURN_LONG( result );
2236 }
2237 */
2238
2239 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2240 * int xnp_get_all_indexes( int sid, array criteria, array indexes );
2241 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2242 * @param cri 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2243 * @return RES_OK
2244 */
2245 ZEND_FUNCTION(xnp_get_all_indexes)
2246 {
2247 long sid;
2248 zval *zcriteria;
2249 zval *zindexes;
2250
2251 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2252 &sid, &zcriteria, &zindexes) == FAILURE) {
2253 return;
2254 }
2255 zCriteria_t zcri(zcriteria);
2256 result_t result = zcri.getResult();
2257 if ( RES_OK == result ){
2258 const index_t *indexes;
2259 int indexesLen;
2260 result = getAllIndexes( sid, &zcri, &indexes, &indexesLen );
2261 if ( RES_OK == result ){
2262 result = indexesToZval( indexes, indexesLen, zindexes );
2263 freeIndex( indexes );
2264 }
2265 }
2266 RETURN_LONG(result);
2267 }
2268
2269 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2270 * int xnp_get_indexes( int sid, int parentXID, array criteria, array indexes );
2271 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2272 * @param parentXID 鐃緒申鐃緒申indexID
2273 * @param cri 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2274 * @param indexes 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2275 * @return RES_OK
2276 */
2277 ZEND_FUNCTION(xnp_get_indexes)
2278 {
2279 long sid;
2280 long parentXID;
2281 zval *zcriteria;
2282 zval *zindexes;
2283
2284 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2285 &sid, &parentXID, &zcriteria, &zindexes) == FAILURE) {
2286 return;
2287 }
2288 zCriteria_t zcri(zcriteria);
2289 result_t result = zcri.getResult();
2290 if ( RES_OK == result ){
2291 const index_t *indexes;
2292 int indexesLen;
2293 result = getIndexes( sid, parentXID, &zcri, &indexes, &indexesLen );
2294 if ( RES_OK == result ){
2295 result = indexesToZval( indexes, indexesLen, zindexes );
2296 freeIndex( indexes );
2297 }
2298 }
2299 RETURN_LONG(result);
2300 }
2301
2302
2303 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2304 * int xnp_insert_index( int sid, array index, int &indexID );
2305 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2306 * @param index 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2307 * @param indexID 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2308 * @return RES_OK
2309 */
2310 ZEND_FUNCTION(xnp_insert_index)
2311 {
2312 long sid;
2313 zval *zindex;
2314 zval *zIndexID;
2315
2316 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2317 &sid, &zindex, &zIndexID) == FAILURE) {
2318 return;
2319 }
2320
2321 if (!PZVAL_IS_REF(zIndexID)) {
2322 zend_error(E_WARNING, "3rd parameter wasn't passed by reference");
2323 RETURN_LONG(RES_PHP_NONREF);
2324 }
2325 zIndex_t index( zindex );
2326 indexid_t xid;
2327 result_t result = insertIndex( sid, &index, &xid );
2328 if ( RES_OK == result )
2329 ZVAL_LONG(zIndexID, (long)xid);
2330 RETURN_LONG(result);
2331 }
2332
2333 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2334 * int xnp_update_index( int sid, array index );
2335 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2336 * @param index 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2337 * @return RES_OK
2338 */
2339 ZEND_FUNCTION(xnp_update_index)
2340 {
2341 long sid;
2342 zval *zindex;
2343
2344 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
2345 &sid, &zindex) == FAILURE) {
2346 return;
2347 }
2348 zIndex_t index(zindex);
2349 result_t result = index.getResult();
2350 if ( RES_OK == result ){
2351 result = updateIndex( sid, &index );
2352 }
2353 RETURN_LONG(result);
2354 }
2355
2356 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2357 * int xnp_delete_index( int sid, int indexID );
2358 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2359 * @param indexID 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2360 * @return RES_OK
2361 */
2362 ZEND_FUNCTION(xnp_delete_index)
2363 {
2364 long sid;
2365 long xid;
2366
2367 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2368 &sid, &xid) == FAILURE) {
2369 return;
2370 }
2371
2372 result_t result = deleteIndex( sid, xid );
2373 RETURN_LONG(result);
2374 }
2375
2376
2377 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2378 * int xnp_get_index( int sid, int indexID, array index );
2379 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2380 * @param indexID 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2381 * @param index 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2382 * @return RES_OK
2383 */
2384 ZEND_FUNCTION(xnp_get_index)
2385 {
2386 long sid;
2387 long xid;
2388 zval *zindex;
2389
2390 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2391 &sid, &xid, &zindex) == FAILURE) {
2392 return;
2393 }
2394
2395 const index_t *index;
2396 result_t result = getIndex( sid, xid, &index );
2397 if ( RES_OK == result ){
2398 result = indexToZval( index, zindex );
2399 freeIndex( index );
2400 }
2401 RETURN_LONG(result);
2402 }
2403
2404
2405
2406 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2407 * int xnp_is_index_readable( int sid, int indexID );
2408 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2409 * @param indexID 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2410 * @return true false
2411 */
2412 ZEND_FUNCTION(xnp_is_index_readable)
2413 {
2414 long sid;
2415 long xid;
2416
2417 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2418 &sid, &xid) == FAILURE) {
2419 return;
2420 }
2421 RETURN_BOOL(isIndexReadable(sid,xid));
2422 }
2423
2424
2425 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2426 * int xnp_is_index_writable( int sid, int indexID );
2427 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2428 * @param indexID 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2429 * @return true false
2430 */
2431 ZEND_FUNCTION(xnp_is_index_writable)
2432 {
2433 long sid;
2434 long xid;
2435
2436 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
2437 &sid, &xid) == FAILURE) {
2438 return;
2439 }
2440 RETURN_BOOL(isIndexWritable(sid,xid));
2441 }
2442
2443 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2444 * int xnp_swap_index_sort_number( int sid, int indexID1, int indexID2 );
2445 * @param sid XNP鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2446 * @param indexID1 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2447 * @param indexID2 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2448 * @return true false
2449 */
2450 ZEND_FUNCTION(xnp_swap_index_sort_number)
2451 {
2452 long sid;
2453 long xid1, xid2;
2454
2455 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2456 &sid, &xid1, &xid2) == FAILURE) {
2457 return;
2458 }
2459
2460 result_t result = swapIndexSortNumber( sid, xid1, xid2 );
2461 RETURN_LONG(result);
2462 }
2463
2464
2465
2466 /** XNP鐃緒申session_id鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2467 bool xnp_is_valid_session_id( int xnp_session_id)
2468 @return true 鐃緒申鐃緒申鐃緒申XNP鐃緒申session_id鐃緒申鐃緒申鐃緒申<br>
2469 @return false 鐃緒申鐃緒申鐃緒申session_id鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2470 */
2471 ZEND_FUNCTION(xnp_is_valid_session_id)
2472 {
2473 long sid;
2474 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sid ) == FAILURE) {
2475 return;
2476 }
2477
2478 RETURN_BOOL(isValidSessionID((sessionid_t)sid));
2479 }
2480
2481 /** 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申<br>
2482 string xnp_get_last_error_string()
2483 @return 0 success
2484 */
2485 ZEND_FUNCTION(xnp_get_last_error_string)
2486 {
2487 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "" ) == FAILURE) {
2488 return;
2489 }
2490
2491 string str( getLastErrorString() );
2492 RETURN_STRING((char *)str.c_str(), 1);
2493 }
2494
2495
2496 /**
2497 *
2498 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2499 *
2500 * @refer itemop_t
2501 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2502 * @param iid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2503 * @param op 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2504 * @return true 鐃緒申鐃緒申鐃緒申鐃緒申
2505 * @return false 鐃緒申鐃緒申鐃緒申鐃緒申
2506 *
2507 */
2508 ZEND_FUNCTION(xnp_get_item_permission)
2509 {
2510 long sid;
2511 itemid_t iid;
2512 long op;
2513
2514 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2515 &sid, &iid, &op) == FAILURE) {
2516 fprintf( stderr, "error occured " );
2517 return;
2518 }
2519 RETURN_BOOL( getItemPermission( (sessionid_t)sid, iid, op ) );
2520 }
2521
2522
2523 /**
2524 *
2525 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2526 *
2527 * @refer indexop_t
2528 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2529 * @param xid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2530 * @param op 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2531 * @return true 鐃緒申鐃緒申鐃緒申鐃緒申
2532 * @return false 鐃緒申鐃緒申鐃緒申鐃緒申
2533 *
2534 */
2535 ZEND_FUNCTION(xnp_get_index_permission)
2536 {
2537 long sid;
2538 indexid_t xid;
2539 long op;
2540
2541 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
2542 &sid, &xid, &op) == FAILURE) {
2543 fprintf( stderr, "error occured " );
2544 return;
2545 }
2546 RETURN_BOOL( getIndexPermission( (sessionid_t)sid, xid, op ) );
2547 }
2548
2549
2550 /**
2551 *
2552 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2553 * @refer certify_t
2554 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2555 * @param xid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2556 * @param iid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2557 * @param state 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2558 * @return true 鐃緒申鐃緒申鐃緒申鐃緒申
2559 * @return false 鐃緒申鐃緒申鐃緒申鐃緒申
2560 *
2561 */
2562 ZEND_FUNCTION(xnp_get_certify_permission)
2563 {
2564 long sid;
2565 itemid_t iid;
2566 indexid_t xid;
2567 certify_t state;
2568
2569 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2570 &sid, &xid, &iid, &state) == FAILURE) {
2571 fprintf( stderr, "error occured " );
2572 return;
2573 }
2574 RETURN_BOOL( getCertifyPermission( (sessionid_t)sid, xid, iid, state ) );
2575 }
2576
2577
2578 /**
2579 *
2580 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2581 * @refer certify_t
2582 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2583 * @param xid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2584 * @param iid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2585 * @param state 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2586 * @return RES_OK
2587 * @return RES_NO_WRITE_ACCESS_RIGHT
2588 *
2589 */
2590 ZEND_FUNCTION(xnp_get_certify_state)
2591 {
2592 long sid;
2593 indexid_t xid;
2594 itemid_t iid;
2595 zval *zstate;
2596 result_t result = RES_ERROR;
2597
2598 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllz",
2599 &sid, &xid, &iid, &zstate) == FAILURE) {
2600 fprintf( stderr, "error occured " );
2601 return;
2602 }
2603 certify_t st;
2604 result = getCertifyState( (sessionid_t)sid, xid, iid, &st );
2605 if ( RES_OK == result ){
2606 zstate -> type = IS_LONG;
2607 zstate -> value.lval = st;
2608 }
2609 RETURN_LONG( result );
2610 }
2611
2612
2613 /**
2614 *
2615 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2616 * @refer certify_t
2617 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2618 * @param xid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2619 * @param iid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2620 * @param state 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2621 * @return RES_OK
2622 * @return RES_NO_WRITE_ACCESS_RIGHT
2623 *
2624 */
2625 ZEND_FUNCTION(xnp_set_certify_state)
2626 {
2627 long sid;
2628 indexid_t xid;
2629 itemid_t iid;
2630 certify_t state;
2631 result_t result = RES_ERROR;
2632
2633 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll",
2634 &sid, &xid, &iid, &state) == FAILURE) {
2635 fprintf( stderr, "error occured " );
2636 return;
2637 }
2638 result = setCertifyState( (sessionid_t)sid, xid, iid, state );
2639 RETURN_LONG( result );
2640 }
2641
2642
2643 /**
2644 *
2645 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2646 *
2647 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2648 * @param itemid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2649 * @param log 鐃緒申鐃緒申鐃緒申鐃緒申
2650 * @return RES_OK
2651 * @return RES_NO_SUCH_SESSION
2652 * @return RES_DB_QUERY_ERROR
2653 * @return RES_NO_WRITE_ACCESS_RIGHT
2654 * @return RES_DB_NOT_INITIALIZED
2655 * @return RES_ERROR
2656 *
2657 */
2658 ZEND_FUNCTION(xnp_insert_change_log)
2659 {
2660 long sid;
2661 itemid_t iid;
2662 zval *zlog;
2663 result_t result = RES_ERROR;
2664
2665 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llz",
2666 &sid, &iid, &zlog) == FAILURE) {
2667 fprintf( stderr, "error occured " );
2668 return;
2669 }
2670
2671 result = insertChangeLog( sid, iid, getZvalString( &zlog ) );
2672 RETURN_LONG( result );
2673 }
2674
2675
2676 /**
2677 *
2678 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2679 *
2680 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2681 * @param itemid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2682 * @param logs 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2683 * @param logsLen logs鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2684 * @return RES_OK
2685 * @return RES_NO_SUCH_SESSION
2686 * @return RES_NO_READ_ACCESS_RIGHT
2687 * @return RES_DB_NOT_INITIALIZED
2688 * @return RES_ERROR
2689 *
2690 */
2691 ZEND_FUNCTION(xnp_get_change_logs)
2692 {
2693 result_t result;
2694 long sid;
2695 itemid_t iid;
2696 zval *zlogs;
2697
2698 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
2699 &sid, &iid, &zlogs) == FAILURE) {
2700 return;
2701 }
2702
2703 const changelog_t *plogs;
2704 int logLen;
2705 result = getChangeLogs( (sessionid_t)sid, iid, &plogs, &logLen );
2706 if ( RES_OK == result ){
2707 zend_hash_clean( zlogs -> value.ht );
2708 for( int i = 0; i < logLen; i++ ){
2709 zval *new_array;
2710 MAKE_STD_ZVAL(new_array);
2711 if(array_init(new_array) != SUCCESS){
2712 result = RES_ERROR;
2713 break;
2714 }
2715 add_index_zval( zlogs, i, new_array );
2716 changelogToZval( &plogs[ i ], new_array );
2717 }
2718 freeChangeLog( plogs );
2719 }
2720 RETURN_LONG(result);
2721 }
2722
2723
2724 /**
2725 *
2726 * 鐃緒申鐃緒申鐃緒申key鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申vaule鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2727 * value鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申freeString鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2728 * @param key 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2729 * @param value 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2730 *
2731 * @return RES_OK
2732 * @return RES_DB_QUERY_ERROR
2733 * @return RES_ERROR
2734 */
2735 ZEND_FUNCTION(xnp_get_config_value)
2736 {
2737 char* name;
2738 int nameLen;
2739 zval* zvalue;
2740 char* value = 0;
2741
2742 result_t result = RES_ERROR;
2743
2744 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
2745 &name, &nameLen, &zvalue ) == FAILURE) {
2746 return;
2747 }
2748
2749 result = getConfigValue( name, &value );
2750 if( result == RES_OK ){
2751 ZVAL_STRING( zvalue, value, true/*duplicate*/ );
2752 }
2753 if ( value != 0 )
2754 freeString( value );
2755 RETURN_LONG( result );
2756 }
2757
2758
2759 /**
2760 *
2761 * 鐃緒申鐃緒申鐃緒申key鐃緒申鐃緒申鐃緒申vaule鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2762 *
2763 * @param key 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2764 * @param value 鐃緒申鐃緒申鐃緒申
2765 *
2766 * @return RES_OK
2767 * @return RES_DB_QUERY_ERROR
2768 * @return RES_ERROR
2769 */
2770 ZEND_FUNCTION(xnp_set_config_value)
2771 {
2772 char *name;
2773 int nameLen;
2774 char *value;
2775 int valueLen;
2776 result_t result = RES_ERROR;
2777 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
2778 &name, &nameLen, &value, &valueLen ) == FAILURE) {
2779 return;
2780 }
2781 result = setConfigValue( name, value );
2782 RETURN_LONG( result );
2783 }
2784
2785
2786 /**
2787 *
2788 * 鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
2789 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申.
2790 *
2791 * int xnp_dump_item_id( int sid, array cri, array iids )
2792 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2793 * @param cri 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2794 * @param iids 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2795 * @return RES_OK
2796 * @return RES_DB_NOT_INITIALIZED
2797 * @return RES_NO_SUCH_SESSION
2798 * @return RES_DB_QUERY_ERROR
2799 *
2800 */
2801 ZEND_FUNCTION(xnp_dump_item_id)
2802 {
2803 long sid;
2804 zval *zcriteria;
2805 zval *ziids;
2806 result_t result = RES_ERROR;
2807
2808 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa",
2809 &sid, &zcriteria, &ziids) == FAILURE) {
2810 fprintf( stderr, "error occured " );
2811 return;
2812 }
2813
2814 zCriteria_t zcri(zcriteria);
2815 result = zcri.getResult();
2816 if ( RES_OK == result ){
2817 const itemid_t *piids;
2818 int iidsLen;
2819 result = dumpItemID( (sessionid_t)sid, &zcri, &piids, &iidsLen );
2820 if ( RES_OK == result ){
2821 itemidsToZval( piids, iidsLen, &ziids );
2822 freeItemID( piids );
2823 }
2824 }
2825
2826 RETURN_LONG( result );
2827 }
2828
2829
2830 /**
2831 *
2832 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2833 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2834 * @param binderid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2835 * @param cri 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2836 * @param iids 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2837 * @param iidsLen iids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2838 * @return RES_OK
2839 * @return RES_DB_NOT_INITIALIZED
2840 * @return RES_NO_SUCH_SESSION
2841 * @return RES_DB_QUERY_ERROR
2842 * @return RES_ERROR
2843 *
2844 */
2845 ZEND_FUNCTION(xnp_get_item_id_by_binder_id)
2846 {
2847 result_t result;
2848 long sid;
2849 itemid_t iid;
2850 zval *zcriteria;
2851 zval *ziids;
2852
2853 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2854 &sid, &iid, &zcriteria, &ziids) == FAILURE) {
2855 return;
2856 }
2857
2858 zCriteria_t zcri(zcriteria);
2859 result = zcri.getResult();
2860 if ( RES_OK == result ){
2861 const itemid_t *pitemids;
2862 int itemidLen;
2863 result = getItemIDByBinderID( (sessionid_t)sid, iid, &zcri, &pitemids, &itemidLen );
2864 if ( RES_OK == result ){
2865 itemidsToZval( pitemids, itemidLen, &ziids );
2866 freeItemID( pitemids );
2867 }
2868 }
2869 RETURN_LONG(result);
2870 }
2871
2872
2873 /**
2874 *
2875 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2876 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2877 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2878 *
2879 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2880 * @param xid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2881 * @param cri 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2882 * @param iids 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2883 * @param iidsLen iids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2884 * @return RES_OK
2885 * @return RES_DB_NOT_INITIALIZED
2886 * @return RES_NO_SUCH_SESSION
2887 * @return RES_DB_QUERY_ERROR
2888 * @return RES_ERROR
2889 *
2890 */
2891 ZEND_FUNCTION(xnp_get_item_id_by_index_id)
2892 {
2893 result_t result;
2894 long sid;
2895 indexid_t xid;
2896 zval *zcriteria;
2897 zval *ziids;
2898
2899 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llaa",
2900 &sid, &xid, &zcriteria, &ziids) == FAILURE) {
2901 return;
2902 }
2903
2904 zCriteria_t zcri(zcriteria);
2905 result = zcri.getResult();
2906 if ( RES_OK == result ){
2907 const itemid_t *pitemids;
2908 int itemidLen;
2909 result = getItemIDByIndexID( (sessionid_t)sid, xid, &zcri, &pitemids, &itemidLen );
2910 if ( RES_OK == result ){
2911 itemidsToZval( pitemids, itemidLen, &ziids );
2912 freeItemID( pitemids );
2913 }
2914 }
2915 RETURN_LONG(result);
2916 }
2917
2918
2919 ZEND_FUNCTION(xnp_get_overlapped_items)
2920 {
2921 RETURN_LONG( RES_ERROR );
2922 }
2923
2924 /**
2925 *
2926 * 鐃緒申鐃緒申鐃緒申鐃緒申(Basic Information)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
2927 * Platform鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
2928 *
2929 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2930 * @param item 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2931 * @param itemid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2932 * @return RES_OK
2933 * @return RES_ERROR
2934 * @return RES_NO_SUCH_SESSION
2935 * @return RES_DB_QUERY_ERROR
2936 * @return RES_DB_NOT_INITIALIZED
2937 * @return RES_NO_WRITE_ACCESS_RIGHT
2938 *
2939 */
2940 ZEND_FUNCTION(xnp_insert_item)
2941 {
2942 long sid;
2943 zval *ziid;
2944 zval *zitem;
2945 item_t item;
2946 itemid_t iid;
2947 result_t result = RES_ERROR;
2948
2949 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2950 &sid, &zitem, &ziid) == FAILURE) {
2951 fprintf( stderr, "error occured " );
2952 return;
2953 }
2954
2955 zvalToItem( zitem, &item );
2956 result = insertItem( (sessionid_t)sid, &item, &iid );
2957 if ( RES_OK == result ){
2958 ziid -> type = IS_LONG;
2959 ziid -> value.lval = iid;
2960 }
2961 RETURN_LONG( result );
2962 }
2963
2964 /**
2965 *
2966 * 鐃緒申鐃緒申鐃緒申鐃緒申(Basic Information)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
2967 * Platform鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
2968 *
2969 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
2970 * @param item 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2971 * @param itemid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
2972 * @return RES_OK
2973 * @return RES_ERROR
2974 * @return RES_NO_SUCH_SESSION
2975 * @return RES_DB_QUERY_ERROR
2976 * @return RES_DB_NOT_INITIALIZED
2977 * @return RES_NO_WRITE_ACCESS_RIGHT
2978 *
2979 */
2980 ZEND_FUNCTION(xnp_insert_item_direct)
2981 {
2982 long sid;
2983 zval *ziid;
2984 zval *zitem;
2985 item_t item;
2986 itemid_t iid;
2987 result_t result = RES_ERROR;
2988
2989 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laz",
2990 &sid, &zitem, &ziid) == FAILURE) {
2991 fprintf( stderr, "error occured " );
2992 return;
2993 }
2994
2995 zvalToItem( zitem, &item );
2996 result = insertItemDirect( (sessionid_t)sid, &item, &iid );
2997 if ( RES_OK == result ){
2998 ziid -> type = IS_LONG;
2999 ziid -> value.lval = iid;
3000 }
3001 RETURN_LONG( result );
3002 }
3003
3004 /**
3005 *
3006 * 鐃緒申鐃緒申鐃緒申鐃緒申(Basic Information)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3007 * Platform鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3008 * item鐃緒申item_id鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3009 *
3010 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3011 * @param item 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3012 * @return RES_OK
3013 * @return RES_ERROR
3014 * @return RES_NO_SUCH_SESSION
3015 * @return RES_DB_QUERY_ERROR
3016 * @return RES_DB_NOT_INITIALIZED
3017 * @return RES_NO_WRITE_ACCESS_RIGHT
3018 */
3019 ZEND_FUNCTION(xnp_update_item)
3020 {
3021 long sid;
3022 zval *zitem;
3023 item_t item;
3024 result_t result = RES_ERROR;
3025
3026 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
3027 &sid, &zitem) == FAILURE) {
3028 fprintf( stderr, "error occured " );
3029 return;
3030 }
3031
3032 zvalToItem( zitem, &item );
3033 result = updateItem( (sessionid_t)sid, &item );
3034 RETURN_LONG( result );
3035 }
3036
3037 /**
3038 *
3039 * 鐃緒申鐃緒申鐃緒申鐃緒申(Basic Information)鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3040 *
3041 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3042 * @param item 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3043 * @return RES_OK
3044 * @return RES_ERROR
3045 * @return RES_NO_SUCH_SESSION
3046 * @return RES_DB_QUERY_ERROR
3047 * @return RES_DB_NOT_INITIALIZED
3048 * @return RES_NO_WRITE_ACCESS_RIGHT
3049 */
3050 ZEND_FUNCTION(xnp_delete_item)
3051 {
3052 long sid;
3053 itemid_t iid;
3054 result_t result = RES_ERROR;
3055
3056 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll",
3057 &sid, &iid) == FAILURE) {
3058 fprintf( stderr, "error occured " );
3059 return;
3060 }
3061 result = deleteItem( (sessionid_t)sid, iid );
3062 RETURN_LONG( result );
3063 }
3064
3065
3066 /**
3067 *
3068 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3069 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3070 *
3071 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3072 * @param uid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3073 * @param iids 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3074 * @param iidsLen iids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3075 * @return RES_OK
3076 * @return RES_DB_NOT_INITIALIZED
3077 * @return RES_NO_SUCH_SESSION
3078 * @return RES_DB_QUERY_ERROR
3079 * @return RES_ERROR
3080 *
3081 */
3082 //result_t getPrivateItemID( sessionid_t sid, userid_t uid, const itemid_t** iids, int* iidsLen )
3083 ZEND_FUNCTION(xnp_get_private_item_id)
3084 {
3085 long sid;
3086 userid_t uid;
3087 zval* ziids;
3088
3089 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
3090 &sid, &uid, &ziids) == FAILURE) {
3091 return;
3092 }
3093
3094 const itemid_t *piids;
3095 int iidsLen;
3096 result_t result = getPrivateItemID( (sessionid_t)sid, uid, &piids, &iidsLen );
3097 if ( RES_OK == result ){
3098 itemidsToZval( piids, iidsLen, &ziids );
3099 freeItemID( piids );
3100 }
3101
3102 RETURN_LONG( result );
3103
3104 }
3105
3106 /**
3107 *
3108 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3109 *
3110 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3111 * @param uid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3112 * @param iids 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3113 * @param iidsLen iids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3114 * @return RES_OK
3115 * @return RES_DB_NOT_INITIALIZED
3116 * @return RES_NO_SUCH_SESSION
3117 * @return RES_DB_QUERY_ERROR
3118 * @return RES_ERROR
3119 *
3120 */
3121 //result_t getGroupItemID( sessionid_t sid, groupid_t gid, const itemid_t** iids, int* iidsLen )
3122 ZEND_FUNCTION(xnp_get_group_item_id)
3123 {
3124 long sid;
3125 groupid_t gid;
3126 zval* ziids;
3127
3128 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
3129 &sid, &gid, &ziids) == FAILURE) {
3130 return;
3131 }
3132
3133 const itemid_t *piids;
3134 int iidsLen;
3135 result_t result = getGroupItemID( (sessionid_t)sid, gid, &piids, &iidsLen );
3136 if ( RES_OK == result ){
3137 itemidsToZval( piids, iidsLen, &ziids );
3138 freeItemID( piids );
3139 }
3140
3141 RETURN_LONG( result );
3142 }
3143
3144
3145 /**
3146 *
3147 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3148 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申freeItem鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3149 *
3150 * @refer freeItem
3151 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3152 * @param iid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3153 * @param item 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3154 * @return RES_OK
3155 * @return RES_DB_NOT_INITIALIZED
3156 * @return RES_NO_SUCH_SESSION
3157 * @return RES_NO_SUCH_ITEM
3158 * @return RES_DB_QUERY_ERROR
3159 *
3160 */
3161 ZEND_FUNCTION(xnp_get_item)
3162 {
3163 long sid;
3164 long iid;
3165 zval *zitem;
3166 result_t result = RES_ERROR;
3167
3168 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lla",
3169 &sid, &iid, &zitem) == FAILURE) {
3170 fprintf( stderr, "error occured " );
3171 return;
3172 }
3173
3174 const item_t* pitem;
3175 result = getItem( (sessionid_t)sid, iid, &pitem );
3176 if ( RES_OK == result ){
3177 itemToZval( pitem, zitem );
3178 freeItem( pitem );
3179 }
3180 RETURN_LONG( result );
3181 }
3182
3183
3184 /**
3185 *
3186 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3187 * 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申freeItem鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申.
3188 *
3189 * @refer freeItem
3190 * @param sid 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID
3191 * @param iids 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申ID鐃緒申鐃緒申鐃緒申
3192 * @param iidsLen iids鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3193 * @param cri 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3194 * @param items 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3195 * @param itemsLen 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申(鐃緒申鐃緒申*items鐃緒申鐃緒申鐃緒申鐃緒申)
3196 * @return RES_OK
3197 * @return RES_DB_NOT_INITIALIZED
3198 * @return RES_NO_SUCH_SESSION
3199 * @return RES_DB_QUERY_ERROR
3200 *
3201 */
3202 ZEND_FUNCTION(xnp_get_items)
3203 {
3204 result_t result;
3205 long sid;
3206 zval *ziids;
3207 zval *zcriteria;
3208 zval *zitem;
3209
3210 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laaa",
3211 &sid, &ziids, &zcriteria, &zitem) == FAILURE) {
3212 return;
3213 }
3214
3215 zCriteria_t zcri(zcriteria);
3216 result = zcri.getResult();
3217 if ( RES_OK == result ){
3218 zIIDs_t zIIDs(ziids);
3219 result = zIIDs.getResult();
3220 if ( RES_OK == result ){
3221 const item_t *pitems;
3222 int itemLen;
3223 result = getItems( (sessionid_t)sid,
3224 zIIDs.getPIID(), zIIDs.getLen(),
3225 &zcri, &pitems, &itemLen );
3226 if ( RES_OK == result ){
3227 itemsToZval( pitems, itemLen, zitem );
3228 freeItem( pitems );
3229 }
3230 }
3231 }
3232
3233 RETURN_LONG(result);
3234 }
3235
3236
3237 /**
3238 *
3239 *
3240 * @param pmid PUBMEDID
3241 * @param pubmed 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申pubmed_t鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3242 *
3243 *
3244 *
3245 */
3246 ZEND_FUNCTION(xnp_pubmed_complete)
3247 {
3248 long pmid;
3249 zval *zpubmed;
3250 result_t result = RES_ERROR;
3251
3252 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la",
3253 &pmid, &zpubmed) == FAILURE) {
3254 fprintf( stderr, "error occured " );
3255 return;
3256 }
3257
3258 const pubmed_t* ppubmed;
3259 result = pubmedComplete( pmid, &ppubmed );
3260 if ( RES_OK == result ){
3261 pubmedToZval( ppubmed, zpubmed );
3262 freePubmed( ppubmed );
3263 }
3264 RETURN_LONG( result );
3265 }
3266
3267
3268 /**
3269 *
3270 *
3271 * @param isbn ISBN
3272 * @param amazonbook 鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申amazonbook_t鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
3273 *
3274 *
3275 *
3276 */
3277 ZEND_FUNCTION(xnp_amazon_complete)
3278 {
3279 zval *zurl;
3280 zval *zamazonbook;
3281 result_t result = RES_ERROR;
3282
3283 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "za",
3284 &zurl, &zamazonbook) == FAILURE) {
3285 fprintf( stderr, "error occured " );
3286 return;
3287 }
3288
3289 const amazonbook_t* pamazonbook;
3290 result = amazonComplete( getZvalString( &zurl ) , &pamazonbook );
3291 if ( RES_OK == result ){
3292 amazonbookToZval( pamazonbook, zamazonbook