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

cypht-org / cypht / 19104101509

05 Nov 2025 01:47PM UTC coverage: 78.204% (-1.4%) from 79.595%
19104101509

push

travis-ci

web-flow
Merge pull request #1773 from IrAlfred/fix-coverage-tests-issue

fix(other): fix coverage test issue

4650 of 5946 relevant lines covered (78.2%)

6.42 hits per line

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

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

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

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

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

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

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

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

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

165
if (!function_exists('process_config_array')) {
166
    function process_config_array($filename) {
167
        $array = require $filename;
17✔
168
        if (is_array($array)) {
17✔
169
            return array_map(function ($value) {
17✔
170
                return is_array($value) ? $value : (
17✔
171
                    is_string($value) && mb_strtolower($value) === 'true' ? true : (
17✔
172
                        is_string($value) && mb_strtolower($value) === 'false' ? false : $value
17✔
173
                    )
17✔
174
                );
17✔
175
            }, $array);
17✔
176
        }
177
        return [];
×
178
    }
179
}
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