craftcms / cms

Build bespoke content experiences with Craft.
https://craftcms.com
Other
3.22k stars 627 forks source link

[4.x]: Specifying extraFileKinds and extraAllowedFileExtensions leads to an error when trying to update any matrix field's settings #13158

Closed andreimoment closed 1 year ago

andreimoment commented 1 year ago

What happened?

Description

In order to make it possible to upload and include .ics files in entries, I added the following to config/general.php:

        'extraFileKinds' =>[
            'ics' => [
                'extensions' => ['ics']
            ]
        ],

        'extraAllowedFileExtensions' =>['ics']

The config change worked as intended. It is now possible to upload and include .ics files in entries via Redactor's insert link functionality.

However, I am experiencing a strange error in an unrelated part of CraftCMS:

If I go to settings and try to open any of the matrix fields' setup (my.ddev.site/admin/settings/fields) , I get an error:

yii\base\ErrorException: Undefined array key "label" in /var/www/html/vendor/craftcms/cms/src/fields/Assets.php:275

If I remove the two new entries from the general.php file, or if I remove either one of the two new entries in the config file (!), I am able to go to settings and edit the matrix fields' settings without an issue.

I need the entries in the general.php file in order to add .ics support.

Steps to reproduce

While in dev mode (ddev)

  1. Add the two entries to general.php
  2. Go to settings and open any matrix field for editing

Expected behavior

To be able to edit the matrix field - like it was possible before updating general.php

Actual behavior

An error prevents me from accessing any matrix field's settings

The full text of the error:

