-
-
Notifications
You must be signed in to change notification settings - Fork 824
/
civicrm-version.php
129 lines (114 loc) · 3.37 KB
/
civicrm-version.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
namespace _CiviVersion_ {
class Util {
/**
* Get the CiviCRM version
*/
public static function findVersion() {
$verFile = implode(DIRECTORY_SEPARATOR, [dirname(__FILE__), 'xml', 'version.xml']);
if (file_exists($verFile)) {
$str = file_get_contents($verFile);
$xmlObj = simplexml_load_string($str);
return (string) $xmlObj->version_no;
}
trigger_error("Unknown version", E_USER_ERROR);
exit();
}
/**
* Get the CMS name
*/
public static function findCMS() {
if (defined('CIVICRM_UF')) {
return CIVICRM_UF;
}
elseif (defined('BACKDROP_VERSION')) {
return 'Backdrop';
}
elseif (function_exists('drupal_bootstrap') && version_compare(VERSION, '7.0', '>=') && version_compare(VERSION, '8.0', '<')) {
return 'Drupal';
}
elseif (defined('ABSPATH') && function_exists('get_bloginfo')) {
return 'WordPress';
}
elseif (defined('DRUPAL_ROOT') && class_exists('Drupal') && version_compare(\Drupal::VERSION, '8.0', '>=') && version_compare(\Drupal::VERSION, '9.0', '<')) {
return 'Drupal8';
}
else {
// guess CMS name from the current path
list($cmsType,) = self::findCMSRootPath();
if (!empty($cmsType)) {
return $cmsType;
}
}
}
/**
* Get the CMS root path and CMS name
*/
public static function findCMSRootPath() {
$cmsPatterns = array(
'Wordpress' => array(
'wp-includes/version.php',
// Future? 'vendor/civicrm/wordpress/civicrm.php' => 'wp',
),
'Joomla' => array(
'administrator/components/com_civicrm/civicrm/civicrm-version.php',
),
'Drupal' => array(
// D7
'modules/system/system.module',
),
'Drupal8' => array(
// D8
'core/core.services.yml',
),
'Backdrop' => array(
'core/modules/layout/layout.module',
),
);
$parts = explode('/', str_replace('\\', '/', self::getSearchDir()));
while (!empty($parts)) {
$basePath = implode('/', $parts);
foreach ($cmsPatterns as $cmsType => $relPaths) {
foreach ($relPaths as $relPath) {
$matches = glob("$basePath/$relPath");
if (!empty($matches)) {
return [$cmsType, $basePath];
}
}
}
array_pop($parts);
}
}
/**
* Get the current path
*/
public static function getSearchDir() {
if ($_SERVER['SCRIPT_FILENAME']) {
return dirname($_SERVER['SCRIPT_FILENAME']);
}
// getenv('PWD') works better with symlinked source trees, but it's
// not portable to Windows.
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
return getcwd();
}
else {
return getenv('PWD');
}
}
}
}
namespace {
/**
* Get the CiviCRM version.
* TODO : For now this function is not included in \Civi\Version class so not to break any code
* which directly call civicrmVersion(). So those call need to replaced with \Civi\Version::civicrmVersion()
* when included in the class
* @deprecated
*/
function civicrmVersion() {
return [
'version' => \_CiviVersion_\Util::findVersion(),
'cms' => \_CiviVersion_\Util::findCMS(),
];
}
}