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.56 - (show annotations) (download) (as text)
Thu Sep 8 05:42:35 2005 UTC (18 years, 7 months ago) by tani
Branch: MAIN
Changes since 1.55: +7 -4 lines
File MIME type: text/x-c++src
xnp_selective_harvesting: OAIPMHの識別子を返す.

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