Issues (22)

src/Stdlib/ConsoleUtils.php (3 issues)

1
<?php
2
declare(strict_types=1);
3
4
/**
5
 * ReportingCloud PHP SDK
6
 *
7
 * PHP SDK for ReportingCloud Web API. Authored and supported by Text Control GmbH.
8
 *
9
 * @link      https://www.reporting.cloud to learn more about ReportingCloud
10
 * @link      https://tinyurl.com/vmbbh6kd for the canonical source repository
11
 * @license   https://tinyurl.com/3pc9am89
12
 * @copyright © 2023 Text Control GmbH
13
 */
14
15
namespace TextControl\ReportingCloud\Stdlib;
16
17
/**
18
 * ReportingCloud console helper (used only for tests and demos)
19
 */
20
class ConsoleUtils extends AbstractStdlib
21
{
22
    /**
23
     * Name of PHP constant or environmental variable storing API key
24
     *
25
     * @const REPORTING_CLOUD_API_KEY
26
     * @var string
27
     */
28
    final public const API_KEY = 'REPORTING_CLOUD_API_KEY';
29
30
    /**
31
     * Name of PHP constant or environmental variable storing base URI
32
     *
33
     * @const REPORTING_CLOUD_BASE_URI
34
     * @var string
35
     */
36
    final public const BASE_URI = 'REPORTING_CLOUD_BASE_URI';
37
38
    /**
39
     * Check that either the API key has been defined in environment variables
40
     */
41 2
    public static function checkCredentials(): bool
42
    {
43 2
        return 0 < strlen(self::apiKey());
44
    }
45
46
    /**
47
     * Return the ReportingCloud API key from a PHP constant or environmental variable
48
     */
49 180
    public static function apiKey(): string
50
    {
51 180
        return self::getValueFromConstOrEnvVar(self::API_KEY);
52
    }
53
54
    /**
55
     * Return the ReportingCloud base URI from a PHP constant or environmental variable
56
     */
57 72
    public static function baseUri(): string
58
    {
59 72
        return self::getValueFromConstOrEnvVar(self::BASE_URI);
60
    }
61
62
    /**
63
     * Return error message explaining how to configure PHP constant or environmental variables
64
     */
65 2
    public static function errorMessage(): string
66
    {
67
        // phpcs:disable
68
69 2
        $format   = <<<END
70
71
\e[41m\e[1mError: ReportingCloud API key not defined.\e[0m
72
73
In order to execute \e[32m%s\e[0m, you must first set your ReportingCloud API key.
74
75
There are two ways in which you can do this:
76
77
1) Define a PHP constant:
78
79
    \e[1mdefine('%s', '%s');\e[0m
80
81
2) Set an environmental variable (for example in .bashrc)
82
    
83
    \e[1mexport %s='%s'\e[0m
84
85
Note, these instructions apply only to the demo scripts and phpunit tests. 
86
87
When you use ReportingCloud in your application, set the API key in your constructor or using the 'setApiKey(string \$apiKey):self' method. 
88
89
For an example, see \e[32m'/demo/instantiation.php'\e[0m.
90
91
For further assistance and customer service please refer to:
92
93
    https://www.reporting.cloud
94
    
95
96 2
END;
97
        // phpcs:enable
98
99 2
        $filename = $_SERVER['argv'][0] ?? '';
100 2
        $filename = realpath($filename);
101
102 2
        if (is_bool($filename)) {
0 ignored issues
show
The condition is_bool($filename) is always false.
Loading history...
103
            $name = 'this script';
104
        } else {
105 2
            $base = dirname(__FILE__, 3);
106 2
            $file = str_replace($base, '', $filename);
107 2
            $name = sprintf("'%s'", $file);
108
        }
109
110 2
        $key   = self::API_KEY;
111 2
        $value = 'your-api-key';
112
113 2
        $ret = sprintf($format, $name, $key, $value, $key, $value);
114
115 2
        return wordwrap($ret, 80);
116
    }
117
118
    /**
119
     * Dump information about a variable
120
     */
121 2
    public static function dump(mixed $value): void
122
    {
123 2
        /** @scrutinizer ignore-call */ var_dump($value);
0 ignored issues
show
Security Debugging Code introduced by
var_dump($value) looks like debug code. Are you sure you do not want to remove it?
Loading history...
124
    }
125
126
    /**
127
     * Write a line to the console
128
     */
129 6
    public static function writeLn(string $format = '', array $args = []): void
130
    {
131 6
        if ([] !== $args) {
132 4
            echo vsprintf($format, $args);
133
        } else {
134 2
            echo $format;
135
        }
136
137 6
        echo PHP_EOL;
138
    }
139
140
    /**
141
     * Return a value from a PHP constant or environmental variable
142
     */
143 180
    private static function getValueFromConstOrEnvVar(string $key): string
144
    {
145 180
        $value = self::getValueFromConst($key);
146
147 180
        if (0 < strlen($value)) {
148
            return $value;
149
        }
150
151 180
        $value = self::getValueFromEnvVar($key);
152
153 180
        if (0 < strlen($value)) {
154 180
            return $value;
155
        }
156
157 74
        return '';
158
    }
159
160
    /**
161
     * Return a value from a PHP constant
162
     */
163 180
    private static function getValueFromConst(string $key): string
164
    {
165 180
        if (defined($key)) {
166
            $value = constant($key);
167
            if (is_string($value)) {
168
                $value = trim($value);
169
                if (0 < strlen($value)) {
170
                    return $value;
171
                }
172
            }
173
        }
174
175 180
        return '';
176
    }
177
178
    /**
179
     * Return a value from an environmental variable
180
     */
181 180
    private static function getValueFromEnvVar(string $key): string
182
    {
183 180
        $value = getenv($key);
184
185 180
        if (is_string($value)) {
0 ignored issues
show
The condition is_string($value) is always true.
Loading history...
186 180
            $value = trim($value);
187 180
            if (0 < strlen($value)) {
188 180
                return $value;
189
            }
190
        }
191
192 74
        return '';
193
    }
194
}
195