$value) { $token = '{' . $key . '}'; $text = str_replace($token, $value, $text); } return $text; } public static function kebabCaseToCamelCase($string) { $string = preg_split('/-/', $string); $string = array_map('trim', $string); $string = array_map('ucfirst', $string); $string = join('', $string); return $string; } public static function camelCaseToKebabCase($string) { $string = preg_replace_callback('/[A-Z]/', function($x) { return '-' . strtolower($x[0]); }, $string); $string = trim($string, '-'); return $string; } public static function camelCaseToHumanCase($string, $ucfirst = false) { $string = preg_replace_callback('/[A-Z]/', function($x) { return ' ' . strtolower($x[0]); }, $string); $string = trim($string); if ($ucfirst) $string = ucfirst($string); return $string; } public static function resolveConstant($constantName, $className = null) { $constantName = self::kebabCaseToCamelCase($constantName); //convert from kebab-case to CamelCase if ($className !== null) { $constantName = $className . '::' . $constantName; } if (!defined($constantName)) { throw new Exception('Undefined constant: ' . $constantName); } return constant($constantName); } private static function stripUnits($string, $base, $suffixes) { $suffix = substr($string, -1, 1); $index = array_search($suffix, $suffixes); if ($index === false) return $string; $number = intval($string); for ($i = 0; $i < $index; $i ++) $number *= $base; return $number; } private static function useUnits($number, $base, $suffixes) { $suffix = array_shift($suffixes); if ($number < $base) { return sprintf('%d%s', $number, $suffix); } do { $suffix = array_shift($suffixes); $number /= (float) $base; } while ($number >= $base and !empty($suffixes)); return sprintf('%.01f%s', $number, $suffix); } public static function useBytesUnits($number) { return self::useUnits($number, 1024, ['B', 'K', 'M', 'G']); } public static function useDecimalUnits($number) { return self::useUnits($number, 1000, ['', 'K', 'M']); } public static function stripBytesUnits($string) { return self::stripUnits($string, 1024, ['B', 'K', 'M', 'G']); } public static function stripDecimalUnits($string) { return self::stripUnits($string, 1000, ['', 'K', 'M']); } public static function removeUnsafeKeys(&$input, $regex) { if (is_array($input)) { foreach ($input as $key => $val) { if (preg_match($regex, $key)) unset($input[$key]); else self::removeUnsafeKeys($input[$key], $regex); } } elseif (is_object($input)) { foreach ($input as $key => $val) { if (preg_match($regex, $key)) unset($input->$key); else self::removeUnsafeKeys($input->$key, $regex); } } } public static function jsonEncode($obj, $illegalKeysRegex = '') { if (is_array($obj)) { foreach ($obj as $key => $val) { if ($val instanceof RedBean_OODBBean) { $obj[$key] = R::exportAll($val); } } } elseif (is_object($obj)) { foreach ($obj as $key => $val) { if ($val instanceof RedBean_OODBBean) { $obj->$key = R::exportAll($val); } } } if (!empty($illegalKeysRegex)) self::removeUnsafeKeys($obj, $illegalKeysRegex); return json_encode($obj); } public static function parseMarkdown($text, $inline = false) { $output = CustomMarkdown::defaultTransform($text); if ($inline) $output = preg_replace('{}', '', $output); return $output; } public static function encrypt($text) { $salt = \Chibi\Registry::getConfig()->main->salt; $alg = MCRYPT_RIJNDAEL_256; $mode = MCRYPT_MODE_ECB; $iv = mcrypt_create_iv(mcrypt_get_iv_size($alg, $mode), MCRYPT_RAND); return trim(base64_encode(mcrypt_encrypt($alg, $salt, $text, $mode, $iv))); } public static function decrypt($text) { $salt = \Chibi\Registry::getConfig()->main->salt; $alg = MCRYPT_RIJNDAEL_256; $mode = MCRYPT_MODE_ECB; $iv = mcrypt_create_iv(mcrypt_get_iv_size($alg, $mode), MCRYPT_RAND); return trim(mcrypt_decrypt($alg, $salt, base64_decode($text), $mode, $iv)); } }