Merge pull request #2843 from kurund/CRM-14427
[civicrm-core.git] / CRM / Utils / System / WordPress.php
index 65d00d942828c701e546d00397d2d6a0c04b6f4b..9c5a980bfbfc28702e6b1e97f1b22da65268840d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -308,22 +308,25 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
     elseif (defined('CIVICRM_UF_WP_BASEPAGE')) {
       $base .= CIVICRM_UF_WP_BASEPAGE;
     }
+    elseif (isset($config->wpBasePage)) {
+      $base .= $config->wpBasePage;
+    }
 
     if (isset($path)) {
       if (isset($query)) {
         if ($permlinkStructure != '' && ($pageID || $script != '')) {
-          return $script . '?page=CiviCRM&q=' . $path . $pageID . $separator . $query . $fragment;
+          return $script . '?page=CiviCRM'. $separator . 'q=' . $path . $pageID . $separator . $query . $fragment;
         }
         else {
-          return $base . '?page=CiviCRM&q=' . $path . $pageID . $separator . $query . $fragment;
+          return $base . '?page=CiviCRM' . $separator . 'q=' . $path . $pageID . $separator . $query . $fragment;
         }
       }
       else {
         if ($permlinkStructure != '' && ($pageID || $script != '')) {
-          return $script . '?page=CiviCRM&q=' . $path . $pageID . $fragment;
+          return $script . '?page=CiviCRM' . $separator . 'q=' . $path . $pageID . $fragment;
         }
         else {
-          return $base .'?page=CiviCRM&q=' . $path . $pageID . $fragment;
+          return $base . '?page=CiviCRM' . $separator . 'q=' . $path . $pageID . $fragment;
         }
       }
     }
@@ -358,7 +361,7 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
     $config = CRM_Core_Config::singleton();
 
     if ($loadCMSBootstrap) {
-      self::loadBootstrap($name, $password);
+      $config->userSystem->loadBootStrap($name, $password);
     }
 
     $user = wp_authenticate($name, $password);
@@ -412,7 +415,18 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
    * @return string  with the locale or null for none
    */
   function getUFLocale() {
-    return NULL;
+    // WPML plugin
+    if (defined('ICL_LANGUAGE_CODE')) {
+      $language = ICL_LANGUAGE_CODE;
+    }
+
+    // TODO: set language variable for others WordPress plugin
+
+    if (isset($language)) {
+      return CRM_Core_I18n_PseudoConstant::longForShort(substr($language, 0, 2));
+    } else {
+      return NULL;
+    }
   }
 
   /**
@@ -430,29 +444,50 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
     }
 
     require_once ($cmsRootPath . DIRECTORY_SEPARATOR . 'wp-load.php');
+    $wpUserTimezone = get_option('timezone_string');
+    if ($wpUserTimezone) {
+      date_default_timezone_set($wpUserTimezone);
+      CRM_Core_Config::singleton()->userSystem->setMySQLTimeZone();
+    }
     return true;
   }
 
+  function validInstallDir($dir) {
+    $includePath = "$dir/wp-includes";
+    if (
+      @opendir($includePath) &&
+      file_exists("$includePath/version.php")
+    ) {
+      return TRUE;
+    }
+    return FALSE;
+  }
+
   function cmsRootPath() {
     $cmsRoot = $valid = NULL;
-    $pathVars = explode('/', str_replace('\\', '/', $_SERVER['SCRIPT_FILENAME']));
-
-    //might be windows installation.
-    $firstVar = array_shift($pathVars);
-    if ($firstVar) {
-      $cmsRoot = $firstVar;
-    }
-
-    //start w/ csm dir search.
-    foreach ($pathVars as $var) {
-      $cmsRoot .= "/$var";
-      $cmsIncludePath = "$cmsRoot/wp-includes";
-      //stop as we found bootstrap.
-      if (@opendir($cmsIncludePath) &&
-        file_exists("$cmsIncludePath/version.php")
-      ) {
+    if (defined('CIVICRM_CMSDIR')) {
+      if ($this->validInstallDir(CIVICRM_CMSDIR)) {
+        $cmsRoot = CIVICRM_CMSDIR;
         $valid = TRUE;
-        break;
+      }
+    }
+    else {
+      $pathVars = explode('/', str_replace('\\', '/', $_SERVER['SCRIPT_FILENAME']));
+
+      //might be windows installation.
+      $firstVar = array_shift($pathVars);
+      if ($firstVar) {
+        $cmsRoot = $firstVar;
+      }
+
+      //start w/ csm dir search.
+      foreach ($pathVars as $var) {
+        $cmsRoot .= "/$var";
+        if ($this->validInstallDir($cmsRoot)) {
+          //stop as we found bootstrap.
+          $valid = TRUE;
+          break;
+        }
       }
     }
 
@@ -603,5 +638,13 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
       return 'Unknown';
     }
   }
+
+  /**
+   * get timezone as a string
+   * @return string Timezone e.g. 'America/Los_Angeles'
+   */
+  function getTimeZoneString() {
+    return get_option('timezone_string');
+  }
 }