-
Notifications
You must be signed in to change notification settings - Fork 0
/
loft_deploy.module
138 lines (125 loc) · 4.07 KB
/
loft_deploy.module
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
130
131
132
133
134
135
136
137
138
<?php
/**
* @file
* Base module file for loft_deploy.
*
* @defgroup loft_deploy Loft Deploy
* @{
*/
use Drupal\Component\Utility\Html;
use Drupal\Core\Render\Markup;
use Drupal\Core\Template\Attribute;
use Drupal\loft_deploy\LoftDeployManager;
use Drupal\Core\Site\Settings;
/**
* Determine if the current user should see the border.
*
* @return bool
* True if the current user should see the border.
*
* // TODO Use the Access mechanism here.
*/
function loft_deploy_border_access() {
static $drupal_static_fast;
if (!isset($drupal_static_fast)) {
$drupal_static_fast['access'] = &drupal_static(__FUNCTION__, NULL);
}
$access = &$drupal_static_fast['access'];
if (is_null($access)) {
$access = ($site_role = \Drupal::service('loft_deploy.manager')
->getSiteRole()) !== LoftDeployManager::ROLE_PROD
&& empty($_COOKIE['loft_deploy']);
\Drupal::moduleHandler()
->alter('loft_deploy_border_access', $access, $site_role, $_COOKIE['loft_deploy']);
}
return $access && !Settings::get('loft_deploy.hide_border');
}
/**
* Implements hook_preprocess_html().
*/
function loft_deploy_preprocess_html(&$vars) {
if (loft_deploy_border_access()) {
$ldm = \Drupal::service('loft_deploy.manager');
$site_role = $ldm->getSiteRole();
$output = '';
$wrapper_attributes = [
'class' => [
'loft-deploy',
$site_role,
],
];
$custom_classes = Settings::get('loft_deploy.css_classes');
$custom_classes = is_array($custom_classes) ? $custom_classes : explode(' ', $custom_classes);
if (!empty($custom_classes)) {
$wrapper_attributes['class'] = array_merge($wrapper_attributes['class'], $custom_classes);
}
// Add in css class for the IP.
if (($ip = \Drupal::request()->getClientIp())) {
if (in_array($ip, ['127.0.0.1', '::1'])) {
$ip = 'localhost';
}
else {
$ip = 'ip-' . str_replace('.', '-', $ip);
}
$wrapper_attributes['class'][] = $ip;
}
if ($git_branch = $ldm->getGitBranch()) {
$git_branch = strtolower($git_branch);
$wrapper_attributes['class'][] = 'git-' . $git_branch;
// Gitflow support.
if (strpos($git_branch, 'master') === 0
|| strpos($git_branch, 'hotfix') === 0
) {
$wrapper_attributes['class'][] = 'gitflow-master';
}
elseif (strpos($git_branch, 'develop') === 0
|| strpos($git_branch, 'release') === 0
) {
$wrapper_attributes['class'][] = 'gitflow-develop';
}
elseif (strpos($git_branch, 'feature') === 0) {
$wrapper_attributes['class'][] = 'gitflow-feature';
}
}
// Add in some styles based on color settings in $conf.
$style = [];
if (($border_color = Settings::get('loft_deploy.border_color'))) {
$style[] = 'background-color: ' . Html::escape($border_color);
}
if (($title_color = Settings::get('loft_deploy.title_color'))) {
$style[] = 'color: ' . Html::escape($title_color);
}
if ($style) {
$style = implode('; ', $style);
$wrapper_attributes['style'] = $style;
$style = " style=\"$style\"";
}
else {
$style = '';
}
array_walk($wrapper_attributes['class'], function ($item) {
return 'loft_deploy--' . $item;
});
// Prepare vars for tpl.
$wrapper_attributes = new Attribute($wrapper_attributes);
$title = $ldm->getBorderTitle();
$output .= <<<EOD
<div{$wrapper_attributes}>
<a class="js-loft-deploy__hide" href="#">
<span class="loft-deploy__title"{$style}>{$title}</span>
</a>
<!-- Borders. -->
<div class="loft-deploy__border--n"{$style}></div>
<div class="loft-deploy__border--e"{$style}></div>
<div class="loft-deploy__border--s"{$style}></div>
<div class="loft-deploy__border--w"{$style}></div>
</div>
EOD;
$vars['page_bottom']['loft_deploy'] = [
'#markup' => Markup::create($output),
];
$vars['page_bottom']['#attached']['library'][] = 'loft_deploy/visualizer';
$vars['#attached']['drupalSettings']['loftDeploy']['metaTimeout'] = \Drupal::config('loft_deploy.settings')
->get('meta_timeout');
}
}