GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Branch master (9f36d7)
by w3l
02:08
created

holt45.php (9 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
class holt45 {
3
	
4
	const DATA_URI_TRANSPARENT_GIF = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
5
	const DATA_URI_TRANSPARENT_PNG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=';
6
	
7
	
8
	/**
9
	 * Check $_GET
10
	 *
11
	 * @example if(chk_get("s") == "a") instead of if(isset($_GET["s"]) && $_GET["s"] == "a")
12
	 *
13
	 * @param string $key Get-key...
14
	 * @return bool
15
	 */
16
	public static function chk_get($key) {
17
		if (!isset($_GET[$key])) {
18
			return false;
19
		}
20
		return $_GET[$key];
21
	}
22
23
	/**
24
	 * Check $_POST
25
	 *
26
	 * @example if(chk_post("s") == "a") instead of if(isset($_POST["s"]) && $_POST["s"] == "a")
27
	 *
28
	 * @param string $key Post-key...
29
	 * @return bool
30
	 */
31
	public static function chk_post($key) {
32
		if (!isset($_POST[$key])) {
33
			return false;
34
		}
35
		return $_POST[$key];
36
	}
37
	/**
38
	 * Assign value from $_GET
39
	 *
40
	 * @example $var = assign_from_get("a") instead of $var = ((!empty($_GET["s"])) ? $_GET["s"] : "");
41
	 */
42
	public static function assign_from_get($key) {
0 ignored issues
show
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
43
		return ((!isset($_GET[$key])) ? "" : $_GET[$key]);
44
	}
45
46
	/**
47
	 * Assign value from $_POST
48
	 *
49
	 * @example $var = assign_from_post("a") instead of $var = ((!empty($_POST["s"])) ? $_POST["s"] : "");
50
	 */
51
	public static function assign_from_post($key) {
0 ignored issues
show
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
52
		return ((!isset($_POST[$key])) ? "" : $_POST[$key]);
53
	}
54
55
	/**
56
	 * Check multiple $_GET-keys
57
	 *
58
	 * @example if(chk_get_all(array("a","b"))) instead of if(!empty($_GET["a"]) && !empty($_GET["b"]))
59
	 *
60
	 * @param array $keys
61
	 * @return bool
62
	 */
63 View Code Duplication
	public static function chk_get_all($keys) {
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
64
		$s = true;
65
66
		foreach($keys AS $key) {
67
		
68
			if (empty($_GET[$key])) {
69
				$s = false;
70
			}
71
		}
72
		return $s;
73
	}
74
75
	/**
76
	 * Check multiple $_POST-keys
77
	 *
78
	 * @example if(chk_post_all(array("a","b"))) instead of if(!empty($_POST["a"]) && !empty($_POST["b"]))
79
	 *
80
	 * @param array $keys
81
	 * @return bool
82
	 */
83 View Code Duplication
	public static function chk_post_all($keys) {
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
84
		$s = true;
85
86
		foreach($keys AS $key) {
87
		
88
			if (empty($_POST[$key])) {
89
				$s = false;
90
			}
91
		}
92
		return $s;
93
	}
94
95
	/**
96
	 * Handle sessions - set session
97
	 *
98
	 * @param string $name Session name
99
	 * @param string $content Session content
100
	 * @param int $expires How many seconds before the session should expire.
101
	 */
102
	function session_set($name, $content, $expires = 86400) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
103
		$_SESSION[$name] = (time() + $expires).'-'.$content;
104
	}
105
106
	/**
107
	 * Handle sessions - check if session is set and not expired.
108
	 *
109
	 * @param string $name Session name
110
	 * @return bool Session status
111
	 */
112
	function session_isset($name) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
113
		if(isset($_SESSION[$name])) {
114
			$expires = current(explode("-",$_SESSION[$name]));
115
			if(ctype_digit($expires) && $expires > time()) {
116
				return true;
117
				
118
			} else {
119
				unset($_SESSION[$name]);
120
				return false;
121
			}
122
		} else {
123
			return false;
124
		}
125
	}
