'cms:view user account',
))
) {
- return CRM_Utils_System::url('user/' . $uid);
+ return url('user/' . $uid);
};
}
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;
+ }
+
}