| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- <?php
- /**
- * Basic bootstrap stuff.
- *
- * Note: Use
- *
- * CakePlugin::load('Tools', array('bootstrap' => true));
- *
- * to include this bootstrap file.
- */
- App::uses('Utility', 'Tools.Utility');
- // You can also use FULL_BASE_URL instead of HTTP_BASE
- if (!empty($_SERVER['HTTP_HOST'])) {
- define('HTTP_HOST', $_SERVER['HTTP_HOST']);
- define('HTTP_BASE', 'http://' . HTTP_HOST); //FULL_BASE_URL
- } else {
- define('HTTP_HOST', '');
- define('HTTP_BASE', '');
- }
- if (!empty($_SERVER['PHP_SELF'])) {
- define('HTTP_SELF', '' . $_SERVER['PHP_SELF']);
- }
- if (!empty($_SERVER['REQUEST_URI'])) {
- define('HTTP_URI', '' . $_SERVER['REQUEST_URI']);
- }
- if (!empty($_SERVER['HTTP_REFERER'])) {
- define('HTTP_REF', '' . $_SERVER['HTTP_REFERER']);
- }
- define('CHOWN_PUBLIC', 0770);
- # Useful when putting a string together that needs some "pretty" html-doc. source layouting
- # Only visible in SOURCE code (not in html layout in the browser)
- //define('LF',''); // line feed (depending on the system)
- define('LF', PHP_EOL); // line feed (depending on the system): \n or \n\r etc.
- # Alternativly NL,CR:
- define('NL', "\n"); // new line
- define('CR', "\r"); // carriage return
- define('TB', "\t"); // tabulator
- # Useful for html layouting
- # Visible in the Html Layout in the Browser
- define('BR', '<br />'); // line break
- # Make the app and l10n play nice with Windows.
- if (substr(PHP_OS, 0, 3) === 'WIN') { // || strpos(@php_uname(), 'ARCH')
- define('WINDOWS', true);
- } else {
- define('WINDOWS', false);
- }
- define('FORMAT_DB_DATETIME', 'Y-m-d H:i:s'); // date(...)
- define('FORMAT_DB_DATE', 'Y-m-d');
- define('FORMAT_DB_TIME', 'H:i:s');
- // @deprecated Use NULL instead for nullish date(time)s
- define('DEFAULT_DATETIME', '0000-00-00 00:00:00');
- define('DEFAULT_DATE', '0000-00-00');
- define('DEFAULT_TIME', '00:00:00');
- // Workpaths
- define('FILES', APP . 'files' . DS);
- define('LOCALE', APP . 'locale' . DS);
- if (!defined('CLASS_USER')) {
- define('CLASS_USER', 'User');
- }
- # Validation ## (minus should be "hyphen")
- /** Valid characters: letters only */
- define('VALID_ALPHA', '/^[a-zA-Z]+$/');
- /** Valid characters: letters,underscores only */
- define('VALID_ALPHA_UNDERSCORES', '/^[a-zA-Z_]+$/');
- /** Valid characters: letters,underscores,minus only */
- define('VALID_ALPHA_MINUS_UNDERSCORES', '/^[a-zA-Z_-]+$/');
- /** Valid characters: letters,spaces only */
- define('VALID_ALPHA_WHITESPACES', '/^[a-zA-Z ]+$/');
- /** Valid characters: letters,numbers,underscores only */
- define('VALID_ALPHANUMERIC_UNDERSCORES', '/^[\da-zA-Z_]+$/');
- /** Valid characters: letters,numbers,underscores,minus only */
- define('VALID_ALPHANUMERIC_MINUS_UNDERSCORES', '/^[\da-zA-Z_-]+$/');
- /** Valid characters: letters,numbers,spaces only */
- define('VALID_ALPHANUMERIC_WHITESPACES', '/^[\da-zA-Z ]+$/');
- /** Valid characters: letters,numbers,spaces,underscores only */
- define('VALID_ALPHANUMERIC_WHITESPACES_UNDERSCORES', '/^[\da-zA-Z _]+$/');
- /** Valid characters: numbers,underscores only */
- define('VALID_NUMERIC_UNDERSCORES', '/^[\d_]+$/');
- /** Valid characters: numbers,spaces only */
- define('VALID_NUMERIC_WHITESPACES', '/^[\d ]+$/');
- /** Valid characters: numbers,spaces,underscores only */
- define('VALID_NUMERIC_WHITESPACES_UNDERSCORES', '/^[\d _]+$/');
- /** Valid integers: > 0 */
- define('VALID_INTEGERS', '/^[\d]+$/'); //??
- if (!defined('FORMAT_NICE_YMDHMS')) {
- define('FORMAT_NICE_YMDHMS', 'd.m.Y, H:i:s');
- define('FORMAT_NICE_YMDHM', 'd.m.Y, H:i');
- define('FORMAT_NICE_YM', 'm.Y');
- define('FORMAT_NICE_YMD', 'd.m.Y');
- define('FORMAT_NICE_MD', 'd.m.');
- define('FORMAT_NICE_D', 'd'); # xx
- define('FORMAT_NICE_W_NUM', 'w'); # xx (0=sunday to 6=saturday)
- define('FORMAT_NICE_W_ABBR', 'D'); # needs manual translation
- define('FORMAT_NICE_W_FULL', 'l'); # needs manual translation
- define('FORMAT_NICE_M', 'm'); # xx
- define('FORMAT_NICE_M_ABBR', 'M'); # needs manual translation
- define('FORMAT_NICE_M_FULL', 'F'); # needs manual translation
- define('FORMAT_NICE_Y_ABBR', 'y'); # xx
- define('FORMAT_NICE_Y', 'Y'); # xxxx
- define('FORMAT_NICE_HM', 'H:i');
- define('FORMAT_NICE_HMS', 'H:i:s');
- // localDate strings
- define('FORMAT_LOCAL_WA_YMDHMS', '%a, %d.%m.%Y, %H:%M:%S');
- define('FORMAT_LOCAL_WF_YMDHMS', '%A, %d.%m.%Y, %H:%M:%S');
- define('FORMAT_LOCAL_WA_YMDHM', '%a, %d.%m.%Y, %H:%M');
- define('FORMAT_LOCAL_WF_YMDHM', '%A, %d.%m.%Y, %H:%M');
- define('FORMAT_LOCAL_YMDHMS', '%d.%m.%Y, %H:%M:%S');
- define('FORMAT_LOCAL_YMDHM', '%d.%m.%Y, %H:%M');
- define('FORMAT_LOCAL_YMD', '%d.%m.%Y');
- define('FORMAT_LOCAL_MD', '%d.%m.');
- define('FORMAT_LOCAL_D', '%d'); # xx
- define('FORMAT_LOCAL_W_NUM', '%w'); # xx (0=sunday to 6=saturday)
- define('FORMAT_LOCAL_W_ABBR', '%a'); # needs translation
- define('FORMAT_LOCAL_W_FULL', '%A'); # needs translation
- define('FORMAT_LOCAL_M', '%m'); # xx
- define('FORMAT_LOCAL_M_ABBR', '%b'); # needs translation
- define('FORMAT_LOCAL_M_FULL', '%B'); # needs translation
- define('FORMAT_LOCAL_Y_ABBR', '%y'); # xx
- define('FORMAT_LOCAL_YMS_ABBR', '%d.%m.%y');
- define('FORMAT_LOCAL_Y', '%Y'); # xxxx
- define('FORMAT_LOCAL_H', '%H');
- define('FORMAT_LOCAL_S', '%S');
- define('FORMAT_LOCAL_HM', '%H:%M');
- define('FORMAT_LOCAL_HMS', '%H:%M:%S');
- }
- /*** chars ***/
- /* see http://www.htmlcodetutorial.com/characterentities_famsupp_69.html */
- define('CHAR_LESS', '<'); # <
- define('CHAR_GREATER', '>'); # >
- define('CHAR_QUOTE', '"'); # "
- define('CHAR_APOSTROPHE', '''); # '
- define('CHAR_ARROWS', '»'); # »
- define('CHAR_ARROWS_R', '»'); # »
- define('CHAR_ARROWS_L', '«'); # «
- define('CHAR_AVERAGE', 'Ø'); # Ø
- define('CHAR_INFIN', '∞'); # 8
- define('CHAR_MILL', '‰'); # ‰ (per mille) / or ‰
- define('CHAR_PLUSMN', '±'); # 8
- define('CHAR_HELLIP', '…'); # … (horizontal ellipsis = three dot leader)
- define('CHAR_CIRCA', '≈'); # ˜ (almost equal to)
- define('CHAR_CHECKBOX_EMPTY', '☐]'); #
- define('CHAR_CHECKBOX_MAKRED', '☑'); #
- define('CHAR_CHECKMARK', '✓');
- define('CHAR_CHECKMARK_BOLD', '✔');
- define('CHAR_BALLOT', '✗');
- define('CHAR_BALLOT_BOLD', '✘');
- define('CHAR_ABOUT', '≈'); # … (horizontal ellipsis = three dot leader)
- /* not very often used */
- define('CHAR_RPIME', '′'); # ' (minutes)
- define('CHAR_DOUBLE_RPIME', '″'); # ? (seconds)
- /** BASIC FUNCTIONS **/
- if (!function_exists('isEmpty')) {
- /**
- * Convenience function to check on "empty()"
- *
- * @param mixed $var
- * @return bool Result
- */
- function isEmpty($var = null) {
- if (empty($var)) {
- return true;
- }
- return false;
- }
- }
- /**
- * Return of what type the specific value is
- *
- * //TODO: use Debugger::exportVar() instead?
- *
- * @param mixed $value
- * @return type (NULL, array, bool, float, int, string, object, unknown) + value
- */
- function returns($value) {
- if ($value === null) {
- return 'NULL';
- } elseif (is_array($value)) {
- return '(array)' . '<pre>' . print_r($value, true) . '</pre>';
- } elseif ($value === true) {
- return '(bool)TRUE';
- } elseif ($value === false) {
- return '(bool)FALSE';
- } elseif (is_numeric($value) && is_float($value)) {
- return '(float)' . $value;
- } elseif (is_numeric($value) && is_int($value)) {
- return '(int)' . $value;
- } elseif (is_string($value)) {
- return '(string)' . $value;
- } elseif (is_object($value)) {
- return '(object)' . get_class($value) . '<pre>' . print_r($value, true) .
- '</pre>';
- } else {
- return '(unknown)' . $value;
- }
- }
- /**
- * Quickly dump a $var
- *
- * @param mixed $var
- * @return void
- */
- function dump($var) {
- if (!class_exists('Debugger')) {
- App::uses('Debugger', 'Utility');
- }
- return Debugger::dump($var);
- }
- /**
- * Returns htmlentities - string
- *
- * ENT_COMPAT = Will convert double-quotes and leave single-quotes alone.
- * ENT_QUOTES = Will convert both double and single quotes. !!!
- * ENT_NOQUOTES = Will leave both double and single quotes unconverted.
- *
- * @param string $text
- * @return string Converted text
- */
- function ent($text) {
- return (!empty($text) ? htmlentities($text, ENT_QUOTES, 'UTF-8') : '');
- }
- /**
- * Convenience method for htmlspecialchars_decode
- *
- * @param string $text Text to wrap through htmlspecialchars_decode
- * @return string Converted text
- */
- function hDec($text, $quoteStyle = ENT_QUOTES) {
- if (is_array($text)) {
- return array_map('hDec', $text);
- }
- return trim(htmlspecialchars_decode($text, $quoteStyle));
- }
- /**
- * Convenience method for html_entity_decode
- *
- * @param string $text Text to wrap through htmlspecialchars_decode
- * @return string Converted text
- */
- function entDec($text, $quoteStyle = ENT_QUOTES) {
- if (is_array($text)) {
- return array_map('entDec', $text);
- }
- return (!empty($text) ? trim(html_entity_decode($text, $quoteStyle, 'UTF-8')) : '');
- }
- /**
- * Focus is on the filename (without path)
- *
- * //TODO: switch parameters!!!
- *
- * @return mixed
- */
- function extractFileInfo($type = null, $filename) {
- if ($info = extractPathInfo($type, $filename)) {
- return $info;
- }
- $pos = strrpos($filename, '.');
- $res = '';
- switch ($type) {
- case 'extension':
- case 'ext':
- $res = ($pos !== false) ? substr($filename, $pos + 1) : '';
- break;
- case 'filename':
- case 'file':
- $res = ($pos !== false) ? substr($filename, 0, $pos) : '';
- break;
- default:
- break;
- }
- return $res;
- }
- /**
- * Uses native PHP function to retrieve infos about a filename etc.
- * Improves it by not returning non-file-name characters from url files if specified.
- * So "filename.ext?foo=bar#hash" would simply be "filename.ext" then.
- *
- * //TODO: switch parameters!!!
- *
- * @param string type (extension/ext, filename/file, basename/base, dirname/dir)
- * @param string filename to check on
- * @return mixed
- */
- function extractPathInfo($type = null, $filename, $fromUrl = false) {
- switch ($type) {
- case 'extension':
- case 'ext':
- $infoType = PATHINFO_EXTENSION;
- break;
- case 'filename':
- case 'file':
- $infoType = PATHINFO_FILENAME;
- break;
- case 'basename':
- case 'base':
- $infoType = PATHINFO_BASENAME;
- break;
- case 'dirname':
- case 'dir':
- $infoType = PATHINFO_DIRNAME;
- break;
- default:
- $infoType = null;
- }
- $result = pathinfo($filename, $infoType);
- if ($fromUrl) {
- if (($pos = strpos($result, '#')) !== false) {
- $result = substr($result, 0, $pos);
- }
- if (($pos = strpos($result, '?')) !== false) {
- $result = substr($result, 0, $pos);
- }
- }
- return $result;
- }
- /**
- * Shows pr() messages, even with debug = 0.
- * Also allows additional customization.
- *
- * @param mixed $content
- * @param bool $collapsedAndExpandable
- * @param array $options
- * - class, showHtml, showFrom, jquery, returns, debug
- * @return string HTML
- */
- function pre($var, $collapsedAndExpandable = false, $options = []) {
- $defaults = [
- 'class' => 'cake-debug',
- 'showHtml' => false, // Escape < and > (or manually escape with h() prior to calling this function)
- 'showFrom' => false, // Display file + line
- 'jquery' => null, // null => Auto - use jQuery (true/false to manually decide),
- 'returns' => false, // Use returns(),
- 'debug' => false // Show only with debug > 0
- ];
- $options += $defaults;
- if ($options['debug'] && !Configure::read('debug')) {
- return '';
- }
- if (php_sapi_name() === 'cli') {
- return sprintf("\n%s\n", $options['returns'] ? returns($var) : print_r($var, true));
- }
- $res = '<div class="' . $options['class'] . '">';
- $pre = '';
- if ($collapsedAndExpandable) {
- $js = 'if (this.parentNode.getElementsByTagName(\'pre\')[0].style.display==\'block\') {this.parentNode.getElementsByTagName(\'pre\')[0].style.display=\'none\'} else {this.parentNode.getElementsByTagName(\'pre\')[0].style.display=\'block\'}';
- $jsJquery = 'jQuery(this).parent().children(\'pre\').slideToggle(\'fast\')';
- if ($options['jquery'] === true) {
- $js = $jsJquery;
- } elseif ($options['jquery'] !== false) {
- // auto
- $js = 'if (typeof jQuery == \'undefined\') {' . $js . '} else {' . $jsJquery . '}';
- }
- $res .= '<span onclick="' . $js . '" style="cursor: pointer; font-weight: bold">Debug</span>';
- if ($options['showFrom']) {
- $calledFrom = debug_backtrace();
- $from = '<em>' . substr(str_replace(ROOT, '', $calledFrom[0]['file']), 1) . '</em>';
- $from .= ' (line <em>' . $calledFrom[0]['line'] . '</em>)';
- $res .= '<div>' . $from . '</div>';
- }
- $pre = ' style="display: none"';
- }
- if ($options['returns']) {
- $var = returns($var);
- } else {
- $var = print_r($var, true);
- }
- $res .= '<pre' . $pre . '>' . $var . '</pre>';
- $res .= '</div>';
- return $res;
- }
- /**
- * Checks if the string [$haystack] contains [$needle]
- *
- * @param string $haystack Input string.
- * @param string $needle Needed char or string.
- * @return bool
- */
- function contains($haystack, $needle, $caseSensitive = false) {
- $result = !$caseSensitive ? stripos($haystack, $needle) : strpos($haystack, $needle);
- return ($result !== false);
- }
- /**
- * Checks if the string [$haystack] starts with [$needle]
- *
- * @param string $haystack Input string.
- * @param string $needle Needed char or string.
- * @return bool
- */
- function startsWith($haystack, $needle, $caseSensitive = false) {
- if ($caseSensitive) {
- return (mb_strpos($haystack, $needle) === 0);
- }
- return (mb_stripos($haystack, $needle) === 0);
- }
- /**
- * Checks if the String [$haystack] ends with [$needle]
- *
- * @param string $haystack Input string.
- * @param string $needle Needed char or string
- * @return bool
- */
- function endsWith($haystack, $needle, $caseSensitive = false) {
- if ($caseSensitive) {
- return mb_strrpos($haystack, $needle) === mb_strlen($haystack) - mb_strlen($needle);
- }
- return mb_strripos($haystack, $needle) === mb_strlen($haystack) - mb_strlen($needle);
- }
|