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.54 - (show annotations) (download) (as text)
Mon Aug 29 02:05:34 2005 UTC (18 years, 7 months ago) by aga4096
Branch: MAIN
Changes since 1.53: +76 -1 lines
File MIME type: text/x-c++src
・xnp_update_item_status(), xnp_refresh_item_status(), xnp_selective_harvesting() を追加.

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