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.41 - (show annotations) (download) (as text)
Tue Jun 14 01:02:20 2005 UTC (18 years, 9 months ago) by aga4096
Branch: MAIN
Changes since 1.40: +89 -1 lines
File MIME type: text/x-c++src
・個人Binder向け修正. xnp_extract_public_item_id, xnp_extract_nonbinder_item_id の追加.

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