X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FSystem%2FDrupal.php;h=fda57c0385727286cb67e173ed0b285bf2121983;hb=5a604d61530b9960f810000684e3c2a6e27c7322;hp=089a793ebba95ea591f9e7560c38a7c9847789f7;hpb=8d33e12be1cfc6226cada7978de1306924fb6040;p=civicrm-core.git diff --git a/CRM/Utils/System/Drupal.php b/CRM/Utils/System/Drupal.php index 089a793ebb..fda57c0385 100644 --- a/CRM/Utils/System/Drupal.php +++ b/CRM/Utils/System/Drupal.php @@ -1,7 +1,7 @@ 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. @@ -63,7 +59,7 @@ class CRM_Utils_System_Drupal extends CRM_Utils_System_Base { $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'])){ @@ -98,9 +94,7 @@ class CRM_Utils_System_Drupal extends CRM_Utils_System_Base { if (form_get_errors()) { return FALSE; } - else { - return $form_state['user']->uid; - } + return $form_state['user']->uid; } /* @@ -550,7 +544,8 @@ class CRM_Utils_System_Drupal extends CRM_Utils_System_Base { * * @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( @@ -650,6 +645,33 @@ AND u.status = 1 return TRUE; } + /** + * 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 + * + * @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 * @@ -694,20 +716,26 @@ AND u.status = 1 function getUFLocale() { // return CiviCRM’s xx_YY locale that either matches Drupal’s Chinese locale // (for CRM-6281), Drupal’s xx_YY or is retrieved based on Drupal’s xx + // sometimes for CLI based on order called, this might not be set and/or empty global $language; - switch (TRUE) { - case $language->language == 'zh-hans': - return 'zh_CN'; - case $language->language == 'zh-hant': - return 'zh_TW'; + if (empty($language)) { + return NULL; + } - case preg_match('/^.._..$/', $language->language): - return $language->language; + if ($language->language == 'zh-hans') { + return 'zh_CN'; + } - default: - return CRM_Core_I18n_PseudoConstant::longForShort(substr($language->language, 0, 2)); + if ($language->language == 'zh-hant') { + return 'zh_TW'; } + + if (preg_match('/^.._..$/', $language->language)) { + return $language->language; + } + + return CRM_Core_I18n_PseudoConstant::longForShort(substr($language->language, 0, 2)); } function getVersion() { @@ -717,12 +745,12 @@ AND u.status = 1 /** * 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) { + function loadBootStrap($params = array(), $loadUser = TRUE, $throwError = TRUE, $realPath = NULL) { //take the cms root path. $cmsPath = $this->cmsRootPath($realPath); @@ -745,13 +773,12 @@ AND u.status = 1 } } 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); - if (!function_exists('module_exists') || - !module_exists('civicrm') - ) { + if (!function_exists('module_exists') || !module_exists('civicrm')) { if ($throwError) { echo '
Sorry, could not load drupal bootstrap.'; exit(); @@ -762,8 +789,6 @@ AND u.status = 1 // seems like we've bootstrapped drupal $config = CRM_Core_Config::singleton(); - - // lets also fix the clean url setting // CRM-6948 $config->cleanURL = (int) variable_get('clean_url', '0'); @@ -810,7 +835,8 @@ AND u.status = 1 exit(); } - // CRM-6948: When using loadBootStrap, it's implicit that CiviCRM has already loaded its settings, which means that define(CIVICRM_CLEANURL) was correctly set. + // CRM-6948: When using loadBootStrap, it's implicit that CiviCRM has already loaded its settings + // which means that define(CIVICRM_CLEANURL) was correctly set. // So we correct it $config = CRM_Core_Config::singleton(); $config->cleanURL = (int)variable_get('clean_url', '0'); @@ -821,8 +847,10 @@ AND u.status = 1 return FALSE; } + /** + * + */ function cmsRootPath($scriptFilename = NULL) { - $cmsRoot = $valid = NULL; if (!is_null($scriptFilename)) { @@ -908,10 +936,7 @@ AND u.status = 1 * @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; } @@ -1003,12 +1028,17 @@ AND u.status = 1 /** * 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 { @@ -1019,6 +1049,9 @@ AND u.status = 1 /** * 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')) { @@ -1031,4 +1064,38 @@ AND u.status = 1 og_ungroup($ogID, 'user', user_load($drupalID)); } } + + /** + * 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, ($tz/60)%60 ); + + if($timeZoneOffset > 0){ + $timeZoneOffset = '+' . $timeZoneOffset; + } + return $timeZoneOffset; + } + /** + * Reset any system caches that may be required for proper CiviCRM + * integration. + */ + function flush() { + drupal_flush_all_caches(); + } }