primo commit
This commit is contained in:
150
libraries/fof30/Platform/Base/Filesystem.php
Normal file
150
libraries/fof30/Platform/Base/Filesystem.php
Normal file
@ -0,0 +1,150 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2021 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 2, or later
|
||||
*/
|
||||
|
||||
namespace FOF30\Platform\Base;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use FOF30\Container\Container;
|
||||
use FOF30\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 = null;
|
||||
|
||||
/**
|
||||
* Public constructor.
|
||||
*
|
||||
* @param Container $c The component container
|
||||
*/
|
||||
public function __construct(Container $c)
|
||||
{
|
||||
$this->container = $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will crawl a starting directory and get all the valid files that will be analyzed by getInstance.
|
||||
* Then it organizes them into an associative array.
|
||||
*
|
||||
* @param string $path Folder where we should start looking
|
||||
* @param array $ignoreFolders Folder ignore list
|
||||
* @param array $ignoreFiles File ignore list
|
||||
*
|
||||
* @return array Associative array, where the `fullpath` key contains the path to the file,
|
||||
* and the `classname` key contains the name of the class
|
||||
*/
|
||||
protected static function getFiles($path, array $ignoreFolders = [], array $ignoreFiles = [])
|
||||
{
|
||||
$return = [];
|
||||
|
||||
$files = self::scanDirectory($path, $ignoreFolders, $ignoreFiles);
|
||||
|
||||
// Ok, I got the files, now I have to organize them
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$clean = str_replace($path, '', $file);
|
||||
$clean = trim(str_replace('\\', '/', $clean), '/');
|
||||
|
||||
$parts = explode('/', $clean);
|
||||
|
||||
// If I have less than 3 fragments, it means that the file was inside the generic folder
|
||||
// (interface + abstract) so I have to skip it
|
||||
if (count($parts) < 3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$return[] = [
|
||||
'fullpath' => $file,
|
||||
'classname' => 'F0FPlatform' . ucfirst($parts[0]) . ucfirst(basename($parts[1], '.php')),
|
||||
];
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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($path, array $ignoreFolders = [], array $ignoreFiles = [])
|
||||
{
|
||||
$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($file)
|
||||
{
|
||||
$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($file)
|
||||
{
|
||||
return preg_replace('#\.[^.]*$#', '', $file);
|
||||
}
|
||||
}
|
||||
416
libraries/fof30/Platform/Base/Platform.php
Normal file
416
libraries/fof30/Platform/Base/Platform.php
Normal file
@ -0,0 +1,416 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2021 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 2, or later
|
||||
*/
|
||||
|
||||
namespace FOF30\Platform\Base;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use Exception;
|
||||
use FOF30\Container\Container;
|
||||
use FOF30\Input\Input;
|
||||
use FOF30\Platform\PlatformInterface;
|
||||
use Joomla\CMS\Document\Document;
|
||||
use Joomla\CMS\User\User;
|
||||
|
||||
/**
|
||||
* Abstract implementation of the Platform integration
|
||||
*
|
||||
* @package FOF30\Platform\Base
|
||||
*/
|
||||
abstract class Platform implements PlatformInterface
|
||||
{
|
||||
/** @var Container The component container */
|
||||
protected $container = null;
|
||||
|
||||
/** @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.
|
||||
*
|
||||
* @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.
|
||||
* @see F0FPlatformInterface::getComponentBaseDirs()
|
||||
*
|
||||
*/
|
||||
public function getComponentBaseDirs($component)
|
||||
{
|
||||
return [
|
||||
'main' => '',
|
||||
'alt' => '',
|
||||
'site' => '',
|
||||
'admin' => '',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the application's template name
|
||||
*
|
||||
* @param boolean|array $params An optional associative array of configuration settings
|
||||
*
|
||||
* @return string The template name. System is the fallback.
|
||||
*/
|
||||
public function getTemplate($params = false)
|
||||
{
|
||||
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()
|
||||
{
|
||||
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 boolean $absolute Should I return an absolute or relative path?
|
||||
*
|
||||
* @return string The path to the template overrides directory
|
||||
*/
|
||||
public function getTemplateOverridePath($component, $absolute = true)
|
||||
{
|
||||
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
|
||||
* @see F0FPlatformInterface::loadTranslations()
|
||||
*
|
||||
*/
|
||||
public function loadTranslations($component)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Authorise access to the component in the back-end.
|
||||
*
|
||||
* @param string $component The name of the component.
|
||||
*
|
||||
* @return boolean True to allow loading the component, false to halt loading
|
||||
* @see F0FPlatformInterface::authorizeAdmin()
|
||||
*
|
||||
*/
|
||||
public function authorizeAdmin($component)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the JUser object for the current user
|
||||
*
|
||||
* @param integer $id The ID of the user to fetch
|
||||
*
|
||||
* @return Document
|
||||
* @see F0FPlatformInterface::getUser()
|
||||
*
|
||||
*/
|
||||
public function getUser($id = null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the JDocument object which handles this component's response.
|
||||
*
|
||||
* @return Document
|
||||
* @see F0FPlatformInterface::getDocument()
|
||||
*
|
||||
*/
|
||||
public function getDocument()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will try retrieving a variable from the request (input) data.
|
||||
*
|
||||
* @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 boolean $setUserState Should I set the user state with the fetched value?
|
||||
*
|
||||
* @return mixed The value of the variable
|
||||
* @see F0FPlatformInterface::getUserStateFromRequest()
|
||||
*
|
||||
*/
|
||||
public function getUserStateFromRequest($key, $request, $input, $default = null, $type = 'none', $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.
|
||||
*
|
||||
* @param string $type The type of the plugins to be loaded
|
||||
*
|
||||
* @return void
|
||||
* @see F0FPlatformInterface::importPlugin()
|
||||
*
|
||||
*/
|
||||
public function importPlugin($type)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @see F0FPlatformInterface::runPlugins()
|
||||
*
|
||||
*/
|
||||
public function runPlugins($event, $data)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an ACL check.
|
||||
*
|
||||
* @param string $action The ACL privilege to check, e.g. core.edit
|
||||
* @param string $assetname The asset name to check, typically the component's name
|
||||
*
|
||||
* @return boolean True if the user is allowed this action
|
||||
* @see F0FPlatformInterface::authorise()
|
||||
*
|
||||
*/
|
||||
public function authorise($action, $assetname)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this the administrative section of the component?
|
||||
*
|
||||
* @return boolean
|
||||
* @see F0FPlatformInterface::isBackend()
|
||||
*
|
||||
*/
|
||||
public function isBackend()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this the public section of the component?
|
||||
*
|
||||
* @return boolean
|
||||
* @see F0FPlatformInterface::isFrontend()
|
||||
*
|
||||
*/
|
||||
public function isFrontend()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this a component running in a CLI application?
|
||||
*
|
||||
* @return boolean
|
||||
* @see F0FPlatformInterface::isCli()
|
||||
*
|
||||
*/
|
||||
public function isCli()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is AJAX re-ordering supported? This is 100% Joomla!-CMS specific. All
|
||||
* other platforms should return false and never ask why.
|
||||
*
|
||||
* @return boolean
|
||||
* @see F0FPlatformInterface::supportsAjaxOrdering()
|
||||
*
|
||||
*/
|
||||
public function supportsAjaxOrdering()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves something to the cache. This is supposed to be used for system-wide
|
||||
* F0F data, not application data.
|
||||
*
|
||||
* @param string $key The key of the data to save
|
||||
* @param string $content The actual data to save
|
||||
*
|
||||
* @return boolean True on success
|
||||
*/
|
||||
public function setCache($key, $content)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves data from the cache. This is supposed to be used for system-side
|
||||
* F0F data, not application data.
|
||||
*
|
||||
* @param string $key The key of the data to retrieve
|
||||
* @param string $default The default value to return if the key is not found or the cache is not populated
|
||||
*
|
||||
* @return string The cached value
|
||||
*/
|
||||
public function getCache($key, $default = null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the global F0F cache enabled?
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isGlobalFOFCacheEnabled()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the cache of system-wide F0F 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 F0F. Please note that F0F's cache never expires and is not
|
||||
* purged by Joomla!. You MUST use this method to manually purge the cache.
|
||||
*
|
||||
* @return boolean True on success
|
||||
*/
|
||||
public function clearCache()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* logs in a user
|
||||
*
|
||||
* @param array $authInfo Authentication information
|
||||
*
|
||||
* @return boolean True on success
|
||||
*/
|
||||
public function loginUser($authInfo)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* logs out a user
|
||||
*
|
||||
* @return boolean True on success
|
||||
*/
|
||||
public function logoutUser()
|
||||
{
|
||||
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($message)
|
||||
{
|
||||
// The default implementation does nothing. Override this in your platform classes.
|
||||
}
|
||||
|
||||
/**
|
||||
* 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, $logText, $extension, $user = null)
|
||||
{
|
||||
// The default implementation does nothing. Override this in your platform classes.
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version number string of the platform, e.g. "4.5.6". If
|
||||
* implementation integrates with a CMS or a versioned foundation (e.g.
|
||||
* a framework) it is advisable to return that version.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 2.1.2
|
||||
*/
|
||||
public function getPlatformVersion()
|
||||
{
|
||||
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)
|
||||
{
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
/**
|
||||
* Are plugins allowed to run in CLI mode?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isAllowPluginsInCli()
|
||||
{
|
||||
return $this->allowPluginsInCli;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether plugins are allowed to run in CLI mode
|
||||
*
|
||||
* @param bool $allowPluginsInCli
|
||||
*/
|
||||
public function setAllowPluginsInCli($allowPluginsInCli)
|
||||
{
|
||||
$this->allowPluginsInCli = $allowPluginsInCli;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user