From 4ecd40134e2a02b82ccb073baed3230afacf6383 Mon Sep 17 00:00:00 2001 From: RomainMazB Date: Wed, 13 Oct 2021 23:57:02 +0200 Subject: [PATCH 1/5] Add Exception on wrong relation type in relation formwidget --- modules/backend/formwidgets/Relation.php | 9 +++++++++ modules/backend/lang/en/lang.php | 1 + modules/backend/lang/fr/lang.php | 1 + 3 files changed, 11 insertions(+) diff --git a/modules/backend/formwidgets/Relation.php b/modules/backend/formwidgets/Relation.php index 2e2b3b8c4f..f0290903d8 100644 --- a/modules/backend/formwidgets/Relation.php +++ b/modules/backend/formwidgets/Relation.php @@ -3,7 +3,9 @@ use Db; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; +use Illuminate\Support\Facades\Lang; use Winter\Storm\Database\Relations\Relation as RelationBase; +use Winter\Storm\Exception\ApplicationException; /** * Form Relationship @@ -95,6 +97,7 @@ public function prepareVars() /** * Makes the form object used for rendering a simple field type + * @throws ApplicationException */ protected function makeRenderFormField() { @@ -113,6 +116,12 @@ protected function makeRenderFormField() } elseif (in_array($relationType, ['belongsTo', 'hasOne'])) { $field->type = 'dropdown'; + } else { + throw new ApplicationException( + Lang::get('backend::lang.relation.relationwidget_unsupported_type', [ + 'type' => $relationType + ]) + ); } // Order query by the configured option. diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 6fbafc7a96..919e513edf 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -320,6 +320,7 @@ 'missing_model' => 'Relation behavior used in :class does not have a model defined.', 'invalid_action_single' => 'This action cannot be performed on a singular relationship.', 'invalid_action_multi' => 'This action cannot be performed on a multiple relationship.', + 'relationwidget_unsupported_type' => 'This relation type is unsupported by the Relation Widget: :type', 'help' => 'Click on an item to add', 'related_data' => 'Related :name data', 'add' => 'Add', diff --git a/modules/backend/lang/fr/lang.php b/modules/backend/lang/fr/lang.php index 13a5ee534a..e962ed48e3 100644 --- a/modules/backend/lang/fr/lang.php +++ b/modules/backend/lang/fr/lang.php @@ -297,6 +297,7 @@ 'missing_model' => 'La behavior relation utilisée dans la classe :class n’a pas de modèle défini.', 'invalid_action_single' => 'Cette action ne peut être effectuée sur une relation unitaire.', 'invalid_action_multi' => 'Cette action ne peut être effectuée sur une relation multiple.', + 'relationwidget_unsupported_type' => 'Ce type de relation n\'est pas supporté par le widget Relation: :type', 'help' => 'Cliquer sur un élément pour l’ajouter', 'related_data' => 'Donnée :name liée', 'add' => 'Ajouter', From d95a005c09708ab10187d3ea598639963f157316 Mon Sep 17 00:00:00 2001 From: Romain 'Maz' BILLOIR Date: Mon, 18 Oct 2021 10:45:54 +0200 Subject: [PATCH 2/5] Apply suggestions from code review Co-authored-by: Luke Towers Co-authored-by: Ben Thomson --- modules/backend/formwidgets/Relation.php | 2 +- modules/backend/lang/en/lang.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/backend/formwidgets/Relation.php b/modules/backend/formwidgets/Relation.php index f0290903d8..1dd06cde19 100644 --- a/modules/backend/formwidgets/Relation.php +++ b/modules/backend/formwidgets/Relation.php @@ -3,7 +3,7 @@ use Db; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; -use Illuminate\Support\Facades\Lang; +use Lang; use Winter\Storm\Database\Relations\Relation as RelationBase; use Winter\Storm\Exception\ApplicationException; diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 919e513edf..85c663afbc 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -320,7 +320,7 @@ 'missing_model' => 'Relation behavior used in :class does not have a model defined.', 'invalid_action_single' => 'This action cannot be performed on a singular relationship.', 'invalid_action_multi' => 'This action cannot be performed on a multiple relationship.', - 'relationwidget_unsupported_type' => 'This relation type is unsupported by the Relation Widget: :type', + 'relationwidget_unsupported_type' => 'The ":type" relation type is unsupported by the Relation widget', 'help' => 'Click on an item to add', 'related_data' => 'Related :name data', 'add' => 'Add', From 134aea59c1ab1f957848789514dcc19e57f002d4 Mon Sep 17 00:00:00 2001 From: RomainMazB Date: Mon, 18 Oct 2021 10:49:15 +0200 Subject: [PATCH 3/5] Apply suggestions from code review --- modules/backend/formwidgets/Relation.php | 6 +++--- modules/backend/lang/en/lang.php | 2 +- modules/backend/lang/fr/lang.php | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/backend/formwidgets/Relation.php b/modules/backend/formwidgets/Relation.php index 1dd06cde19..2c464cce3e 100644 --- a/modules/backend/formwidgets/Relation.php +++ b/modules/backend/formwidgets/Relation.php @@ -5,7 +5,7 @@ use Backend\Classes\FormWidgetBase; use Lang; use Winter\Storm\Database\Relations\Relation as RelationBase; -use Winter\Storm\Exception\ApplicationException; +use Winter\Storm\Exception\SystemException; /** * Form Relationship @@ -97,7 +97,7 @@ public function prepareVars() /** * Makes the form object used for rendering a simple field type - * @throws ApplicationException + * @throws SystemException */ protected function makeRenderFormField() { @@ -117,7 +117,7 @@ protected function makeRenderFormField() elseif (in_array($relationType, ['belongsTo', 'hasOne'])) { $field->type = 'dropdown'; } else { - throw new ApplicationException( + throw new SystemException( Lang::get('backend::lang.relation.relationwidget_unsupported_type', [ 'type' => $relationType ]) diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 85c663afbc..6fe8b20f31 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -320,7 +320,7 @@ 'missing_model' => 'Relation behavior used in :class does not have a model defined.', 'invalid_action_single' => 'This action cannot be performed on a singular relationship.', 'invalid_action_multi' => 'This action cannot be performed on a multiple relationship.', - 'relationwidget_unsupported_type' => 'The ":type" relation type is unsupported by the Relation widget', + 'relationwidget_unsupported_type' => 'The ":type" relation type is unsupported by the Relation widget.', 'help' => 'Click on an item to add', 'related_data' => 'Related :name data', 'add' => 'Add', diff --git a/modules/backend/lang/fr/lang.php b/modules/backend/lang/fr/lang.php index e962ed48e3..bc3ded4eac 100644 --- a/modules/backend/lang/fr/lang.php +++ b/modules/backend/lang/fr/lang.php @@ -297,7 +297,7 @@ 'missing_model' => 'La behavior relation utilisée dans la classe :class n’a pas de modèle défini.', 'invalid_action_single' => 'Cette action ne peut être effectuée sur une relation unitaire.', 'invalid_action_multi' => 'Cette action ne peut être effectuée sur une relation multiple.', - 'relationwidget_unsupported_type' => 'Ce type de relation n\'est pas supporté par le widget Relation: :type', + 'relationwidget_unsupported_type' => 'Le type de relation ":type" n\'est pas supporté par le widget Relation.', 'help' => 'Cliquer sur un élément pour l’ajouter', 'related_data' => 'Donnée :name liée', 'add' => 'Ajouter', From 1f6f2ff32fb8d7a4b51de472cf35410fdbd2772d Mon Sep 17 00:00:00 2001 From: Ben Thomson Date: Wed, 27 Oct 2021 14:02:15 +0800 Subject: [PATCH 4/5] Update modules/backend/formwidgets/Relation.php --- modules/backend/formwidgets/Relation.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/backend/formwidgets/Relation.php b/modules/backend/formwidgets/Relation.php index 2c464cce3e..5e8370a333 100644 --- a/modules/backend/formwidgets/Relation.php +++ b/modules/backend/formwidgets/Relation.php @@ -113,8 +113,7 @@ protected function makeRenderFormField() if (in_array($relationType, ['belongsToMany', 'morphToMany', 'morphedByMany', 'hasMany'])) { $field->type = 'checkboxlist'; - } - elseif (in_array($relationType, ['belongsTo', 'hasOne'])) { + } elseif (in_array($relationType, ['belongsTo', 'hasOne'])) { $field->type = 'dropdown'; } else { throw new SystemException( From 23f2397d7acfa672f0e86991f5081a23f707515e Mon Sep 17 00:00:00 2001 From: Ben Thomson Date: Wed, 27 Oct 2021 14:03:34 +0800 Subject: [PATCH 5/5] Update modules/backend/formwidgets/Relation.php --- modules/backend/formwidgets/Relation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/formwidgets/Relation.php b/modules/backend/formwidgets/Relation.php index 5e8370a333..e15462fcd7 100644 --- a/modules/backend/formwidgets/Relation.php +++ b/modules/backend/formwidgets/Relation.php @@ -97,7 +97,7 @@ public function prepareVars() /** * Makes the form object used for rendering a simple field type - * @throws SystemException + * @throws SystemException if an unsupported relation type is used. */ protected function makeRenderFormField() {