Drupal 8.0.0 beta 12. More info: https://www.drupal.org/node/2514176
This commit is contained in:
commit
9921556621
13277 changed files with 1459781 additions and 0 deletions
|
@ -0,0 +1,6 @@
|
|||
name: 'File test'
|
||||
type: module
|
||||
description: 'Provides hooks for testing File module functionality.'
|
||||
package: Testing
|
||||
version: VERSION
|
||||
core: 8.x
|
|
@ -0,0 +1,10 @@
|
|||
file_module_test.managed_test:
|
||||
path: '/file/test/{tree}/{extended}/{multiple}/{default_fids}'
|
||||
defaults:
|
||||
_form: '\Drupal\file_module_test\Form\FileModuleTestForm'
|
||||
tree: TRUE
|
||||
extended: TRUE
|
||||
multiple: FALSE
|
||||
default_fids: NULL
|
||||
requirements:
|
||||
_access: 'TRUE'
|
|
@ -0,0 +1,94 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file_module_test\Form\FileModuleTestForm.
|
||||
*/
|
||||
|
||||
namespace Drupal\file_module_test\Form;
|
||||
|
||||
use Drupal\Core\Form\FormBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
|
||||
/**
|
||||
* Form controller for file_module_test module.
|
||||
*/
|
||||
class FileModuleTestForm extends FormBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getFormId() {
|
||||
return 'file_module_test_form';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param array $form
|
||||
* An associative array containing the structure of the form.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The current state of the form.
|
||||
* @param bool $tree
|
||||
* (optional) If the form should use #tree. Defaults to TRUE.
|
||||
* @param bool $extended
|
||||
* (optional) If the form should use #extended. Defaults to TRUE.
|
||||
* @param bool $multiple
|
||||
* (optional) If the form should use #multiple. Defaults to FALSE.
|
||||
* @param array $default_fids
|
||||
* (optional) Any default file IDs to use.
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state, $tree = TRUE, $extended = TRUE, $multiple = FALSE, $default_fids = NULL) {
|
||||
$form['#tree'] = (bool) $tree;
|
||||
|
||||
$form['nested']['file'] = array(
|
||||
'#type' => 'managed_file',
|
||||
'#title' => $this->t('Managed file'),
|
||||
'#upload_location' => 'public://test',
|
||||
'#progress_message' => $this->t('Please wait...'),
|
||||
'#extended' => (bool) $extended,
|
||||
'#size' => 13,
|
||||
'#multiple' => (bool) $multiple,
|
||||
);
|
||||
if ($default_fids) {
|
||||
$default_fids = explode(',', $default_fids);
|
||||
$form['nested']['file']['#default_value'] = $extended ? array('fids' => $default_fids) : $default_fids;
|
||||
}
|
||||
|
||||
$form['textfield'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => $this->t('Type a value and ensure it stays'),
|
||||
);
|
||||
|
||||
$form['submit'] = array(
|
||||
'#type' => 'submit',
|
||||
'#value' => $this->t('Save'),
|
||||
);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
if ($form['#tree']) {
|
||||
$uploads = $form_state->getValue(array('nested', 'file'));
|
||||
}
|
||||
else {
|
||||
$uploads = $form_state->getValue('file');
|
||||
}
|
||||
|
||||
if ($form['nested']['file']['#extended']) {
|
||||
$uploads = $uploads['fids'];
|
||||
}
|
||||
|
||||
$fids = array();
|
||||
foreach ($uploads as $fid) {
|
||||
$fids[] = $fid;
|
||||
}
|
||||
|
||||
drupal_set_message($this->t('The file ids are %fids.', array('%fids' => implode(',', $fids))));
|
||||
}
|
||||
|
||||
}
|
6
core/modules/file/tests/file_test/file_test.info.yml
Normal file
6
core/modules/file/tests/file_test/file_test.info.yml
Normal file
|
@ -0,0 +1,6 @@
|
|||
name: 'File test'
|
||||
type: module
|
||||
description: 'Support module for file handling tests.'
|
||||
package: Testing
|
||||
version: VERSION
|
||||
core: 8.x
|
351
core/modules/file/tests/file_test/file_test.module
Normal file
351
core/modules/file/tests/file_test/file_test.module
Normal file
|
@ -0,0 +1,351 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Helper module for the file tests.
|
||||
*
|
||||
* The caller is must call file_test_reset() to initializing this module before
|
||||
* calling file_test_get_calls() or file_test_set_return().
|
||||
*/
|
||||
|
||||
use Drupal\file\Entity\File;
|
||||
|
||||
const FILE_URL_TEST_CDN_1 = 'http://cdn1.example.com';
|
||||
const FILE_URL_TEST_CDN_2 = 'http://cdn2.example.com';
|
||||
|
||||
/**
|
||||
* Reset/initialize the history of calls to the file_* hooks.
|
||||
*
|
||||
* @see file_test_get_calls()
|
||||
* @see file_test_reset()
|
||||
*/
|
||||
function file_test_reset() {
|
||||
// Keep track of calls to these hooks
|
||||
$results = array(
|
||||
'load' => array(),
|
||||
'validate' => array(),
|
||||
'download' => array(),
|
||||
'insert' => array(),
|
||||
'update' => array(),
|
||||
'copy' => array(),
|
||||
'move' => array(),
|
||||
'delete' => array(),
|
||||
);
|
||||
\Drupal::state()->set('file_test.results', $results);
|
||||
|
||||
// These hooks will return these values, see file_test_set_return().
|
||||
$return = array(
|
||||
'validate' => array(),
|
||||
'download' => NULL,
|
||||
);
|
||||
\Drupal::state()->set('file_test.return', $return);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the arguments passed to invocation of a given hook since
|
||||
* file_test_reset() was last called.
|
||||
*
|
||||
* @param string $op
|
||||
* One of the hook_file_* operations: 'load', 'validate', 'download',
|
||||
* 'insert', 'update', 'copy', 'move', 'delete'.
|
||||
*
|
||||
* @return array
|
||||
* Array of the parameters passed to each call.
|
||||
*
|
||||
* @see _file_test_log_call()
|
||||
* @see file_test_reset()
|
||||
*/
|
||||
function file_test_get_calls($op) {
|
||||
$results = \Drupal::state()->get('file_test.results') ?: array();
|
||||
return $results[$op];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array with the calls for all hooks.
|
||||
*
|
||||
* @return
|
||||
* An array keyed by hook name ('load', 'validate', 'download', 'insert',
|
||||
* 'update', 'copy', 'move', 'delete') with values being arrays of parameters
|
||||
* passed to each call.
|
||||
*/
|
||||
function file_test_get_all_calls() {
|
||||
return \Drupal::state()->get('file_test.results') ?: array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the values passed to a hook invocation.
|
||||
*
|
||||
* @param string $op
|
||||
* One of the hook_file_* operations: 'load', 'validate', 'download',
|
||||
* 'insert', 'update', 'copy', 'move', 'delete'.
|
||||
* @param array $args
|
||||
* Values passed to hook.
|
||||
*
|
||||
* @see file_test_get_calls()
|
||||
* @see file_test_reset()
|
||||
*/
|
||||
function _file_test_log_call($op, $args) {
|
||||
if (\Drupal::state()->get('file_test.count_hook_invocations', TRUE)) {
|
||||
$results = \Drupal::state()->get('file_test.results') ?: array();
|
||||
$results[$op][] = $args;
|
||||
\Drupal::state()->set('file_test.results', $results);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the appropriate return value.
|
||||
*
|
||||
* @param string $op
|
||||
* One of the hook_file_[validate,download] operations.
|
||||
*
|
||||
* @return mixed
|
||||
* Value set by file_test_set_return().
|
||||
*
|
||||
* @see file_test_set_return()
|
||||
* @see file_test_reset()
|
||||
*/
|
||||
function _file_test_get_return($op) {
|
||||
$return = \Drupal::state()->get('file_test.return') ?: array($op => NULL);
|
||||
return $return[$op];
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a return value for a given operation.
|
||||
*
|
||||
* @param string $op
|
||||
* One of the hook_file_[validate,download] operations.
|
||||
* @param mixed $value
|
||||
* Value for the hook to return.
|
||||
*
|
||||
* @see _file_test_get_return()
|
||||
* @see file_test_reset()
|
||||
*/
|
||||
function file_test_set_return($op, $value) {
|
||||
$return = \Drupal::state()->get('file_test.return') ?: array();
|
||||
$return[$op] = $value;
|
||||
\Drupal::state()->set('file_test.return', $return);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_ENTITY_TYPE_load() for file entities.
|
||||
*/
|
||||
function file_test_file_load($files) {
|
||||
foreach ($files as $file) {
|
||||
_file_test_log_call('load', array($file->id()));
|
||||
// Assign a value on the object so that we can test that the $file is passed
|
||||
// by reference.
|
||||
$file->file_test['loaded'] = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_validate().
|
||||
*/
|
||||
function file_test_file_validate(File $file) {
|
||||
_file_test_log_call('validate', array($file->id()));
|
||||
return _file_test_get_return('validate');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_download().
|
||||
*/
|
||||
function file_test_file_download($uri) {
|
||||
if (\Drupal::state()->get('file_test.allow_all', FALSE)) {
|
||||
$files = entity_load_multiple_by_properties('file', array('uri' => $uri));
|
||||
$file = reset($files);
|
||||
return file_get_content_headers($file);
|
||||
}
|
||||
_file_test_log_call('download', array($uri));
|
||||
return _file_test_get_return('download');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_ENTITY_TYPE_insert() for file entities.
|
||||
*/
|
||||
function file_test_file_insert(File $file) {
|
||||
_file_test_log_call('insert', array($file->id()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_ENTITY_TYPE_update() for file entities.
|
||||
*/
|
||||
function file_test_file_update(File $file) {
|
||||
_file_test_log_call('update', array($file->id()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_copy().
|
||||
*/
|
||||
function file_test_file_copy(File $file, $source) {
|
||||
_file_test_log_call('copy', array($file->id(), $source->id()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_move().
|
||||
*/
|
||||
function file_test_file_move(File $file, File $source) {
|
||||
_file_test_log_call('move', array($file->id(), $source->id()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_ENTITY_TYPE_predelete() for file entities.
|
||||
*/
|
||||
function file_test_file_predelete(File $file) {
|
||||
_file_test_log_call('delete', array($file->id()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_url_alter().
|
||||
*/
|
||||
function file_test_file_url_alter(&$uri) {
|
||||
// Only run this hook when this variable is set. Otherwise, we'd have to add
|
||||
// another hidden test module just for this hook.
|
||||
$alter_mode = \Drupal::state()->get('file_test.hook_file_url_alter');
|
||||
if (!$alter_mode) {
|
||||
return;
|
||||
}
|
||||
// Test alteration of file URLs to use a CDN.
|
||||
elseif ($alter_mode == 'cdn') {
|
||||
$cdn_extensions = array('css', 'js', 'gif', 'jpg', 'jpeg', 'png');
|
||||
|
||||
// Most CDNs don't support private file transfers without a lot of hassle,
|
||||
// so don't support this in the common case.
|
||||
$schemes = array('public');
|
||||
|
||||
$scheme = file_uri_scheme($uri);
|
||||
|
||||
// Only serve shipped files and public created files from the CDN.
|
||||
if (!$scheme || in_array($scheme, $schemes)) {
|
||||
// Shipped files.
|
||||
if (!$scheme) {
|
||||
$path = $uri;
|
||||
}
|
||||
// Public created files.
|
||||
else {
|
||||
$wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
|
||||
$path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
|
||||
}
|
||||
|
||||
// Clean up Windows paths.
|
||||
$path = str_replace('\\', '/', $path);
|
||||
|
||||
// Serve files with one of the CDN extensions from CDN 1, all others from
|
||||
// CDN 2.
|
||||
$pathinfo = pathinfo($path);
|
||||
if (array_key_exists('extension', $pathinfo) && in_array($pathinfo['extension'], $cdn_extensions)) {
|
||||
$uri = FILE_URL_TEST_CDN_1 . '/' . $path;
|
||||
}
|
||||
else {
|
||||
$uri = FILE_URL_TEST_CDN_2 . '/' . $path;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Test alteration of file URLs to use root-relative URLs.
|
||||
elseif ($alter_mode == 'root-relative') {
|
||||
// Only serve shipped files and public created files with root-relative
|
||||
// URLs.
|
||||
$scheme = file_uri_scheme($uri);
|
||||
if (!$scheme || $scheme == 'public') {
|
||||
// Shipped files.
|
||||
if (!$scheme) {
|
||||
$path = $uri;
|
||||
}
|
||||
// Public created files.
|
||||
else {
|
||||
$wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
|
||||
$path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
|
||||
}
|
||||
|
||||
// Clean up Windows paths.
|
||||
$path = str_replace('\\', '/', $path);
|
||||
|
||||
// Generate a root-relative URL.
|
||||
$uri = base_path() . '/' . $path;
|
||||
}
|
||||
}
|
||||
// Test alteration of file URLs to use protocol-relative URLs.
|
||||
elseif ($alter_mode == 'protocol-relative') {
|
||||
// Only serve shipped files and public created files with protocol-relative
|
||||
// URLs.
|
||||
$scheme = file_uri_scheme($uri);
|
||||
if (!$scheme || $scheme == 'public') {
|
||||
// Shipped files.
|
||||
if (!$scheme) {
|
||||
$path = $uri;
|
||||
}
|
||||
// Public created files.
|
||||
else {
|
||||
$wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
|
||||
$path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
|
||||
}
|
||||
|
||||
// Clean up Windows paths.
|
||||
$path = str_replace('\\', '/', $path);
|
||||
|
||||
// Generate a protocol-relative URL.
|
||||
$uri = '/' . base_path() . '/' . $path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_mimetype_mapping_alter().
|
||||
*/
|
||||
function file_test_file_mimetype_mapping_alter(&$mapping) {
|
||||
// Add new mappings.
|
||||
$mapping['mimetypes']['file_test_mimetype_1'] = 'madeup/file_test_1';
|
||||
$mapping['mimetypes']['file_test_mimetype_2'] = 'madeup/file_test_2';
|
||||
$mapping['mimetypes']['file_test_mimetype_3'] = 'madeup/doc';
|
||||
$mapping['extensions']['file_test_1'] = 'file_test_mimetype_1';
|
||||
$mapping['extensions']['file_test_2'] = 'file_test_mimetype_2';
|
||||
$mapping['extensions']['file_test_3'] = 'file_test_mimetype_2';
|
||||
// Override existing mapping.
|
||||
$mapping['extensions']['doc'] = 'file_test_mimetype_3';
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper validator that returns the $errors parameter.
|
||||
*/
|
||||
function file_test_validator(File $file, $errors) {
|
||||
return $errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for testing file_scan_directory().
|
||||
*
|
||||
* Each time the function is called the file is stored in a static variable.
|
||||
* When the function is called with no $filepath parameter, the results are
|
||||
* returned.
|
||||
*
|
||||
* @param string|NULL $filepath
|
||||
* File path
|
||||
* @return array
|
||||
* If $filepath is NULL, an array of all previous $filepath parameters
|
||||
*/
|
||||
function file_test_file_scan_callback($filepath = NULL) {
|
||||
$files = &drupal_static(__FUNCTION__, array());
|
||||
if (isset($filepath)) {
|
||||
$files[] = $filepath;
|
||||
}
|
||||
else {
|
||||
return $files;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset static variables used by file_test_file_scan_callback().
|
||||
*/
|
||||
function file_test_file_scan_callback_reset() {
|
||||
drupal_static_reset('file_test_file_scan_callback');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_entity_info_alter().
|
||||
*/
|
||||
function file_test_entity_type_alter(&$entity_types) {
|
||||
if (\Drupal::state()->get('file_test_alternate_access_handler', FALSE)) {
|
||||
/** @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */
|
||||
$entity_types['file']
|
||||
->setAccessClass('Drupal\file_test\FileTestAccessControlHandler');
|
||||
}
|
||||
}
|
6
core/modules/file/tests/file_test/file_test.routing.yml
Normal file
6
core/modules/file/tests/file_test/file_test.routing.yml
Normal file
|
@ -0,0 +1,6 @@
|
|||
file.test:
|
||||
path: '/file-test/upload'
|
||||
defaults:
|
||||
_form: 'Drupal\file_test\Form\FileTestForm'
|
||||
requirements:
|
||||
_access: 'TRUE'
|
13
core/modules/file/tests/file_test/file_test.services.yml
Normal file
13
core/modules/file/tests/file_test/file_test.services.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
services:
|
||||
stream_wrapper.dummy_readonly:
|
||||
class: Drupal\file_test\StreamWrapper\DummyReadOnlyStreamWrapper
|
||||
tags:
|
||||
- { name: stream_wrapper, scheme: dummy-readonly }
|
||||
stream_wrapper.dummy_remote:
|
||||
class: Drupal\file_test\StreamWrapper\DummyRemoteStreamWrapper
|
||||
tags:
|
||||
- { name: stream_wrapper, scheme: dummy-remote }
|
||||
stream_wrapper.dummy:
|
||||
class: Drupal\file_test\StreamWrapper\DummyStreamWrapper
|
||||
tags:
|
||||
- { name: stream_wrapper, scheme: dummy }
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file_test\FileTestAccessControlHandler.
|
||||
*/
|
||||
|
||||
namespace Drupal\file_test;
|
||||
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\file\FileAccessFormatterControlHandlerInterface;
|
||||
use Drupal\file\FileAccessControlHandler;
|
||||
|
||||
/**
|
||||
* Defines a class for an alternate file access control handler.
|
||||
*/
|
||||
class FileTestAccessControlHandler extends FileAccessControlHandler implements FileAccessFormatterControlHandlerInterface {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
|
||||
\Drupal::state()->set('file_access_formatter_check', TRUE);
|
||||
return parent::checkAccess($entity, $operation, $langcode, $account);
|
||||
}
|
||||
|
||||
}
|
124
core/modules/file/tests/file_test/src/Form/FileTestForm.php
Normal file
124
core/modules/file/tests/file_test/src/Form/FileTestForm.php
Normal file
|
@ -0,0 +1,124 @@
|
|||
<?php
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file_test\Form\FileTestForm.
|
||||
*/
|
||||
|
||||
namespace Drupal\file_test\Form;
|
||||
|
||||
use Drupal\Core\Form\FormInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
|
||||
/**
|
||||
* File test form class.
|
||||
*/
|
||||
class FileTestForm implements FormInterface {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getFormId() {
|
||||
return '_file_test_form';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function buildForm(array $form, FormStateInterface $form_state) {
|
||||
$form['file_test_upload'] = array(
|
||||
'#type' => 'file',
|
||||
'#title' => t('Upload a file'),
|
||||
);
|
||||
$form['file_test_replace'] = array(
|
||||
'#type' => 'select',
|
||||
'#title' => t('Replace existing image'),
|
||||
'#options' => array(
|
||||
FILE_EXISTS_RENAME => t('Appends number until name is unique'),
|
||||
FILE_EXISTS_REPLACE => t('Replace the existing file'),
|
||||
FILE_EXISTS_ERROR => t('Fail with an error'),
|
||||
),
|
||||
'#default_value' => FILE_EXISTS_RENAME,
|
||||
);
|
||||
$form['file_subdir'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => t('Subdirectory for test file'),
|
||||
'#default_value' => '',
|
||||
);
|
||||
|
||||
$form['extensions'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => t('Allowed extensions.'),
|
||||
'#default_value' => '',
|
||||
);
|
||||
|
||||
$form['allow_all_extensions'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Allow all extensions?'),
|
||||
'#default_value' => FALSE,
|
||||
);
|
||||
|
||||
$form['is_image_file'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Is this an image file?'),
|
||||
'#default_value' => TRUE,
|
||||
);
|
||||
|
||||
$form['submit'] = array(
|
||||
'#type' => 'submit',
|
||||
'#value' => t('Submit'),
|
||||
);
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function validateForm(array &$form, FormStateInterface $form_state) {}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function submitForm(array &$form, FormStateInterface $form_state) {
|
||||
// Process the upload and perform validation. Note: we're using the
|
||||
// form value for the $replace parameter.
|
||||
if (!$form_state->isValueEmpty('file_subdir')) {
|
||||
$destination = 'temporary://' . $form_state->getValue('file_subdir');
|
||||
file_prepare_directory($destination, FILE_CREATE_DIRECTORY);
|
||||
}
|
||||
else {
|
||||
$destination = FALSE;
|
||||
}
|
||||
|
||||
// Setup validators.
|
||||
$validators = array();
|
||||
if ($form_state->getValue('is_image_file')) {
|
||||
$validators['file_validate_is_image'] = array();
|
||||
}
|
||||
|
||||
if ($form_state->getValue('allow_all_extensions')) {
|
||||
$validators['file_validate_extensions'] = array();
|
||||
}
|
||||
elseif (!$form_state->isValueEmpty('extensions')) {
|
||||
$validators['file_validate_extensions'] = array($form_state->getValue('extensions'));
|
||||
}
|
||||
|
||||
// The test for drupal_move_uploaded_file() triggering a warning is
|
||||
// unavoidable. We're interested in what happens afterwards in
|
||||
// file_save_upload().
|
||||
if (\Drupal::state()->get('file_test.disable_error_collection')) {
|
||||
define('SIMPLETEST_COLLECT_ERRORS', FALSE);
|
||||
}
|
||||
|
||||
$file = file_save_upload('file_test_upload', $validators, $destination, 0, $form_state->getValue('file_test_replace'));
|
||||
if ($file) {
|
||||
$form_state->setValue('file_test_upload', $file);
|
||||
drupal_set_message(t('File @filepath was uploaded.', array('@filepath' => $file->getFileUri())));
|
||||
drupal_set_message(t('File name is @filename.', array('@filename' => $file->getFilename())));
|
||||
drupal_set_message(t('File MIME type is @mimetype.', array('@mimetype' => $file->getMimeType())));
|
||||
drupal_set_message(t('You WIN!'));
|
||||
}
|
||||
elseif ($file === FALSE) {
|
||||
drupal_set_message(t('Epic upload FAIL!'), 'error');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file_test\StreamWrapper\DummyReadOnlyStreamWrapper.
|
||||
*/
|
||||
|
||||
namespace Drupal\file_test\StreamWrapper;
|
||||
|
||||
use Drupal\Core\StreamWrapper\LocalReadOnlyStream;
|
||||
|
||||
/**
|
||||
* Helper class for testing the stream wrapper registry.
|
||||
*
|
||||
* Dummy stream wrapper implementation (dummy-readonly://).
|
||||
*/
|
||||
class DummyReadOnlyStreamWrapper extends LocalReadOnlyStream {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getName() {
|
||||
return t('Dummy files (readonly)');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getDescription() {
|
||||
return t('Dummy wrapper for simpletest (readonly).');
|
||||
}
|
||||
|
||||
function getDirectoryPath() {
|
||||
return \Drupal::service('site.path') . '/files';
|
||||
}
|
||||
|
||||
/**
|
||||
* Override getInternalUri().
|
||||
*
|
||||
* Return a dummy path for testing.
|
||||
*/
|
||||
function getInternalUri() {
|
||||
return '/dummy/example.txt';
|
||||
}
|
||||
|
||||
/**
|
||||
* Override getExternalUrl().
|
||||
*
|
||||
* Return the HTML URI of a public file.
|
||||
*/
|
||||
function getExternalUrl() {
|
||||
return '/dummy/example.txt';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file_test\StreamWrapper\DummyRemoteStreamWrapper.
|
||||
*/
|
||||
|
||||
namespace Drupal\file_test\StreamWrapper;
|
||||
|
||||
use Drupal\Core\StreamWrapper\PublicStream;
|
||||
|
||||
/**
|
||||
* Helper class for testing the stream wrapper registry.
|
||||
*
|
||||
* Dummy remote stream wrapper implementation (dummy-remote://).
|
||||
*
|
||||
* Basically just the public scheme but not returning a local file for realpath.
|
||||
*/
|
||||
class DummyRemoteStreamWrapper extends PublicStream {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getName() {
|
||||
return t('Dummy files (remote)');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getDescription() {
|
||||
return t('Dummy wrapper for simpletest (remote).');
|
||||
}
|
||||
|
||||
function realpath() {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\file_test\StreamWrapper\DummyStreamWrapper.
|
||||
*/
|
||||
|
||||
namespace Drupal\file_test\StreamWrapper;
|
||||
|
||||
use Drupal\Core\StreamWrapper\LocalStream;
|
||||
|
||||
/**
|
||||
* Helper class for testing the stream wrapper registry.
|
||||
*
|
||||
* Dummy stream wrapper implementation (dummy://).
|
||||
*/
|
||||
class DummyStreamWrapper extends LocalStream {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getName() {
|
||||
return t('Dummy files');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getDescription() {
|
||||
return t('Dummy wrapper for simpletest.');
|
||||
}
|
||||
|
||||
function getDirectoryPath() {
|
||||
return \Drupal::service('site.path') . '/files';
|
||||
}
|
||||
|
||||
/**
|
||||
* Override getInternalUri().
|
||||
*
|
||||
* Return a dummy path for testing.
|
||||
*/
|
||||
function getInternalUri() {
|
||||
return '/dummy/example.txt';
|
||||
}
|
||||
|
||||
/**
|
||||
* Override getExternalUrl().
|
||||
*
|
||||
* Return the HTML URI of a public file.
|
||||
*/
|
||||
function getExternalUrl() {
|
||||
return '/dummy/example.txt';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
name: 'File test views'
|
||||
type: module
|
||||
description: 'Provides default views for views file tests.'
|
||||
package: Testing
|
||||
version: VERSION
|
||||
core: 8.x
|
||||
dependencies:
|
||||
- file
|
||||
- views
|
|
@ -0,0 +1,48 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies: { }
|
||||
id: file_extension_view
|
||||
label: 'Test view for file extension views field handler'
|
||||
module: views
|
||||
description: ''
|
||||
tag: ''
|
||||
base_table: file_managed
|
||||
base_field: fid
|
||||
core: '8'
|
||||
display:
|
||||
default:
|
||||
display_options:
|
||||
defaults:
|
||||
fields: false
|
||||
pager: false
|
||||
sorts: false
|
||||
fields:
|
||||
fid:
|
||||
field: fid
|
||||
id: fid
|
||||
relationship: none
|
||||
table: file_managed
|
||||
plugin_id: field
|
||||
extension:
|
||||
field: extension
|
||||
id: extension
|
||||
relationship: none
|
||||
table: file_managed
|
||||
plugin_id: field
|
||||
type: file_extension
|
||||
pager:
|
||||
options:
|
||||
offset: 0
|
||||
type: none
|
||||
sorts:
|
||||
fid:
|
||||
field: fid
|
||||
id: fid
|
||||
order: ASC
|
||||
relationship: none
|
||||
table: file_managed
|
||||
plugin_id: standard
|
||||
display_plugin: default
|
||||
display_title: Master
|
||||
id: default
|
||||
position: 0
|
|
@ -0,0 +1,77 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- file
|
||||
- user
|
||||
id: test_file_user_file_data
|
||||
label: test_file_user_file_data
|
||||
module: views
|
||||
description: ''
|
||||
tag: ''
|
||||
base_table: users_field_data
|
||||
base_field: uid
|
||||
core: 8.x
|
||||
display:
|
||||
default:
|
||||
display_plugin: default
|
||||
id: default
|
||||
display_title: Master
|
||||
position: 0
|
||||
display_options:
|
||||
access:
|
||||
type: perm
|
||||
options:
|
||||
perm: 'access user profiles'
|
||||
cache:
|
||||
type: tag
|
||||
style:
|
||||
type: table
|
||||
options:
|
||||
grouping: { }
|
||||
row_class: ''
|
||||
default_row_class: true
|
||||
override: true
|
||||
sticky: false
|
||||
caption: ''
|
||||
summary: ''
|
||||
description: ''
|
||||
columns:
|
||||
name: name
|
||||
fid: fid
|
||||
info:
|
||||
name:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
fid:
|
||||
sortable: false
|
||||
default_sort_order: asc
|
||||
align: ''
|
||||
separator: ''
|
||||
empty_column: false
|
||||
responsive: ''
|
||||
default: '-1'
|
||||
empty_table: false
|
||||
row:
|
||||
type: fields
|
||||
options:
|
||||
inline: { }
|
||||
separator: ''
|
||||
hide_empty: false
|
||||
default_field_elements: true
|
||||
relationships:
|
||||
user_file_target_id:
|
||||
id: user_file_target_id
|
||||
table: user__user_file
|
||||
field: user_file_target_id
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: 'file from user_file'
|
||||
required: true
|
||||
plugin_id: standard
|
||||
arguments: { }
|
||||
display_extenders: { }
|
Reference in a new issue