126
127
	/**
128
	 * Handle sessions - Get session content
129
	 *
130
	 * @param string $name Session name
131
	 * @return string Session content
132
	 */
133
	function session_read($name) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
134
		return substr(strstr($_SESSION[$name], '-'),1);
135
	}
136
137
	/**
138
	 * Handle sessions - Delete session
139
	 *
140
	 * @param string $name Session name
141
	 * @return void
142
	 */
143
	function session_delete($name) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
144
		unset($_SESSION[$name]);
145
	}
146
	
147
	/**
148
	 * Convert timestamp to HTTP-date (RFC2616)
149
	 *
150
	 * For use in "Last-Modified" headers.
151
	 *
152
	 * @param string $timestamp
153
	 * @return string
0 ignored issues
show
Should the return type not be null|string?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
154
	 */
155
	public static function timestamp_to_http_date($timestamp) {
156
		if($timestamp == NULL) { return NULL; }
157
		return gmdate("D, d M Y H:i:s T", strtotime($timestamp));
158
	}
159
160
	/**
161
	 * Get client ip-address
162
	 *
163
	 * @return string User ip-address
164
	 */
165
	public static function get_client_ip_address() {
166
167
		if (getenv('HTTP_CLIENT_IP'))
168
			return getenv('HTTP_CLIENT_IP');
169
		else if(getenv('HTTP_X_FORWARDED_FOR'))
170
			return getenv('HTTP_X_FORWARDED_FOR');
171
		else if(getenv('HTTP_X_FORWARDED'))
172
			return getenv('HTTP_X_FORWARDED');
173
		else if(getenv('HTTP_FORWARDED_FOR'))
174
			return getenv('HTTP_FORWARDED_FOR');
175
		else if(getenv('HTTP_FORWARDED'))
176
			return getenv('HTTP_FORWARDED');
177
		else if(getenv('REMOTE_ADDR'))
178
			return getenv('REMOTE_ADDR');
179
		else
180
			return '127.0.0.1'; // Unknown IP
181
	}
182
183
	/**
184
	 * parse url, try to correct errors and return valid url + display-url.
185
	 *
186
	 * @example http:/wwww.example.com/lorum.html => http://www.example.com/lorum.html
187
	 * @example gopher:/ww.example.com => gopher://www.example.com
188
	 * @example http:/www3.example.com/?q=asd&f=#asd =>http://www3.example.com/?q=asd&f=#asd
189
	 * @example asd://.example.com/folder/folder/ =>http://example.com/folder/folder/
190
	 * @example .example.com/ => http://example.com/
191
	 * @example example.com =>http://example.com
192
	 * @example subdomain.example.com => http://subdomain.example.com
193
	 *
194
	 * @param string $url Any somewhat valid url.
195
	 * @return string[] "url" contains an auto-corrected url. "url_display" host.tld or subdomain.host.tld
196
	 */
