<?php
namespace Cake\Core;
class App
{
public static function className($class, $type = '', $suffix = '')
{
if (strpos($class, '\\') !== false) {
return $class;
}
list($plugin, $name) = pluginSplit($class);
$base = $plugin ?: Configure::read('App.namespace');
$base = str_replace('/', '\\', rtrim($base, '\\'));
$fullname = '\\' . str_replace('/', '\\', $type . '\\' . $name) . $suffix;
if (static::_classExistsInBase($fullname, $base)) {
return $base . $fullname;
}
if ($plugin) {
return false;
}
if (static::_classExistsInBase($fullname, 'Cake')) {
return 'Cake' . $fullname;
}
return false;
}
public static function shortName($class, $type, $suffix = '')
{
$class = str_replace('\\', '/', $class);
$type = '/' . $type . '/';
$pos = strrpos($class, $type);
$pluginName = substr($class, 0, $pos);
$name = substr($class, $pos + strlen($type));
if ($suffix) {
$name = substr($name, 0, -strlen($suffix));
}
$nonPluginNamespaces = [
'Cake',
str_replace('\\', '/', Configure::read('App.namespace'))
];
if (in_array($pluginName, $nonPluginNamespaces)) {
return $name;
}
return $pluginName . '.' . $name;
}
protected static function _classExistsInBase($name, $namespace)
{
return class_exists($namespace . $name);
}
public static function path($type, $plugin = null)
{
if ($type === 'Plugin') {
return (array)Configure::read('App.paths.plugins');
}
if (empty($plugin) && $type === 'Locale') {
return (array)Configure::read('App.paths.locales');
}
if (empty($plugin) && $type === 'Template') {
return (array)Configure::read('App.paths.templates');
}
if (!empty($plugin)) {
return [Plugin::classPath($plugin) . $type . DIRECTORY_SEPARATOR];
}
return [APP . $type . DIRECTORY_SEPARATOR];
}
public static function core($type)
{
return [CAKE . str_replace('/', DIRECTORY_SEPARATOR, $type) . DIRECTORY_SEPARATOR];
}
}