__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Form\Field;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Form\FormField;
use Joomla\CMS\Helper\MediaHelper;
use Joomla\CMS\Uri\Uri;
// phpcs:disable PSR1.Files.SideEffects
\defined('JPATH_PLATFORM') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Provides a modal media selector including upload mechanism
*
* @since 1.6
*/
class MediaField extends FormField
{
/**
* The form field type.
*
* @var string
* @since 1.6
*/
protected $type = 'Media';
/**
* The authorField.
*
* @var string
* @since 3.2
*/
protected $authorField;
/**
* The asset.
*
* @var string
* @since 3.2
*/
protected $asset;
/**
* The link.
*
* @var string
* @since 3.2
*/
protected $link;
/**
* Modal width.
*
* @var integer
* @since 3.4.5
*/
protected $width;
/**
* Modal height.
*
* @var integer
* @since 3.4.5
*/
protected $height;
/**
* The preview.
*
* @var string
* @since 3.2
*/
protected $preview;
/**
* The directory.
*
* @var string
* @since 3.2
*/
protected $directory;
/**
* The previewWidth.
*
* @var integer
* @since 3.2
*/
protected $previewWidth;
/**
* The previewHeight.
*
* @var integer
* @since 3.2
*/
protected $previewHeight;
/**
* The folder.
*
* @var string
* @since 4.3.0
*/
protected $folder;
/**
* Comma separated types of files for Media Manager
* Possible values: images,audios,videos,documents
*
* @var string
* @since 4.0.0
*/
protected $types;
/**
* Layout to render
*
* @var string
* @since 3.5
*/
protected $layout = 'joomla.form.field.media';
/**
* The parent class of the field
*
* @var string
* @since 4.0.0
*/
protected $parentclass;
/**
* Method to get certain otherwise inaccessible properties from the form field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name) {
case 'authorField':
case 'asset':
case 'link':
case 'width':
case 'height':
case 'preview':
case 'directory':
case 'previewWidth':
case 'previewHeight':
case 'folder':
case 'types':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name) {
case 'authorField':
case 'asset':
case 'link':
case 'preview':
case 'directory':
case 'folder':
case 'types':
$this->$name = (string) $value;
break;
case 'height':
case 'previewWidth':
case 'previewHeight':
case 'width':
$this->$name = (int) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a Form object to the field.
*
* @param \SimpleXMLElement $element The SimpleXMLElement object representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control value. This acts as an array container for the field.
* For example if the field has name="foo" and the group value is set to "bar" then the
* full field name would end up being "bar[foo]".
*
* @return boolean True on success.
*
* @see FormField::setup()
* @since 3.2
*/
public function setup(\SimpleXMLElement $element, $value, $group = null)
{
$result = parent::setup($element, $value, $group);
if ($result === true) {
$assetField = $this->element['asset_field'] ? (string) $this->element['asset_field'] : 'asset_id';
$this->authorField = $this->element['created_by_field'] ? (string) $this->element['created_by_field'] : 'created_by';
$this->asset = $this->form->getValue($assetField) ?: (string) $this->element['asset_id'];
$this->link = (string) $this->element['link'];
$this->width = isset($this->element['width']) ? (int) $this->element['width'] : 800;
$this->height = isset($this->element['height']) ? (int) $this->element['height'] : 500;
$this->preview = (string) $this->element['preview'];
$this->directory = (string) $this->element['directory'];
$this->previewWidth = isset($this->element['preview_width']) ? (int) $this->element['preview_width'] : 200;
$this->previewHeight = isset($this->element['preview_height']) ? (int) $this->element['preview_height'] : 200;
$this->types = isset($this->element['types']) ? (string) $this->element['types'] : 'images';
}
return $result;
}
/**
* Method to get the field input markup for a media selector.
* Use attributes to identify specific created_by and asset_id fields
*
* @return string The field input markup.
*
* @since 1.6
*/
protected function getInput()
{
if (empty($this->layout)) {
throw new \UnexpectedValueException(sprintf('%s has no layout assigned.', $this->name));
}
return $this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Get the data that is going to be passed to the layout
*
* @return array
*/
public function getLayoutData()
{
// Get the basic field data
$data = parent::getLayoutData();
$asset = $this->asset;
if ($asset === '') {
$asset = Factory::getApplication()->getInput()->get('option');
}
// Value in new format such as images/headers/blue-flower.jpg#joomlaImage://local-images/headers/blue-flower.jpg?width=700&height=180
if ($this->value && strpos($this->value, '#') !== false) {
$uri = new Uri(explode('#', $this->value)[1]);
$adapter = $uri->getHost();
$path = $uri->getPath();
// Remove filename from stored path to get the path to the folder which file is stored
$pos = strrpos($path, '/');
if ($pos !== false) {
$path = substr($path, 0, $pos);
}
if ($path === '') {
$path = '/';
}
$this->folder = $adapter . ':' . $path;
} elseif ($this->value && is_file(JPATH_ROOT . '/' . $this->value)) {
/**
* Local image, for example images/sampledata/cassiopeia/nasa2-640.jpg. We need to validate and make sure
* the top level folder is one of the directories configured in the filesystem local plugin to avoid an error
* message being displayed when users click on Select button to select a new image.
*/
$paths = explode('/', Path::clean($this->value, '/'));
// Remove filename from $paths array
array_pop($paths);
if (MediaHelper::isValidLocalDirectory($paths[0])) {
$adapterName = array_shift($paths);
$this->folder = 'local-' . $adapterName . ':/' . implode('/', $paths);
}
} elseif ($this->directory && is_dir(JPATH_ROOT . '/' . ComponentHelper::getParams('com_media')->get('image_path', 'images') . '/' . $this->directory)) {
/**
* This is the case where a folder is configured in directory attribute of the form field. The directory needs
* to be a relative folder of the folder configured in Path to Images Folder config option of Media component.
* Same with an already stored local image above, we need to validate and make sure the top level folder is one of the
* directories configured in the filesystem local plugin.
*/
$path = ComponentHelper::getParams('com_media')->get('image_path', 'images') . '/' . $this->directory;
$paths = explode('/', Path::clean($path, '/'));
if (MediaHelper::isValidLocalDirectory($paths[0])) {
$adapterName = array_shift($paths);
$this->folder = 'local-' . $adapterName . ':/' . implode('/', $paths);
}
} elseif ($this->directory && strpos($this->directory, ':')) {
/**
* Directory contains adapter information and path, for example via programming or directly defined in xml
* via directory attribute
*/
$this->folder = $this->directory;
} else {
$this->folder = '';
}
$mediaTypes = array_map('trim', explode(',', $this->types));
$types = [];
$imagesExt = array_map(
'trim',
explode(
',',
ComponentHelper::getParams('com_media')->get(
'image_extensions',
'bmp,gif,jpg,jpeg,png,webp'
)
)
);
$audiosExt = array_map(
'trim',
explode(
',',
ComponentHelper::getParams('com_media')->get(
'audio_extensions',
'mp3,m4a,mp4a,ogg'
)
)
);
$videosExt = array_map(
'trim',
explode(
',',
ComponentHelper::getParams('com_media')->get(
'video_extensions',
'mp4,mp4v,mpeg,mov,webm'
)
)
);
$documentsExt = array_map(
'trim',
explode(
',',
ComponentHelper::getParams('com_media')->get(
'doc_extensions',
'doc,odg,odp,ods,odt,pdf,ppt,txt,xcf,xls,csv'
)
)
);
$imagesAllowedExt = [];
$audiosAllowedExt = [];
$videosAllowedExt = [];
$documentsAllowedExt = [];
// Cleanup the media types
array_map(
function ($mediaType) use (&$types, &$imagesAllowedExt, &$audiosAllowedExt, &$videosAllowedExt, &$documentsAllowedExt, $imagesExt, $audiosExt, $videosExt, $documentsExt) {
switch ($mediaType) {
case 'images':
$types[] = '0';
$imagesAllowedExt = $imagesExt;
break;
case 'audios':
$types[] = '1';
$audiosAllowedExt = $audiosExt;
break;
case 'videos':
$types[] = '2';
$videosAllowedExt = $videosExt;
break;
case 'documents':
$types[] = '3';
$documentsAllowedExt = $documentsExt;
break;
default:
break;
}
},
$mediaTypes
);
sort($types);
$extraData = [
'asset' => $asset,
'authorField' => $this->authorField,
'authorId' => $this->form->getValue($this->authorField),
'folder' => $this->folder,
'link' => $this->link,
'preview' => $this->preview,
'previewHeight' => $this->previewHeight,
'previewWidth' => $this->previewWidth,
'mediaTypes' => implode(',', $types),
'imagesExt' => $imagesExt,
'audiosExt' => $audiosExt,
'videosExt' => $videosExt,
'documentsExt' => $documentsExt,
'imagesAllowedExt' => $imagesAllowedExt,
'audiosAllowedExt' => $audiosAllowedExt,
'videosAllowedExt' => $videosAllowedExt,
'documentsAllowedExt' => $documentsAllowedExt,
];
return array_merge($data, $extraData);
}
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| AccessiblemediaField.php | File | 5.91 KB | 0664 |
|
| AccesslevelField.php | File | 1.02 KB | 0664 |
|
| AliastagField.php | File | 2.08 KB | 0664 |
|
| AuthorField.php | File | 2.12 KB | 0664 |
|
| CachehandlerField.php | File | 1.27 KB | 0664 |
|
| CalendarField.php | File | 13.69 KB | 0664 |
|
| CaptchaField.php | File | 5.1 KB | 0664 |
|
| CategoryField.php | File | 3.42 KB | 0664 |
|
| CheckboxField.php | File | 3.96 KB | 0664 |
|
| CheckboxesField.php | File | 4.52 KB | 0664 |
|
| ChromestyleField.php | File | 6.64 KB | 0664 |
|
| ColorField.php | File | 9.73 KB | 0664 |
|
| ComboField.php | File | 1.64 KB | 0664 |
|
| ComponentlayoutField.php | File | 9.9 KB | 0664 |
|
| ComponentsField.php | File | 2.18 KB | 0664 |
|
| ContenthistoryField.php | File | 2 KB | 0664 |
|
| ContentlanguageField.php | File | 1.02 KB | 0664 |
|
| ContenttypeField.php | File | 2.82 KB | 0664 |
|
| DatabaseconnectionField.php | File | 2.4 KB | 0664 |
|
| EditorField.php | File | 9.04 KB | 0664 |
|
| EmailField.php | File | 1.67 KB | 0664 |
|
| FileField.php | File | 3.89 KB | 0664 |
|
| FilelistField.php | File | 6.59 KB | 0664 |
|
| FolderlistField.php | File | 6.47 KB | 0664 |
|
| FrontendlanguageField.php | File | 2.2 KB | 0664 |
|
| GroupedlistField.php | File | 5.2 KB | 0664 |
|
| HeadertagField.php | File | 1.13 KB | 0664 |
|
| HiddenField.php | File | 1.46 KB | 0664 |
|
| ImagelistField.php | File | 1.09 KB | 0664 |
|
| IntegerField.php | File | 2.07 KB | 0664 |
|
| LanguageField.php | File | 2.59 KB | 0664 |
|
| LastvisitdaterangeField.php | File | 1.62 KB | 0664 |
|
| LimitboxField.php | File | 2.67 KB | 0664 |
|
| ListField.php | File | 7.13 KB | 0664 |
|
| MediaField.php | File | 13.17 KB | 0664 |
|
| MenuField.php | File | 3.75 KB | 0664 |
|
| MenuitemField.php | File | 7.13 KB | 0664 |
|
| MeterField.php | File | 5.8 KB | 0664 |
|
| ModulelayoutField.php | File | 7.86 KB | 0664 |
|
| ModuleorderField.php | File | 3.88 KB | 0664 |
|
| ModulepositionField.php | File | 5.19 KB | 0664 |
|
| ModuletagField.php | File | 1.17 KB | 0664 |
|
| NoteField.php | File | 2.71 KB | 0664 |
|
| NumberField.php | File | 5.94 KB | 0664 |
|
| OrderingField.php | File | 5.57 KB | 0664 |
|
| PasswordField.php | File | 7.95 KB | 0664 |
|
| PluginsField.php | File | 5.18 KB | 0664 |
|
| PluginstatusField.php | File | 782 B | 0664 |
|
| PredefinedlistField.php | File | 3.48 KB | 0664 |
|
| RadioField.php | File | 1.28 KB | 0664 |
|
| RadiobasicField.php | File | 1.51 KB | 0664 |
|
| RangeField.php | File | 1.62 KB | 0664 |
|
| RedirectStatusField.php | File | 877 B | 0664 |
|
| RegistrationdaterangeField.php | File | 1.61 KB | 0664 |
|
| RulesField.php | File | 9.45 KB | 0664 |
|
| SessionhandlerField.php | File | 1.37 KB | 0664 |
|
| SpacerField.php | File | 3.97 KB | 0664 |
|
| SqlField.php | File | 8.94 KB | 0664 |
|
| StatusField.php | File | 867 B | 0664 |
|
| SubformField.php | File | 13.25 KB | 0664 |
|
| TagField.php | File | 9.75 KB | 0664 |
|
| TelephoneField.php | File | 1.83 KB | 0664 |
|
| TemplatestyleField.php | File | 5.75 KB | 0664 |
|
| TextField.php | File | 8.99 KB | 0664 |
|
| TextareaField.php | File | 5.27 KB | 0664 |
|
| TimeField.php | File | 4.3 KB | 0664 |
|
| TimezoneField.php | File | 4.47 KB | 0664 |
|
| TransitionField.php | File | 5.34 KB | 0664 |
|
| UrlField.php | File | 2.03 KB | 0664 |
|
| UserField.php | File | 4.61 KB | 0664 |
|
| UseractiveField.php | File | 1.27 KB | 0664 |
|
| UsergrouplistField.php | File | 2.93 KB | 0664 |
|
| UserstateField.php | File | 808 B | 0664 |
|
| WorkflowComponentSectionsField.php | File | 1.73 KB | 0664 |
|
| WorkflowconditionField.php | File | 3.78 KB | 0664 |
|
| WorkflowstageField.php | File | 4.92 KB | 0664 |
|