Author: Mark Randall
Committer: Derick Rethans (derickr)
Date: 2026-06-18T16:05:07+01:00

Commit: 
https://github.com/php/web-php/commit/c87291e01d2c4ada3ef53b8d6a0bba87553384df
Raw diff: 
https://github.com/php/web-php/commit/c87291e01d2c4ada3ef53b8d6a0bba87553384df.diff

Use ProjectGlobals::getBackendRoot to handle backend/ moving into public/.

Changed paths:
  M  include/download-instructions/windows-downloads.php
  M  include/manual-lookup.inc
  M  include/shared-manual.inc
  M  public/manual/vote-note.php
  M  public/pre-release-builds.php
  M  src/ProjectGlobals.php
  M  tests/Unit/UserNotes/SorterTest.php


Diff:

diff --git a/include/download-instructions/windows-downloads.php 
b/include/download-instructions/windows-downloads.php
index 77e6445740..af19ad6a54 100644
--- a/include/download-instructions/windows-downloads.php
+++ b/include/download-instructions/windows-downloads.php
@@ -1,7 +1,10 @@
 <?php
+
+use phpweb\ProjectGlobals;
+
 $baseDownloads  = 'https://downloads.php.net/~windows/releases/archives/';
 
-$dataStr = @file_get_contents(__DIR__ . '/../../backend/win-releases.json');
+$dataStr = @file_get_contents(ProjectGlobals::getBackendRoot() . 
'/win-releases.json');
 $releases = $dataStr ? json_decode($dataStr, true) : null;
 
 if (!is_array($releases)) {
diff --git a/include/manual-lookup.inc b/include/manual-lookup.inc
index f12c9a3ce5..4fbc3cd949 100644
--- a/include/manual-lookup.inc
+++ b/include/manual-lookup.inc
@@ -110,9 +110,9 @@ function find_manual_page($lang, $keyword)
     $dbh = false;
     if (class_exists('PDO')) {
         if (in_array('sqlite', PDO::getAvailableDrivers(), true)) {
-            if (file_exists(ProjectGlobals::getProjectRoot() . 
'/backend/manual-lookup.sqlite')) {
+            if (file_exists(ProjectGlobals::getBackendRoot() . 
'/manual-lookup.sqlite')) {
                 try {
-                    $dbh = new PDO( 'sqlite:' . 
ProjectGlobals::getProjectRoot() . '/backend/manual-lookup.sqlite', '', '', 
[PDO::ATTR_PERSISTENT => true, PDO::ATTR_EMULATE_PREPARES => true] );
+                    $dbh = new PDO( 'sqlite:' . 
ProjectGlobals::getBackendRoot() . '/manual-lookup.sqlite', '', '', 
[PDO::ATTR_PERSISTENT => true, PDO::ATTR_EMULATE_PREPARES => true] );
                 } catch (PDOException $e) {
                     return find_manual_page_slow($lang, $keyword);
                 }
diff --git a/include/shared-manual.inc b/include/shared-manual.inc
index 2d88477b1b..f82d42d474 100644
--- a/include/shared-manual.inc
+++ b/include/shared-manual.inc
@@ -97,7 +97,7 @@ END_USERNOTE_HEADER;
 function manual_notes_load(string $id): array
 {
     $hash = substr(md5($id), 0, 16);
-    $notes_file = ProjectGlobals::getPublicRoot() . "/backend/notes/" .
+    $notes_file = ProjectGlobals::getBackendRoot() . "/notes/" .
                   substr($hash, 0, 2) . "/$hash";
 
     // Open the note file for reading and get the data (12KB)
diff --git a/public/manual/vote-note.php b/public/manual/vote-note.php
index 59f5886bbf..72e5e6ef50 100644
--- a/public/manual/vote-note.php
+++ b/public/manual/vote-note.php
@@ -21,7 +21,7 @@
   if (isset($_SERVER['HTTP_X_JSON']) && $_SERVER['HTTP_X_JSON'] == 'On' && 
!empty($_REQUEST['id']) && !empty($_REQUEST['page']) && ($N = 
manual_notes_load($_REQUEST['page'])) && array_key_exists($_REQUEST['id'], $N) 
&& !empty($_REQUEST['vote']) && ($_REQUEST['vote'] === 'up' || 
$_REQUEST['vote'] === 'down')) {
     $response = [];
     $hash = substr(md5($_REQUEST['page']), 0, 16);
-    $notes_file = ProjectGlobals::getPublicRoot() . "/backend/notes/" . 
substr($hash, 0, 2) . "/$hash";
+    $notes_file = ProjectGlobals::getBackendRoot() . "/notes/" . substr($hash, 
0, 2) . "/$hash";
     if (!file_exists($notes_file)) {
       $response["success"] = false;
       $response["msg"] = "Invalid request.";
@@ -61,7 +61,7 @@
       }
       else {
         $hash = substr(md5($_REQUEST['page']), 0, 16);
-        $notes_file = ProjectGlobals::getPublicRoot(). "/backend/notes/" . 
substr($hash, 0, 2) . "/$hash";
+        $notes_file = ProjectGlobals::getBackendRoot(). "/notes/" . 
substr($hash, 0, 2) . "/$hash";
         if (file_exists($notes_file)) {
           $data = [
               "noteid" => $_REQUEST['id'],
diff --git a/public/pre-release-builds.php b/public/pre-release-builds.php
index e8368a64c4..f58c147042 100644
--- a/public/pre-release-builds.php
+++ b/public/pre-release-builds.php
@@ -1,4 +1,7 @@
 <?php
+
+use phpweb\ProjectGlobals;
+
 $_SERVER['BASE_PAGE'] = 'qa.php';
 require_once __DIR__ . '/../include/prepend.inc';
 require_once __DIR__ . '/../include/release-qa.php';
@@ -114,7 +117,7 @@
 
 <h2 id="windows">Windows Builds</h2>
 <?php
-$winQaFile = __DIR__ . '/backend/win-qa-releases.json';
+$winQaFile = ProjectGlobals::getBackendRoot() . '/win-qa-releases.json';
 $winQaBase = 'https://downloads.php.net/~windows/qa/';
 $winQaMessage = '';
 $winQaReleases = [];
diff --git a/src/ProjectGlobals.php b/src/ProjectGlobals.php
index c804c3eec0..0aad5e1c18 100644
--- a/src/ProjectGlobals.php
+++ b/src/ProjectGlobals.php
@@ -13,6 +13,11 @@ public static function getProjectRoot(): string
             ?: throw new Error('Unable to locate project root');
     }
 
+    public static function getBackendRoot(): string
+    {
+        return self::getProjectRoot() . '/public/backend';
+    }
+
     public static function getPublicRoot(): string
     {
         return realpath(__DIR__ . '/../public')
diff --git a/tests/Unit/UserNotes/SorterTest.php 
b/tests/Unit/UserNotes/SorterTest.php
index de9e9eef54..f98d07ae07 100644
--- a/tests/Unit/UserNotes/SorterTest.php
+++ b/tests/Unit/UserNotes/SorterTest.php
@@ -5,6 +5,7 @@
 namespace phpweb\Test\Unit\UserNotes;
 
 use PHPUnit\Framework;
+use phpweb\ProjectGlobals;
 use phpweb\UserNotes\Sorter;
 use phpweb\UserNotes\UserNote;
 
@@ -98,7 +99,7 @@ public function testSortSortsSomeNotes(): void
 
     public function testSortSortsFullNotes(): void
     {
-        $file = file(__DIR__ . 
'/../../../public/backend/notes/d7/d7742c269d23ea86');
+        $file = file(ProjectGlobals::getBackendRoot() . 
'/notes/d7/d7742c269d23ea86');
 
         $notes = [];
 

Reply via email to