yii\base\ErrorException: Undefined array key "label" in /var/www/html/vendor/craftcms/cms/src/fields/Assets.php:275
Stack trace:
#0 /var/www/html/vendor/craftcms/cms/src/web/ErrorHandler.php(79): yii\base\ErrorHandler->handleError(2, 'Undefined array...', '/var/www/html/v...', 275)
#1 /var/www/html/vendor/craftcms/cms/src/fields/Assets.php(275): craft\web\ErrorHandler->handleError(2, 'Undefined array...', '/var/www/html/v...', 275)
#2 /var/www/html/vendor/twig/twig/src/Extension/CoreExtension.php(1607): craft\fields\Assets->getFileKindOptions()
#3 /var/www/html/vendor/craftcms/cms/src/helpers/Template.php(146): twig_get_attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(craft\fields\Assets), 'getFileKindOpti...', Array, 'method', false, false)
#4 /var/www/html/storage/runtime/compiled_templates/49/49e8477cd46eb9db266d37306ade938b9a61be33b6868fadf0f2c9a2bf6a1edd.php(170): craft\helpers\Template::attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(craft\fields\Assets), 'getFileKindOpti...', Array, 'method')
#5 /var/www/html/vendor/twig/twig/src/Template.php(171): __TwigTemplate_e2570ac4c636815fb9ffe5f10d8fda5e2855d505adf700780e6471a31aa0cb10->block_fieldSettings(Array, Array)
#6 /var/www/html/storage/runtime/compiled_templates/a3/a39858eb9ae456369b65614ac161b8e0ea6fc688c162d1fc229335e72bed21d8.php(61): Twig\Template->displayBlock('fieldSettings', Array, Array)
#7 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_1dbed4d5aad75f39d51432051be8e776db808afab46cd6f685f1ef5285dfc067->doDisplay(Array, Array)
#8 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#9 /var/www/html/storage/runtime/compiled_templates/49/49e8477cd46eb9db266d37306ade938b9a61be33b6868fadf0f2c9a2bf6a1edd.php(54): Twig\Template->display(Array, Array)
#10 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_e2570ac4c636815fb9ffe5f10d8fda5e2855d505adf700780e6471a31aa0cb10->doDisplay(Array, Array)
#11 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#12 /var/www/html/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#13 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#14 /var/www/html/vendor/twig/twig/src/Environment.php(277): Twig\TemplateWrapper->render(Array)
#15 /var/www/html/vendor/craftcms/cms/src/web/View.php(456): Twig\Environment->render('_components/fie...', Array)
#16 /var/www/html/vendor/craftcms/cms/src/fields/BaseRelationField.php(412): craft\web\View->renderTemplate('_components/fie...', Array)
#17 /var/www/html/vendor/twig/twig/src/Extension/CoreExtension.php(1607): craft\fields\BaseRelationField->getSettingsHtml()
#18 /var/www/html/vendor/craftcms/cms/src/helpers/Template.php(146): twig_get_attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(craft\fields\Assets), 'getSettingsHtml', Array, 'method', false, false)
#19 /var/www/html/storage/runtime/compiled_templates/15/15143a4f8c738acd24d01681a3ad7b99fa00db9b21077d6817156f269b65dd52.php(558): craft\helpers\Template::attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(craft\fields\Assets), 'getSettingsHtml', Array, 'method')
#20 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_4dc4c0fb17032ff5399120c4acb6ee05c67e2ee6126c7a59c74e4f170dc0e7c7->doDisplay(Array, Array)
#21 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#22 /var/www/html/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#23 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#24 /var/www/html/vendor/twig/twig/src/Environment.php(277): Twig\TemplateWrapper->render(Array)
#25 /var/www/html/vendor/craftcms/cms/src/web/View.php(456): Twig\Environment->render('_components/fie...', Array)
#26 /var/www/html/vendor/craftcms/cms/src/fields/Matrix.php(489): craft\web\View->renderTemplate('_components/fie...', Array)
#27 /var/www/html/vendor/twig/twig/src/Extension/CoreExtension.php(1607): craft\fields\Matrix->getSettingsHtml()
#28 /var/www/html/vendor/craftcms/cms/src/helpers/Template.php(146): twig_get_attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(craft\fields\Matrix), 'getSettingsHtml', Array, 'method', false, false)
#29 /var/www/html/storage/runtime/compiled_templates/3c/3c5439d35eb69740559da3c78c73657697c12014c89af42afa0141d97b57a4ac.php(46): craft\helpers\Template::attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(craft\fields\Matrix), 'getSettingsHtml', Array, 'method')
#30 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_76cbbfd0dd7e6261c0c13bcb31153e73e24793174e52e1970be3f9edb8adc965->doDisplay(Array, Array)
#31 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#32 /var/www/html/storage/runtime/compiled_templates/c0/c0fef011571d580e816fafd2e020f62e325aaae252d347cc5f23a12a7537dfb2.php(258): Twig\Template->display(Array)
#33 /var/www/html/vendor/twig/twig/src/Template.php(171): __TwigTemplate_7df77b8541d2aceb807219ca59fa9fda384d02dc332dbc223b6e1a6a3b18b4e1->block_content(Array, Array)
#34 /var/www/html/storage/runtime/compiled_templates/8b/8b3e429acc4c7d24495c831acacddc47b7d4c5086e79f8492b9ff2cb06182479.php(592): Twig\Template->displayBlock('content', Array, Array)
#35 /var/www/html/vendor/twig/twig/src/Template.php(171): __TwigTemplate_1c4e86faf623e81368d1d971658c40c41f10c1dd55c1888d30854dc7eea2f9f6->block_main(Array, Array)
#36 /var/www/html/storage/runtime/compiled_templates/8b/8b3e429acc4c7d24495c831acacddc47b7d4c5086e79f8492b9ff2cb06182479.php(376): Twig\Template->displayBlock('main', Array, Array)
#37 /var/www/html/vendor/twig/twig/src/Template.php(171): __TwigTemplate_1c4e86faf623e81368d1d971658c40c41f10c1dd55c1888d30854dc7eea2f9f6->block_body(Array, Array)
#38 /var/www/html/storage/runtime/compiled_templates/eb/eb5905870e323414e164a4787e61df22274509d490bdb2902802d0f699ae73a5.php(94): Twig\Template->displayBlock('body', Array, Array)
#39 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_7076e083a53277fb3ce64a53bb328dedc779aeb04d53a79f03edf20028bb2c10->doDisplay(Array, Array)
#40 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#41 /var/www/html/storage/runtime/compiled_templates/88/8897eea7748b56e25227ecf77ac79c36a8ac9334f4ed2e0b2e30913980ac3056.php(56): Twig\Template->display(Array, Array)
#42 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_e566de1348b35f27222ea7d1cca1e0956bd97e345b21394bb70a4e1e55fe4c4d->doDisplay(Array, Array)
#43 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#44 /var/www/html/storage/runtime/compiled_templates/8b/8b3e429acc4c7d24495c831acacddc47b7d4c5086e79f8492b9ff2cb06182479.php(179): Twig\Template->display(Array, Array)
#45 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_1c4e86faf623e81368d1d971658c40c41f10c1dd55c1888d30854dc7eea2f9f6->doDisplay(Array, Array)
#46 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#47 /var/www/html/storage/runtime/compiled_templates/c0/c0fef011571d580e816fafd2e020f62e325aaae252d347cc5f23a12a7537dfb2.php(114): Twig\Template->display(Array, Array)
#48 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_7df77b8541d2aceb807219ca59fa9fda384d02dc332dbc223b6e1a6a3b18b4e1->doDisplay(Array, Array)
#49 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#50 /var/www/html/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#51 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(40): Twig\Template->render(Array, Array)
#52 /var/www/html/vendor/twig/twig/src/Environment.php(277): Twig\TemplateWrapper->render(Array)
#53 /var/www/html/vendor/craftcms/cms/src/web/View.php(456): Twig\Environment->render('settings/fields...', Array)
#54 /var/www/html/vendor/craftcms/cms/src/web/View.php(509): craft\web\View->renderTemplate('settings/fields...', Array)
#55 /var/www/html/vendor/craftcms/cms/src/web/TemplateResponseFormatter.php(56): craft\web\View->renderPageTemplate('settings/fields...', Array, 'cp')
#56 /var/www/html/vendor/yiisoft/yii2/web/Response.php(1098): craft\web\TemplateResponseFormatter->format(Object(craft\web\Response))
#57 /var/www/html/vendor/craftcms/cms/src/web/Response.php(286): yii\web\Response->prepare()
#58 /var/www/html/vendor/yiisoft/yii2/web/Response.php(339): craft\web\Response->prepare()
#59 /var/www/html/vendor/yiisoft/yii2/base/Application.php(390): yii\web\Response->send()
#60 /var/www/html/web/index.php(13): yii\base\Application->run()
#61 {main}

