From 313d2f648f2b7419da4faae390fdf6058229ad44 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Fri, 5 Apr 2024 14:29:56 +0200 Subject: [PATCH] Show error messages for missing configuration values --- CRM/Twingle/Form/Profile.php | 16 +++++ CRM/Twingle/Profile.php | 122 ++++++++++++++++++++++++++--------- 2 files changed, 106 insertions(+), 32 deletions(-) diff --git a/CRM/Twingle/Form/Profile.php b/CRM/Twingle/Form/Profile.php index 28a3340..af1832a 100644 --- a/CRM/Twingle/Form/Profile.php +++ b/CRM/Twingle/Form/Profile.php @@ -562,10 +562,26 @@ class CRM_Twingle_Form_Profile extends CRM_Core_Form { foreach ($profile_data as $element_name => $value) { $defaults[$element_name] = $value; } + // backwards compatibility, see issue #27 if (!isset($profile_data['campaign_targets'])) { $defaults['campaign_targets'] = ['contribution', 'contact']; } + + // Show warning when there is configuration missing for required fields. + $requiredConfig = CRM_Twingle_Profile::allowedAttributes(TRUE); + foreach ($requiredConfig as $key => $metadata) { + if (!isset($profile_data[$key]) && $metadata['required']) { + CRM_Core_Session::setStatus( + E::ts( + 'The required configuration option "%1" has no value. Saving the profile might set this option to a possibly unwanted default value.', + [1 => $metadata['label'] ?? $key] + ), + E::ts('Error'), + 'error' + ); + } + } } return $defaults; } diff --git a/CRM/Twingle/Profile.php b/CRM/Twingle/Profile.php index b50f7d2..523cb18 100644 --- a/CRM/Twingle/Profile.php +++ b/CRM/Twingle/Profile.php @@ -462,45 +462,103 @@ class CRM_Twingle_Profile { /** * Returns an array of attributes allowed for a profile. * - * @return array + * @return array|array */ - public static function allowedAttributes() { - return array_merge( + public static function allowedAttributes(bool $asMetadata = FALSE) { + $attributes = array_merge( [ - 'selector', - 'xcm_profile', - 'location_type_id', - 'location_type_id_organisation', - 'financial_type_id', - 'financial_type_id_recur', - 'sepa_creditor_id', - 'gender_male', - 'gender_female', - 'gender_other', - 'prefix_male', - 'prefix_female', - 'prefix_other', - 'newsletter_groups', - 'postinfo_groups', - 'donation_receipt_groups', - 'campaign', - 'campaign_targets', - 'contribution_source', - 'custom_field_mapping', - 'membership_type_id', - 'membership_type_id_recur', - 'membership_postprocess_call', - 'newsletter_double_opt_in', - 'required_address_components', + 'selector' => [ + 'label' => E::ts('Project IDs'), + 'required' => TRUE, + ], + 'xcm_profile' => ['required' => FALSE], + 'location_type_id' => [ + 'label' => E::ts('Location type'), + 'required' => TRUE, + ], + 'location_type_id_organisation' => [ + 'label' => E::ts('Location type for organisations'), + 'required' => TRUE, + ], + 'financial_type_id' => [ + 'label' => E::ts('Financial type'), + 'required' => TRUE, + ], + 'financial_type_id_recur' => [ + 'label' => E::ts('Financial type (recurring)'), + 'required' => TRUE, + ], + 'sepa_creditor_id' => [ + 'label' => E::ts('CiviSEPA creditor'), + 'required' => CRM_Twingle_Submission::civiSepaEnabled(), + ], + 'gender_male' => [ + 'label' => E::ts('Gender option for submitted value "male"'), + 'required' => TRUE, + ], + 'gender_female' => [ + 'label' => E::ts('Gender option for submitted value "female"'), + 'required' => TRUE, + ], + 'gender_other' => [ + 'label' => E::ts('Gender option for submitted value "other"'), + 'required' => TRUE, + ], + 'prefix_male' => [ + 'label' => E::ts('Prefix option for submitted value "male"'), + 'required' => TRUE, + ], + 'prefix_female' => [ + 'label' => E::ts('Prefix option for submitted value "female"'), + 'required' => TRUE, + ], + 'prefix_other' => [ + 'label' => E::ts('Prefix option for submitted value "other"'), + 'required' => TRUE, + ], + 'newsletter_groups' => ['required' => FALSE], + 'postinfo_groups' => ['required' => FALSE], + 'donation_receipt_groups' => ['required' => FALSE], + 'campaign' => ['required' => FALSE], + 'campaign_targets' => ['required' => FALSE], + 'contribution_source' => ['required' => FALSE], + 'custom_field_mapping' => ['required' => FALSE], + 'membership_type_id' => ['required' => FALSE], + 'membership_type_id_recur' => ['required' => FALSE], + 'membership_postprocess_call' => ['required' => FALSE], + 'newsletter_double_opt_in' => ['required' => FALSE], + 'required_address_components' => ['required' => FALSE], ], // Add payment methods. - array_keys(static::paymentInstruments()), + array_combine( + array_keys(static::paymentInstruments()), + array_map( + function ($value) { + return [ + 'label' => $value, + 'required' => TRUE, + ]; + }, + static::paymentInstruments() + )), // Add contribution status for all payment methods. - array_map(function ($attribute) { - return $attribute . '_status'; - }, array_keys(static::paymentInstruments())) + array_combine( + array_map(function($attribute) { + return $attribute . '_status'; + }, array_keys(static::paymentInstruments())), + array_map( + function($value) { + return [ + 'label' => $value . ' - ' . E::ts('Contribution Status'), + 'required' => TRUE, + ]; + }, + static::paymentInstruments() + )), ); + + return $asMetadata ? $attributes : array_keys($attributes); } /**