| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function FindObjectInArrayByPropertyValue($array, $propertyName, $propertyValue) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	foreach ($array as $object) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 		if ($object->{$propertyName} | 
					
						
							|  |  |  | 			== $propertyValue) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			return $object; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return null; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function FindAllObjectsInArrayByPropertyValue($array, $propertyName, $propertyValue, $operator = '==') | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	$returnArray = []; | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	foreach ($array as $object) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 		switch ($operator) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			case '==': | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-01 21:29:47 +02:00
										 |  |  | 				if ($object->{$propertyName} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 					== $propertyValue) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					$returnArray[] = $object; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			case '>': | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-01 21:29:47 +02:00
										 |  |  | 				if ($object->{$propertyName} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 					> $propertyValue) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					$returnArray[] = $object; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			case '<': | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-01 21:29:47 +02:00
										 |  |  | 				if ($object->{$propertyName} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 					< $propertyValue) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					$returnArray[] = $object; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return $returnArray; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | function FindAllItemsInArrayByValue($array, $value, $operator = '==') | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	$returnArray = []; | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	foreach ($array as $item) | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 		switch ($operator) | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			case '==': | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if ($item == $value) | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					$returnArray[] = $item; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			case '>': | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if ($item > $value) | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					$returnArray[] = $item; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			case '<': | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if ($item < $value) | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 				{ | 
					
						
							|  |  |  | 					$returnArray[] = $item; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-12 15:30:13 +02:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return $returnArray; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | function SumArrayValue($array, $propertyName) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$sum = 0; | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	foreach ($array as $object) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-01-27 22:14:11 +01:00
										 |  |  | 		$sum += floatval($object->{$propertyName}); | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return $sum; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-17 13:13:26 +02:00
										 |  |  | function GetClassConstants($className, $prefix = null) | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	$r = new ReflectionClass($className); | 
					
						
							| 
									
										
										
										
											2019-09-17 13:13:26 +02:00
										 |  |  | 	$constants = $r->getConstants(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if ($prefix === null) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return $constants; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$matchingKeys = preg_grep('!^' . $prefix . '!', array_keys($constants)); | 
					
						
							|  |  |  | 		return array_intersect_key($constants, array_flip($matchingKeys)); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-04-19 20:44:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function RandomString($length, $allowedChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$randomString = ''; | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-19 20:44:49 +02:00
										 |  |  | 	for ($i = 0; $i < $length; $i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$randomString .= $allowedChars[rand(0, strlen($allowedChars) - 1)]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return $randomString; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-04-22 19:47:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function IsAssociativeArray(array $array) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$keys = array_keys($array); | 
					
						
							|  |  |  | 	return array_keys($keys) !== $keys; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-11 19:43:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function IsIsoDate($dateString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$d = DateTime::createFromFormat('Y-m-d', $dateString); | 
					
						
							|  |  |  | 	return $d && $d->format('Y-m-d') === $dateString; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function IsIsoDateTime($dateTimeString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$d = DateTime::createFromFormat('Y-m-d H:i:s', $dateTimeString); | 
					
						
							|  |  |  | 	return $d && $d->format('Y-m-d H:i:s') === $dateTimeString; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-12 19:12:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function BoolToString(bool $bool) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return $bool ? 'true' : 'false'; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-25 11:30:16 -07:00
										 |  |  | function ExternalSettingValue(string $value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$tvalue = rtrim($value, "\r\n"); | 
					
						
							|  |  |  | 	$lvalue = strtolower($tvalue); | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if ($lvalue === 'true') | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-03-25 11:30:16 -07:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	elseif ($lvalue === 'false') | 
					
						
							| 
									
										
										
										
											2020-03-25 11:30:16 -07:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-25 11:30:16 -07:00
										 |  |  | 	return $tvalue; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-12 22:23:00 +02:00
										 |  |  | function Setting(string $name, $value) | 
					
						
							| 
									
										
										
										
											2018-07-12 19:12:31 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-07-24 19:41:35 +02:00
										 |  |  | 	if (!defined('GROCY_' . $name)) | 
					
						
							| 
									
										
										
										
											2018-07-12 19:12:31 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-07-18 19:07:00 +02:00
										 |  |  | 		// The content of a $name.txt file in /data/settingoverrides can overwrite the given setting (for embedded mode)
 | 
					
						
							| 
									
										
										
										
											2018-07-24 19:41:35 +02:00
										 |  |  | 		$settingOverrideFile = GROCY_DATAPATH . '/settingoverrides/' . $name . '.txt'; | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-18 19:07:00 +02:00
										 |  |  | 		if (file_exists($settingOverrideFile)) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2020-03-25 11:30:16 -07:00
										 |  |  | 			define('GROCY_' . $name, ExternalSettingValue(file_get_contents($settingOverrideFile))); | 
					
						
							| 
									
										
										
										
											2018-07-18 19:07:00 +02:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-09-01 21:29:47 +02:00
										 |  |  | 		elseif (getenv('GROCY_' . $name) !== false) | 
					
						
							|  |  |  | 		{ // An environment variable with the same name and prefix GROCY_ overwrites the given setting
 | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 			define('GROCY_' . $name, ExternalSettingValue(getenv('GROCY_' . $name))); | 
					
						
							| 
									
										
										
										
											2018-12-23 16:45:16 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-18 19:07:00 +02:00
										 |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2018-07-24 19:41:35 +02:00
										 |  |  | 			define('GROCY_' . $name, $value); | 
					
						
							| 
									
										
										
										
											2018-07-18 19:07:00 +02:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-07-12 19:12:31 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-24 20:45:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-30 17:14:04 +02:00
										 |  |  | global $GROCY_DEFAULT_USER_SETTINGS; | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | $GROCY_DEFAULT_USER_SETTINGS = []; | 
					
						
							| 
									
										
										
										
											2018-09-30 17:14:04 +02:00
										 |  |  | function DefaultUserSetting(string $name, $value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	global $GROCY_DEFAULT_USER_SETTINGS; | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-30 17:14:04 +02:00
										 |  |  | 	if (!array_key_exists($name, $GROCY_DEFAULT_USER_SETTINGS)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$GROCY_DEFAULT_USER_SETTINGS[$name] = $value; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-24 20:45:14 +02:00
										 |  |  | function GetUserDisplayName($user) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$displayName = ''; | 
					
						
							| 
									
										
										
										
											2019-09-17 16:45:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-24 20:45:14 +02:00
										 |  |  | 	if (empty($user->first_name) && !empty($user->last_name)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$displayName = $user->last_name; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	elseif (empty($user->last_name) && !empty($user->first_name)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$displayName = $user->first_name; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	elseif (!empty($user->last_name) && !empty($user->first_name)) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$displayName = $user->first_name . ' ' . $user->last_name; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$displayName = $user->username; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return $displayName; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-27 19:39:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-27 14:01:00 +02:00
										 |  |  | function IsValidFileName($fileName) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 	if (preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', $fileName)) | 
					
						
							| 
									
										
										
										
											2018-09-27 14:01:00 +02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return false; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-09-20 16:26:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function IsJsonString($text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	json_decode($text); | 
					
						
							|  |  |  | 	return (json_last_error() == JSON_ERROR_NONE); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-09-21 15:07:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | function string_starts_with($haystack, $needle) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return (substr($haystack, 0, strlen($needle)) === $needle); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function string_ends_with($haystack, $needle) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	$length = strlen($needle); | 
					
						
							| 
									
										
										
										
											2020-08-31 20:40:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-21 15:07:29 +02:00
										 |  |  | 	if ($length == 0) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return (substr($haystack, -$length) === $needle); | 
					
						
							|  |  |  | } |