Craft CMS version

4.4.5

PHP version

8.0.28

Operating system and version

Linux 5.15.49-linuxkit

Database type and version

MariaDB 10.4.28

Image driver and version

Imagick 3.7.0 (ImageMagick 6.9.11-60)

Installed plugins and versions

- Amazon S3 2.0.3 Asset Usage 3.0.0 CodeMirror 2.0.0 Colour Swatches 4.2.1 CP Field Inspect 1.4.4 Dashboard Begone 2.0.0 Element API 3.0.1.1 Field Manager 3.0.5 Redactor 3.0.4 Redactor Tweaks 3.0.0 Servd Assets and Helpers 3.3.0

i-just commented 1 year ago

Hi, thanks for reaching out. The problem is that you’re missing the 'label' key in your extraFileKinds config. If you change it to, e.g.:

'extraFileKinds' => [
    'ics' => [
        'label'=> 'Calendar',
        'extensions' => ['ics']
    ]
],

If you’d like to add a new extension to an existing file kind (type), you don’t need a label. For example, if you wanted to add .psb to a Photoshop file kind. But if you want to add a file type, you need that label. The label will show when you edit an assets field (standalone or nested in a Matrix or other type of field), so you can then choose what file types (kinds) are allowed for your assets field.

Screenshot 2023-05-05 at 10 14 39

More info can be found in the comments in the code snippet in the documentation: https://craftcms.com/docs/4.x/config/general.html#extrafilekinds.

I hope this helps!

andreimoment commented 1 year ago

You are correct, I had missed the label. Adding the label resolved the issue. Thank you for the quick response. Not a bug - this was a user error.

Closing.