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.48 - (show annotations) (download) (as text)
Thu Jul 21 01:47:08 2005 UTC (18 years, 8 months ago) by tani
Branch: MAIN
Changes since 1.47: +52 -1 lines
File MIME type: text/x-c++src
xnp_get_events_for_rssを定義した.

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