|
Server IP : 10.2.73.233 / Your IP : 216.73.216.59 Web Server : Apache/2.4.59 (Debian) System : Linux polon 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : www-data ( 33) PHP Version : 5.6.40-64+0~20230107.71+debian10~1.gbp673146 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/ifk/web/assets/../prado4.3.2/Web/../ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
/**
* TApplicationComponent class
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link https://github.com/pradosoft/prado
* @license https://github.com/pradosoft/prado/blob/master/LICENSE
*/
namespace Prado;
use Prado\TApplicationMode;
/**
* TApplicationComponent class
*
* TApplicationComponent is the base class for all components that are
* application-related, such as controls, modules, services, etc.
*
* TApplicationComponent mainly defines a few properties that are shortcuts
* to some commonly used methods. The {@link getApplication Application}
* property gives the application instance that this component belongs to;
* {@link getService Service} gives the current running service;
* {@link getRequest Request}, {@link getResponse Response} and {@link getSession Session}
* return the request and response modules, respectively;
* And {@link getUser User} gives the current user instance.
*
* Besides, TApplicationComponent defines two shortcut methods for
* publishing private files: {@link publishAsset} and {@link publishFilePath}.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 3.0
*/
class TApplicationComponent extends \Prado\TComponent
{
public const APP_COMPONENT_FX_CACHE = 'prado:applicationcomponent:fxcache';
/**
* TApplicationComponents auto listen to global events.
*
* @return bool returns whether or not to listen.
*/
public function getAutoGlobalListen()
{
return true;
}
/**
* This caches the 'fx' events for PRADO classes in the application cache
* @param object $class
* @return string[] fx events from a specific class
*/
protected function getClassFxEvents($class)
{
$app = $this->getApplication();
$className = $cache = null;
if ($app && (($mode = $app->getMode()) === TApplicationMode::Normal || $mode === TApplicationMode::Performance) && ($cache = $app->getCache())) {
static $_classfx = null;
if ($_classfx === null) {
$_classfx = $cache->get(self::APP_COMPONENT_FX_CACHE) ?? [];
}
$className = get_class($class);
if (isset($_classfx[$className])) {
return $_classfx[$className];
}
}
$fx = parent::getClassFxEvents($class);
if ($cache) {
if ($pos = strrpos($className, '\\')) {
$baseClassName = substr($className, $pos + 1);
} else {
$baseClassName = $className;
}
if (isset(Prado::$classMap[$baseClassName])) {
$_classfx[$className] = $fx;
$cache->set(self::APP_COMPONENT_FX_CACHE, $_classfx);
}
}
return $fx;
}
/**
* @return \Prado\TApplication current application instance
*/
public function getApplication()
{
return Prado::getApplication();
}
/**
* @return \Prado\TService the current service
*/
public function getService()
{
return Prado::getApplication()->getService();
}
/**
* @return \Prado\Web\THttpRequest the current user request
*/
public function getRequest()
{
return Prado::getApplication()->getRequest();
}
/**
* @return \Prado\Web\THttpResponse the response
*/
public function getResponse()
{
return Prado::getApplication()->getResponse();
}
/**
* @return \Prado\Web\THttpSession user session
*/
public function getSession()
{
return Prado::getApplication()->getSession();
}
/**
* @return \Prado\Security\IUser information about the current user
*/
public function getUser()
{
return Prado::getApplication()->getUser();
}
/**
* Publishes a private asset and gets its URL.
* This method will publish a private asset (file or directory)
* and gets the URL to the asset. Note, if the asset refers to
* a directory, all contents under that directory will be published.
* Also note, it is recommended that you supply a class name as the second
* parameter to the method (e.g. publishAsset($assetPath,__CLASS__) ).
* By doing so, you avoid the issue that child classes may not work properly
* because the asset path will be relative to the directory containing the child class file.
*
* @param string $assetPath path of the asset that is relative to the directory containing the specified class file.
* @param string $className name of the class whose containing directory will be prepend to the asset path. If null, it means get_class($this).
* @return string URL to the asset path.
*/
public function publishAsset($assetPath, $className = null)
{
if ($className === null) {
$className = get_class($this);
}
$class = new \ReflectionClass($className);
$fullPath = dirname($class->getFileName()) . DIRECTORY_SEPARATOR . $assetPath;
return $this->publishFilePath($fullPath);
}
/**
* Publishes a file or directory and returns its URL.
* @param string $fullPath absolute path of the file or directory to be published
* @param mixed $checkTimestamp
* @return string URL to the published file or directory
*/
public function publishFilePath($fullPath, $checkTimestamp = false)
{
return Prado::getApplication()->getAssetManager()->publishFilePath($fullPath, $checkTimestamp);
}
}