primo commit
This commit is contained in:
110
libraries/fof40/Platform/Base/Filesystem.php
Normal file
110
libraries/fof40/Platform/Base/Filesystem.php
Normal file
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Platform\Base;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use FOF40\Container\Container;
|
||||
use FOF40\Platform\FilesystemInterface;
|
||||
|
||||
abstract class Filesystem implements FilesystemInterface
|
||||
{
|
||||
/**
|
||||
* The list of paths where platform class files will be looked for
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $paths = [];
|
||||
|
||||
/** @var Container The component container */
|
||||
protected $container;
|
||||
|
||||
/**
|
||||
* Public constructor.
|
||||
*
|
||||
* @param \FOF40\Container\Container $c The component container
|
||||
*/
|
||||
public function __construct(Container $c)
|
||||
{
|
||||
$this->container = $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursive function that will scan every directory unless it's in the ignore list. Files that aren't in the
|
||||
* ignore list are returned.
|
||||
*
|
||||
* @param string $path Folder where we should start looking
|
||||
* @param array $ignoreFolders Folder ignore list
|
||||
* @param array $ignoreFiles File ignore list
|
||||
*
|
||||
* @return array List of all the files
|
||||
*/
|
||||
protected static function scanDirectory(string $path, array $ignoreFolders = [], array $ignoreFiles = []): array
|
||||
{
|
||||
$return = [];
|
||||
|
||||
$handle = @opendir($path);
|
||||
|
||||
if (!$handle)
|
||||
{
|
||||
return $return;
|
||||
}
|
||||
|
||||
while (($file = readdir($handle)) !== false)
|
||||
{
|
||||
if ($file == '.' || $file == '..')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$fullpath = $path . '/' . $file;
|
||||
|
||||
if ((is_dir($fullpath) && in_array($file, $ignoreFolders)) || (is_file($fullpath) && in_array($file, $ignoreFiles)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_dir($fullpath))
|
||||
{
|
||||
$return = array_merge(self::scanDirectory($fullpath, $ignoreFolders, $ignoreFiles), $return);
|
||||
}
|
||||
else
|
||||
{
|
||||
$return[] = $path . '/' . $file;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the extension of a file name
|
||||
*
|
||||
* @param string $file The file name
|
||||
*
|
||||
* @return string The file extension
|
||||
*/
|
||||
public function getExt(string $file): string
|
||||
{
|
||||
$dot = strrpos($file, '.') + 1;
|
||||
|
||||
return substr($file, $dot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Strips the last extension off of a file name
|
||||
*
|
||||
* @param string $file The file name
|
||||
*
|
||||
* @return string The file name without the extension
|
||||
*/
|
||||
public function stripExt(string $file): string
|
||||
{
|
||||
return preg_replace('#\.[^.]*$#', '', $file);
|
||||
}
|
||||
}
|
||||
418
libraries/fof40/Platform/Base/Platform.php
Normal file
418
libraries/fof40/Platform/Base/Platform.php
Normal file
@ -0,0 +1,418 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Platform\Base;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use Exception;
|
||||
use FOF40\Container\Container;
|
||||
use FOF40\Input\Input;
|
||||
use FOF40\Platform\PlatformInterface;
|
||||
use Joomla\CMS\Document\Document;
|
||||
use Joomla\CMS\User\User;
|
||||
|
||||
/**
|
||||
* Abstract implementation of the Platform integration
|
||||
*
|
||||
* @package FOF40\Platform\Base
|
||||
*/
|
||||
abstract class Platform implements PlatformInterface
|
||||
{
|
||||
/** @var Container The component container */
|
||||
protected $container;
|
||||
|
||||
|
||||
/** @var bool Are plugins allowed to run in CLI mode? */
|
||||
protected $allowPluginsInCli = false;
|
||||
|
||||
/**
|
||||
* Public constructor.
|
||||
*
|
||||
* @param Container $c The component container
|
||||
*/
|
||||
public function __construct(Container $c)
|
||||
{
|
||||
$this->container = $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base (root) directories for a given component, i.e the application
|
||||
* which is running inside our main application (CMS, web app).
|
||||
*
|
||||
* The return is a table with the following keys:
|
||||
* * main The normal location of component files. For a back-end Joomla!
|
||||
* component this is the administrator/components/com_example
|
||||
* directory.
|
||||
* * alt The alternate location of component files. For a back-end
|
||||
* Joomla! component this is the front-end directory, e.g.
|
||||
* components/com_example
|
||||
* * site The location of the component files serving the public part of
|
||||
* the application.
|
||||
* * admin The location of the component files serving the administrative
|
||||
* part of the application.
|
||||
*
|
||||
* All paths MUST be absolute. All four paths MAY be the same if the
|
||||
* platform doesn't make a distinction between public and private parts,
|
||||
* or when the component does not provide both a public and private part.
|
||||
* All of the directories MUST be defined and non-empty.
|
||||
*
|
||||
* @param string $component The name of the component. For Joomla! this
|
||||
* is something like "com_example"
|
||||
*
|
||||
* @return array A hash array with keys main, alt, site and admin.
|
||||
*/
|
||||
public function getComponentBaseDirs(string $component): array
|
||||
{
|
||||
return [
|
||||
'main' => '',
|
||||
'alt' => '',
|
||||
'site' => '',
|
||||
'admin' => '',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the application's template name
|
||||
*
|
||||
* @param null|array $params An optional associative array of configuration settings
|
||||
*
|
||||
* @return string The template name. System is the fallback.
|
||||
*/
|
||||
public function getTemplate(?array $params = null): string
|
||||
{
|
||||
return 'system';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get application-specific suffixes to use with template paths. This allows
|
||||
* you to look for view template overrides based on the application version.
|
||||
*
|
||||
* @return array A plain array of suffixes to try in template names
|
||||
*/
|
||||
public function getTemplateSuffixes(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the absolute path to the application's template overrides
|
||||
* directory for a specific component. We will use it to look for template
|
||||
* files instead of the regular component directories. If the application
|
||||
* does not have such a thing as template overrides return an empty string.
|
||||
*
|
||||
* @param string $component The name of the component for which to fetch the overrides
|
||||
* @param bool $absolute Should I return an absolute or relative path?
|
||||
*
|
||||
* @return string The path to the template overrides directory
|
||||
*/
|
||||
public function getTemplateOverridePath(string $component, bool $absolute = true): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the translation files for a given component.
|
||||
*
|
||||
* @param string $component The name of the component. For Joomla! this
|
||||
* is something like "com_example"
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function loadTranslations(string $component): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* By default FOF will only use the Controller's onBefore* methods to
|
||||
* perform user authorisation. In some cases, like the Joomla! back-end,
|
||||
* you also need to perform component-wide user authorisation in the
|
||||
* Dispatcher. This method MUST implement this authorisation check. If you
|
||||
* do not need this in your platform, please always return true.
|
||||
*
|
||||
* @param string $component The name of the component.
|
||||
*
|
||||
* @return bool True to allow loading the component, false to halt loading
|
||||
*/
|
||||
public function authorizeAdmin(string $component): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a user object.
|
||||
*
|
||||
* @param integer $id The user ID to load. Skip or use null to retrieve
|
||||
* the object for the currently logged in user.
|
||||
*
|
||||
* @return User The User object for the specified user
|
||||
*/
|
||||
public function getUser(?int $id = null): User
|
||||
{
|
||||
return new User();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Document object which handles this component's response. You
|
||||
* may also return null and FOF will a. try to figure out the output type by
|
||||
* examining the "format" input parameter (or fall back to "html") and b.
|
||||
* FOF will not attempt to load CSS and Javascript files (as it doesn't make
|
||||
* sense if there's no Document to handle them).
|
||||
*
|
||||
* @return Document|null
|
||||
*/
|
||||
public function getDocument(): ?Document
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method will try retrieving a variable from the request (input) data.
|
||||
* If it doesn't exist it will be loaded from the user state, typically
|
||||
* stored in the session. If it doesn't exist there either, the $default
|
||||
* value will be used. If $setUserState is set to true, the retrieved
|
||||
* variable will be stored in the user session.
|
||||
*
|
||||
* @param string $key The user state key for the variable
|
||||
* @param string $request The request variable name for the variable
|
||||
* @param Input $input The Input object with the request (input) data
|
||||
* @param mixed $default The default value. Default: null
|
||||
* @param string $type The filter type for the variable data. Default: none (no filtering)
|
||||
* @param bool $setUserState Should I set the user state with the fetched value?
|
||||
*
|
||||
* @return mixed The value of the variable
|
||||
*/
|
||||
public function getUserStateFromRequest(string $key, string $request, Input $input, $default = null, string $type = 'none', bool $setUserState = true)
|
||||
{
|
||||
return $input->get($request, $default, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load plugins of a specific type. Obviously this seems to only be required
|
||||
* in the Joomla! CMS itself.
|
||||
*
|
||||
* @param string $type The type of the plugins to be loaded
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function importPlugin(string $type): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute plugins (system-level triggers) and fetch back an array with
|
||||
* their return values.
|
||||
*
|
||||
* @param string $event The event (trigger) name, e.g. onBeforeScratchMyEar
|
||||
* @param array $data A hash array of data sent to the plugins as part of the trigger
|
||||
*
|
||||
* @return array A simple array containing the results of the plugins triggered
|
||||
*/
|
||||
public function runPlugins(string $event, array $data = []): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an ACL check. Please note that FOF uses by default the Joomla!
|
||||
* CMS convention for ACL privileges, e.g core.edit for the edit privilege.
|
||||
* If your platform uses different conventions you'll have to override the
|
||||
* FOF defaults using fof.xml or by specialising the controller.
|
||||
*
|
||||
* @param string $action The ACL privilege to check, e.g. core.edit
|
||||
* @param string|null $assetname The asset name to check, typically the component's name
|
||||
*
|
||||
* @return bool True if the user is allowed this action
|
||||
*/
|
||||
public function authorise(string $action, ?string $assetname = null): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this the administrative section of the component?
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isBackend(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this the public section of the component?
|
||||
*
|
||||
* @param bool $strict True to only confirm if we're under the 'site' client. False to confirm if we're under
|
||||
* either 'site' or 'api' client (both are front-end access). The default is false which
|
||||
* causes the method to return true when the application is either 'client' (HTML frontend)
|
||||
* or 'api' (JSON frontend).
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isFrontend(bool $strict = false): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this a component running in a CLI application?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isCli(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this a component running under the API application?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isApi(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves something to the cache. This is supposed to be used for system-wide
|
||||
* FOF data, not application data.
|
||||
*
|
||||
* @param string $key The key of the data to save
|
||||
* @param string $content The actual data to save
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function setCache(string $key, string $content): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves data from the cache. This is supposed to be used for system-side
|
||||
* FOF data, not application data.
|
||||
*
|
||||
* @param string $key The key of the data to retrieve
|
||||
* @param string|null $default The default value to return if the key is not found or the cache is not populated
|
||||
*
|
||||
* @return string|null The cached value
|
||||
*/
|
||||
public function getCache(string $key, ?string $default = null): ?string
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the global FOF cache enabled?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isGlobalFOFCacheEnabled(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the cache of system-wide FOF data. You are supposed to call this in
|
||||
* your components' installation script post-installation and post-upgrade
|
||||
* methods or whenever you are modifying the structure of database tables
|
||||
* accessed by FOF. Please note that FOF's cache never expires and is not
|
||||
* purged by Joomla!. You MUST use this method to manually purge the cache.
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function clearCache(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* logs in a user
|
||||
*
|
||||
* @param array $authInfo Authentication information
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function loginUser(array $authInfo): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* logs out a user
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function logoutUser(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a deprecated practice. In Joomla! this results in the $message being output in the
|
||||
* deprecated log file, found in your site's log directory.
|
||||
*
|
||||
* @param string $message The deprecated practice log message
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logDeprecated(string $message): void
|
||||
{
|
||||
// The default implementation does nothing. Override this in your platform classes.
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
public function logUserAction($title, string $logText, string $extension, User $user = null): void
|
||||
{
|
||||
// The default implementation does nothing. Override this in your platform classes.
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version number string of the CMS/application we're running in
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 2.1.2
|
||||
*/
|
||||
public function getPlatformVersion(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an exception in a way that results to an error page.
|
||||
*
|
||||
* @param Exception $exception The exception to handle
|
||||
*
|
||||
* @throws Exception Possibly rethrown exception
|
||||
*/
|
||||
public function showErrorPage(Exception $exception): void
|
||||
{
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
/**
|
||||
* Are plugins allowed to run in CLI mode?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isAllowPluginsInCli(): bool
|
||||
{
|
||||
return $this->allowPluginsInCli;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether plugins are allowed to run in CLI mode
|
||||
*
|
||||
* @param bool $allowPluginsInCli
|
||||
*/
|
||||
public function setAllowPluginsInCli(bool $allowPluginsInCli): void
|
||||
{
|
||||
$this->allowPluginsInCli = $allowPluginsInCli;
|
||||
}
|
||||
}
|
||||
167
libraries/fof40/Platform/FilesystemInterface.php
Normal file
167
libraries/fof40/Platform/FilesystemInterface.php
Normal file
@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Platform;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use FOF40\Container\Container;
|
||||
|
||||
interface FilesystemInterface
|
||||
{
|
||||
/**
|
||||
* Public constructor.
|
||||
*
|
||||
* @param \FOF40\Container\Container $c The component container
|
||||
*/
|
||||
public function __construct(Container $c);
|
||||
|
||||
/**
|
||||
* Does the file exists?
|
||||
*
|
||||
* @param $path string Path to the file to test
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function fileExists(string $path): bool;
|
||||
|
||||
/**
|
||||
* Delete a file or array of files
|
||||
*
|
||||
* @param string|array $file The file name or an array of file names
|
||||
*
|
||||
* @return bool True on success
|
||||
*
|
||||
*/
|
||||
public function fileDelete($file): bool;
|
||||
|
||||
/**
|
||||
* Copies a file
|
||||
*
|
||||
* @param string $src The path to the source file
|
||||
* @param string $dest The path to the destination file
|
||||
* @param string $path An optional base path to prefix to the file names
|
||||
* @param bool $use_streams True to use streams
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function fileCopy(string $src, string $dest, ?string $path = null, bool $use_streams = false): bool;
|
||||
|
||||
/**
|
||||
* Write contents to a file
|
||||
*
|
||||
* @param string $file The full file path
|
||||
* @param string &$buffer The buffer to write
|
||||
* @param bool $use_streams Use streams
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function fileWrite(string $file, string &$buffer, bool $use_streams = false): bool;
|
||||
|
||||
/**
|
||||
* Checks for snooping outside of the file system root.
|
||||
*
|
||||
* @param string $path A file system path to check.
|
||||
*
|
||||
* @return string A cleaned version of the path or exit on error.
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function pathCheck(string $path): string;
|
||||
|
||||
/**
|
||||
* Function to strip additional / or \ in a path name.
|
||||
*
|
||||
* @param string $path The path to clean.
|
||||
* @param string $ds Directory separator (optional).
|
||||
*
|
||||
* @return string The cleaned path.
|
||||
*
|
||||
* @throws \UnexpectedValueException
|
||||
*/
|
||||
public function pathClean(string $path, string $ds = DIRECTORY_SEPARATOR): string;
|
||||
|
||||
/**
|
||||
* Searches the directory paths for a given file.
|
||||
*
|
||||
* @param string|array $paths An path string or array of path strings to search in
|
||||
* @param string $file The file name to look for.
|
||||
*
|
||||
* @return string|null The full path and file name for the target file; null if the file is not found in any of the paths.
|
||||
*/
|
||||
public function pathFind($paths, string $file): ?string;
|
||||
|
||||
/**
|
||||
* Wrapper for the standard file_exists function
|
||||
*
|
||||
* @param string $path Folder name relative to installation dir
|
||||
*
|
||||
* @return bool True if path is a folder
|
||||
*/
|
||||
public function folderExists(string $path): bool;
|
||||
|
||||
/**
|
||||
* Utility function to read the files in a folder.
|
||||
*
|
||||
* @param string $path The path of the folder to read.
|
||||
* @param string $filter A filter for file names.
|
||||
* @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the maximum depth.
|
||||
* @param bool $full True to return the full path to the file.
|
||||
* @param array $exclude Array with names of files which should not be shown in the result.
|
||||
* @param array $excludefilter Array of filter to exclude
|
||||
*
|
||||
* @return array Files in the given folder.
|
||||
*/
|
||||
public function folderFiles(string $path, string $filter = '.', bool $recurse = false, bool $full = false,
|
||||
array $exclude = [
|
||||
'.svn', 'CVS', '.DS_Store', '__MACOSX',
|
||||
], array $excludefilter = ['^\..*', '.*~'], bool $naturalSort = false): array;
|
||||
|
||||
/**
|
||||
* Utility function to read the folders in a folder.
|
||||
*
|
||||
* @param string $path The path of the folder to read.
|
||||
* @param string $filter A filter for folder names.
|
||||
* @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the maximum depth.
|
||||
* @param bool $full True to return the full path to the folders.
|
||||
* @param array $exclude Array with names of folders which should not be shown in the result.
|
||||
* @param array $excludefilter Array with regular expressions matching folders which should not be shown in the result.
|
||||
*
|
||||
* @return array Folders in the given folder.
|
||||
*/
|
||||
public function folderFolders(string $path, string $filter = '.', bool $recurse = false, bool $full = false, array $exclude = [
|
||||
'.svn', 'CVS', '.DS_Store', '__MACOSX',
|
||||
], array $excludefilter = ['^\..*']): array;
|
||||
|
||||
/**
|
||||
* Create a folder -- and all necessary parent folders.
|
||||
*
|
||||
* @param string $path A path to create from the base path.
|
||||
* @param integer $mode Directory permissions to set for folders created. 0755 by default.
|
||||
*
|
||||
* @return bool True if successful.
|
||||
*/
|
||||
public function folderCreate(string $path = '', int $mode = 0755): bool;
|
||||
|
||||
/**
|
||||
* Gets the extension of a file name
|
||||
*
|
||||
* @param string $file The file name
|
||||
*
|
||||
* @return string The file extension
|
||||
*/
|
||||
public function getExt(string $file): string;
|
||||
|
||||
/**
|
||||
* Strips the last extension off of a file name
|
||||
*
|
||||
* @param string $file The file name
|
||||
*
|
||||
* @return string The file name without the extension
|
||||
*/
|
||||
public function stripExt(string $file): string;
|
||||
}
|
||||
243
libraries/fof40/Platform/Joomla/Filesystem.php
Normal file
243
libraries/fof40/Platform/Joomla/Filesystem.php
Normal file
@ -0,0 +1,243 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Platform\Joomla;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use FOF40\Platform\Base\Filesystem as BaseFilesystem;
|
||||
use Joomla\CMS\Filesystem\File;
|
||||
use Joomla\CMS\Filesystem\Folder;
|
||||
use Joomla\CMS\Filesystem\Path;
|
||||
|
||||
/**
|
||||
* Abstraction for Joomla! filesystem API
|
||||
*/
|
||||
class Filesystem extends BaseFilesystem
|
||||
{
|
||||
/**
|
||||
* Does the file exists?
|
||||
*
|
||||
* @param $path string Path to the file to test
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function fileExists(string $path): bool
|
||||
{
|
||||
return File::exists($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a file or array of files
|
||||
*
|
||||
* @param mixed $file The file name or an array of file names
|
||||
*
|
||||
* @return bool True on success
|
||||
*
|
||||
*/
|
||||
public function fileDelete($file): bool
|
||||
{
|
||||
if (!is_string($file) && !is_array($file))
|
||||
{
|
||||
throw new \InvalidArgumentException(sprintf('%s::%s -- $file expects a string or an array', __CLASS__, __METHOD__));
|
||||
}
|
||||
|
||||
return File::delete($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies a file
|
||||
*
|
||||
* @param string $src The path to the source file
|
||||
* @param string $dest The path to the destination file
|
||||
* @param string $path An optional base path to prefix to the file names
|
||||
* @param bool $use_streams True to use streams
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function fileCopy(string $src, string $dest, ?string $path = null, bool $use_streams = false): bool
|
||||
{
|
||||
return File::copy($src, $dest, $path, $use_streams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write contents to a file
|
||||
*
|
||||
* @param string $file The full file path
|
||||
* @param string &$buffer The buffer to write
|
||||
* @param bool $use_streams Use streams
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function fileWrite(string $file, string &$buffer, bool $use_streams = false): bool
|
||||
{
|
||||
return File::write($file, $buffer, $use_streams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for snooping outside of the file system root.
|
||||
*
|
||||
* @param string $path A file system path to check.
|
||||
*
|
||||
* @return string A cleaned version of the path or exit on error.
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function pathCheck(string $path): string
|
||||
{
|
||||
return Path::check($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to strip additional / or \ in a path name.
|
||||
*
|
||||
* @param string $path The path to clean.
|
||||
* @param string $ds Directory separator (optional).
|
||||
*
|
||||
* @return string The cleaned path.
|
||||
*
|
||||
* @throws \UnexpectedValueException
|
||||
*/
|
||||
public function pathClean(string $path, string $ds = DIRECTORY_SEPARATOR): string
|
||||
{
|
||||
return Path::clean($path, $ds);
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches the directory paths for a given file.
|
||||
*
|
||||
* @param mixed $paths An path string or array of path strings to search in
|
||||
* @param string $file The file name to look for.
|
||||
*
|
||||
* @return string|null The full path and file name for the target file, or bool false if the file is not found
|
||||
* in any of the paths.
|
||||
*/
|
||||
public function pathFind($paths, string $file): ?string
|
||||
{
|
||||
if (!is_string($paths) && !is_array($paths))
|
||||
{
|
||||
throw new \InvalidArgumentException(sprintf('%s::%s -- $paths expects a string or an array', __CLASS__, __METHOD__));
|
||||
}
|
||||
|
||||
$ret = Path::find($paths, $file);
|
||||
|
||||
if (($ret === false) || ($ret === ''))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for the standard file_exists function
|
||||
*
|
||||
* @param string $path Folder name relative to installation dir
|
||||
*
|
||||
* @return bool True if path is a folder
|
||||
*/
|
||||
public function folderExists(string $path): bool
|
||||
{
|
||||
try
|
||||
{
|
||||
return Folder::exists($path);
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to read the files in a folder.
|
||||
*
|
||||
* @param string $path The path of the folder to read.
|
||||
* @param string $filter A filter for file names.
|
||||
* @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the
|
||||
* maximum depth.
|
||||
* @param bool $full True to return the full path to the file.
|
||||
* @param array $exclude Array with names of files which should not be shown in the result.
|
||||
* @param array $excludefilter Array of filter to exclude
|
||||
* @param bool $naturalSort False for asort, true for natsort
|
||||
* @param bool $naturalSort False for asort, true for natsort
|
||||
*
|
||||
* @return array Files in the given folder.
|
||||
*/
|
||||
public function folderFiles(string $path, string $filter = '.', bool $recurse = false, bool $full = false,
|
||||
array $exclude = [
|
||||
'.svn', 'CVS', '.DS_Store', '__MACOSX',
|
||||
], array $excludefilter = ['^\..*', '.*~'], bool $naturalSort = false): array
|
||||
{
|
||||
// JFolder throws nonsense errors if the path is not a folder
|
||||
try
|
||||
{
|
||||
$path = Path::clean($path);
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!@is_dir($path))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
// Now call JFolder
|
||||
return Folder::files($path, $filter, $recurse, $full, $exclude, $excludefilter, $naturalSort);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to read the folders in a folder.
|
||||
*
|
||||
* @param string $path The path of the folder to read.
|
||||
* @param string $filter A filter for folder names.
|
||||
* @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the
|
||||
* maximum depth.
|
||||
* @param bool $full True to return the full path to the folders.
|
||||
* @param array $exclude Array with names of folders which should not be shown in the result.
|
||||
* @param array $excludefilter Array with regular expressions matching folders which should not be shown in
|
||||
* the result.
|
||||
*
|
||||
* @return array Folders in the given folder.
|
||||
*/
|
||||
public function folderFolders(string $path, string $filter = '.', bool $recurse = false, bool $full = false, array $exclude = [
|
||||
'.svn', 'CVS', '.DS_Store', '__MACOSX',
|
||||
], array $excludefilter = ['^\..*']): array
|
||||
{
|
||||
// JFolder throws idiotic errors if the path is not a folder
|
||||
try
|
||||
{
|
||||
$path = Path::clean($path);
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!@is_dir($path))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
// Now call JFolder
|
||||
return Folder::folders($path, $filter, $recurse, $full, $exclude, $excludefilter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a folder -- and all necessary parent folders.
|
||||
*
|
||||
* @param string $path A path to create from the base path.
|
||||
* @param integer $mode Directory permissions to set for folders created. 0755 by default.
|
||||
*
|
||||
* @return bool True if successful.
|
||||
*/
|
||||
public function folderCreate(string $path = '', int $mode = 0755): bool
|
||||
{
|
||||
return Folder::create($path, $mode);
|
||||
}
|
||||
}
|
||||
1503
libraries/fof40/Platform/Joomla/Platform.php
Normal file
1503
libraries/fof40/Platform/Joomla/Platform.php
Normal file
File diff suppressed because it is too large
Load Diff
552
libraries/fof40/Platform/PlatformInterface.php
Normal file
552
libraries/fof40/Platform/PlatformInterface.php
Normal file
@ -0,0 +1,552 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Platform;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use DateTimeZone;
|
||||
use Exception;
|
||||
use FOF40\Container\Container;
|
||||
use FOF40\Date\Date;
|
||||
use FOF40\Input\Input;
|
||||
use JDatabaseDriver;
|
||||
use Joomla\CMS\Document\Document;
|
||||
use Joomla\CMS\Language\Language;
|
||||
use Joomla\CMS\User\User;
|
||||
use Joomla\Registry\Registry;
|
||||
use JsonSerializable;
|
||||
|
||||
/**
|
||||
* Part of the FOF Platform Abstraction Layer. It implements everything that
|
||||
* depends on the platform FOF is running under, e.g. the Joomla! CMS front-end,
|
||||
* the Joomla! CMS back-end, a CLI Joomla! Platform app, a bespoke Joomla!
|
||||
* Platform / Framework web application and so on.
|
||||
*/
|
||||
interface PlatformInterface
|
||||
{
|
||||
/**
|
||||
* Public constructor.
|
||||
*
|
||||
* @param Container $c The component container
|
||||
*/
|
||||
public function __construct(Container $c);
|
||||
|
||||
/**
|
||||
* Checks if the current script is run inside a valid CMS execution
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function checkExecution(): bool;
|
||||
|
||||
/**
|
||||
* Raises an error, using the logic requested by the CMS (PHP Exception or dedicated class)
|
||||
*
|
||||
* @param integer $code
|
||||
* @param string $message
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws Exception
|
||||
*
|
||||
* @deprecated 5.0
|
||||
*/
|
||||
public function raiseError(int $code, string $message): void;
|
||||
|
||||
/**
|
||||
* Returns the version number string of the CMS/application we're running in
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 2.1.2
|
||||
*/
|
||||
public function getPlatformVersion(): string;
|
||||
|
||||
/**
|
||||
* Returns absolute path to directories used by the containing CMS/application.
|
||||
*
|
||||
* The return is a table with the following key:
|
||||
* * root Path to the site root
|
||||
* * public Path to the public area of the site
|
||||
* * admin Path to the administrative area of the site
|
||||
* * tmp Path to the temp directory
|
||||
* * log Path to the log directory
|
||||
*
|
||||
* @return array A hash array with keys root, public, admin, tmp and log.
|
||||
*/
|
||||
public function getPlatformBaseDirs(): array;
|
||||
|
||||
/**
|
||||
* Returns the base (root) directories for a given component, i.e the application
|
||||
* which is running inside our main application (CMS, web app).
|
||||
*
|
||||
* The return is a table with the following keys:
|
||||
* * main The normal location of component files. For a back-end Joomla!
|
||||
* component this is the administrator/components/com_example
|
||||
* directory.
|
||||
* * alt The alternate location of component files. For a back-end
|
||||
* Joomla! component this is the front-end directory, e.g.
|
||||
* components/com_example
|
||||
* * site The location of the component files serving the public part of
|
||||
* the application.
|
||||
* * admin The location of the component files serving the administrative
|
||||
* part of the application.
|
||||
*
|
||||
* All paths MUST be absolute. All four paths MAY be the same if the
|
||||
* platform doesn't make a distinction between public and private parts,
|
||||
* or when the component does not provide both a public and private part.
|
||||
* All of the directories MUST be defined and non-empty.
|
||||
*
|
||||
* @param string $component The name of the component. For Joomla! this
|
||||
* is something like "com_example"
|
||||
*
|
||||
* @return array A hash array with keys main, alt, site and admin.
|
||||
*/
|
||||
public function getComponentBaseDirs(string $component): array;
|
||||
|
||||
/**
|
||||
* Returns the application's template name
|
||||
*
|
||||
* @param null|array $params An optional associative array of configuration settings
|
||||
*
|
||||
* @return string The template name. "system" is the fallback.
|
||||
*/
|
||||
public function getTemplate(?array $params = null): string;
|
||||
|
||||
/**
|
||||
* Get application-specific suffixes to use with template paths. This allows
|
||||
* you to look for view template overrides based on the application version.
|
||||
*
|
||||
* @return array A plain array of suffixes to try in template names
|
||||
*/
|
||||
public function getTemplateSuffixes(): array;
|
||||
|
||||
/**
|
||||
* Return the absolute path to the application's template overrides
|
||||
* directory for a specific component. We will use it to look for template
|
||||
* files instead of the regular component directories. If the application
|
||||
* does not have such a thing as template overrides return an empty string.
|
||||
*
|
||||
* @param string $component The name of the component for which to fetch the overrides
|
||||
* @param bool $absolute Should I return an absolute or relative path?
|
||||
*
|
||||
* @return string The path to the template overrides directory
|
||||
*/
|
||||
public function getTemplateOverridePath(string $component, bool $absolute = true): string;
|
||||
|
||||
/**
|
||||
* Load the translation files for a given component.
|
||||
*
|
||||
* @param string $component The name of the component, e.g. "com_example"
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function loadTranslations(string $component): void;
|
||||
|
||||
/**
|
||||
* By default FOF will only use the Controller's onBefore* methods to
|
||||
* perform user authorisation. In some cases, like the Joomla! back-end,
|
||||
* you also need to perform component-wide user authorisation in the
|
||||
* Dispatcher. This method MUST implement this authorisation check. If you
|
||||
* do not need this in your platform, please always return true.
|
||||
*
|
||||
* @param string $component The name of the component.
|
||||
*
|
||||
* @return bool True to allow loading the component, false to halt loading
|
||||
*/
|
||||
public function authorizeAdmin(string $component): bool;
|
||||
|
||||
/**
|
||||
* This method will try retrieving a variable from the request (input) data.
|
||||
* If it doesn't exist it will be loaded from the user state, typically
|
||||
* stored in the session. If it doesn't exist there either, the $default
|
||||
* value will be used. If $setUserState is set to true, the retrieved
|
||||
* variable will be stored in the user session.
|
||||
*
|
||||
* @param string $key The user state key for the variable
|
||||
* @param string $request The request variable name for the variable
|
||||
* @param Input $input The Input object with the request (input) data
|
||||
* @param mixed $default The default value. Default: null
|
||||
* @param string $type The filter type for the variable data. Default: none (no filtering)
|
||||
* @param bool $setUserState Should I set the user state with the fetched value?
|
||||
*
|
||||
* @return mixed The value of the variable
|
||||
*/
|
||||
public function getUserStateFromRequest(string $key, string $request, Input $input, $default = null, string $type = 'none', bool $setUserState = true);
|
||||
|
||||
/**
|
||||
* Load plugins of a specific type. Obviously this seems to only be required
|
||||
* in the Joomla! CMS itself.
|
||||
*
|
||||
* @param string $type The type of the plugins to be loaded
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function importPlugin(string $type): void;
|
||||
|
||||
/**
|
||||
* Execute plugins (system-level triggers) and fetch back an array with
|
||||
* their return values.
|
||||
*
|
||||
* @param string $event The event (trigger) name, e.g. onBeforeScratchMyEar
|
||||
* @param array $data A hash array of data sent to the plugins as part of the trigger
|
||||
*
|
||||
* @return array A simple array containing the results of the plugins triggered
|
||||
*/
|
||||
public function runPlugins(string $event, array $data = []): array;
|
||||
|
||||
/**
|
||||
* Perform an ACL check. Please note that FOF uses by default the Joomla!
|
||||
* CMS convention for ACL privileges, e.g core.edit for the edit privilege.
|
||||
* If your platform uses different conventions you'll have to override the
|
||||
* FOF defaults using fof.xml or by specialising the controller.
|
||||
*
|
||||
* @param string $action The ACL privilege to check, e.g. core.edit
|
||||
* @param string|null $assetname The asset name to check, typically the component's name
|
||||
*
|
||||
* @return bool True if the user is allowed this action
|
||||
*/
|
||||
public function authorise(string $action, ?string $assetname = null): bool;
|
||||
|
||||
/**
|
||||
* Returns a user object.
|
||||
*
|
||||
* @param integer $id The user ID to load. Skip or use null to retrieve
|
||||
* the object for the currently logged in user.
|
||||
*
|
||||
* @return User The User object for the specified user
|
||||
*/
|
||||
public function getUser(?int $id = null): User;
|
||||
|
||||
/**
|
||||
* Returns the Document object which handles this component's response. You
|
||||
* may also return null and FOF will a. try to figure out the output type by
|
||||
* examining the "format" input parameter (or fall back to "html") and b.
|
||||
* FOF will not attempt to load CSS and Javascript files (as it doesn't make
|
||||
* sense if there's no Document to handle them).
|
||||
*
|
||||
* @return Document|null
|
||||
*/
|
||||
public function getDocument(): ?Document;
|
||||
|
||||
/**
|
||||
* Returns an object to handle dates
|
||||
*
|
||||
* @param mixed $time The initial time
|
||||
* @param DateTimeZone|string|null $tzOffset The timezone offset
|
||||
* @param bool $locale Should I try to load a specific class for current language?
|
||||
*
|
||||
* @return Date object
|
||||
*/
|
||||
public function getDate(?string $time = 'now', $tzOffset = null, $locale = true): Date;
|
||||
|
||||
/**
|
||||
* Return the Language instance of the CMS/application
|
||||
*
|
||||
* @return Language
|
||||
*/
|
||||
public function getLanguage(): Language;
|
||||
|
||||
/**
|
||||
* Returns the database driver object of the CMS/application
|
||||
*
|
||||
* @return JDatabaseDriver
|
||||
*/
|
||||
public function getDbo(): JDatabaseDriver;
|
||||
|
||||
/**
|
||||
* Is this the administrative section of the component?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isBackend(): bool;
|
||||
|
||||
/**
|
||||
* Is this the public section of the component?
|
||||
*
|
||||
* @param bool $strict True to only confirm if we're under the 'site' client. False to confirm if we're under
|
||||
* either 'site' or 'api' client (both are front-end access). The default is false which
|
||||
* causes the method to return true when the application is either 'client' (HTML frontend)
|
||||
* or 'api' (JSON frontend).
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isFrontend(bool $strict = false): bool;
|
||||
|
||||
/**
|
||||
* Is this a component running in a CLI application?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isCli(): bool;
|
||||
|
||||
/**
|
||||
* Is this a component running in an API application?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isApi(): bool;
|
||||
|
||||
/**
|
||||
* Saves something to the cache. This is supposed to be used for system-wide
|
||||
* FOF data, not application data.
|
||||
*
|
||||
* @param string $key The key of the data to save
|
||||
* @param string $content The actual data to save
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function setCache(string $key, string $content): bool;
|
||||
|
||||
/**
|
||||
* Retrieves data from the cache. This is supposed to be used for system-side
|
||||
* FOF data, not application data.
|
||||
*
|
||||
* @param string $key The key of the data to retrieve
|
||||
* @param string|null $default The default value to return if the key is not found or the cache is not populated
|
||||
*
|
||||
* @return string|null The cached value
|
||||
*/
|
||||
public function getCache(string $key, ?string $default = null): ?string;
|
||||
|
||||
/**
|
||||
* Clears the cache of system-wide FOF data. You are supposed to call this in
|
||||
* your components' installation script post-installation and post-upgrade
|
||||
* methods or whenever you are modifying the structure of database tables
|
||||
* accessed by FOF. Please note that FOF's cache never expires and is not
|
||||
* purged by Joomla!. You MUST use this method to manually purge the cache.
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function clearCache(): bool;
|
||||
|
||||
/**
|
||||
* Returns an object that holds the configuration of the current site.
|
||||
*
|
||||
* @return Registry
|
||||
*/
|
||||
public function getConfig(): Registry;
|
||||
|
||||
/**
|
||||
* Is the global FOF cache enabled?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isGlobalFOFCacheEnabled(): bool;
|
||||
|
||||
/**
|
||||
* logs in a user
|
||||
*
|
||||
* @param array $authInfo Authentication information
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function loginUser(array $authInfo): bool;
|
||||
|
||||
/**
|
||||
* logs out a user
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function logoutUser(): bool;
|
||||
|
||||
/**
|
||||
* Add a log file for FOF
|
||||
*
|
||||
* @param string $file
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logAddLogger($file): void;
|
||||
|
||||
/**
|
||||
* Logs a deprecated practice. In Joomla! this results in the $message being output in the
|
||||
* deprecated log file, found in your site's log directory.
|
||||
*
|
||||
* @param string $message The deprecated practice log message
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logDeprecated(string $message): void;
|
||||
|
||||
/**
|
||||
* Adds a message to the application's debug log
|
||||
*
|
||||
* @param string $message
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logDebug(string $message): void;
|
||||
|
||||
/**
|
||||
* Adds a message
|
||||
*
|
||||
* @param string|array $title A title, or an array of additional fields to add to the log entry
|
||||
* @param string $logText The translation key to the log text
|
||||
* @param string $extension The name of the extension logging this entry
|
||||
* @param User|null $user The user the action is being logged for
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logUserAction($title, string $logText, string $extension, User $user = null): void;
|
||||
|
||||
/**
|
||||
* Returns the root URI for the request.
|
||||
*
|
||||
* @param bool $pathonly If false, prepend the scheme, host and port information. Default is false.
|
||||
* @param string|null $path The path
|
||||
*
|
||||
* @return string The root URI string.
|
||||
*/
|
||||
public function URIroot(bool $pathonly = false, ?string $path = null): string;
|
||||
|
||||
/**
|
||||
* Returns the base URI for the request.
|
||||
*
|
||||
* @param bool $pathonly If false, prepend the scheme, host and port information. Default is false.
|
||||
*
|
||||
* @return string The base URI string
|
||||
*/
|
||||
public function URIbase(bool $pathonly = false): string;
|
||||
|
||||
/**
|
||||
* Method to set a response header. If the replace flag is set then all headers
|
||||
* with the given name will be replaced by the new one (only if the current platform supports header caching)
|
||||
*
|
||||
* @param string $name The name of the header to set.
|
||||
* @param string $value The value of the header to set.
|
||||
* @param bool $replace True to replace any headers with the same name.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setHeader(string $name, string $value, bool $replace = false): void;
|
||||
|
||||
/**
|
||||
* In platforms that perform header caching, send all headers.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function sendHeaders(): void;
|
||||
|
||||
/**
|
||||
* Immediately terminate the containing application's execution
|
||||
*
|
||||
* @param int $code The result code which should be returned by the application
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function closeApplication(int $code = 0): void;
|
||||
|
||||
/**
|
||||
* Perform a redirection to a different page, optionally enqueuing a message for the user.
|
||||
*
|
||||
* @param string $url The URL to redirect to
|
||||
* @param int $status (optional) The HTTP redirection status code, default 301
|
||||
* @param string $msg (optional) A message to enqueue
|
||||
* @param string $type (optional) The message type, e.g. 'message' (default), 'warning' or 'error'.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function redirect(string $url, int $status = 301, ?string $msg = null, string $type = 'message'): void;
|
||||
|
||||
/**
|
||||
* Handle an exception in a way that results to an error page.
|
||||
*
|
||||
* @param Exception $exception The exception to handle
|
||||
*
|
||||
* @throws Exception Possibly rethrown exception
|
||||
*/
|
||||
public function showErrorPage(Exception $exception): void;
|
||||
|
||||
/**
|
||||
* Set a variable in the user session
|
||||
*
|
||||
* @param string $name The name of the variable to set
|
||||
* @param mixed $value (optional) The value to set it to, default is null
|
||||
* @param string $namespace (optional) The variable's namespace e.g. the component name. Default: 'default'
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setSessionVar(string $name, $value = null, string $namespace = 'default'): void;
|
||||
|
||||
/**
|
||||
* Get a variable from the user session
|
||||
*
|
||||
* @param string $name The name of the variable to set
|
||||
* @param mixed $default (optional) The default value to return if the variable does not exit, default: null
|
||||
* @param string $namespace (optional) The variable's namespace e.g. the component name. Default: 'default'
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getSessionVar(string $name, $default = null, $namespace = 'default');
|
||||
|
||||
/**
|
||||
* Unset a variable from the user session
|
||||
*
|
||||
* @param string $name The name of the variable to unset
|
||||
* @param string $namespace (optional) The variable's namespace e.g. the component name. Default: 'default'
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function unsetSessionVar(string $name, string $namespace = 'default'): void;
|
||||
|
||||
/**
|
||||
* Return the session token. Two types of tokens can be returned:
|
||||
*
|
||||
* Session token ($formToken == false): Used for anti-spam protection of forms. This is specific to a session
|
||||
* object.
|
||||
*
|
||||
* Form token ($formToken == true): A secure hash of the user ID with the session token. Both the session and the
|
||||
* user are fetched from the application container.
|
||||
*
|
||||
* @param bool $formToken Should I return a form token?
|
||||
* @param bool $forceNew Should I force the creation of a new token?
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getToken(bool $formToken = false, bool $forceNew = false): string;
|
||||
|
||||
/**
|
||||
* Are plugins allowed to run in CLI mode?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isAllowPluginsInCli(): bool;
|
||||
|
||||
/**
|
||||
* Set whether plugins are allowed to run in CLI mode
|
||||
*
|
||||
* @param bool $allowPluginsInCli
|
||||
*/
|
||||
public function setAllowPluginsInCli(bool $allowPluginsInCli): void;
|
||||
|
||||
/**
|
||||
* Set a script option.
|
||||
*
|
||||
* This allows the backend code to set up configuration options for frontend (JavaScript) code in a way that's safe
|
||||
* for async / deferred scripts. The options are stored in the document's head as an inline JSON document. This
|
||||
* JSON document is then parsed by a JavaScript helper function which makes the options available to the scripts
|
||||
* that consume them.
|
||||
*
|
||||
* @param string $key The option key
|
||||
* @param mixed|JsonSerializable $value The option value. Must be a scalar or a JSON serializable object
|
||||
* @param bool $merge Should I merge an array value with existing stored values? Default:
|
||||
* true
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addScriptOptions($key, $value, $merge = true);
|
||||
|
||||
/**
|
||||
* Get a script option, or all of the script options
|
||||
*
|
||||
* @param string|null $key The script option to retrieve. Null for all options.
|
||||
*
|
||||
* @return array|mixed Options for given $key, or all script options
|
||||
*/
|
||||
public function getScriptOptions($key = null);
|
||||
}
|
||||
Reference in New Issue
Block a user