Move content of returning response into CRM_Utils_System and have user_system based...
authorSeamus Lee <seamuslee001@gmail.com>
Thu, 6 Jun 2019 22:37:10 +0000 (08:37 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Sat, 8 Jun 2019 07:38:39 +0000 (17:38 +1000)
CRM/Utils/System.php
CRM/Utils/System/Base.php
CRM/Utils/System/WordPress.php
Civi/Core/AssetBuilder.php

index cdb29038368502df0ef4b20601d1cbae6ef3e136..0c3e316219d43696bc82e2f48e6c97263e1d9683 100644 (file)
@@ -53,6 +53,7 @@
  * @method static array synchronizeUsers() Create CRM contacts for all existing CMS users.
  * @method static appendCoreResources(\Civi\Core\Event\GenericHookEvent $e) Callback for hook_civicrm_coreResourceList.
  * @method static alterAssetUrl(\Civi\Core\Event\GenericHookEvent $e) Callback for hook_civicrm_getAssetUrl.
+ * @method static sendResponse(array $responseData) function to set HTTP status response and return specific response to client initially for assetBuilder content.
  */
 class CRM_Utils_System {
 
@@ -1861,4 +1862,20 @@ class CRM_Utils_System {
     return NULL;
   }
 
+  /**
+   * Return an HTTP Response with appropriate content and status code set.
+   * @param array $responseData
+   */
+  public static function sendResponse($responseData) {
+    $config = CRM_Core_Config::singleton();
+    if (!empty($responseData['statusCode'])) {
+      $config->userSystem->setStatusCode($responseData['statusCode']);
+    }
+    if (!empty($responseData['mimeType'])) {
+      self::setHttpHeader('Content-Type', $responseData['mimeType']);
+    }
+    echo $responseData['content'];
+    self::civiExit();
+  }
+
 }
index 8642f53fbee8ccb16c83578e9266801457abfc12..654463b40a46735da6c6d1ae795db9fafad81cfb 100644 (file)
@@ -945,4 +945,18 @@ abstract class CRM_Utils_System_Base {
     return [];
   }
 
+  /**
+   * Set the HTTP Status Code for a request
+   * @param string $statusCode
+   */
+  public function setStatusCode($statusCode) {
+    if (function_exists('http_response_code')) {
+      // PHP 5.4+
+      http_response_code($statusCode);
+    }
+    else {
+      header('X-PHP-Response-Code: ' . $statusCode, TRUE, $statusCode);
+    }
+  }
+
 }
index 2a13781180151fa8087197c355d2e2dfc8208d0f..84cba04f8847189ca92858346c53ea17eed006dc 100644 (file)
@@ -863,4 +863,19 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
     ];
   }
 
+  /**
+   * Set the HTTP Status Code for a request
+   * @param string $statusCode
+   */
+  public function setStatusCode($statusCode) {
+    status_header($statusCode);
+    if (function_exists('http_response_code')) {
+      // PHP 5.4+
+      http_response_code($statusCode);
+    }
+    else {
+      header('X-PHP-Response-Code: ' . $statusCode, TRUE, $statusCode);
+    }
+  }
+
 }
index a53be59402aacd8783be82c73e45c79f1e3f3453..f52b2653fd83c28c1e0085ff69e54c39988bd5d7 100644 (file)
@@ -342,17 +342,7 @@ class AssetBuilder {
   public static function pageRun() {
     // Beg your pardon, sir. Please may I have an HTTP response class instead?
     $asset = self::pageRender($_GET);
-    if (function_exists('http_response_code')) {
-      // PHP 5.4+
-      http_response_code($asset['statusCode']);
-    }
-    else {
-      header('X-PHP-Response-Code: ' . $asset['statusCode'], TRUE, $asset['statusCode']);
-    }
-
-    header('Content-Type: ' . $asset['mimeType']);
-    echo $asset['content'];
-    \CRM_Utils_System::civiExit();
+    \CRM_Utils_System::sendResponse($asset);
   }
 
   /**