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]

Reply via email to