[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * @package Joomla.API 5 * @subpackage com_media 6 * 7 * @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org> 8 * @license GNU General Public License version 2 or later; see LICENSE.txt 9 */ 10 11 namespace Joomla\Component\Media\Administrator\Provider; 12 13 use Joomla\CMS\Component\ComponentHelper; 14 use Joomla\CMS\Factory; 15 use Joomla\CMS\Language\Text; 16 use Joomla\CMS\Plugin\PluginHelper; 17 use Joomla\Component\Media\Administrator\Adapter\AdapterInterface; 18 use Joomla\Component\Media\Administrator\Event\MediaProviderEvent; 19 20 // phpcs:disable PSR1.Files.SideEffects 21 \defined('_JEXEC') or die; 22 // phpcs:enable PSR1.Files.SideEffects 23 24 /** 25 * Trait for classes that need adapters. 26 * 27 * @since 4.1.0 28 */ 29 trait ProviderManagerHelperTrait 30 { 31 /** 32 * Holds the available media file adapters. 33 * 34 * @var ProviderManager 35 * 36 * @since 4.1.0 37 */ 38 private $providerManager = null; 39 40 /** 41 * The default adapter name. 42 * 43 * @var string 44 * 45 * @since 4.1.0 46 */ 47 private $defaultAdapterName = null; 48 49 /** 50 * Return a provider manager. 51 * 52 * @return ProviderManager 53 * 54 * @since 4.1.0 55 */ 56 public function getProviderManager(): ProviderManager 57 { 58 if (!$this->providerManager) { 59 // Fire the event to get the results 60 $eventParameters = ['context' => 'AdapterManager', 'providerManager' => new ProviderManager()]; 61 $event = new MediaProviderEvent('onSetupProviders', $eventParameters); 62 PluginHelper::importPlugin('filesystem'); 63 Factory::getApplication()->triggerEvent('onSetupProviders', $event); 64 $this->providerManager = $event->getProviderManager(); 65 } 66 67 return $this->providerManager; 68 } 69 70 /** 71 * Returns a provider for the given id. 72 * 73 * @return ProviderInterface 74 * 75 * @throws \Exception 76 * 77 * @since 4.1.0 78 */ 79 public function getProvider(string $id): ProviderInterface 80 { 81 return $this->getProviderManager()->getProvider($id); 82 } 83 84 /** 85 * Return an adapter for the given name. 86 * 87 * @return AdapterInterface 88 * 89 * @throws \Exception 90 * 91 * @since 4.1.0 92 */ 93 public function getAdapter(string $name): AdapterInterface 94 { 95 return $this->getProviderManager()->getAdapter($name); 96 } 97 98 /** 99 * Returns an array with the adapter name as key and the path of the file. 100 * 101 * @return array 102 * 103 * @throws \InvalidArgumentException 104 * 105 * @since 4.1.0 106 */ 107 protected function resolveAdapterAndPath(string $path): array 108 { 109 $result = []; 110 $parts = explode(':', $path, 2); 111 112 // If we have 2 parts, we have both an adapter name and a file path 113 if (\count($parts) === 2) { 114 $result['adapter'] = $parts[0]; 115 $result['path'] = $parts[1]; 116 117 return $result; 118 } 119 120 if (!$this->getDefaultAdapterName()) { 121 throw new \InvalidArgumentException(Text::_('COM_MEDIA_ERROR_NO_ADAPTER_FOUND')); 122 } 123 124 // If we have less than 2 parts, we return a default adapter name 125 $result['adapter'] = $this->getDefaultAdapterName(); 126 127 // If we have 1 part, we return it as the path. Otherwise we return a default path 128 $result['path'] = \count($parts) ? $parts[0] : '/'; 129 130 return $result; 131 } 132 133 /** 134 * Returns the default adapter name. 135 * 136 * @return string|null 137 * 138 * @throws \Exception 139 * 140 * @since 4.1.0 141 */ 142 protected function getDefaultAdapterName(): ?string 143 { 144 if ($this->defaultAdapterName) { 145 return $this->defaultAdapterName; 146 } 147 148 $defaultAdapter = $this->getAdapter('local-' . ComponentHelper::getParams('com_media')->get('file_path', 'images')); 149 150 if ( 151 !$defaultAdapter 152 && $this->getProviderManager()->getProvider('local') 153 && $this->getProviderManager()->getProvider('local')->getAdapters() 154 ) { 155 $defaultAdapter = $this->getProviderManager()->getProvider('local')->getAdapters()[0]; 156 } 157 158 if (!$defaultAdapter) { 159 return null; 160 } 161 162 $this->defaultAdapterName = 'local-' . $defaultAdapter->getAdapterName(); 163 164 return $this->defaultAdapterName; 165 } 166 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |