From b714d00d7f0562bf88260b407a23224279e676ae Mon Sep 17 00:00:00 2001 From: webchick <drupal@webchick.net> Date: Tue, 20 Sep 2016 12:16:27 -0700 Subject: [PATCH] =?UTF-8?q?Issue=20#2307451=20by=20martin=5Fq,=20G=C3=A1bo?= =?UTF-8?q?r=20Hojtsy,=20Manjit.Singh,=20Dave=20Reid,=20iantresman,=20gior?= =?UTF-8?q?gio79,=20swentel,=20slashrsm,=20Bojhan,=20yoroy,=20rymo,=20xjm,?= =?UTF-8?q?=20Wim=20Leers,=20Saphyel,=20tstoeckler:=20Image=20file=20field?= =?UTF-8?q?s=20do=20not=20limit=20accepted=20file=20types=20in=20HTML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/modules/file/src/Element/ManagedFile.php | 4 ++++ .../image/src/Plugin/Field/FieldWidget/ImageWidget.php | 3 +++ core/modules/image/src/Tests/ImageFieldWidgetTest.php | 1 + 3 files changed, 8 insertions(+) diff --git a/core/modules/file/src/Element/ManagedFile.php b/core/modules/file/src/Element/ManagedFile.php index 426f40c03aa9..f465b181ac32 100644 --- a/core/modules/file/src/Element/ManagedFile.php +++ b/core/modules/file/src/Element/ManagedFile.php @@ -49,6 +49,7 @@ public function getInfo() { '#attached' => [ 'library' => ['file/drupal.file'], ], + '#accept' => NULL, ]; } @@ -308,6 +309,9 @@ public static function processManagedFile(&$element, FormStateInterface $form_st '#weight' => -10, '#error_no_message' => TRUE, ]; + if (!empty($element['#accept'])) { + $element['upload']['#attributes'] = ['accept' => $element['#accept']]; + } if (!empty($fids) && $element['#files']) { foreach ($element['#files'] as $delta => $file) { diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php index 2fe584119da2..f881419c0ed2 100644 --- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php +++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php @@ -123,6 +123,9 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen $extensions = array_intersect(explode(' ', $extensions), $supported_extensions); $element['#upload_validators']['file_validate_extensions'][0] = implode(' ', $extensions); + // Add mobile device image capture acceptance. + $element['#accept'] = 'image/*'; + // Add properties needed by process() method. $element['#preview_image_style'] = $this->getSetting('preview_image_style'); $element['#title_field'] = $field_settings['title_field']; diff --git a/core/modules/image/src/Tests/ImageFieldWidgetTest.php b/core/modules/image/src/Tests/ImageFieldWidgetTest.php index 52d9e4d5ca65..85e764b41d73 100644 --- a/core/modules/image/src/Tests/ImageFieldWidgetTest.php +++ b/core/modules/image/src/Tests/ImageFieldWidgetTest.php @@ -25,6 +25,7 @@ public function testWidgetElement() { $this->createImageField($field_name, 'article', array(), $field_settings, array(), array(), 'Image test on [site:name]'); $this->drupalGet('node/add/article'); $this->assertNotEqual(0, count($this->xpath('//div[contains(@class, "field--widget-image-image")]')), 'Image field widget found on add/node page', 'Browser'); + $this->assertNotEqual(0, count($this->xpath('//input[contains(@accept, "image/*")]')), 'Image field widget limits accepted files.', 'Browser'); $this->assertNoText('Image test on [site:name]'); } -- GitLab