fix basedir detection for rewritten paths
authorChristian Weiske <cweiske@cweiske.de>
Sun, 6 Jul 2014 12:20:56 +0000 (14:20 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sun, 6 Jul 2014 12:20:56 +0000 (14:20 +0200)
src/phorkie/Tools.php
tests/phorkie/ToolsTest.php

index 7819cda..e97c546 100644 (file)
@@ -86,6 +86,13 @@ class Tools
             return $scriptName . '/';
         }
 
+        if (isset($_GET['id'])) {
+            $idp = strpos($requestUri, '/' . $_GET['id'] . '/');
+            if ($idp !== false) {
+                return substr($requestUri, 0, $idp) . '/';
+            }
+        }
+
         if (substr($requestUri, -4) != '.php') {
             $requestUri .= '.php';
         }
index 021797d..d8df8f4 100644 (file)
@@ -3,6 +3,11 @@ namespace phorkie;
 
 class ToolsTest extends \PHPUnit_Framework_TestCase
 {
+    public function setUp()
+    {
+        $_GET[] = array();
+    }
+
     public function testDetectBaseUrlPhar()
     {
         $_SERVER['REQUEST_URI'] = '/phar/phorkie-0.4.0.phar/list.php';
@@ -34,6 +39,22 @@ class ToolsTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('/foo/', Tools::detectBaseUrl());
     }
 
+    public function testDetectBaseUrlEdit()
+    {
+        $_GET['id'] = 82;
+        $_SERVER['REQUEST_URI'] = '/82/edit';
+        $_SERVER['SCRIPT_NAME'] = '/edit.php';
+        $this->assertEquals('/', Tools::detectBaseUrl());
+    }
+
+    public function testDetectBaseUrlEditSubdir()
+    {
+        $_GET['id'] = 82;
+        $_SERVER['REQUEST_URI'] = '/foo/82/edit';
+        $_SERVER['SCRIPT_NAME'] = '/edit.php';
+        $this->assertEquals('/foo/', Tools::detectBaseUrl());
+    }
+
     public function testFoldPathParentSingle()
     {
         $this->assertEquals(