• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

cypht-org / cypht / 26230827274

21 May 2026 02:01PM UTC coverage: 72.803% (-5.4%) from 78.201%
26230827274

push

travis-ci

web-flow
Merge pull request #1972 from IrAlfred/remove-duplicate-testdox-flag-in-coverage-report

fix(workflow): remove duplicate --testdox flag causing coverage job exit code 1

4797 of 6589 relevant lines covered (72.8%)

7.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

37.23
/lib/environment.php
1
<?php
2

3
/**
4
 * Environment objects
5
 * @package framework
6
 * @subpackage environment
7
 */
8

9
class Hm_Environment {
10

11
    private static $instance;
12

13
    public static function getInstance() {
3✔
14
        if (self::$instance === null) {
3✔
15
            self::$instance = new static();
×
16
        }
17
        return self::$instance;
3✔
18
    }
19

20
    public function load($file = '.env') {
2✔
21
        $this->set_required_environment_variables($file);
2✔
22

23
        $dotenvLoader = new \Symfony\Component\Dotenv\Dotenv();
2✔
24
        if (method_exists($dotenvLoader, 'usePutenv')) {
2✔
25
            $dotenvLoader->usePutenv(true);
2✔
26
        }
27
        $envFile = static::get('CYPHT_DOTENV');
2✔
28
        if (!file_exists($envFile)) {
2✔
29
            Hm_Msgs::add('.env file not found at: "' . $envFile . '"', 'danger');
2✔
30
            return;
2✔
31
        }
32
        $dotenvLoader->load($envFile);
×
33
    }
34

35
    public static function get($key, $default = null) {
2✔
36
        $variables = self::getInstance()->get_environment_variables();
2✔
37
        return $variables[$key] ?? $default;
2✔
38
    }
39

40
    public function define_default_constants($config) {
×
41
        define('DEFAULT_SEARCH_SINCE', $config->get('default_setting_search_since', '-1 week'));
×
42
        define('DEFAULT_UNREAD_SINCE', $config->get('default_setting_unread_since', '-1 week'));
×
43
        define('DEFAULT_UNREAD_PER_SOURCE', $config->get('default_setting_unread_per_source', 20));
×
44
        define('DEFAULT_FLAGGED_SINCE', $config->get('default_setting_flagged_since', '-1 week'));
×
45
        define('DEFAULT_FLAGGED_PER_SOURCE', $config->get('default_setting_flagged_per_source', 20));
×
46
        define('DEFAULT_SEARCH_ALL_FOLDERS', $config->get('default_setting_search_all_folders', false));
×
47
        define('DEFAULT_ALL_SINCE', $config->get('default_setting_all_since', '-1 week'));
×
48
        define('DEFAULT_ALL_PER_SOURCE', $config->get('default_setting_all_per_source', 20));
×
49
        define('DEFAULT_ALL_EMAIL_SINCE', $config->get('default_setting_all_email_since', '-1 week'));
×
50
        define('DEFAULT_ALL_EMAIL_PER_SOURCE', $config->get('default_setting_all_email_per_source', 20));
×
51
        define('DEFAULT_FEED_SINCE', $config->get('default_setting_feed_since', '-1 week'));
×
52
        define('DEFAULT_FEED_LIMIT', $config->get('default_setting_feed_limit', 20));
×
53
        define('DEFAULT_SENT_SINCE', $config->get('default_setting_sent_since', '-1 week'));
×
54
        define('DEFAULT_SENT_PER_SOURCE', $config->get('default_setting_sent_per_source', 20));
×
55
        define('DEFAULT_UNREAD_EXCLUDE_FEEDS', $config->get('default_setting_unread_exclude_feeds', false));
×
56
        define('DEFAULT_LIST_STYLE', $config->get('default_setting_list_style', 'email_style'));
×
57
        define('DEFAULT_IMAP_PER_PAGE', $config->get('default_setting_imap_per_page', 20));
×
58
        define('DEFAULT_JUNK_SINCE', $config->get('default_setting_junk_since', '-1 week'));
×
59
        define('DEFAULT_JUNK_PER_SOURCE', $config->get('default_setting_junk_per_source', 20));
×
60
        define('DEFAULT_SNOOZED_SINCE', $config->get('default_setting_snoozed_since', '-1 week'));
×
61
        define('DEFAULT_SNOOZED_PER_SOURCE', $config->get('default_setting_snoozed_per_source', 20));
×
62
        define('DEFAULT_ENABLE_SNOOZE', $config->get('default_setting_enable_snooze', true));
×
63
        define('DEFAULT_TAGS_SINCE', $config->get('default_setting_tags_since', '-1 week'));
×
64
        define('DEFAULT_TAGS_PER_SOURCE', $config->get('default_setting_tags_per_source', 20));
×
65
        define('DEFAULT_TRASH_SINCE', $config->get('default_setting_trash_since', '-1 week'));
×
66
        define('DEFAULT_TRASH_PER_SOURCE', $config->get('default_setting_trash_per_source', 20));
×
67
        define('DEFAULT_DRAFT_SINCE', $config->get('default_setting_draft_since', '-1 week'));
×
68
        define('DEFAULT_DRAFT_PER_SOURCE', $config->get('default_setting_draft_per_source', 20));
×
69
        define('DEFAULT_SIMPLE_MSG_PARTS', $config->get('default_setting_simple_msg_parts', false));
×
70
        define('DEFAULT_MSG_PART_ICONS', $config->get('default_setting_msg_part_icons', true));
×
71
        define('DEFAULT_PAGINATION_LINKS', $config->get('default_setting_pagination_links', true));
×
72
        define('DEFAULT_REVIEW_SENT_EMAIL', $config->get('default_setting_review_sent_email', true));
×
73
        define('DEFAULT_TEXT_ONLY', $config->get('default_setting_text_only', false));
×
74
        define('DEFAULT_NO_PASSWORD_SAVE', $config->get('default_setting_no_password_save', false));
×
75
        define('DEFAULT_SHOW_LIST_ICONS', $config->get('default_setting_show_list_icons', true));
×
76
        define('DEFAULT_START_PAGE', $config->get('default_setting_start_page', "none"));
×
77
        define('DEFAULT_DISABLE_DELETE_PROMPT', $config->get('default_setting_disable_delete_prompt', false));
×
78
        define('DEFAULT_NO_FOLDER_ICONS', $config->get('default_setting_no_folder_icons', false));
×
79
        define('DEFAULT_SETTING_LANGUAGE', $config->get('default_setting_language', 'en'));
×
80
        define('DEFAULT_SMTP_COMPOSE_TYPE', $config->get('default_setting_smtp_compose_type', 0));
×
81
        define('DEFAULT_SMTP_AUTO_BCC', $config->get('default_setting_smtp_auto_bcc', false));
×
82
        define('DEFAULT_THEME', $config->get('default_setting_theme', 'default'));
×
83
        define('DEFAULT_UNREAD_EXCLUDE_WORDPRESS', $config->get('default_setting_unread_exclude_wordpress', false));
×
84
        define('DEFAULT_WORDPRESS_SINCE', $config->get('default_setting_wordpress_since', '-1 week'));
×
85
        define('DEFAULT_UNREAD_EXCLUDE_GITHUB', $config->get('default_setting_unread_exclude_github', false));
×
86
        define('DEFAULT_GITHUB_PER_SOURCE', $config->get('default_setting_github_limit', 20));
×
87
        define('DEFAULT_GITHUB_SINCE', $config->get('default_setting_github_since', '-1 week'));
×
88
        define('DEFAULT_INLINE_MESSAGE', $config->get('default_setting_inline_message', false));
×
89
        define('DEFAULT_INLINE_MESSAGE_STYLE', $config->get('default_setting_inline_message_style', 'right'));
×
90
        define('DEFAULT_ENABLE_KEYBOARD_SHORTCUTS', $config->get('default_setting_enable_keyboard_shortcuts', false));
×
91
        define('DEFAULT_ENABLE_SIEVE_FILTER', $config->get('default_setting_enable_sieve_filter', false));
×
92
        define('DEFAULT_ENABLE_COLLECT_ADDRESS_ON_SEND', $config->get('default_setting_enable_collect_address_on_send', false));
×
93
        define('DEFAULT_SETTING_ENABLE_EXCLUDE_AUTO_BCC', $config->get('default_setting_enable_exclude_auto_bcc', true));
×
94
    }
95

96
    /**
97
     * Sets required environment variables that are used within .env files
98
     */
99
    private function set_required_environment_variables($file) {
2✔
100
        $_ENV['CYPHT_DOTENV'] = APP_PATH . $file;
2✔
101
    }
102

103
    /**
104
     * Get a merge of environment variables $_ENV and $_SERVER.
105
     *
106
     * @return array
107
     */
108
    protected function get_environment_variables() {
3✔
109
        return array_merge($_ENV, $_SERVER);
3✔
110
    }
111
}
112

