Merge pull request #15815 from artfulrobot/issue-1108-fix-unsubscribe
[civicrm-core.git] / CRM / Utils / System / Base.php
index 654463b40a46735da6c6d1ae795db9fafad81cfb..8f16278794ae39a4f629981a23bd4c55f7c84447 100644 (file)
@@ -152,6 +152,7 @@ abstract class CRM_Utils_System_Base {
    *
    * @return array|bool
    *   [contactID, ufID, unique string] else false if no auth
+   * @throws \CRM_Core_Exception.
    */
   public function authenticate($name, $password, $loadCMSBootstrap = FALSE, $realPath = NULL) {
     return FALSE;
@@ -179,9 +180,10 @@ abstract class CRM_Utils_System_Base {
 
   /**
    * Immediately stop script execution and display a 401 "Access Denied" page.
+   * @throws \CRM_Core_Exception
    */
   public function permissionDenied() {
-    CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+    throw new CRM_Core_Exception(ts('You do not have permission to access this page.'));
   }
 
   /**
@@ -414,6 +416,19 @@ abstract class CRM_Utils_System_Base {
     return FALSE;
   }
 
+  /**
+   * Is a front end page being accessed.
+   *
+   * Generally this would be a contribution form or other public page as opposed to a backoffice page (like contact edit).
+   *
+   * @todo Drupal uses the is_public setting - clarify & rationalise. See https://github.com/civicrm/civicrm-drupal/pull/546/files
+   *
+   * @return bool
+   */
+  public function isFrontEndPage() {
+    return CRM_Core_Config::singleton()->userFrameworkFrontend;
+  }
+
   /**
    * Get user login URL for hosting CMS (method declared in each CMS system class)
    *
@@ -946,17 +961,17 @@ abstract class CRM_Utils_System_Base {
   }
 
   /**
-   * Set the HTTP Status Code for a request
-   * @param string $statusCode
+   * Send an HTTP Response base on PSR HTTP RespnseInterface response.
+   *
+   * @param \Psr\Http\Message\ResponseInterface $response
    */
-  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);
+  public function sendResponse(\Psr\Http\Message\ResponseInterface $response) {
+    http_response_code($response->getStatusCode());
+    foreach ($response->getHeaders() as $name => $values) {
+      CRM_Utils_System::setHttpHeader($name, implode(', ', (array) $values));
     }
+    echo $response->getBody();
+    CRM_Utils_System::civiExit();
   }
 
 }