<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.3 |
+ | CiviCRM version 4.4 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2013 |
+--------------------------------------------------------------------+
/**
* Drupal specific stuff goes here
*/
-class CRM_Utils_System_Drupal extends CRM_Utils_System_Base {
- function __construct() {
- $this->is_drupal = TRUE;
- $this->supports_form_extensions = TRUE;
- }
+class CRM_Utils_System_Drupal extends CRM_Utils_System_DrupalBase {
/**
* Function to create a user in Drupal.
*
*/
function createUser(&$params, $mail) {
- $form_state = array();
+ $form_state = form_state_defaults();
+
$form_state['input'] = array(
'name' => $params['cms_name'],
'mail' => $params[$mail],
$admin = user_access('administer users');
if (!variable_get('user_email_verification', TRUE) || $admin) {
- $form_state['input']['pass'] = array('pass1'=>$params['cms_pass'],'pass2'=>$params['cms_pass']);
+ $form_state['input']['pass'] = array('pass1'=>$params['cms_pass'],'pass2'=>$params['cms_pass']);
}
if(!empty($params['notify'])){
if (form_get_errors()) {
return FALSE;
}
- else {
- return $form_state['user']->uid;
- }
+ return $form_state['user']->uid;
}
/*
return FALSE;
}
// If the path is within the drupal directory we can use the more efficient 'file' setting
- $params['type'] = self::formatResourceUrl($url) ? 'file' : 'external';
+ $params['type'] = $this->formatResourceUrl($url) ? 'file' : 'external';
drupal_add_js($url, $params);
return TRUE;
}
}
$params = array();
// If the path is within the drupal directory we can use the more efficient 'file' setting
- $params['type'] = self::formatResourceUrl($url) ? 'file' : 'external';
+ $params['type'] = $this->formatResourceUrl($url) ? 'file' : 'external';
drupal_add_css($url, $params);
return TRUE;
}
return TRUE;
}
- /**
- * Check if a resource url is within the drupal directory and format appropriately
- *
- * @param url (reference)
- *
- * @return bool: TRUE for internal paths, FALSE for external
- */
- static function formatResourceUrl(&$url) {
- $internal = FALSE;
- $base = CRM_Core_Config::singleton()->resourceBase;
- global $base_url;
- // Handle absolute urls
- if (strpos($url, $base_url) === 0) {
- $internal = TRUE;
- $url = trim(str_replace($base_url, '', $url), '/');
- }
- // Handle relative urls
- elseif (strpos($url, $base) === 0) {
- $internal = TRUE;
- $url = substr(drupal_get_path('module', 'civicrm'), 0, -6) . trim(substr($url, strlen($base)), '/');
- }
- // Strip query string
- $q = strpos($url, '?');
- if ($q && $internal) {
- $url = substr($url, 0, $q);
- }
- return $internal;
- }
-
/**
* rewrite various system urls to https
*
return $this->url($_GET['q']);
}
- /**
- * Generate an internal CiviCRM URL (copied from DRUPAL/includes/common.inc#url)
- *
- * @param $path string The path being linked to, such as "civicrm/add"
- * @param $query string A query string to append to the link.
- * @param $absolute boolean Whether to force the output to be an absolute link (beginning with http:).
- * Useful for links that will be displayed outside the site, such as in an
- * RSS feed.
- * @param $fragment string A fragment identifier (named anchor) to append to the link.
- * @param $htmlize boolean whether to convert to html eqivalant
- * @param $frontend boolean a gross joomla hack
- *
- * @return string an HTML string containing a link to the given path.
- * @access public
- *
- */
- function url($path = NULL, $query = NULL, $absolute = FALSE,
- $fragment = NULL, $htmlize = TRUE,
- $frontend = FALSE, $forceBackend = FALSE
- ) {
- $config = CRM_Core_Config::singleton();
- $script = 'index.php';
-
- $path = CRM_Utils_String::stripPathChars($path);
-
- if (isset($fragment)) {
- $fragment = '#' . $fragment;
- }
-
- if (!isset($config->useFrameworkRelativeBase)) {
- $base = parse_url($config->userFrameworkBaseURL);
- $config->useFrameworkRelativeBase = $base['path'];
- }
- $base = $absolute ? $config->userFrameworkBaseURL : $config->useFrameworkRelativeBase;
-
- $separator = $htmlize ? '&' : '&';
-
- if (!$config->cleanURL) {
- if (isset($path)) {
- if (isset($query)) {
- return $base . $script . '?q=' . $path . $separator . $query . $fragment;
- }
- else {
- return $base . $script . '?q=' . $path . $fragment;
- }
- }
- else {
- if (isset($query)) {
- return $base . $script . '?' . $query . $fragment;
- }
- else {
- return $base . $fragment;
- }
- }
- }
- else {
- if (isset($path)) {
- if (isset($query)) {
- return $base . $path . '?' . $query . $fragment;
- }
- else {
- return $base . $path . $fragment;
- }
- }
- else {
- if (isset($query)) {
- return $base . $script . '?' . $query . $fragment;
- }
- else {
- return $base . $fragment;
- }
- }
- }
- }
/**
* Authenticate the user against the drupal db
*
* @param string $name the user name
* @param string $password the password for the above user name
- * @param $loadCMSBootstrap boolean load cms bootstrap?
+ * @param boolean $loadCMSBootstrap load cms bootstrap?
+ * @param NULL|string $realPath filename of script
*
* @return mixed false if no auth
* array(
CRM_Core_Error::fatal("Cannot connect to drupal db via $config->userFrameworkDSN, " . $dbDrupal->getMessage());
}
-
-
$account = $userUid = $userMail = NULL;
if ($loadCMSBootstrap) {
$bootStrapParams = array();
}
/**
- * Perform an post login activities required by the UF -
- * e.g. for drupal: records a watchdog message about the new session, saves the login timestamp, calls hook_user op 'login' and generates a new session.
- * @param array $edit: The array of form values submitted by the user.
+ * Perform any post login activities required by the UF -
+ * e.g. for drupal: records a watchdog message about the new session, saves the login timestamp,
+ * calls hook_user op 'login' and generates a new session.
+ *
+ * @param array params
+ *
+ * FIXME: Document values accepted/required by $params
+ */
+ function userLoginFinalize($params = array()){
+ user_login_finalize($params);
+ }
+
+ /**
+ * Determine the native ID of the CMS user
*
- function userLoginFinalize($edit = array()){
- user_login_finalize(&$edit);
+ * @param $username
+ * @return int|NULL
+ */
+ function getUfId($username) {
+ $user = user_load_by_name($username);
+ if (empty($user->uid)) {
+ return NULL;
+ }
+ return $user->uid;
}
- */
/**
* Set a message in the UF to display to a user
/**
* load drupal bootstrap
*
- * @param $params array with uid or name and password
- * @param $loadUser boolean load cms user?
- * @param $throwError throw error on failure?
+ * @param array $params Either uid, or name & pass.
+ * @param boolean $loadUser boolean Require CMS user load.
+ * @param boolean $throwError If true, print error on failure and exit.
+ * @param boolean|string $realPath path to script
*/
-
function loadBootStrap($params = array(), $loadUser = TRUE, $throwError = TRUE, $realPath = NULL) {
//take the cms root path.
$cmsPath = $this->cmsRootPath($realPath);
}
}
require_once 'includes/bootstrap.inc';
- drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
+ // @ to suppress notices eg 'DRUPALFOO already defined'.
+ @drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// explicitly setting error reporting, since we cannot handle drupal related notices
error_reporting(1);
return FALSE;
}
+ /**
+ *
+ */
function cmsRootPath($scriptFilename = NULL) {
-
$cmsRoot = $valid = NULL;
if (!is_null($scriptFilename)) {
* @return string $url, formatted url.
* @static
*/
- function languageNegotiationURL(
- $url,
- $addLanguagePart = TRUE,
- $removeLanguagePart = FALSE
- ) {
+ function languageNegotiationURL($url, $addLanguagePart = TRUE, $removeLanguagePart = FALSE) {
if (empty($url)) {
return $url;
}
if ($urlType == LOCALE_LANGUAGE_NEGOTIATION_URL_DOMAIN) {
if (isset($language->domain) && $language->domain) {
if ($addLanguagePart) {
- $url = CRM_Utils_File::addTrailingSlash($language->domain, '/');
+ $url = (CRM_Utils_System::isSSL() ? 'https' : 'http') . '://' . $language->domain . base_path();
}
if ($removeLanguagePart && defined('CIVICRM_UF_BASEURL')) {
$url = str_replace('\\', '/', $url);
/**
* Wrapper for og_membership creation
+ *
+ * @param integer $ogID Organic Group ID
+ * @param integer $drupalID drupal User ID
*/
function og_membership_create($ogID, $drupalID){
if (function_exists('og_entity_query_alter')) {
- // sort-of-randomly chose a function that only exists in the 7.x-2.x branch
- // TODO: Find a more solid way to make this test
- // Also, since we don't know how to get the entity type of the group, we'll assume it's 'node'
+ // sort-of-randomly chose a function that only exists in the // 7.x-2.x branch
+ //
+ // @TODO Find more solid way to check - try system_get_info('module', 'og').
+ //
+ // Also, since we don't know how to get the entity type of the // group, we'll assume it's 'node'
og_group('node', $ogID, array('entity' => user_load($drupalID)));
}
else {
/**
* Wrapper for og_membership deletion
+ *
+ * @param integer $ogID Organic Group ID
+ * @param integer $drupalID drupal User ID
*/
function og_membership_delete($ogID, $drupalID) {
if (function_exists('og_entity_query_alter')) {
}
}
+ /**
+ * Get timezone from Drupal
+ * @return boolean|string
+ */
+ function getTimeZoneOffset(){
+ global $user;
+ if (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone)) {
+ $timezone = $user->timezone;
+ } else {
+ $timezone = variable_get('date_default_timezone', null);
+ }
+ $tzObj = new DateTimeZone($timezone);
+ $dateTime = new DateTime("now", $tzObj);
+ $tz = $tzObj->getOffset($dateTime);
+
+ if(empty($tz)){
+ return false;
+ }
+
+ $timeZoneOffset = sprintf("%02d:%02d", $tz / 3600, abs(($tz/60)%60));
+
+ if($timeZoneOffset > 0){
+ $timeZoneOffset = '+' . $timeZoneOffset;
+ }
+ return $timeZoneOffset;
+ }
/**
* Reset any system caches that may be required for proper CiviCRM
* integration.