Merge pull request #7886 from sarehag/CRM-18114
[civicrm-core.git] / CRM / Utils / System.php
index 2ca8294c6291de4ac97268e75e7a6a10b6810755..057545cb89040ad7052d928f1f6f6a225a43f49a 100644 (file)
 
 /**
  * System wide utilities.
+ *
+ * Provides a collection of Civi utilities + access to the CMS-dependant utilities
+ *
+ * FIXME: This is a massive and random collection that could be split into smaller services
+ *
+ * @method static mixed permissionDenied() Show access denied screen.
+ * @method static mixed logout() Log out the current user.
+ * @method static mixed updateCategories() Clear CMS caches related to the user registration/profile forms.
+ * @method static appendBreadCrumb(string $breadCrumbs) Append an additional breadcrumb tag to the existing breadcrumbs.
+ * @method static resetBreadCrumb() Reset an additional breadcrumb tag to the existing breadcrumb.
+ * @method static addHTMLHead(string $bc) Append a string to the head of the HTML file.
+ * @method static string postURL(int $action) Determine the post URL for a form.
+ * @method static string|null getUFLocale() Get the locale of the CMS.
+ * @method static bool setUFLocale(string $civicrm_language) Set the locale of the CMS.
+ * @method static bool isUserLoggedIn() Check if user is logged in.
+ * @method static int getLoggedInUfID() Get current logged in user id.
+ * @method static setHttpHeader(string $name, string $value) Set http header.
+ * @method static array synchronizeUsers() Create CRM contacts for all existing CMS users.
  */
 class CRM_Utils_System {
 
@@ -44,6 +62,18 @@ class CRM_Utils_System {
    */
   static $title = '';
 
+  /**
+   * Access methods in the appropriate CMS class
+   *
+   * @param $name
+   * @param $arguments
+   * @return mixed
+   */
+  public static function __callStatic($name, $arguments) {
+    $userSystem = CRM_Core_Config::singleton()->userSystem;
+    return call_user_func_array(array($userSystem, $name), $arguments);
+  }
+
   /**
    * Compose a new URL string from the current URL string.
    *
@@ -220,10 +250,12 @@ class CRM_Utils_System {
    *   outside the site, such as in an RSS feed.
    * @param string $fragment
    *   A fragment identifier (named anchor) to append to the link.
-   *
    * @param bool $htmlize
+   *   Whether to encode special html characters such as &.
    * @param bool $frontend
+   *   This link should be to the CMS front end (applies to WP & Joomla).
    * @param bool $forceBackend
+   *   This link should be to the CMS back end (applies to WP & Joomla).
    *
    * @return string
    *   An HTML string containing a link to the given path.
@@ -239,13 +271,33 @@ class CRM_Utils_System {
   ) {
     $query = self::makeQueryString($query);
 
-    // we have a valid query and it has not yet been transformed
-    if ($htmlize && !empty($query) && strpos($query, '&') === FALSE) {
-      $query = htmlentities($query);
+    // Legacy handling for when the system passes around html escaped strings
+    if (strstr($query, '&')) {
+      $query = html_entity_decode($query);
+    }
+
+    // Extract fragment from path or query if munged together
+    if ($query && strstr($query, '#')) {
+      list($path, $fragment) = explode('#', $query);
+    }
+    if ($path && strstr($path, '#')) {
+      list($path, $fragment) = explode('#', $path);
+    }
+
+    // Extract query from path if munged together
+    if ($path && strstr($path, '?')) {
+      list($path, $extraQuery) = explode('?', $path);
+      $query = $extraQuery . ($query ? "&$query" : '');
     }
 
     $config = CRM_Core_Config::singleton();
-    return $config->userSystem->url($path, $query, $absolute, $fragment, $htmlize, $frontend, $forceBackend);
+    $url = $config->userSystem->url($path, $query, $absolute, $fragment, $frontend, $forceBackend);
+
+    if ($htmlize) {
+      $url = htmlentities($url);
+    }
+
+    return $url;
   }
 
   /**
@@ -270,36 +322,6 @@ class CRM_Utils_System {
     return "<a href=\"$url\">$text</a>";
   }
 
-  /**
-   * Permission denied.
-   *
-   * @return mixed
-   */
-  public static function permissionDenied() {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->permissionDenied();
-  }
-
-  /**
-   * Log out.
-   *
-   * @return mixed
-   */
-  public static function logout() {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->logout();
-  }
-
-  /**
-   * This is a very drupal specific function for now.
-   */
-  public static function updateCategories() {
-    $config = CRM_Core_Config::singleton();
-    if ($config->userSystem->is_drupal) {
-      $config->userSystem->updateCategories();
-    }
-  }
-
   /**
    * What menu path are we currently on. Called for the primary tpl.
    *
@@ -341,7 +363,9 @@ class CRM_Utils_System {
    * Sets the title of the page.
    *
    * @param string $title
+   *   Document title - plain text only
    * @param string $pageTitle
+   *   Page title (if different) - may include html
    */
   public static function setTitle($title, $pageTitle = NULL) {
     self::$title = $title;
@@ -464,48 +488,6 @@ class CRM_Utils_System {
     self::civiExit();
   }
 
-  /**
-   * Append an additional breadcrumb tag to the existing breadcrumbs.
-   *
-   * @param string $breadCrumbs
-   */
-  public static function appendBreadCrumb($breadCrumbs) {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->appendBreadCrumb($breadCrumbs);
-  }
-
-  /**
-   * Reset an additional breadcrumb tag to the existing breadcrumb.
-   */
-  public static function resetBreadCrumb() {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->resetBreadCrumb();
-  }
-
-  /**
-   * Append a string to the head of the HTML file.
-   *
-   * @param string $bc
-   */
-  public static function addHTMLHead($bc) {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->addHTMLHead($bc);
-  }
-
-  /**
-   * Determine the post URL for a form.
-   *
-   * @param int $action
-   *   The default action if one is pre-specified.
-   *
-   * @return string
-   *   The URL to post the form.
-   */
-  public static function postURL($action) {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->postURL($action);
-  }
-
   /**
    * Get the base URL of the system.
    *
@@ -1196,7 +1178,7 @@ class CRM_Utils_System {
     $config = CRM_Core_Config::singleton();
     $req_headers = self::getRequestHeaders();
     // FIXME: Shouldn't the X-Forwarded-Proto check be part of CRM_Utils_System::isSSL()?
-    if (CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'enableSSL') &&
+    if (Civi::settings()->get('enableSSL') &&
       !self::isSSL() &&
       strtolower(CRM_Utils_Array::value('X_FORWARDED_PROTO', $req_headers)) != 'https'
     ) {
@@ -1386,34 +1368,6 @@ class CRM_Utils_System {
     }
   }
 
-  /**
-   * Get the locale of the hosting CMS.
-   *
-   * @return string
-   *   The used locale or null for none.
-   */
-  public static function getUFLocale() {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->getUFLocale();
-  }
-
-  /**
-   * Set the locale of the hosting CMS.
-   *
-   * For example, a mailing will want to change the CMS language so that
-   * URLs are in the correct language (such as the Drupal language prefix).
-   *
-   * @param string $civicrm_language
-   *   An array of parameters (see CRM_Utils_System::docURL2 method for names)
-   *
-   * @return bool
-   *   Returns whether the locale was successfully changed.
-   */
-  public static function setUFLocale($civicrm_language) {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->setUFLocale($civicrm_language);
-  }
-
   /**
    * Execute external or internal URLs and return server response.
    *
@@ -1511,27 +1465,6 @@ class CRM_Utils_System {
     return $config->userSystem->loadBootStrap($params, $loadUser, $throwError, $realPath);
   }
 
-  /**
-   * Check if user is logged in.
-   *
-   * @return bool
-   */
-  public static function isUserLoggedIn() {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->isUserLoggedIn();
-  }
-
-  /**
-   * Get current logged in user id.
-   *
-   * @return int
-   *   ufId, currently logged in user uf id.
-   */
-  public static function getLoggedInUfID() {
-    $config = CRM_Core_Config::singleton();
-    return $config->userSystem->getLoggedInUfID();
-  }
-
   /**
    * Get Base CMS url.
    *
@@ -1823,7 +1756,7 @@ class CRM_Utils_System {
    * @return string
    */
   public static function getSiteID() {
-    $sid = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'site_id');
+    $sid = Civi::settings()->get('site_id');
     if (!$sid) {
       $config = CRM_Core_Config::singleton();
       $sid = md5('sid_' . (defined('CIVICRM_SITE_KEY') ? CIVICRM_SITE_KEY : '') . '_' . $config->userFrameworkBaseURL);
@@ -1915,14 +1848,4 @@ class CRM_Utils_System {
     return NULL;
   }
 
-  /**
-   * Set http header.
-   *
-   * @param string $name
-   * @param string $value
-   */
-  public static function setHttpHeader($name, $value) {
-    CRM_Core_Config::singleton()->userSystem->setHttpHeader($name, $value);
-  }
-
 }