class FileWidget in PlUPload File Widget 8
Plugin annotation
@FieldWidget(
id = "plupload_file_widget",
label = @Translation("PLupload widget"),
field_types = {
"file"
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\file\Plugin\Field\FieldWidget\FileWidget implements ContainerFactoryPluginInterface
- class \Drupal\plupload_widget\Plugin\Field\FieldWidget\FileWidget uses PluploadWidgetTrait
- class \Drupal\file\Plugin\Field\FieldWidget\FileWidget implements ContainerFactoryPluginInterface
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of FileWidget
File
- src/
Plugin/ Field/ FieldWidget/ FileWidget.php, line 36
Namespace
Drupal\plupload_widget\Plugin\Field\FieldWidgetView source
class FileWidget extends CoreFileWidget {
use PluploadWidgetTrait;
/**
* Override to replace the upload/file HTML control
* with the PLUPLOAD form element.
*
*/
public static function process($element, FormStateInterface $form_state, $form) {
$element = parent::process($element, $form_state, $form);
// If the form element does not have
// an uplad control, skip this.
if (!isset($element['upload'])) {
return $element;
}
/** @var UploadConfiguration */
$configuration = unserialize($form[$element['#parents'][0]]['#upload_configuration']);
// Change the element description because
// the PLUPLOAD widget MUST have the
// extension filters as descripiton.
// @see \Drupal\plupload\Element\PlUploadFile::preRenderPlUploadFile()
// @see \Drupal\file\Plugin\Field\FieldWidget\FileWidget::formElement()
$file_upload_help = array(
'#theme' => 'file_upload_help',
'#description' => '',
'#upload_validators' => '',
'#cardinality' => $configuration->cardinality,
);
$element['#description'] = \Drupal::service('renderer')
->renderPlain($file_upload_help);
// Replace the upload HTML element with PLUPLOAD
// for a single file.
$element['upload'] = [
'#type' => 'plupload',
'#title' => t('Upload files'),
//'#description' => t('This multi-upload widget uses Plupload library.'),
'#autoupload' => TRUE,
'#autosubmit' => TRUE,
'#submit_element' => "[name={$element['upload_button']['#name']}]",
'#upload_validators' => [
'file_validate_extensions' => $configuration->validators['file_validate_extensions'],
],
'#plupload_settings' => [
'runtimes' => 'html5,flash,silverlight,html4',
'chunk_size' => $configuration->chunk_size . 'b',
'max_file_size' => $configuration->max_size . 'b',
'max_file_count' => 1,
],
'#event_callbacks' => [
'FilesAdded' => 'Drupal.plupload_widget.filesAddedCallback',
'UploadComplete' => 'Drupal.plupload_widget.uploadCompleteCallback',
],
'#attached' => [
// We need to specify the plupload attachment because it is a default
// and will be overriden by our value.
'library' => [
'plupload_widget/plupload_widget',
'plupload/plupload',
],
],
];
return $element;
}
/**
* {@inheritdoc}
*/
public function form(FieldItemListInterface $items, array &$form, FormStateInterface $form_state, $get_delta = NULL) {
$element = parent::form($items, $form, $form_state, $get_delta);
$field_definition = $this->fieldDefinition
->getFieldStorageDefinition();
// Store these seetings once for the whole widget.
$config = new UploadConfiguration();
$config->cardinality = $field_definition
->getCardinality();
$config->upload_location = $items[0]
->getUploadLocation();
$config->validators = $items[0]
->getUploadValidators();
$config->chunk_size = $this
->getChunkSize();
$config->max_size = $this
->getMaxFileSize();
$element['#upload_configuration'] = serialize($config);
return $element;
}
/**
* Important!! The core FILE API relies on the value callback to save the managed file,
* not the submit handler. The submit handler is only used for file deletions.
*/
public static function value($element, $input = FALSE, FormStateInterface $form_state) {
// We need to fake the element ID for the PlUploadFile form element
// to work as expected as it is being nested in a form sub-element calle
// upload.
$id = $element['#id'];
$id_backup = $id;
// If a unique identifier added with '--', we need to exclude it
if (preg_match('/(.*)(--[0-9A-Za-z-]+)$/', $id, $reg)) {
$id = $reg[1];
}
// The form element is going to tell us if one
// or more files where uploaded.
$element['#id'] = $id . '-upload';
$files = \Drupal\plupload\Element\PlUploadFile::valueCallback($element, $input, $form_state);
$element['#id'] = $id_backup;
if (empty($files)) {
return parent::value($element, $input, $form_state);
}
// During form rebuild after submit or ajax request this
// method might be called twice, but we do not want to
// generate the file entities twice....
// This files are RAW files, they are not registered
// anywhere, so won't get deleted on CRON runs :(
$file = reset($files);
$destination = \Drupal::config('system.file')
->get('default_scheme') . '://' . $file['name'];
$destination = file_stream_wrapper_uri_normalize($destination);
/** @var \Drupal\file\Entity\File */
$f = entity_create('file', array(
'uri' => $file['tmppath'],
'uid' => \Drupal::currentUser()
->id(),
'status' => 0,
'filename' => drupal_basename($destination),
'filemime' => \Drupal::service('file.mime_type.guesser')
->guess($destination),
));
$f
->save();
$return['fids'][] = $f
->id();
return $return;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AllowedTagsXssTrait:: |
public | function | Returns a list of tags allowed by AllowedTagsXssTrait::fieldFilterXss(). | |
AllowedTagsXssTrait:: |
public | function | Returns a human-readable list of allowed tags for display in help texts. | |
AllowedTagsXssTrait:: |
public | function | Filters an HTML string to prevent XSS vulnerabilities. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FileWidget:: |
public static | function |
Creates an instance of the plugin. Overrides WidgetBase:: |
|
FileWidget:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsBase:: |
1 |
FileWidget:: |
public | function |
Extracts field values from submitted form values. Overrides WidgetBase:: |
|
FileWidget:: |
public | function |
Reports field-level validation errors against actual form elements. Overrides WidgetBase:: |
|
FileWidget:: |
public | function |
Creates a form element for a field. Overrides WidgetBase:: |
|
FileWidget:: |
public | function |
Returns the form for a single field widget. Overrides WidgetInterface:: |
1 |
FileWidget:: |
protected | function |
Overrides \Drupal\Core\Field\WidgetBase::formMultipleElements(). Overrides WidgetBase:: |
1 |
FileWidget:: |
protected static | function | Retrieves the file description from a field field element. | |
FileWidget:: |
public | function |
Massages the form values into the format expected for field values. Overrides WidgetBase:: |
|
FileWidget:: |
public static | function |
Override to replace the upload/file HTML control
with the PLUPLOAD form element. Overrides FileWidget:: |
|
FileWidget:: |
public static | function | Form API callback: Processes a group of file_generic field elements. | |
FileWidget:: |
public | function |
Returns a form to configure settings for the widget. Overrides WidgetBase:: |
1 |
FileWidget:: |
public | function |
Returns a short summary for the current widget settings. Overrides WidgetBase:: |
1 |
FileWidget:: |
public static | function | Form submission handler for upload/remove button of formElement(). | |
FileWidget:: |
public static | function | Form element validation callback for upload element on file widget. Checks if user has uploaded more files than allowed. | |
FileWidget:: |
public static | function |
Important!! The core FILE API relies on the value callback to save the managed file,
not the submit handler. The submit handler is only used for file deletions. Overrides FileWidget:: |
|
FileWidget:: |
public | function |
Constructs a WidgetBase object. Overrides WidgetBase:: |
1 |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluploadWidgetTrait:: |
public | function | Get the optimum chunk size. | |
PluploadWidgetTrait:: |
public | function | Returns the maximum configured file size for the Field stroage in Bytes. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
WidgetBase:: |
protected | property | The field definition. | |
WidgetBase:: |
protected | property |
The widget settings. Overrides PluginSettingsBase:: |
|
WidgetBase:: |
public static | function | Ajax callback for the "Add another item" button. | |
WidgetBase:: |
public static | function | Submission handler for the "Add another item" button. | |
WidgetBase:: |
public static | function | After-build handler for field elements in a form. | |
WidgetBase:: |
public | function |
Assigns a field-level validation error to the right widget sub-element. Overrides WidgetInterface:: |
8 |
WidgetBase:: |
protected | function | Generates the form element for a single copy of the widget. | |
WidgetBase:: |
protected | function | Returns the value of a field setting. | |
WidgetBase:: |
protected | function | Returns the array of field settings. | |
WidgetBase:: |
protected | function | Returns the filtered field description. | |
WidgetBase:: |
public static | function |
Retrieves processing information about the widget from $form_state. Overrides WidgetBaseInterface:: |
|
WidgetBase:: |
protected static | function | Returns the location of processing information within $form_state. | |
WidgetBase:: |
protected | function | Returns whether the widget handles multiple values. | |
WidgetBase:: |
public static | function |
Returns if the widget can be used for the provided field. Overrides WidgetInterface:: |
4 |
WidgetBase:: |
protected | function | Returns whether the widget used for default value form. | |
WidgetBase:: |
public static | function |
Stores processing information about the widget in $form_state. Overrides WidgetBaseInterface:: |