chregu          Fri Nov 28 19:43:39 2003 EDT

  Added files:                 (Branch: PHP_4_3)
    /php-src/ext/domxml/tests   bug26384.phpt 

  Modified files:              
    /php-src/ext/domxml php_domxml.c 
  Log:
  enhanced bug-26384-fix. It now only does an DocCopy, if xsl:key was
  found in xslt-document by default.
  
  
Index: php-src/ext/domxml/php_domxml.c
diff -u php-src/ext/domxml/php_domxml.c:1.218.2.38 
php-src/ext/domxml/php_domxml.c:1.218.2.39
--- php-src/ext/domxml/php_domxml.c:1.218.2.38  Fri Nov 28 12:39:25 2003
+++ php-src/ext/domxml/php_domxml.c     Fri Nov 28 19:43:37 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_domxml.c,v 1.218.2.38 2003/11/28 17:39:25 rrichards Exp $ */
+/* $Id: php_domxml.c,v 1.218.2.39 2003/11/29 00:43:37 chregu Exp $ */
 
 /* TODO
  * - Support Notation Nodes
@@ -202,6 +202,7 @@
 zend_class_entry *domxsltstylesheet_class_entry;
 #endif
 
+static int xslt_has_xsl_keys (xmlDocPtr doc);
 
 static int node_attributes(zval **attributes, xmlNode *nodep TSRMLS_DC);
 static int node_children(zval **children, xmlNode *nodep TSRMLS_DC);
@@ -4724,6 +4725,21 @@
 /* }}} */
 #endif
 
+static int xslt_has_xsl_keys (xmlDocPtr doc) {
+       
+       xmlNode *nodep;
+       nodep = xmlDocGetRootElement(doc)->children;
+       while (nodep) {
+               if (nodep->type == XML_ELEMENT_NODE && xmlStrEqual(nodep->name, "key") 
&& xmlStrEqual(nodep->ns->href, XSLT_NAMESPACE)) {
+                               return 1;
+                               break;
+                       }
+               nodep = nodep->next;
+       }
+       return 0;
+}
+
+
 /* {{{ int node_attributes(zval **attributes, int node)
    Returns list of children nodes */
 static int node_attributes(zval **attributes, xmlNode *nodep TSRMLS_DC)
@@ -5382,7 +5398,7 @@
        xmlDocPtr xmldocp;
        xmlDocPtr docp;
        char **params = NULL;
-       int ret, clone = 0;
+       int ret, clone = -1;
        char *filename;
        int filename_len = 0;
        FILE *f;
@@ -5404,7 +5420,10 @@
        }
 
        DOMXML_GET_OBJ(xmldocp, idxml, le_domxmldocp);
-
+       if (clone == -1 && xslt_has_xsl_keys(xsltstp->doc) == 1) {
+               clone = 1;
+       }
+       
        if (idparams) {
                params = php_domxslt_make_params(idparams, xpath_params TSRMLS_CC);
        }

Index: php-src/ext/domxml/tests/bug26384.phpt
+++ php-src/ext/domxml/tests/bug26384.phpt

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to