Civi::url() - Add support for `default://` URIs
authorTim Otten <totten@civicrm.org>
Tue, 25 Jul 2023 08:00:59 +0000 (01:00 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 25 Jul 2023 08:00:59 +0000 (01:00 -0700)
Civi.php
Civi/Core/Url.php
tests/phpunit/E2E/Core/PathUrlTest.php

index 1a23839e5872a2468940b2cf3280804999eb9a5c..2ee7ccad1055e0759625089bbc56099a675c4c1e 100644 (file)
--- a/Civi.php
+++ b/Civi.php
@@ -269,6 +269,7 @@ class Civi {
    *     - 'backend://' (Back-end page-route for staff)
    *     - 'service://` (Web-service page-route for automated integrations; aka webhooks and IPNs)
    *     - 'current://' (Whichever UI is currently active)
+   *     - 'default://'(Whichever UI is recorded in the metadata)
    *     - 'asset://' (Static asset-file; see \Civi::paths())
    *     - 'assetBuilder://' (Dynamically-generated asset-file; see \Civi\Core\AssetBuilder)
    *     - 'ext://' (Static asset-file provided by an extension)
index 6bd147f29f71d732e82d3ae8e57c14eb47a8914b..9f6fd45d24231b1dc843da9dbab5a8d952ccadd0 100644 (file)
@@ -520,8 +520,7 @@ final class Url implements \JsonSerializable {
     }
 
     if ($scheme === 'default') {
-      // TODO Use metadata to pick $scheme = 'frontend' or 'backend' or 'service';
-      throw new \RuntimeException("FIXME: Implement lookup for default ");
+      $scheme = \CRM_Core_Menu::isPublicRoute($this->getPath()) ? 'frontend' : 'backend';
     }
 
     switch ($scheme) {
index 28ce71e83baa93bed7f01c6b7c2bb73ee7848560..98a316fa961f46d30715cb96aa8c6dee19fbcf5d 100644 (file)
@@ -139,6 +139,16 @@ class PathUrlTest extends \CiviEndToEndTestCase {
     // For purposes of this test, it doesn't matter if "current" is frontend or backend - as long as it's consistent.
   }
 
+  public function testUrl_DefaultUI(): void {
+    $adminDefault = (string) \Civi::url('default://civicrm/admin');
+    $adminBackend = (string) \Civi::url('backend://civicrm/admin');
+    $this->assertEquals($adminBackend, $adminDefault, "civicrm/admin should default to backend");
+
+    $userDefault = (string) \Civi::url('default://civicrm/user');
+    $userBackend = (string) \Civi::url('frontend://civicrm/user');
+    $this->assertEquals($userBackend, $userDefault, "civicrm/user should default to frontend");
+  }
+
   /**
    * @param string $expectContentRegex
    * @param string $url