bootstrap.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <?php
  2. // For date()
  3. define('FORMAT_DB_DATETIME', 'Y-m-d H:i:s');
  4. define('FORMAT_DB_DATE', 'Y-m-d');
  5. define('FORMAT_DB_TIME', 'H:i:s');
  6. if (!defined('FORMAT_NICE_YMDHMS')) {
  7. define('FORMAT_NICE_YMDHMS', 'd.m.Y, H:i:s');
  8. define('FORMAT_NICE_YMDHM', 'd.m.Y, H:i');
  9. define('FORMAT_NICE_YM', 'm.Y');
  10. define('FORMAT_NICE_YMD', 'd.m.Y');
  11. define('FORMAT_NICE_MD', 'd.m.');
  12. define('FORMAT_NICE_D', 'd'); # xx
  13. define('FORMAT_NICE_W_NUM', 'w'); # xx (0=sunday to 6=saturday)
  14. define('FORMAT_NICE_W_ABBR', 'D'); # needs manual translation
  15. define('FORMAT_NICE_W_FULL', 'l'); # needs manual translation
  16. define('FORMAT_NICE_M', 'm'); # xx
  17. define('FORMAT_NICE_M_ABBR', 'M'); # needs manual translation
  18. define('FORMAT_NICE_M_FULL', 'F'); # needs manual translation
  19. define('FORMAT_NICE_Y_ABBR', 'y'); # xx
  20. define('FORMAT_NICE_Y', 'Y'); # xxxx
  21. define('FORMAT_NICE_HM', 'H:i');
  22. define('FORMAT_NICE_HMS', 'H:i:s');
  23. // localDate strings
  24. define('FORMAT_LOCAL_WA_YMDHMS', '%a, %d.%m.%Y, %H:%M:%S');
  25. define('FORMAT_LOCAL_WF_YMDHMS', '%A, %d.%m.%Y, %H:%M:%S');
  26. define('FORMAT_LOCAL_WA_YMDHM', '%a, %d.%m.%Y, %H:%M');
  27. define('FORMAT_LOCAL_WF_YMDHM', '%A, %d.%m.%Y, %H:%M');
  28. define('FORMAT_LOCAL_YMDHMS', '%d.%m.%Y, %H:%M:%S');
  29. define('FORMAT_LOCAL_YMDHM', '%d.%m.%Y, %H:%M');
  30. define('FORMAT_LOCAL_YMD', '%d.%m.%Y');
  31. define('FORMAT_LOCAL_MD', '%d.%m.');
  32. define('FORMAT_LOCAL_D', '%d'); # xx
  33. define('FORMAT_LOCAL_W_NUM', '%w'); # xx (0=sunday to 6=saturday)
  34. define('FORMAT_LOCAL_W_ABBR', '%a'); # needs translation
  35. define('FORMAT_LOCAL_W_FULL', '%A'); # needs translation
  36. define('FORMAT_LOCAL_M', '%m'); # xx
  37. define('FORMAT_LOCAL_M_ABBR', '%b'); # needs translation
  38. define('FORMAT_LOCAL_M_FULL', '%B'); # needs translation
  39. define('FORMAT_LOCAL_Y_ABBR', '%y'); # xx
  40. define('FORMAT_LOCAL_YMS_ABBR', '%d.%m.%y');
  41. define('FORMAT_LOCAL_Y', '%Y'); # xxxx
  42. define('FORMAT_LOCAL_H', '%H');
  43. define('FORMAT_LOCAL_S', '%S');
  44. define('FORMAT_LOCAL_HM', '%H:%M');
  45. define('FORMAT_LOCAL_HMS', '%H:%M:%S');
  46. }
  47. # Make the app and l10n play nice with Windows.
  48. if (substr(PHP_OS, 0, 3) === 'WIN') { // || strpos(@php_uname(), 'ARCH')
  49. define('WINDOWS', true);
  50. } else {
  51. define('WINDOWS', false);
  52. }
  53. /**
  54. * Convenience function to check on "empty()"
  55. *
  56. * @param mixed $var
  57. * @return bool Result
  58. */
  59. function isEmpty($var = null) {
  60. if (empty($var)) {
  61. return true;
  62. }
  63. return false;
  64. }
  65. /**
  66. * Return of what type the specific value is
  67. *
  68. * //TODO: use Debugger::exportVar() instead?
  69. *
  70. * @param mixed $value
  71. * @return type (NULL, array, bool, float, int, string, object, unknown) + value
  72. */
  73. function returns($value) {
  74. if ($value === null) {
  75. return 'NULL';
  76. } elseif (is_array($value)) {
  77. return '(array)' . '<pre>' . print_r($value, true) . '</pre>';
  78. } elseif ($value === true) {
  79. return '(bool)TRUE';
  80. } elseif ($value === false) {
  81. return '(bool)FALSE';
  82. } elseif (is_numeric($value) && is_float($value)) {
  83. return '(float)' . $value;
  84. } elseif (is_numeric($value) && is_int($value)) {
  85. return '(int)' . $value;
  86. } elseif (is_string($value)) {
  87. return '(string)' . $value;
  88. } elseif (is_object($value)) {
  89. return '(object)' . get_class($value) . '<pre>' . print_r($value, true) .
  90. '</pre>';
  91. } else {
  92. return '(unknown)' . $value;
  93. }
  94. }
  95. /**
  96. * Returns htmlentities - string
  97. *
  98. * ENT_COMPAT = Will convert double-quotes and leave single-quotes alone.
  99. * ENT_QUOTES = Will convert both double and single quotes. !!!
  100. * ENT_NOQUOTES = Will leave both double and single quotes unconverted.
  101. *
  102. * @param string $text
  103. * @return string Converted text
  104. */
  105. function ent($text) {
  106. return (!empty($text) ? htmlentities($text, ENT_QUOTES, 'UTF-8') : '');
  107. }
  108. /**
  109. * Convenience method for htmlspecialchars_decode
  110. *
  111. * @param string $text Text to wrap through htmlspecialchars_decode
  112. * @return string Converted text
  113. */
  114. function hDec($text, $quoteStyle = ENT_QUOTES) {
  115. if (is_array($text)) {
  116. return array_map('hDec', $text);
  117. }
  118. return trim(htmlspecialchars_decode($text, $quoteStyle));
  119. }
  120. /**
  121. * Convenience method for html_entity_decode
  122. *
  123. * @param string $text Text to wrap through htmlspecialchars_decode
  124. * @return string Converted text
  125. */
  126. function entDec($text, $quoteStyle = ENT_QUOTES) {
  127. if (is_array($text)) {
  128. return array_map('entDec', $text);
  129. }
  130. return (!empty($text) ? trim(html_entity_decode($text, $quoteStyle, 'UTF-8')) : '');
  131. }
  132. /**
  133. * Focus is on the filename (without path)
  134. *
  135. * @param string filename to check on
  136. * @param string type (extension/ext, filename/file, basename/base, dirname/dir)
  137. * @return mixed
  138. */
  139. function extractFileInfo($filename, $type = null) {
  140. if ($info = extractPathInfo($filename, $type)) {
  141. return $info;
  142. }
  143. $pos = strrpos($filename, '.');
  144. $res = '';
  145. switch ($type) {
  146. case 'extension':
  147. case 'ext':
  148. $res = ($pos !== false) ? substr($filename, $pos + 1) : '';
  149. break;
  150. case 'filename':
  151. case 'file':
  152. $res = ($pos !== false) ? substr($filename, 0, $pos) : '';
  153. break;
  154. default:
  155. break;
  156. }
  157. return $res;
  158. }
  159. /**
  160. * Uses native PHP function to retrieve infos about a filename etc.
  161. * Improves it by not returning non-file-name characters from url files if specified.
  162. * So "filename.ext?foo=bar#hash" would simply be "filename.ext" then.
  163. *
  164. * @param string filename to check on
  165. * @param string type (extension/ext, filename/file, basename/base, dirname/dir)
  166. * @param bool $fromUrl
  167. * @return mixed
  168. */
  169. function extractPathInfo($filename, $type = null, $fromUrl = false) {
  170. switch ($type) {
  171. case 'extension':
  172. case 'ext':
  173. $infoType = PATHINFO_EXTENSION;
  174. break;
  175. case 'filename':
  176. case 'file':
  177. $infoType = PATHINFO_FILENAME;
  178. break;
  179. case 'basename':
  180. case 'base':
  181. $infoType = PATHINFO_BASENAME;
  182. break;
  183. case 'dirname':
  184. case 'dir':
  185. $infoType = PATHINFO_DIRNAME;
  186. break;
  187. default:
  188. $infoType = null;
  189. }
  190. $result = pathinfo($filename, $infoType);
  191. if ($fromUrl) {
  192. if (($pos = strpos($result, '#')) !== false) {
  193. $result = substr($result, 0, $pos);
  194. }
  195. if (($pos = strpos($result, '?')) !== false) {
  196. $result = substr($result, 0, $pos);
  197. }
  198. }
  199. return $result;
  200. }
  201. /**
  202. * Shows pr() messages, even with debug = 0.
  203. * Also allows additional customization.
  204. *
  205. * @param mixed $content
  206. * @param bool $collapsedAndExpandable
  207. * @param array $options
  208. * - class, showHtml, showFrom, jquery, returns, debug
  209. * @return string HTML
  210. */
  211. function pre($var, $collapsedAndExpandable = false, $options = array()) {
  212. $defaults = array(
  213. 'class' => 'cake-debug',
  214. 'showHtml' => false, // Escape < and > (or manually escape with h() prior to calling this function)
  215. 'showFrom' => false, // Display file + line
  216. 'jquery' => null, // null => Auto - use jQuery (true/false to manually decide),
  217. 'returns' => false, // Use returns(),
  218. 'debug' => false // Show only with debug > 0
  219. );
  220. $options += $defaults;
  221. if ($options['debug'] && !Configure::read('debug')) {
  222. return '';
  223. }
  224. if (php_sapi_name() === 'cli') {
  225. return sprintf("\n%s\n", $options['returns'] ? returns($var) : print_r($var, true));
  226. }
  227. $res = '<div class="' . $options['class'] . '">';
  228. $pre = '';
  229. if ($collapsedAndExpandable) {
  230. $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\'}';
  231. $jsJquery = 'jQuery(this).parent().children(\'pre\').slideToggle(\'fast\')';
  232. if ($options['jquery'] === true) {
  233. $js = $jsJquery;
  234. } elseif ($options['jquery'] !== false) {
  235. // auto
  236. $js = 'if (typeof jQuery == \'undefined\') {' . $js . '} else {' . $jsJquery . '}';
  237. }
  238. $res .= '<span onclick="' . $js . '" style="cursor: pointer; font-weight: bold">Debug</span>';
  239. if ($options['showFrom']) {
  240. $calledFrom = debug_backtrace();
  241. $from = '<em>' . substr(str_replace(ROOT, '', $calledFrom[0]['file']), 1) . '</em>';
  242. $from .= ' (line <em>' . $calledFrom[0]['line'] . '</em>)';
  243. $res .= '<div>' . $from . '</div>';
  244. }
  245. $pre = ' style="display: none"';
  246. }
  247. if ($options['returns']) {
  248. $var = returns($var);
  249. } else {
  250. $var = print_r($var, true);
  251. }
  252. $res .= '<pre' . $pre . '>' . $var . '</pre>';
  253. $res .= '</div>';
  254. return $res;
  255. }
  256. /**
  257. * Checks if the string [$haystack] contains [$needle]
  258. *
  259. * @param string $haystack Input string.
  260. * @param string $needle Needed char or string.
  261. * @return bool
  262. */
  263. function contains($haystack, $needle, $caseSensitive = false) {
  264. $result = !$caseSensitive ? stripos($haystack, $needle) : strpos($haystack, $needle);
  265. return ($result !== false);
  266. }
  267. /**
  268. * Checks if the string [$haystack] starts with [$needle]
  269. *
  270. * @param string $haystack Input string.
  271. * @param string $needle Needed char or string.
  272. * @return bool
  273. */
  274. function startsWith($haystack, $needle, $caseSensitive = false) {
  275. if ($caseSensitive) {
  276. return (mb_strpos($haystack, $needle) === 0);
  277. }
  278. return (mb_stripos($haystack, $needle) === 0);
  279. }
  280. /**
  281. * Checks if the String [$haystack] ends with [$needle]
  282. *
  283. * @param string $haystack Input string.
  284. * @param string $needle Needed char or string
  285. * @return bool
  286. */
  287. function endsWith($haystack, $needle, $caseSensitive = false) {
  288. if ($caseSensitive) {
  289. return mb_strrpos($haystack, $needle) === mb_strlen($haystack) - mb_strlen($needle);
  290. }
  291. return mb_strripos($haystack, $needle) === mb_strlen($haystack) - mb_strlen($needle);
  292. }