davidg Fri Feb 23 01:22:09 2001 EDT
Modified files:
/php4/ext/midgard midgard.c
Log:
Removed constants registration, added a conversion table $midgard->types[$objtype]
try var_dump($midgard) for more details
Index: php4/ext/midgard/midgard.c
diff -u php4/ext/midgard/midgard.c:1.14 php4/ext/midgard/midgard.c:1.15
--- php4/ext/midgard/midgard.c:1.14 Thu Feb 22 12:32:20 2001
+++ php4/ext/midgard/midgard.c Fri Feb 23 01:22:08 2001
@@ -1,4 +1,4 @@
-/* $Id: midgard.c,v 1.14 2001/02/22 20:32:20 davidg Exp $
+/* $Id: midgard.c,v 1.15 2001/02/23 09:22:08 davidg Exp $
Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
Copyright (C) 2000 The Midgard Project ry
Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]>
@@ -72,6 +72,9 @@
MGD_FUNCTION(version);
MGD_FUNCTION(get_midgard);
MGD_FUNCTION(auth_midgard);
+#if YOU_WANT_TO_TEST
+MGD_FUNCTION(walk_tree);
+#endif
/* Every user visible function must have an entry in midgard_functions[].
*/
@@ -292,6 +295,9 @@
MGD_FE(snippet, NULL)
MGD_FE(eval, NULL)
MGD_FE(register_filter, NULL)
+#if YOU_WANT_TO_TEST
+MGD_FE(walk_tree, NULL)
+#endif
{NULL, NULL, NULL} /* Must be the last line in midgard_functions[] */
};
@@ -362,11 +368,9 @@
return SUCCESS;
}
-#define MGD_REGISTER_LONG_CONSTANT(name,lval,flags)
zend_register_long_constant((name),strlen(name)+1,(lval),(flags),module_number ELS_CC)
/* Remove if there's nothing to do at request start */
PHP_RINIT_FUNCTION(midgard)
{
- int i;
request_rec *r;
module *midgard_module;
@@ -406,13 +410,6 @@
return SUCCESS;
}
- /* register Midgard constants */
- for(i = 1; i < MIDGARD_OBJECT_COUNT; i++) {
- MGD_REGISTER_LONG_CONSTANT((char *)mgd_table_label[i], i,
- CONST_CS | CONST_PERSISTENT);
-
- }
-
MGDG(mgd) = MGDG(rcfg)->mgd;
ALLOC_INIT_ZVAL(MGDG(udf));
if(MGDG(udf)) array_init(MGDG(udf));
@@ -568,9 +565,9 @@
MGD_FUNCTION(get_midgard)
{
int i;
- zval *argv;
+ zval *argv, *types;
char **mm_argv;
- long mm_argc;
+ long mm_argc;
midgard *mgd = mgd_handle();
midgard_request_config *rcfg = mgd_rcfg();
@@ -607,6 +604,8 @@
/* EEH {HACK ALERT}: We add this property with hash_update
manually since Zend doesn't offer a add_property_array.
+ DG {END HACK ALERT} TODO: replace by the following line in PHP 4.0.5
+ add_property_zval(return_value, "argv", argv);
*/
zend_hash_update(return_value->value.obj.properties, "argv", 5,
&argv, sizeof(argv), NULL);
@@ -615,6 +614,16 @@
add_property_stringl(return_value, "self",
rcfg->req->uri, rcfg->self_len, 1);
+
+ MAKE_STD_ZVAL(types);
+ array_init(types);
+ for (i = 1; i < MIDGARD_OBJECT_COUNT; i++) {
+ add_assoc_long(types, (char *)mgd_table_extname[i], i);
+ }
+
+ //add_property_zval(return_value, "types", types);
+ zend_hash_update(return_value->value.obj.properties, "types", 6,
+ &types, sizeof(types), NULL);
}
MGD_FUNCTION(auth_midgard)
@@ -740,6 +749,68 @@
zval_dtor(args[1]);
}
+#if YOU_WANT_TO_TEST
+MGD_FUNCTION(walk_tree)
+{
+ zval **id, **level, **xparam, *xp[2], **order;
+ zval **midgard_user_call_func_name, **sort = NULL;
+ zval **tableid, **upfield;
+ CHECK_MGD;
+
+ switch (ZEND_NUM_ARGS()) {
+ case 8:
+ if (zend_get_parameters_ex(8, &tableid, &upfield,
+ &midgard_user_call_func_name, &id,
+ &level, &xparam, &order, &sort) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+ break;
+ case 7:
+ if (zend_get_parameters_ex(7, &tableid, &upfield,
+ &midgard_user_call_func_name, &id,
+ &level, &xparam, &order) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ } else {
+ sort = NULL;
+ }
+ break;
+ case 6:
+ if (zend_get_parameters_ex(6, &tableid, &upfield,
+ &midgard_user_call_func_name, &id,
+ &level, &xparam) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ } else {
+ order = NULL;
+ sort = NULL;
+ }
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
+ }
+
+ convert_to_long_ex(tableid);
+ if(!(*tableid)->value.lval) RETURN_FALSE;
+ convert_to_string_ex(upfield);
+ convert_to_string_ex(midgard_user_call_func_name);
+ convert_to_long_ex(level);
+ if (order) convert_to_long_ex(order);
+ convert_to_long_ex(id);
+ if(sort) convert_to_string_ex(sort);
+
+ xp[0] = (*xparam);
+ xp[1] = (*midgard_user_call_func_name);
+ mgd_walk_table_tree(mgd_handle(), mgd_table_name[(*tableid)->value.lval],
+
+(*upfield)->value.str.val,
+
+(*id)->value.lval,
+
+(*level)->value.lval,
+ order ?
+(*order)->value.lval : 1,
+ (void *)xp,
+
+midgard_user_call_func,
+ sort ?
+(*sort)->value.str.val : NULL);
+ RETURN_TRUE;
+}
+#endif /* YOU_WANT_TO_TEST */
#endif /* HAVE_MIDGARD */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]