CakePHP
  • Documentation
    • Book
    • API
    • Videos
    • Reporting Security Issues
    • Privacy Policy
    • Logos & Trademarks
  • Business Solutions
  • Swag
  • Road Trip
  • Team
  • Community
    • Community
    • Get Involved
    • Issues (GitHub)
    • Bakery
    • Featured Resources
    • Training
    • Meetups
    • My CakePHP
    • CakeFest
    • Newsletter
    • Linkedin
    • YouTube
    • Facebook
    • Twitter
    • Mastodon
    • Help & Support
    • Forum
    • Stack Overflow
    • Slack
    • Paid Support
CakePHP

C CakePHP 2.5 API

  • Overview
  • Tree
  • Deprecated
  • Version:
    • 2.5
      • 4.2
      • 4.1
      • 4.0
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

Packages

  • Cake
    • Cache
      • Engine
    • Configure
    • Console
      • Command
        • Task
    • Controller
      • Component
        • Acl
        • Auth
    • Core
    • Error
    • Event
    • I18n
    • Log
      • Engine
    • Model
      • Behavior
      • Datasource
        • Database
        • Session
      • Validator
    • Network
      • Email
      • Http
    • Routing
      • Filter
      • Route
    • TestSuite
      • Coverage
      • Fixture
      • Reporter
    • Utility
    • View
      • Helper

