bjori           Sun Aug 19 13:19:48 2007 UTC

  Modified files:              
    /phd        build.php 
    /phd/themes/php     phpweb.php 
  Log:
  Add a array-seeking-fallback, removing the need to patch PHP
  
  
http://cvs.php.net/viewvc.cgi/phd/build.php?r1=1.23&r2=1.24&diff_format=u
Index: phd/build.php
diff -u phd/build.php:1.23 phd/build.php:1.24
--- phd/build.php:1.23  Sun Aug 19 12:09:55 2007
+++ phd/build.php       Sun Aug 19 13:19:47 2007
@@ -1,5 +1,5 @@
 <?php
-/*  $Id: build.php,v 1.23 2007/08/19 12:09:55 bjori Exp $ */
+/*  $Id: build.php,v 1.24 2007/08/19 13:19:47 bjori Exp $ */
 
 function err($no, $str, $file, $line) {
     global $notify;
@@ -49,6 +49,9 @@
     /* FIXME: Load from sqlite db? */
 }
 
+$rf = new ReflectionFunction("in_array");
+define("HAS_ARRAY_SEEK", $rf->getNumberOfParameters() == 4);
+
 foreach($OPTIONS["output_format"] as $output_format) {
     switch($output_format) {
     case "xhtml":
http://cvs.php.net/viewvc.cgi/phd/themes/php/phpweb.php?r1=1.8&r2=1.9&diff_format=u
Index: phd/themes/php/phpweb.php
diff -u phd/themes/php/phpweb.php:1.8 phd/themes/php/phpweb.php:1.9
--- phd/themes/php/phpweb.php:1.8       Sat Aug 18 23:49:34 2007
+++ phd/themes/php/phpweb.php   Sun Aug 19 13:19:48 2007
@@ -1,5 +1,5 @@
 <?php
-/*  $Id: phpweb.php,v 1.8 2007/08/18 23:49:34 bjori Exp $ */
+/*  $Id: phpweb.php,v 1.9 2007/08/19 13:19:48 bjori Exp $ */
 
 class phpweb extends phpdotnet implements PhDTheme {
     protected $streams = array();
@@ -112,7 +112,18 @@
         }
 
         // Seek to $id
+        if (HAS_ARRAY_SEEK) {
         in_array($siblings[$id], $siblings, false, true);
+        } else {
+            /* Workaround PHPs incapability of seeking into array */
+            while(list($tmp,) = each($siblings)) {
+                if ($tmp == $id) {
+                    // Set the internal pointer back to $id
+                    prev($siblings);
+                    break;
+                }
+            }
+        }
         $tmp = prev($siblings);
         if ($tmp) {
             while (!empty($tmp["children"])) {
@@ -138,7 +149,19 @@
             }
 
             // Seek to $id
+            if (HAS_ARRAY_SEEK) {
             in_array($siblings[$id], $siblings, false, true) or 
die(var_export(debug_backtrace(), true) ."\n$id\n$parent"); // This should 
*never* happen
+            } else {
+                /* Workaround PHPs incapability of seeking into array */
+                while(list($tmp,) = each($siblings)) {
+                    if ($tmp == $id) {
+                        // Set the internal pointer back to $id
+                        prev($siblings);
+                        break;
+                    }
+                }
+            }
+
             $tmp = next($siblings);
             prev($siblings); // Reset the internal pointer to previous pos
             if ($tmp) {

Reply via email to