29
0
mirror of https://github.com/joomla/joomla-cms.git synced 2024-06-28 16:13:42 +00:00

[4.1] Adapter trait unification (#36097)

* Adapter trait unification

* Update administrator/components/com_media/src/Provider/ProviderManagerHelperTrait.php

Co-authored-by: Phil E. Taylor <phil@phil-taylor.com>

* Update administrator/components/com_media/src/Provider/ProviderManagerHelperTrait.php

Co-authored-by: Phil E. Taylor <phil@phil-taylor.com>

Co-authored-by: Phil E. Taylor <phil@phil-taylor.com>
Co-authored-by: Benjamin Trenkle <bembelimen@users.noreply.github.com>
This commit is contained in:
Allon Moritz 2022-01-09 11:50:09 +01:00 committed by GitHub
parent 831c4f1a15
commit cbab803f97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 80 additions and 124 deletions

View File

@ -17,15 +17,13 @@ use Joomla\CMS\Filesystem\File;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Media\Administrator\Adapter\AdapterInterface;
use Joomla\Component\Media\Administrator\Event\FetchMediaItemEvent;
use Joomla\Component\Media\Administrator\Event\FetchMediaItemsEvent;
use Joomla\Component\Media\Administrator\Event\FetchMediaItemUrlEvent;
use Joomla\Component\Media\Administrator\Event\MediaProviderEvent;
use Joomla\Component\Media\Administrator\Exception\FileExistsException;
use Joomla\Component\Media\Administrator\Exception\FileNotFoundException;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Administrator\Provider\ProviderManager;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Api Model
@ -34,13 +32,7 @@ use Joomla\Component\Media\Administrator\Provider\ProviderManager;
*/
class ApiModel extends BaseDatabaseModel
{
/**
* Holds the available media file adapters.
*
* @var ProviderManager
* @since 4.0.0
*/
private $providerManager = null;
use ProviderManagerHelperTrait;
/**
* The available extensions.
@ -50,32 +42,6 @@ class ApiModel extends BaseDatabaseModel
*/
private $allowedExtensions = null;
/**
* Return the requested adapter
*
* @param string $name Name of the provider
*
* @since 4.0.0
* @return AdapterInterface
*
* @throws \Exception
*/
private function getAdapter($name)
{
if ($this->providerManager == null)
{
$this->providerManager = new ProviderManager;
// Fire the event to get the results
$eventParameters = ['context' => 'AdapterManager', 'providerManager' => $this->providerManager];
$event = new MediaProviderEvent('onSetupProviders', $eventParameters);
PluginHelper::importPlugin('filesystem');
Factory::getApplication()->triggerEvent('onSetupProviders', $event);
}
return $this->providerManager->getAdapter($name);
}
/**
* Returns the requested file or folder information. More information
* can be found in AdapterInterface::getFile().

View File

@ -11,11 +11,8 @@ namespace Joomla\Component\Media\Administrator\Model;
\defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Media\Administrator\Event\MediaProviderEvent;
use Joomla\Component\Media\Administrator\Provider\ProviderManager;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media View Model
@ -24,6 +21,8 @@ use Joomla\Component\Media\Administrator\Provider\ProviderManager;
*/
class MediaModel extends BaseDatabaseModel
{
use ProviderManagerHelperTrait;
/**
* Obtain list of supported providers
*
@ -33,17 +32,9 @@ class MediaModel extends BaseDatabaseModel
*/
public function getProviders()
{
// Setup provider manager and event parameters
$providerManager = new ProviderManager;
$eventParameters = ['context' => 'AdapterManager', 'providerManager' => $providerManager];
$event = new MediaProviderEvent('onSetupProviders', $eventParameters);
$results = [];
$results = [];
// Import plugin group and fire the event
PluginHelper::importPlugin('filesystem');
Factory::getApplication()->triggerEvent('onSetupProviders', $event);
foreach ($providerManager->getProviders() as $provider)
foreach ($this->getProviderManager()->getProviders() as $provider)
{
$result = new \stdClass;
$result->name = $provider->getID();

View File

@ -7,7 +7,7 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Media\Api\Helper;
namespace Joomla\Component\Media\Administrator\Provider;
\defined('_JEXEC') or die;
@ -24,7 +24,7 @@ use Joomla\Component\Media\Administrator\Provider\ProviderManager;
*
* @since 4.1.0
*/
trait AdapterTrait
trait ProviderManagerHelperTrait
{
/**
* Holds the available media file adapters.
@ -45,21 +45,71 @@ trait AdapterTrait
private $defaultAdapterName = null;
/**
* Returns an array with the adapter name as key and the path of the file.
* Return a provider manager.
*
* @return array
* @return ProviderManager
*
* @since 4.1.0
*/
public function getProviderManager(): ProviderManager
{
if (!$this->providerManager)
{
// Fire the event to get the results
$eventParameters = ['context' => 'AdapterManager', 'providerManager' => new ProviderManager];
$event = new MediaProviderEvent('onSetupProviders', $eventParameters);
PluginHelper::importPlugin('filesystem');
Factory::getApplication()->triggerEvent('onSetupProviders', $event);
$this->providerManager = $event->getProviderManager();
}
return $this->providerManager;
}
/**
* Returns a provider for the given id.
*
* @return ProviderInterface
*
* @throws \Exception
*
* @since 4.1.0
*/
private function resolveAdapterAndPath(String $path): array
public function getProvider(String $id): ProviderInterface
{
return $this->getProviderManager()->getProvider($id);
}
/**
* Return an adapter for the given name.
*
* @return AdapterInterface
*
* @throws \Exception
*
* @since 4.1.0
*/
public function getAdapter(String $name): AdapterInterface
{
return $this->getProviderManager()->getAdapter($name);
}
/**
* Returns an array with the adapter name as key and the path of the file.
*
* @return array
*
* @throws \InvalidArgumentException
*
* @since __DEPLOY_VERSION__
*/
protected function resolveAdapterAndPath(String $path): array
{
$result = [];
$parts = explode(':', $path, 2);
// If we have 2 parts, we have both an adapter name and a file path
if (\count($parts) == 2)
if (\count($parts) === 2)
{
$result['adapter'] = $parts[0];
$result['path'] = $parts[1];
@ -81,34 +131,6 @@ trait AdapterTrait
return $result;
}
/**
* Returns a provider for the given id.
*
* @return ProviderInterface
*
* @throws \Exception
*
* @since 4.1.0
*/
private function getProvider(String $id): ProviderInterface
{
return $this->getProviderManager()->getProvider($id);
}
/**
* Return an adapter for the given name.
*
* @return AdapterInterface
*
* @throws \Exception
*
* @since 4.1.0
*/
private function getAdapter(String $name): AdapterInterface
{
return $this->getProviderManager()->getAdapter($name);
}
/**
* Returns the default adapter name.
*
@ -118,7 +140,7 @@ trait AdapterTrait
*
* @since 4.1.0
*/
private function getDefaultAdapterName(): ?string
protected function getDefaultAdapterName(): ?string
{
if ($this->defaultAdapterName)
{
@ -143,27 +165,4 @@ trait AdapterTrait
return $this->defaultAdapterName;
}
/**
* Return a provider manager.
*
* @return ProviderManager
*
* @since 4.1.0
*/
private function getProviderManager(): ProviderManager
{
if (!$this->providerManager)
{
$this->providerManager = new ProviderManager;
// Fire the event to get the results
$eventParameters = ['context' => 'AdapterManager', 'providerManager' => $this->providerManager];
$event = new MediaProviderEvent('onSetupProviders', $eventParameters);
PluginHelper::importPlugin('filesystem');
Factory::getApplication()->triggerEvent('onSetupProviders', $event);
}
return $this->providerManager;
}
}

View File

@ -13,7 +13,7 @@ namespace Joomla\Component\Media\Api\Controller;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service controller.
@ -22,7 +22,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class AdaptersController extends ApiController
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* The content type of the item.

View File

@ -18,7 +18,7 @@ use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Media\Administrator\Exception\FileExistsException;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
use Joomla\Component\Media\Api\Model\MediumModel;
use Joomla\String\Inflector;
use Tobscure\JsonApi\Exception\InvalidParameterException;
@ -30,7 +30,7 @@ use Tobscure\JsonApi\Exception\InvalidParameterException;
*/
class MediaController extends ApiController
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* The content type of the item.

View File

@ -12,7 +12,7 @@ namespace Joomla\Component\Media\Api\Model;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\Model\BaseModel;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service model supporting a single adapter item.
@ -21,7 +21,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class AdapterModel extends BaseModel
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* Method to get a single adapter.

View File

@ -14,7 +14,7 @@ namespace Joomla\Component\Media\Api\Model;
use Joomla\CMS\MVC\Model\BaseModel;
use Joomla\CMS\MVC\Model\ListModelInterface;
use Joomla\CMS\Pagination\Pagination;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service model supporting lists of media adapters.
@ -23,7 +23,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class AdaptersModel extends BaseModel implements ListModelInterface
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object,

View File

@ -18,7 +18,7 @@ use Joomla\CMS\MVC\Model\ListModelInterface;
use Joomla\CMS\Pagination\Pagination;
use Joomla\Component\Media\Administrator\Exception\FileNotFoundException;
use Joomla\Component\Media\Administrator\Model\ApiModel;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service model supporting lists of media items.
@ -27,7 +27,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class MediaModel extends BaseModel implements ListModelInterface
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* Instance of com_media's ApiModel

View File

@ -19,7 +19,7 @@ use Joomla\Component\Media\Administrator\Exception\FileExistsException;
use Joomla\Component\Media\Administrator\Exception\FileNotFoundException;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Administrator\Model\ApiModel;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service model supporting a single media item.
@ -28,7 +28,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class MediumModel extends BaseModel
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* Instance of com_media's ApiModel

View File

@ -12,7 +12,7 @@ namespace Joomla\Component\Media\Api\View\Adapters;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service view
@ -21,7 +21,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class JsonapiView extends BaseApiView
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* The fields to render item in the documents

View File

@ -12,7 +12,7 @@ namespace Joomla\Component\Media\Api\View\Media;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\Component\Media\Api\Helper\AdapterTrait;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
/**
* Media web service view
@ -21,7 +21,7 @@ use Joomla\Component\Media\Api\Helper\AdapterTrait;
*/
class JsonapiView extends BaseApiView
{
use AdapterTrait;
use ProviderManagerHelperTrait;
/**
* The fields to render item in the documents