Functions

  • __
  • __c
  • __d
  • __dc
  • __dcn
  • __dn
  • __n
  • am
  • cache
  • clearCache
  • config
  • convertSlash
  • debug
  • env
  • fileExistsInPath
  • h
  • LogError
  • mb_encode_mimeheader
  • mb_stripos
  • mb_stristr
  • mb_strlen
  • mb_strpos
  • mb_strrchr
  • mb_strrichr
  • mb_strripos
  • mb_strrpos
  • mb_strstr
  • mb_strtolower
  • mb_strtoupper
  • mb_substr
  • mb_substr_count
  • pluginSplit
  • pr
  • sortByKey
  • stripslashes_deep
  1: <?php
  2: /**
  3:  * Basic CakePHP functionality.
  4:  *
  5:  * Core functions for including other source files, loading models and so forth.
  6:  *
  7:  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  8:  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  9:  *
 10:  * Licensed under The MIT License
 11:  * For full copyright and license information, please see the LICENSE.txt
 12:  * Redistributions of files must retain the above copyright notice.
 13:  *
 14:  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 15:  * @link          http://cakephp.org CakePHP(tm) Project
 16:  * @package       Cake
 17:  * @since         CakePHP(tm) v 0.2.9
 18:  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 19:  */
 20: 
 21: /**
 22:  * Basic defines for timing functions.
 23:  */
 24:     define('SECOND', 1);
 25:     define('MINUTE', 60);
 26:     define('HOUR', 3600);
 27:     define('DAY', 86400);
 28:     define('WEEK', 604800);
 29:     define('MONTH', 2592000);
 30:     define('YEAR', 31536000);
 31: 
 32: if (!function_exists('config')) {
 33: 
 34: /**
 35:  * Loads configuration files. Receives a set of configuration files
 36:  * to load.
 37:  * Example:
 38:  *
 39:  * `config('config1', 'config2');`
 40:  *
 41:  * @return bool Success
 42:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#config
 43:  */
 44:     function config() {
 45:         $args = func_get_args();
 46:         $count = count($args);
 47:         $included = 0;
 48:         foreach ($args as $arg) {
 49:             if (file_exists(APP . 'Config' . DS . $arg . '.php')) {
 50:                 include_once APP . 'Config' . DS . $arg . '.php';
 51:                 $included++;
 52:             }
 53:         }
 54:         return $included === $count;
 55:     }
 56: 
 57: }
 58: 
 59: if (!function_exists('debug')) {
 60: 
 61: /**
 62:  * Prints out debug information about given variable.
 63:  *
 64:  * Only runs if debug level is greater than zero.
 65:  *
 66:  * @param mixed $var Variable to show debug information for.
 67:  * @param bool $showHtml If set to true, the method prints the debug data in a browser-friendly way.
 68:  * @param bool $showFrom If set to true, the method prints from where the function was called.
 69:  * @return void
 70:  * @link http://book.cakephp.org/2.0/en/development/debugging.html#basic-debugging
 71:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#debug
 72:  */
 73:     function debug($var, $showHtml = null, $showFrom = true) {
 74:         if (Configure::read('debug') > 0) {
 75:             App::uses('Debugger', 'Utility');
 76:             $file = '';
 77:             $line = '';
 78:             $lineInfo = '';
 79:             if ($showFrom) {
 80:                 $trace = Debugger::trace(array('start' => 1, 'depth' => 2, 'format' => 'array'));
 81:                 $file = str_replace(array(CAKE_CORE_INCLUDE_PATH, ROOT), '', $trace[0]['file']);
 82:                 $line = $trace[0]['line'];
 83:             }
 84:             $html = <<<HTML
 85: <div class="cake-debug-output">
 86: %s
 87: <pre class="cake-debug">
 88: %s
 89: </pre>
 90: </div>
 91: HTML;
 92:             $text = <<<TEXT
 93: %s
 94: ########## DEBUG ##########
 95: %s
 96: ###########################
 97: 
 98: TEXT;
 99:             $template = $html;
100:             if (php_sapi_name() === 'cli' || $showHtml === false) {
101:                 $template = $text;
102:                 if ($showFrom) {
103:                     $lineInfo = sprintf('%s (line %s)', $file, $line);
104:                 }
105:             }
106:             if ($showHtml === null && $template !== $text) {
107:                 $showHtml = true;
108:             }
109:             $var = Debugger::exportVar($var, 25);
110:             if ($showHtml) {
111:                 $template = $html;
112:                 $var = h($var);
113:                 if ($showFrom) {
114:                     $lineInfo = sprintf('<span><strong>%s</strong> (line <strong>%s</strong>)</span>', $file, $line);
115:                 }
116:             }
117:             printf($template, $lineInfo, $var);
118:         }
119:     }
120: 
121: }
122: 
123: if (!function_exists('sortByKey')) {
124: 
125: /**
126:  * Sorts given $array by key $sortBy.
127:  *
128:  * @param array &$array Array to sort
129:  * @param string $sortBy Sort by this key
130:  * @param string $order Sort order asc/desc (ascending or descending).
131:  * @param int $type Type of sorting to perform
132:  * @return array|null Sorted array, or null if not an array.
133:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#sortByKey
134:  */
135:     function sortByKey(&$array, $sortBy, $order = 'asc', $type = SORT_NUMERIC) {
136:         if (!is_array($array)) {
137:             return null;
138:         }
139: 
140:         foreach ($array as $key => $val) {
141:             $sa[$key] = $val[$sortBy];
142:         }
143: 
144:         if ($order === 'asc') {
145:             asort($sa, $type);
146:         } else {
147:             arsort($sa, $type);
148:         }
149: 
150:         foreach ($sa as $key => $val) {
151:             $out[] = $array[$key];
152:         }
153:         return $out;
154:     }
155: 
156: }
157: 
158: if (!function_exists('h')) {
159: 
160: /**
161:  * Convenience method for htmlspecialchars.
162:  *
163:  * @param string|array|object $text Text to wrap through htmlspecialchars. Also works with arrays, and objects.
164:  *    Arrays will be mapped and have all their elements escaped. Objects will be string cast if they
165:  *    implement a `__toString` method. Otherwise the class name will be used.
166:  * @param bool $double Encode existing html entities
167:  * @param string $charset Character set to use when escaping. Defaults to config value in 'App.encoding' or 'UTF-8'
168:  * @return string Wrapped text
169:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#h
170:  */
171:     function h($text, $double = true, $charset = null) {
172:         if (is_string($text)) {
173:             //optimize for strings
174:         } elseif (is_array($text)) {
175:             $texts = array();
176:             foreach ($text as $k => $t) {
177:                 $texts[$k] = h($t, $double, $charset);
178:             }
179:             return $texts;
180:         } elseif (is_object($text)) {
181:             if (method_exists($text, '__toString')) {
182:                 $text = (string)$text;
183:             } else {
184:                 $text = '(object)' . get_class($text);
185:             }
186:         } elseif (is_bool($text)) {
187:             return $text;
188:         }
189: 
190:         static $defaultCharset = false;
191:         if ($defaultCharset === false) {
192:             $defaultCharset = Configure::read('App.encoding');
193:             if ($defaultCharset === null) {
194:                 $defaultCharset = 'UTF-8';
195:             }
196:         }
197:         if (is_string($double)) {
198:             $charset = $double;
199:         }
200:         return htmlspecialchars($text, ENT_QUOTES, ($charset) ? $charset : $defaultCharset, $double);
201:     }
202: 
203: }
204: 
205: if (!function_exists('pluginSplit')) {
206: 
207: /**
208:  * Splits a dot syntax plugin name into its plugin and class name.
209:  * If $name does not have a dot, then index 0 will be null.
210:  *
211:  * Commonly used like `list($plugin, $name) = pluginSplit($name);`
212:  *
213:  * @param string $name The name you want to plugin split.
214:  * @param bool $dotAppend Set to true if you want the plugin to have a '.' appended to it.
215:  * @param string $plugin Optional default plugin to use if no plugin is found. Defaults to null.
216:  * @return array Array with 2 indexes. 0 => plugin name, 1 => class name
217:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#pluginSplit
218:  */
219:     function pluginSplit($name, $dotAppend = false, $plugin = null) {
220:         if (strpos($name, '.') !== false) {
221:             $parts = explode('.', $name, 2);
222:             if ($dotAppend) {
223:                 $parts[0] .= '.';
224:             }
225:             return $parts;
226:         }
227:         return array($plugin, $name);
228:     }
229: 
230: }
231: 
232: if (!function_exists('pr')) {
233: 
234: /**
235:  * print_r() convenience function
236:  *
237:  * In terminals this will act the same as using print_r() directly, when not run on cli
238:  * print_r() will wrap <PRE> tags around the output of given array. Similar to debug().
239:  *
240:  * @param mixed $var Variable to print out
241:  * @return void
242:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#pr
243:  * @see debug()
244:  */
245:     function pr($var) {
246:         if (Configure::read('debug') > 0) {
247:             $template = php_sapi_name() !== 'cli' ? '<pre>%s</pre>' : "\n%s\n";
248:             printf($template, print_r($var, true));
249:         }
250:     }
251: 
252: }
253: 
254: if (!function_exists('am')) {
255: 
256: /**
257:  * Merge a group of arrays
258:  *
259:  * Accepts variable arguments. Each argument will be converted into an array and then merged.
260:  *
261:  * @return array All array parameters merged into one
262:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#am
263:  */
264:     function am() {
265:         $r = array();
266:         $args = func_get_args();
267:         foreach ($args as $a) {
268:             if (!is_array($a)) {
269:                 $a = array($a);
270:             }
271:             $r = array_merge($r, $a);
272:         }
273:         return $r;
274:     }
275: 
276: }
277: 
278: if (!function_exists('env')) {
279: 
280: /**
281:  * Gets an environment variable from available sources, and provides emulation
282:  * for unsupported or inconsistent environment variables (i.e. DOCUMENT_ROOT on
283:  * IIS, or SCRIPT_NAME in CGI mode). Also exposes some additional custom
284:  * environment information.
285:  *
286:  * @param string $key Environment variable name.
287:  * @return string|bool|null Environment variable setting.
288:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#env
289:  */
290:     function env($key) {
291:         if ($key === 'HTTPS') {
292:             if (isset($_SERVER['HTTPS'])) {
293:                 return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
294:             }
295:             return (strpos(env('SCRIPT_URI'), 'https://') === 0);
296:         }
297: 
298:         if ($key === 'SCRIPT_NAME') {
299:             if (env('CGI_MODE') && isset($_ENV['SCRIPT_URL'])) {
300:                 $key = 'SCRIPT_URL';
301:             }
302:         }
303: 
304:         $val = null;
305:         if (isset($_SERVER[$key])) {
306:             $val = $_SERVER[$key];
307:         } elseif (isset($_ENV[$key])) {
308:             $val = $_ENV[$key];
309:         } elseif (getenv($key) !== false) {
310:             $val = getenv($key);
311:         }
312: 
313:         if ($key === 'REMOTE_ADDR' && $val === env('SERVER_ADDR')) {
314:             $addr = env('HTTP_PC_REMOTE_ADDR');
315:             if ($addr !== null) {
316:                 $val = $addr;
317:             }
318:         }
319: 
320:         if ($val !== null) {
321:             return $val;
322:         }
323: 
324:         switch ($key) {
325:             case 'DOCUMENT_ROOT':
326:                 $name = env('SCRIPT_NAME');
327:                 $filename = env('SCRIPT_FILENAME');
328:                 $offset = 0;
329:                 if (!strpos($name, '.php')) {
330:                     $offset = 4;
331:                 }
332:                 return substr($filename, 0, -(strlen($name) + $offset));
333:             case 'PHP_SELF':
334:                 return str_replace(env('DOCUMENT_ROOT'), '', env('SCRIPT_FILENAME'));
335:             case 'CGI_MODE':
336:                 return (PHP_SAPI === 'cgi');
337:             case 'HTTP_BASE':
338:                 $host = env('HTTP_HOST');
339:                 $parts = explode('.', $host);
340:                 $count = count($parts);
341: 
342:                 if ($count === 1) {
343:                     return '.' . $host;
344:                 } elseif ($count === 2) {
345:                     return '.' . $host;
346:                 } elseif ($count === 3) {
347:                     $gTLD = array(
348:                         'aero',
349:                         'asia',
350:                         'biz',
351:                         'cat',
352:                         'com',
353:                         'coop',
354:                         'edu',
355:                         'gov',
356:                         'info',
357:                         'int',
358:                         'jobs',
359:                         'mil',
360:                         'mobi',
361:                         'museum',
362:                         'name',
363:                         'net',
364:                         'org',
365:                         'pro',
366:                         'tel',
367:                         'travel',
368:                         'xxx'
369:                     );
370:                     if (in_array($parts[1], $gTLD)) {
371:                         return '.' . $host;
372:                     }
373:                 }
374:                 array_shift($parts);
375:                 return '.' . implode('.', $parts);
376:         }
377:         return null;
378:     }
379: 
380: }
381: 
382: if (!function_exists('cache')) {
383: 
384: /**
385:  * Reads/writes temporary data to cache files or session.
386:  *
387:  * @param string $path File path within /tmp to save the file.
388:  * @param mixed $data The data to save to the temporary file.
389:  * @param mixed $expires A valid strtotime string when the data expires.
390:  * @param string $target The target of the cached data; either 'cache' or 'public'.
391:  * @return mixed The contents of the temporary file.
392:  * @deprecated 3.0.0 Will be removed in 3.0. Please use Cache::write() instead.
393:  */
394:     function cache($path, $data = null, $expires = '+1 day', $target = 'cache') {
395:         if (Configure::read('Cache.disable')) {
396:             return null;
397:         }
398:         $now = time();
399: 
400:         if (!is_numeric($expires)) {
401:             $expires = strtotime($expires, $now);
402:         }
403: 
404:         switch (strtolower($target)) {
405:             case 'cache':
406:                 $filename = CACHE . $path;
407:                 break;
408:             case 'public':
409:                 $filename = WWW_ROOT . $path;
410:                 break;
411:             case 'tmp':
412:                 $filename = TMP . $path;
413:                 break;
414:         }
415:         $timediff = $expires - $now;
416:         $filetime = false;
417: 
418:         if (file_exists($filename)) {
419:             //@codingStandardsIgnoreStart
420:             $filetime = @filemtime($filename);
421:             //@codingStandardsIgnoreEnd
422:         }
423: 
424:         if ($data === null) {
425:             if (file_exists($filename) && $filetime !== false) {
426:                 if ($filetime + $timediff < $now) {
427:                     //@codingStandardsIgnoreStart
428:                     @unlink($filename);
429:                     //@codingStandardsIgnoreEnd
430:                 } else {
431:                     //@codingStandardsIgnoreStart
432:                     $data = @file_get_contents($filename);
433:                     //@codingStandardsIgnoreEnd
434:                 }
435:             }
436:         } elseif (is_writable(dirname($filename))) {
437:             //@codingStandardsIgnoreStart
438:             @file_put_contents($filename, $data, LOCK_EX);
439:             //@codingStandardsIgnoreEnd
440:         }
441:         return $data;
442:     }
443: 
444: }
445: 
446: if (!function_exists('clearCache')) {
447: 
448: /**
449:  * Used to delete files in the cache directories, or clear contents of cache directories
450:  *
451:  * @param string|array $params As String name to be searched for deletion, if name is a directory all files in
452:  *   directory will be deleted. If array, names to be searched for deletion. If clearCache() without params,
453:  *   all files in app/tmp/cache/views will be deleted
454:  * @param string $type Directory in tmp/cache defaults to view directory
455:  * @param string $ext The file extension you are deleting
456:  * @return true if files found and deleted false otherwise
457:  */
458:     function clearCache($params = null, $type = 'views', $ext = '.php') {
459:         if (is_string($params) || $params === null) {
460:             $params = preg_replace('/\/\//', '/', $params);
461:             $cache = CACHE . $type . DS . $params;
462: 
463:             if (is_file($cache . $ext)) {
464:                 //@codingStandardsIgnoreStart
465:                 @unlink($cache . $ext);
466:                 //@codingStandardsIgnoreEnd
467:                 return true;
468:             } elseif (is_dir($cache)) {
469:                 $files = glob($cache . '*');
470: 
471:                 if ($files === false) {
472:                     return false;
473:                 }
474: 
475:                 foreach ($files as $file) {
476:                     if (is_file($file) && strrpos($file, DS . 'empty') !== strlen($file) - 6) {
477:                         //@codingStandardsIgnoreStart
478:                         @unlink($file);
479:                         //@codingStandardsIgnoreEnd
480:                     }
481:                 }
482:                 return true;
483:             }
484:             $cache = array(
485:                 CACHE . $type . DS . '*' . $params . $ext,
486:                 CACHE . $type . DS . '*' . $params . '_*' . $ext
487:             );
488:             $files = array();
489:             while ($search = array_shift($cache)) {
490:                 $results = glob($search);
491:                 if ($results !== false) {
492:                     $files = array_merge($files, $results);
493:                 }
494:             }
495:             if (empty($files)) {
496:                 return false;
497:             }
498:             foreach ($files as $file) {
499:                 if (is_file($file) && strrpos($file, DS . 'empty') !== strlen($file) - 6) {
500:                     //@codingStandardsIgnoreStart
501:                     @unlink($file);
502:                     //@codingStandardsIgnoreEnd
503:                 }
504:             }
505:             return true;
506: 
507:         } elseif (is_array($params)) {
508:             foreach ($params as $file) {
509:                 clearCache($file, $type, $ext);
510:             }
511:             return true;
512:         }
513:         return false;
514:     }
515: 
516: }
517: 
518: if (!function_exists('stripslashes_deep')) {
519: 
520: /**
521:  * Recursively strips slashes from all values in an array
522:  *
523:  * @param array $values Array of values to strip slashes
524:  * @return mixed What is returned from calling stripslashes
525:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#stripslashes_deep
526:  */
527:     function stripslashes_deep($values) {
528:         if (is_array($values)) {
529:             foreach ($values as $key => $value) {
530:                 $values[$key] = stripslashes_deep($value);
531:             }
532:         } else {
533:             $values = stripslashes($values);
534:         }
535:         return $values;
536:     }
537: 
538: }
539: 
540: if (!function_exists('__')) {
541: 
542: /**
543:  * Returns a translated string if one is found; Otherwise, the submitted message.
544:  *
545:  * @param string $singular Text to translate
546:  * @param mixed $args Array with arguments or multiple arguments in function
547:  * @return mixed translated string
548:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__
549:  */
550:     function __($singular, $args = null) {
551:         if (!$singular) {
552:             return;
553:         }
554: 
555:         App::uses('I18n', 'I18n');
556:         $translated = I18n::translate($singular);
557:         if ($args === null && func_num_args() < 3) {
558:             return $translated;
559:         } elseif (!is_array($args)) {
560:             $args = array_slice(func_get_args(), 1);
561:         }
562: 
563:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
564:         return vsprintf($translated, $args);
565:     }
566: 
567: }
568: 
569: if (!function_exists('__n')) {
570: 
571: /**
572:  * Returns correct plural form of message identified by $singular and $plural for count $count.
573:  * Some languages have more than one form for plural messages dependent on the count.
574:  *
575:  * @param string $singular Singular text to translate
576:  * @param string $plural Plural text
577:  * @param int $count Count
578:  * @param mixed $args Array with arguments or multiple arguments in function
579:  * @return mixed plural form of translated string
580:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__n
581:  */
582:     function __n($singular, $plural, $count, $args = null) {
583:         if (!$singular) {
584:             return;
585:         }
586: 
587:         App::uses('I18n', 'I18n');
588:         $translated = I18n::translate($singular, $plural, null, I18n::LC_MESSAGES, $count);
589:         if ($args === null && func_num_args() < 5) {
590:             return $translated;
591:         } elseif (!is_array($args)) {
592:             $args = array_slice(func_get_args(), 3);
593:         }
594: 
595:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
596:         return vsprintf($translated, $args);
597:     }
598: 
599: }
600: 
601: if (!function_exists('__d')) {
602: 
603: /**
604:  * Allows you to override the current domain for a single message lookup.
605:  *
606:  * @param string $domain Domain
607:  * @param string $msg String to translate
608:  * @param mixed $args Array with arguments or multiple arguments in function
609:  * @return translated string
610:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__d
611:  */
612:     function __d($domain, $msg, $args = null) {
613:         if (!$msg) {
614:             return;
615:         }
616:         App::uses('I18n', 'I18n');
617:         $translated = I18n::translate($msg, null, $domain);
618:         if ($args === null && func_num_args() < 4) {
619:             return $translated;
620:         } elseif (!is_array($args)) {
621:             $args = array_slice(func_get_args(), 2);
622:         }
623: 
624:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
625:         return vsprintf($translated, $args);
626:     }
627: 
628: }
629: 
630: if (!function_exists('__dn')) {
631: 
632: /**
633:  * Allows you to override the current domain for a single plural message lookup.
634:  * Returns correct plural form of message identified by $singular and $plural for count $count
635:  * from domain $domain.
636:  *
637:  * @param string $domain Domain
638:  * @param string $singular Singular string to translate
639:  * @param string $plural Plural
640:  * @param int $count Count
641:  * @param mixed $args Array with arguments or multiple arguments in function
642:  * @return plural form of translated string
643:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__dn
644:  */
645:     function __dn($domain, $singular, $plural, $count, $args = null) {
646:         if (!$singular) {
647:             return;
648:         }
649:         App::uses('I18n', 'I18n');
650:         $translated = I18n::translate($singular, $plural, $domain, I18n::LC_MESSAGES, $count);
651:         if ($args === null && func_num_args() < 6) {
652:             return $translated;
653:         } elseif (!is_array($args)) {
654:             $args = array_slice(func_get_args(), 4);
655:         }
656: 
657:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
658:         return vsprintf($translated, $args);
659:     }
660: 
661: }
662: 
663: if (!function_exists('__dc')) {
664: 
665: /**
666:  * Allows you to override the current domain for a single message lookup.
667:  * It also allows you to specify a category.
668:  *
669:  * The category argument allows a specific category of the locale settings to be used for fetching a message.
670:  * Valid categories are: LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES and LC_ALL.
671:  *
672:  * Note that the category must be specified with a class constant of I18n, instead of the constant name. The values are:
673:  *
674:  * - LC_ALL       I18n::LC_ALL
675:  * - LC_COLLATE   I18n::LC_COLLATE
676:  * - LC_CTYPE     I18n::LC_CTYPE
677:  * - LC_MONETARY  I18n::LC_MONETARY
678:  * - LC_NUMERIC   I18n::LC_NUMERIC
679:  * - LC_TIME      I18n::LC_TIME
680:  * - LC_MESSAGES  I18n::LC_MESSAGES
681:  *
682:  * @param string $domain Domain
683:  * @param string $msg Message to translate
684:  * @param int $category Category
685:  * @param mixed $args Array with arguments or multiple arguments in function
686:  * @return translated string
687:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__dc
688:  */
689:     function __dc($domain, $msg, $category, $args = null) {
690:         if (!$msg) {
691:             return;
692:         }
693:         App::uses('I18n', 'I18n');
694:         $translated = I18n::translate($msg, null, $domain, $category);
695:         if ($args === null && func_num_args() < 5) {
696:             return $translated;
697:         } elseif (!is_array($args)) {
698:             $args = array_slice(func_get_args(), 3);
699:         }
700: 
701:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
702:         return vsprintf($translated, $args);
703:     }
704: 
705: }
706: 
707: if (!function_exists('__dcn')) {
708: 
709: /**
710:  * Allows you to override the current domain for a single plural message lookup.
711:  * It also allows you to specify a category.
712:  * Returns correct plural form of message identified by $singular and $plural for count $count
713:  * from domain $domain.
714:  *
715:  * The category argument allows a specific category of the locale settings to be used for fetching a message.
716:  * Valid categories are: LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES and LC_ALL.
717:  *
718:  * Note that the category must be specified with a class constant of I18n, instead of the constant name. The values are:
719:  *
720:  * - LC_ALL       I18n::LC_ALL
721:  * - LC_COLLATE   I18n::LC_COLLATE
722:  * - LC_CTYPE     I18n::LC_CTYPE
723:  * - LC_MONETARY  I18n::LC_MONETARY
724:  * - LC_NUMERIC   I18n::LC_NUMERIC
725:  * - LC_TIME      I18n::LC_TIME
726:  * - LC_MESSAGES  I18n::LC_MESSAGES
727:  *
728:  * @param string $domain Domain
729:  * @param string $singular Singular string to translate
730:  * @param string $plural Plural
731:  * @param int $count Count
732:  * @param int $category Category
733:  * @param mixed $args Array with arguments or multiple arguments in function
734:  * @return plural form of translated string
735:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__dcn
736:  */
737:     function __dcn($domain, $singular, $plural, $count, $category, $args = null) {
738:         if (!$singular) {
739:             return;
740:         }
741:         App::uses('I18n', 'I18n');
742:         $translated = I18n::translate($singular, $plural, $domain, $category, $count);
743:         if ($args === null && func_num_args() < 7) {
744:             return $translated;
745:         } elseif (!is_array($args)) {
746:             $args = array_slice(func_get_args(), 5);
747:         }
748: 
749:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
750:         return vsprintf($translated, $args);
751:     }
752: 
753: }
754: 
755: if (!function_exists('__c')) {
756: 
757: /**
758:  * The category argument allows a specific category of the locale settings to be used for fetching a message.
759:  * Valid categories are: LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES and LC_ALL.
760:  *
761:  * Note that the category must be specified with a class constant of I18n, instead of the constant name. The values are:
762:  *
763:  * - LC_ALL       I18n::LC_ALL
764:  * - LC_COLLATE   I18n::LC_COLLATE
765:  * - LC_CTYPE     I18n::LC_CTYPE
766:  * - LC_MONETARY  I18n::LC_MONETARY
767:  * - LC_NUMERIC   I18n::LC_NUMERIC
768:  * - LC_TIME      I18n::LC_TIME
769:  * - LC_MESSAGES  I18n::LC_MESSAGES
770:  *
771:  * @param string $msg String to translate
772:  * @param int $category Category
773:  * @param mixed $args Array with arguments or multiple arguments in function
774:  * @return translated string
775:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#__c
776:  */
777:     function __c($msg, $category, $args = null) {
778:         if (!$msg) {
779:             return;
780:         }
781:         App::uses('I18n', 'I18n');
782:         $translated = I18n::translate($msg, null, null, $category);
783:         if ($args === null && func_num_args() < 4) {
784:             return $translated;
785:         } elseif (!is_array($args)) {
786:             $args = array_slice(func_get_args(), 2);
787:         }
788: 
789:         $translated = preg_replace('/(?<!%)%(?![%\'\-+bcdeEfFgGosuxX\d\.])/', '%%', $translated);
790:         return vsprintf($translated, $args);
791:     }
792: 
793: }
794: 
795: if (!function_exists('LogError')) {
796: 
797: /**
798:  * Shortcut to Log::write.
799:  *
800:  * @param string $message Message to write to log
801:  * @return void
802:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#LogError
803:  */
804:     function LogError($message) {
805:         App::uses('CakeLog', 'Log');
806:         $bad = array("\n", "\r", "\t");
807:         $good = ' ';
808:         CakeLog::write('error', str_replace($bad, $good, $message));
809:     }
810: 
811: }
812: 
813: if (!function_exists('fileExistsInPath')) {
814: 
815: /**
816:  * Searches include path for files.
817:  *
818:  * @param string $file File to look for
819:  * @return Full path to file if exists, otherwise false
820:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#fileExistsInPath
821:  */
822:     function fileExistsInPath($file) {
823:         $paths = explode(PATH_SEPARATOR, ini_get('include_path'));
824:         foreach ($paths as $path) {
825:             $fullPath = $path . DS . $file;
826: 
827:             if (file_exists($fullPath)) {
828:                 return $fullPath;
829:             } elseif (file_exists($file)) {
830:                 return $file;
831:             }
832:         }
833:         return false;
834:     }
835: 
836: }
837: 
838: if (!function_exists('convertSlash')) {
839: 
840: /**
841:  * Convert forward slashes to underscores and removes first and last underscores in a string
842:  *
843:  * @param string $string String to convert
844:  * @return string with underscore remove from start and end of string
845:  * @link http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html#convertSlash
846:  */
847:     function convertSlash($string) {
848:         $string = trim($string, '/');
849:         $string = preg_replace('/\/\//', '/', $string);
850:         $string = str_replace('/', '_', $string);
851:         return $string;
852:     }
853: 
854: }
855: 
OpenHub
Rackspace
Rackspace
  • Business Solutions
  • Showcase
  • Documentation
  • Book
  • API
  • Videos
  • Reporting Security Issues
  • Privacy Policy
  • Logos & Trademarks
  • Community
  • Get Involved
  • Issues (GitHub)
  • Bakery
  • Featured Resources
  • Training
  • Meetups
  • My CakePHP
  • CakeFest
  • Newsletter
  • Linkedin
  • YouTube
  • Facebook
  • Twitter
  • Mastodon
  • Help & Support
  • Forum
  • Stack Overflow
  • Slack
  • Paid Support

Generated using CakePHP API Docs