Issues (20)

src/EnvHelper.php (1 issue)

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