X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FSystem%2FDrupalBase.php;h=943ea51905247840453eab19211210a66a22bf69;hb=0569a0a5e7047859930d433c5dbe18cb57b9c048;hp=8c4f06867f1a8cd1ac366e90c0a00f623d364754;hpb=c4b857d6672d2db5b50fafd0152a09e294512463;p=civicrm-core.git diff --git a/CRM/Utils/System/DrupalBase.php b/CRM/Utils/System/DrupalBase.php index 8c4f06867f..943ea51905 100644 --- a/CRM/Utils/System/DrupalBase.php +++ b/CRM/Utils/System/DrupalBase.php @@ -252,7 +252,7 @@ abstract class CRM_Utils_System_DrupalBase extends CRM_Utils_System_Base { 'cms:view user account', )) ) { - return CRM_Utils_System::url('user/' . $uid); + return url('user/' . $uid); }; } @@ -568,4 +568,92 @@ abstract class CRM_Utils_System_DrupalBase extends CRM_Utils_System_Base { return $siteName; } + /** + * @var $basepath String cached basepath to prevent having to parse it repeatedly. + */ + protected $basepath; + + /** + * @var $filesUrl String holds resolved path. + */ + protected $filesUrl; + + /** + * checkBasePath - Returns root directory with respect to $civicrm_root + * + * @param $root String + * @param $seek String + */ + public function checkBasePath($root, $seek = "/sites/") { + if (!isset($this->basepath)) { + $this->basepath = substr($root, 0, stripos($root, $seek) + 1); + } + + return $this->basepath; + } + + /** + * check if files exist in path. Just a simple helper function for viewing + * existence of sites. + * + * @param $basepath string + * @param $basepath string + */ + private function checkFilesExists($basepath, $folder) { + return file_exists("{$basepath}sites/$folder/files/civicrm/"); + } + + /** + * Returns the concatenated url for existing path. + * + * @param $baseUrl string + * @param $folder string + */ + private function getUrl($baseUrl, $folder) { + return "{$baseUrl}sites/$folder/files/civicrm/"; + } + + /** + * Returns the location of /sites/SITENAME/files/civicrm depending + * on system configuration. + * + * @fixed CRM-19303 + * @param $root string + * @param $baseUrl string + * @param $default string + */ + public function checkMultisite($root, $baseUrl, $default = "default") { + if (isset($this->filesUrl)) { + return $this->filesUrl; + } + + $basepath = $this->checkBasePath($root); + $correct = NULL; + if ($this->checkFilesExists($root, $default)) { + $correct = $default; + } + else { + //Check for any other directories if default doesn't exist. + $folders = scandir($basepath . 'sites/'); + foreach ($folders as $folder) { + //Ignore hidden directories/files... + if (strpos($folder, '.') === 0 || $folder == 'all') { + continue; + } + //Check if it is a directory + if (!is_dir($basepath . 'sites/' . $folder)) { + continue; + } + + //Check if files path exists... + if ($this->checkFilesExists($basepath, $folder) && $folder == $_SERVER['HTTP_HOST']) { + $correct = $folder; + break; + } + } + } + $this->filesUrl = self::getUrl($baseUrl, $correct); + return $this->filesUrl; + } + }