197
	public static function url_parser($url) {
198
		
199
		// multiple /// messes up parse_url, replace 3 or more with 2
200
		$url = preg_replace('/(\/{2,})/','//',$url);
201
		
202
		$parse_url = parse_url($url);
203
		
204
		if(empty($parse_url["scheme"])) {
205
			$parse_url["scheme"] = "http";
206
		}
207
		if(empty($parse_url["host"]) && !empty($parse_url["path"])) {
208
			// Strip slash from the beginning of path
209
			$parse_url["host"] = ltrim($parse_url["path"], '\/');
210
			$parse_url["path"] = "";
211
		}
212
213
		$url_array = array("url" => "", "url_display" => "");
214
		
215
		// Check if scheme is correct
216
		if(!in_array($parse_url["scheme"], array("http", "https", "gopher"))) {
217
			$url_array["url"] .= 'http'.'://';
218
		} else {
219
			$url_array["url"] .= $parse_url["scheme"].'://';
220
		}
221
		
222
		// Check if the right amount of "www" is set.
223
		$explode_host = explode(".", $parse_url["host"]);
224
		
225
		// Remove empty entries
226
		$explode_host = array_filter($explode_host);
227
		// And reassign indexes
228
		$explode_host = array_values($explode_host);
229
		
230
		// Contains subdomain
231
		if(count($explode_host) > 2) {
232
			// Check if subdomain only contains the letter w(then not any other subdomain).
233
			if(substr_count($explode_host[0], 'w') == strlen($explode_host[0])) {
234
				// Replace with "www" to avoid "ww" or "wwww", etc.
235
				$explode_host[0] = "www";
236
				
237
			}
238
		}
239
240
		$url_array["url"] .= implode(".",$explode_host);
241
		$url_array["url_display"] = trim(implode(".",$explode_host), '\/'); // Removes trailing slash
242
		
243
		if(!empty($parse_url["port"])) {
244
			$url_array["url"] .= ":".$parse_url["port"];
245
		}
246
		if(!empty($parse_url["path"])) {
247
			$url_array["url"] .= $parse_url["path"];
248
		}
249
		if(!empty($parse_url["query"])) {
250
			$url_array["url"] .= '?'.$parse_url["query"];
251
		}
252
		if(!empty($parse_url["fragment"])) {
253
			$url_array["url"] .= '#'.$parse_url["fragment"];
254
		}
255
256
		
257
		return $url_array;
258
	}
259
	
260
	/**
261
	 * Generate a password-suggestion.
262
	 *
263
	 * @param int $length Length of password
264
	 * @param bool $simple Limit character-set to first 33 characters.
265
	 * @return string
266
	 */
267
	public static function generate_password($length = 8, $simple = false) {
268
		$character_set = "23456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPRSTUVWXYZ!#%+:=?@";
269
		$character_set_lenght = (($simple) ? 33 : 64);
270
		
271
		$i = 0;
272
		
273
		while($i < 10) {
274
		
275
			$suggested_password = "";
276
			
277
			for($i = 0; $i < $length; $i++) {
278
				$suggested_password .= $character_set[rand(0,($character_set_lenght-1))];
279
			}
280
281
			if(strlen(count_chars($suggested_password, 3)) > ($length-2)) {
282
				break;
283
			}
284
		}
285
		
286
		return $suggested_password;
287
		
288
	}
289
	
290
	/**
291
	 * Convert <textarea> to [textarea].
292
	 *
293
	 * @param string $html
294
	 * @return string
295
	 */
296
	public static function textarea_encode($html) {
297
		return preg_replace("/<textarea(.*?)>(.*?)<\/textarea>/is", "[textarea$1]$2[/textarea]", $html);
298
	}
299
	
300
	/**
301
	 * Convert [textarea] to <textarea>.
302
	 *
303
	 * @param string $html
304
	 * @return string
305
	 */
306
	public static function textarea_decode($html) {
307
		return preg_replace("/\[textarea(.*?)\](.*?)\[\/textarea\]/is", "<textarea$1>$2</textarea>", $html);
308
	}
309
310
	/**
311
	 * Convert timestamp to "x unit"
312
	 *
313
	 * @param string $timestamp
314
	 * @return string
315
	 */
316
	public static function time_elapsed($timestamp) {
317
		$seconds = max((time() - strtotime($timestamp)),0);
318
		
319
		if($seconds < 60) {
320
			$number = $seconds;
321
			$text = "second";
322
		} elseif($seconds < (60 * 60)) {
323
			$number = $seconds / 60;
324
			$text = "minute";
325
		} elseif($seconds < (60 * 60 * 24)) {
326
			$number = $seconds / (60 * 60);
327
			$text = "hour";
328
		} else {
329
			$number = $seconds / (60 * 60 * 24);
330
			$text = "day";
331
		}
332
333
		$number = floor($number);
334
		
335
		if($number > 1) {
336
		$text.="s";
337
		}
338
		
339
		return "$number $text";
340
	}
341
}