Passed
Push — master ( 821da0...56c78d )
by Ioannes
06:34
created

EnvHelper::getDocumentRoot()   B

Complexity

Conditions 8
Paths 5

Size

Total Lines 23
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 13
c 2
b 0
f 0
dl 0
loc 23
rs 8.4444
cc 8
nc 5
nop 0
1
<?php
2
namespace App\BxConsole;
3
4
use Psr\Log\LoggerInterface;
5
6
class EnvHelper {
7
8
    const CRON_TAB_FILE = '/bitrix/tmp/bx_crontab.json';
9
10
    const SWITCH_STATE_ON = 'on';
11
    const SWITCH_STATE_OFF = 'off';
12
13
    const BX_CRONTAB_SINGLE_MODE = false;
14
    const BX_CRONTAB_TIMEOUT = 600;
15
    const BX_CRONTAB_PERIOD = 60;
16
    const BX_CRONTAB_TIMEZONE = 'Europe/Moscow';
17
18
    public static function loadEnv() {
19
20
        $envFile = realpath(__DIR__ . '/../../../../.env');
21
        if(!is_file($envFile)) {
22
            $envFile = realpath(__DIR__ . '/../../../../../.env');
23
        }
24
        if(is_file($envFile)) {
25
            try {
26
                $env = new \Symfony\Component\Dotenv\Dotenv();
27
                $env->load($envFile);
28
            } catch (\Exception $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
29
30
            }
31
        }
32
    }
33
34
    /**
35
     * @return string
36
     */
37
    public static function getDocumentRoot() {
38
39
        if(isset($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['DOCUMENT_ROOT'])) {
40
            return $_SERVER['DOCUMENT_ROOT'];
41
        }
42
43
        $_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__ . '/../../../../');
44
45
        if(isset($_ENV['APP_DOCUMENT_ROOT']) && is_dir($_ENV['APP_DOCUMENT_ROOT'])) {
46
            $_SERVER['DOCUMENT_ROOT'] = $_ENV['APP_DOCUMENT_ROOT'];
47
            return $_SERVER['DOCUMENT_ROOT'];
48
        }
49
50
        $composerFile = realpath(__DIR__ . '/../../../../composer.json');
51
        if(is_file($composerFile)) {
52
            $composerConfig = json_decode(file_get_contents($composerFile), true);
53
            if(isset($composerConfig['extra']['document-root']) && is_dir($composerConfig['extra']['document-root'])) {
54
                $_SERVER['DOCUMENT_ROOT'] = $composerConfig['extra']['document-root'];
55
                return $_SERVER['DOCUMENT_ROOT'];
56
            }
57
        }
58
59
        return (string) $_SERVER['DOCUMENT_ROOT'];
60
    }
61
62
    /**
63
     * @param $channel
64
     * @return false|LoggerInterface
65
     */
66
    public static function getLogger($channel) {
67
68
        if(isset($_ENV['APP_LOG_CLASS']) && class_exists($_ENV['APP_LOG_CLASS'])) {
69
            $logClass = $_ENV['APP_LOG_CLASS'];
70
            $log = new $logClass($channel);
71
            if($log instanceof LoggerInterface) {
72
                return $log;
73
            }
74
        }
75
76
        return false;
77
    }
78
79
    /**
80
     * @return mixed|string
81
     */
82
    public static function getCrontabFile() {
83
84
        if(isset($_ENV['BX_CRONTAB_FOLDER']) && $_ENV['BX_CRONTAB_FOLDER']) {
85
            return rtrim($_ENV['BX_CRONTAB_FOLDER'], "/") . '/bx_crontab.json';
86
        }
87
88
        return self::getDocumentRoot() . self::CRON_TAB_FILE;
89
    }
90
91
    public static function getCrontabTimeout() {
92
93
        if(isset($_ENV['BX_CRONTAB_FOLDER']) && is_numeric($_ENV['BX_CRONTAB_FOLDER'])) {
94
            return (int) $_ENV['BX_CRONTAB_FOLDER'];
95
        }
96
97
        return self::BX_CRONTAB_TIMEOUT;
98
    }
99
100
    public static function getBxCrontabPeriod() {
101
102
        if(isset($_ENV['BX_CRONTAB_PERIOD']) && is_numeric($_ENV['BX_CRONTAB_PERIOD'])) {
103
            return (int) $_ENV['BX_CRONTAB_PERIOD'];
104
        }
105
106
        return self::BX_CRONTAB_PERIOD;
107
    }
108
109
    public static function getSwitch($name, $state) {
110
111
        if(isset($_ENV[$name])) {
112
113
            $val = strtolower(trim($_ENV[$name]));
114
            if($state == self::SWITCH_STATE_ON) {
115
                if($val === self::SWITCH_STATE_ON || $val === '1' || $val === 'true') {
116
                    return true;
117
                }
118
            } else if($state == self::SWITCH_STATE_OFF) {
119
                if($val === self::SWITCH_STATE_OFF || $val === '0' || $val === 'false') {
120
                    return true;
121
                }
122
            }
123
        }
124
125
        return false;
126
    }
127
128
    public static function timeZoneSet() {
129
130
        $timeZone = self::BX_CRONTAB_TIMEZONE;
131
132
        if(isset($_ENV['BX_CRONTAB_TIMEZONE']) && $_ENV['BX_CRONTAB_TIMEZONE']) {
133
            $timeZone = trim($_ENV['BX_CRONTAB_TIMEZONE']);
134
        }
135
136
        date_default_timezone_set($timeZone);
137
    }
138
139
    public static function checkSleepInterval() {
140
141
        if(isset($_ENV['BX_CRONTAB_SLEEP_TIME']) && $_ENV['BX_CRONTAB_SLEEP_TIME']) {
142
            $intervals = explode(',', $_ENV['BX_CRONTAB_SLEEP_TIME']);
143
            foreach($intervals as $interval) {
144
                $times = explode('-', $interval);
145
                if(count($times) != 2) {
146
                    continue;
147
                }
148
                $minTime = Time24::validateTimeString($times[0]);
149
                $maxTime = Time24::validateTimeString($times[1]);
150
                if($minTime && $maxTime) {
151
                    if(Time24::inInterval($minTime, $maxTime)) {
152
                        return $interval;
153
                    }
154
                }
155
            }
156
        }
157
158
        return false;
159
    }
160
}