/**
* 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 {
*/
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.
*
}
/**
- * If we are using a theming system, invoke theme, else just print the
- * content.
+ * If we are using a theming system, invoke theme, else just print the content.
*
* @param string $content
* The content that will be themed.
* Generate a query string if input is an array.
*
* @param array|string $query
+ *
* @return string
*/
public static function makeQueryString($query) {
* 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.
*/
) {
$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;
}
/**
- * @param $text
- * @param null $path
- * @param null $query
+ * Get href.
+ *
+ * @param string $text
+ * @param string $path
+ * @param string|array $query
* @param bool $absolute
- * @param null $fragment
+ * @param string $fragment
* @param bool $htmlize
* @param bool $frontend
* @param bool $forceBackend
}
/**
- * @return mixed
- */
- public static function permissionDenied() {
- $config = CRM_Core_Config::singleton();
- return $config->userSystem->permissionDenied();
- }
-
- /**
- * @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
+ * What menu path are we currently on. Called for the primary tpl.
*
* @return string
* the current menu path
}
/**
- * called from a template to compose a url.
+ * Called from a template to compose a url.
*
* @param array $params
* List of parameters.
* 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;
/**
* Figures and sets the userContext.
*
- * Uses the referer if valid else uses the default.
+ * Uses the referrer if valid else uses the default.
*
* @param array $names
* Referrer should match any str in this array.
self::civiExit();
}
- /**
- * Append an additional breadcrumb tag to the existing breadcrumbs.
- *
- * @param $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 $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.
*
}
/**
+ * Authenticate or abort.
+ *
+ * @param string $message
+ * @param bool $abort
+ *
+ * @return bool
*/
public static function authenticateAbort($message, $abort) {
if ($abort) {
}
/**
+ * Authenticate key.
+ *
* @param bool $abort
* (optional) Whether to exit; defaults to true.
*
}
/**
+ * Authenticate script.
+ *
* @param bool $abort
- * @param null $name
- * @param null $pass
+ * @param string $name
+ * @param string $pass
* @param bool $storeInSession
* @param bool $loadCMSBootstrap
* @param bool $requireKey
* @param string $password
* The password.
* @param bool $loadCMSBootstrap
- * @param $realPath
+ * @param string $realPath
*
* @return false|array
*/
/**
* Determine whether a value is null-ish.
*
- * @param $value
+ * @param mixed $value
* The value to check for null.
+ *
* @return bool
*/
public static function isNull($value) {
* The credit card number to obscure.
* @param int $keep
* (optional) The number of digits to preserve unmodified.
+ *
* @return string
* The obscured credit card number.
*/
/**
* Get a setting from a loaded PHP module.
+ *
+ * @param string $pModuleName
+ * @param string $pSetting
+ *
+ * @return mixed
*/
public static function getModuleSetting($pModuleName, $pSetting) {
$vModules = self::parsePHPModules();
}
/**
- * @param $title
+ * Do something no-one bothered to document.
+ *
+ * @param string $title
* (optional)
*
* @return mixed|string
}
/**
+ * Download something or other.
+ *
* @param string $name
* @param string $mimeType
- * @param $buffer
+ * @param string $buffer
* @param string $ext
* @param bool $output
* @param string $disposition
*
* @param string $url
* The URL to operate on.
+ *
* @return string
* The fixed URL.
*/
* @param string $separator
* @param string $string
* @param int $limit
+ *
* @return string[]
*/
public static function explode($separator, $string, $limit) {
}
/**
+ * Check url.
+ *
* @param string $url
* The URL to check.
* @param bool $addCookie
* @param bool $abort
* (optional) Whether to fatally abort if the version requirement is not
* met. Defaults to TRUE.
+ *
* @return bool
* Returns TRUE if the requirement is met, FALSE if the requirement is not
* met and we're not aborting due to the failed requirement. If $abort is
}
/**
- * @param $string
+ * Format wiki url.
+ *
+ * @param string $string
* @param bool $encode
*
* @return string
}
/**
+ * Encode url.
+ *
* @param string $url
*
* @return null|string
return $version;
}
+ /**
+ * Gives the first two parts of the version string E.g. 6.1.
+ *
+ * @return string
+ */
+ public static function majorVersion() {
+ list($a, $b) = explode('.', self::version());
+ return "$a.$b";
+ }
+
/**
* Determines whether a string is a valid CiviCRM version string.
*
* @param string $version
* Version string to be checked.
+ *
* @return bool
*/
public static function isVersionFormatValid($version) {
return $headers;
}
+ /**
+ * Get request headers.
+ *
+ * @return array|false
+ */
public static function getRequestHeaders() {
if (function_exists('apache_request_headers')) {
return apache_request_headers();
strtolower($_SERVER['HTTPS']) != 'off') ? TRUE : FALSE;
}
+ /**
+ * Redirect to SSL.
+ *
+ * @param bool|FALSE $abort
+ *
+ * @throws \Exception
+ */
public static function redirectToSSL($abort = FALSE) {
$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'
) {
}
}
- /**
- * 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.
*
* @param bool $loadUser
* Boolean load user or not.
* @param bool $throwError
- * @param $realPath
+ * @param string $realPath
*/
public static function loadBootStrap($params = array(), $loadUser = TRUE, $throwError = TRUE, $realPath = NULL) {
if (!is_array($params)) {
}
/**
- * 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.
+ * Get Base CMS url.
*
- * @return int
- * ufId, currently logged in user uf id.
+ * @return mixed|string
*/
- public static function getLoggedInUfID() {
- $config = CRM_Core_Config::singleton();
- return $config->userSystem->getLoggedInUfID();
- }
-
public static function baseCMSURL() {
static $_baseURL = NULL;
if (!$_baseURL) {
* Given a URL, return a relative URL if possible.
*
* @param string $url
+ *
* @return string
*/
public static function relativeURL($url) {
}
/**
- * Clean url, replaces first '&' with '?'
+ * Clean url, replaces first '&' with '?'.
*
* @param string $url
*
}
/**
- * Append the contents of an 'extra' smarty template file if it is present in
- * the custom template directory. This does not work if there are
+ * Append the contents of an 'extra' smarty template file.
+ *
+ * It must be present in the custom template directory. This does not work if there are
* multiple custom template directories
*
* @param string $fileName
}
/**
- * Get a list of all files that are found within the directories
- * that are the result of appending the provided relative path to
+ * Get a list of all files that are found within the directories.
+ *
+ * Files must be the result of appending the provided relative path to
* each component of the PHP include path.
*
* @author Ken Zalewski
}
/**
- * Get a list of all "plugins" (PHP classes that implement a piece of
+ * Get a list of all "plugins".
+ *
+ * (PHP classes that implement a piece of
* functionality using a well-defined interface) that are found in a
* particular CiviCRM directory (both custom and core are searched).
*
return $plugins;
}
+ /**
+ * Execute scheduled jobs.
+ */
public static function executeScheduledJobs() {
$facility = new CRM_Core_JobManager();
$facility->execute(FALSE);
* Evaluate any tokens in a URL.
*
* @param string|FALSE $url
+ *
* @return string|FALSE
*/
public static function evalUrl($url) {
* @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);
}
/**
+ * Is in upgrade mode.
+ *
* @return bool
*/
public static function isInUpgradeMode() {
* - action: int, CRM_Core_Action::UPDATE or CRM_Core_Action::VIEW [default: VIEW]
* - entity_table: string, eg "civicrm_contact"
* - entity_id: int
+ *
* @return array|NULL
* NULL if unavailable, or an array. array has keys:
* - path: string
return NULL;
}
- /**
- * @param string $name
- * @param string $value
- */
- public static function setHttpHeader($name, $value) {
- CRM_Core_Config::singleton()->userSystem->setHttpHeader($name, $value);
- }
-
}