113
if (!function_exists('env')) {
114
    /**
115
     * Gets the value of an environment variable.
116
     *
117
     * @param  string  $key
118
     * @param  mixed   $default
119
     * @return mixed
120
     */
121
    function env($key, $default = null) {
122
        return getenv($key) ?: $default;
84✔
123
    }
124
}
125

126
if (!function_exists('merge_config_files')) {
127
    /**
128
     * Merge configuration arrays from PHP files in the specified folder.
129
     *
130
     * This function includes each PHP file in the specified folder and retrieves its array.
131
     * It then merges these arrays into a single configuration array, applying boolean conversion
132
     * for values that are represented as "true" or "false" strings.
133
     *
134
     * @param string $folder_path The path to the folder containing PHP configuration files.
135
     *
136
     * @return array The merged configuration array.
137
     */
138
    function merge_config_files($folder_path) {
139
        $configArray = [];
17✔
140

141
        // Get all PHP files in the specified folder
142
        $files = glob($folder_path . '/*.php');
17✔
143

144
        foreach ($files as $file) {
17✔
145
            $fileArray = process_config_array($file);
17✔
146
            $configArray = array_merge($configArray, $fileArray);
17✔
147
        }
148
        return $configArray;
17✔
149
    }
150
}
151

152
if (!function_exists('config')) {
153
    /**
154
     * Get configuration data for a single file
155
     *
156
     * @param string $file_name The path to PHP configuration file.
157
     *
158
     * @return array The configuration array.
159
     */
160
    function config($file_name) {
161
        $path = CONFIG_PATH.$file_name.'.php';
×
162
        return process_config_array($path);
×
163
    }
164
}
165

166
if (!function_exists('process_config_array')) {
167
    function process_config_array($filename) {
168
        $array = require $filename;
17✔
169
        if (is_array($array)) {
17✔
170
            return array_map(function ($value) {
17✔
171
                return is_array($value) ? $value : (
17✔
172
                    is_string($value) && mb_strtolower($value) === 'true' ? true : (
17✔
173
                        is_string($value) && mb_strtolower($value) === 'false' ? false : $value
17✔
174
                    )
17✔
175
                );
17✔
176
            }, $array);
17✔
177
        }
178
        return [];
×
179
    }
180
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc