From b2f1ab29b06958b775d8a13c0fb2584d08ddb94d Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Sun, 9 Jun 2019 10:46:43 +1000 Subject: [PATCH] Improve I18n schema by including comments and default and NOT NULL or NULL statements to be more consistant with non lingual schema Minor improvement --- CRM/Core/CodeGen/I18n.php | 5 +- CRM/Core/I18n/SchemaStructure.php | 198 ++++++++++----------- tests/phpunit/CRM/Core/I18n/SchemaTest.php | 9 + 3 files changed, 112 insertions(+), 100 deletions(-) diff --git a/CRM/Core/CodeGen/I18n.php b/CRM/Core/CodeGen/I18n.php index ea648adaaaf7..3d3ecc1bcf41 100644 --- a/CRM/Core/CodeGen/I18n.php +++ b/CRM/Core/CodeGen/I18n.php @@ -36,8 +36,11 @@ public function generateSchemaStructure() { continue; } foreach ($table['fields'] as $field) { + $required = $field['required'] ? ' NOT NULL' : ''; + $default = $field['default'] ? ' DEFAULT ' . $field['default'] : ''; + $comment = $field['comment'] ? " COMMENT '" . $field['comment'] . "'" : ''; if ($field['localizable']) { - $columns[$table['name']][$field['name']] = $field['sqlType']; + $columns[$table['name']][$field['name']] = $field['sqlType'] . $required . $default . $comment; $widgets[$table['name']][$field['name']] = $field['widget']; } } diff --git a/CRM/Core/I18n/SchemaStructure.php b/CRM/Core/I18n/SchemaStructure.php index 439e5ec58f74..899d84423106 100644 --- a/CRM/Core/I18n/SchemaStructure.php +++ b/CRM/Core/I18n/SchemaStructure.php @@ -46,161 +46,161 @@ public static function &columns() { if (!$result) { $result = [ 'civicrm_location_type' => [ - 'display_name' => "varchar(64)", + 'display_name' => "varchar(64) COMMENT 'Location Type Display Name.'", ], 'civicrm_option_group' => [ - 'title' => "varchar(255)", - 'description' => "varchar(255)", + 'title' => "varchar(255) COMMENT 'Option Group title.'", + 'description' => "varchar(255) COMMENT 'Option group description.'", ], 'civicrm_relationship_type' => [ - 'label_a_b' => "varchar(64)", - 'label_b_a' => "varchar(64)", - 'description' => "varchar(255)", + 'label_a_b' => "varchar(64) COMMENT 'label for relationship of contact_a to contact_b.'", + 'label_b_a' => "varchar(64) COMMENT 'Optional label for relationship of contact_b to contact_a.'", + 'description' => "varchar(255) COMMENT 'Optional verbose description of the relationship type.'", ], 'civicrm_contact_type' => [ - 'label' => "varchar(64)", - 'description' => "text", + 'label' => "varchar(64) COMMENT 'localized Name of Contact Type.'", + 'description' => "text COMMENT 'localized Optional verbose description of the type.'", ], 'civicrm_batch' => [ - 'title' => "varchar(255)", - 'description' => "text", + 'title' => "varchar(255) COMMENT 'Friendly Name.'", + 'description' => "text COMMENT 'Description of this batch set.'", ], 'civicrm_premiums' => [ - 'premiums_intro_title' => "varchar(255)", - 'premiums_intro_text' => "text", - 'premiums_nothankyou_label' => "varchar(255)", + 'premiums_intro_title' => "varchar(255) COMMENT 'Title for Premiums section.'", + 'premiums_intro_text' => "text COMMENT 'Displayed in
at top of Premiums section of page. Text and HTML allowed.'", + 'premiums_nothankyou_label' => "varchar(255) COMMENT 'Label displayed for No Thank-you option in premiums block (e.g. No thank you)'", ], 'civicrm_membership_status' => [ - 'label' => "varchar(128)", + 'label' => "varchar(128) COMMENT 'Label for Membership Status'", ], 'civicrm_survey' => [ - 'title' => "varchar(255)", - 'instructions' => "text", - 'thankyou_title' => "varchar(255)", - 'thankyou_text' => "text", + 'title' => "varchar(255) NOT NULL COMMENT 'Title of the Survey.'", + 'instructions' => "text COMMENT 'Script instructions for volunteers to use for the survey.'", + 'thankyou_title' => "varchar(255) COMMENT 'Title for Thank-you page (header title tag, and display at the top of the page).'", + 'thankyou_text' => "text COMMENT 'text and html allowed. displayed above result on success page'", ], 'civicrm_participant_status_type' => [ - 'label' => "varchar(255)", + 'label' => "varchar(255) COMMENT 'localized label for display of this status type'", ], 'civicrm_case_type' => [ - 'title' => "varchar(64)", - 'description' => "varchar(255)", + 'title' => "varchar(64) NOT NULL COMMENT 'Natural language name for Case Type'", + 'description' => "varchar(255) COMMENT 'Description of the Case Type'", ], 'civicrm_tell_friend' => [ 'title' => "varchar(255)", - 'intro' => "text", - 'suggested_message' => "text", - 'thankyou_title' => "varchar(255)", - 'thankyou_text' => "text", + 'intro' => "text COMMENT 'Introductory message to contributor or participant displayed on the Tell a Friend form.'", + 'suggested_message' => "text COMMENT 'Suggested message to friends, provided as default on the Tell A Friend form.'", + 'thankyou_title' => "varchar(255) COMMENT 'Text for Tell a Friend thank you page header and HTML title.'", + 'thankyou_text' => "text COMMENT 'Thank you message displayed on success page.'", ], 'civicrm_custom_group' => [ - 'title' => "varchar(64)", - 'help_pre' => "text", - 'help_post' => "text", + 'title' => "varchar(64) NOT NULL COMMENT 'Friendly Name.'", + 'help_pre' => "text COMMENT 'Description and/or help text to display before fields in form.'", + 'help_post' => "text COMMENT 'Description and/or help text to display after fields in form.'", ], 'civicrm_custom_field' => [ - 'label' => "varchar(255)", - 'help_pre' => "text", - 'help_post' => "text", + 'label' => "varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this custom property).'", + 'help_pre' => "text COMMENT 'Description and/or help text to display before this field.'", + 'help_post' => "text COMMENT 'Description and/or help text to display after this field.'", ], 'civicrm_option_value' => [ - 'label' => "varchar(512)", - 'description' => "text", + 'label' => "varchar(512) NOT NULL COMMENT 'Option string as displayed to users - e.g. the label in an HTML OPTION tag.'", + 'description' => "text COMMENT 'Optional description.'", ], 'civicrm_group' => [ - 'title' => "varchar(64)", + 'title' => "varchar(64) COMMENT 'Name of Group.'", ], 'civicrm_contribution_page' => [ - 'title' => "varchar(255)", - 'intro_text' => "text", - 'pay_later_text' => "text", - 'pay_later_receipt' => "text", - 'initial_amount_label' => "varchar(255)", - 'initial_amount_help_text' => "text", - 'thankyou_title' => "varchar(255)", - 'thankyou_text' => "text", - 'thankyou_footer' => "text", - 'receipt_from_name' => "varchar(255)", - 'receipt_text' => "text", - 'footer_text' => "text", + 'title' => "varchar(255) COMMENT 'Contribution Page title. For top of page display'", + 'intro_text' => "text COMMENT 'Text and html allowed. Displayed below title.'", + 'pay_later_text' => "text COMMENT 'The text displayed to the user in the main form'", + 'pay_later_receipt' => "text COMMENT 'The receipt sent to the user instead of the normal receipt text'", + 'initial_amount_label' => "varchar(255) COMMENT 'Initial amount label for partial payment'", + 'initial_amount_help_text' => "text COMMENT 'Initial amount help text for partial payment'", + 'thankyou_title' => "varchar(255) COMMENT 'Title for Thank-you page (header title tag, and display at the top of the page).'", + 'thankyou_text' => "text COMMENT 'text and html allowed. displayed above result on success page'", + 'thankyou_footer' => "text COMMENT 'Text and html allowed. displayed at the bottom of the success page. Common usage is to include link(s) to other pages such as tell-a-friend, etc.'", + 'receipt_from_name' => "varchar(255) COMMENT 'FROM email name used for receipts generated by contributions to this contribution page.'", + 'receipt_text' => "text COMMENT 'text to include above standard receipt info on receipt email. emails are text-only, so do not allow html for now'", + 'footer_text' => "text COMMENT 'Text and html allowed. Displayed at the bottom of the first page of the contribution wizard.'", ], 'civicrm_product' => [ - 'name' => "varchar(255)", - 'description' => "text", - 'options' => "text", + 'name' => "varchar(255) NOT NULL COMMENT 'Required product/premium name'", + 'description' => "text COMMENT 'Optional description of the product/premium.'", + 'options' => "text COMMENT 'Store comma-delimited list of color, size, etc. options for the product.'", ], 'civicrm_payment_processor' => [ - 'title' => "varchar(127)", + 'title' => "varchar(127) COMMENT 'Payment Processor Descriptive Name.'", ], 'civicrm_membership_type' => [ - 'name' => "varchar(128)", - 'description' => "varchar(255)", + 'name' => "varchar(128) COMMENT 'Name of Membership Type'", + 'description' => "varchar(255) COMMENT 'Description of Membership Type'", ], 'civicrm_membership_block' => [ - 'new_title' => "varchar(255)", - 'new_text' => "text", - 'renewal_title' => "varchar(255)", - 'renewal_text' => "text", + 'new_title' => "varchar(255) COMMENT 'Title to display at top of block'", + 'new_text' => "text COMMENT 'Text to display below title'", + 'renewal_title' => "varchar(255) COMMENT 'Title for renewal'", + 'renewal_text' => "text COMMENT 'Text to display for member renewal'", ], 'civicrm_price_set' => [ - 'title' => "varchar(255)", - 'help_pre' => "text", - 'help_post' => "text", + 'title' => "varchar(255) NOT NULL COMMENT 'Displayed title for the Price Set.'", + 'help_pre' => "text COMMENT 'Description and/or help text to display before fields in form.'", + 'help_post' => "text COMMENT 'Description and/or help text to display after fields in form.'", ], 'civicrm_dashboard' => [ - 'label' => "varchar(255)", + 'label' => "varchar(255) COMMENT 'dashlet title'", ], 'civicrm_uf_group' => [ - 'title' => "varchar(64)", - 'frontend_title' => "varchar(64)", - 'help_pre' => "text", - 'help_post' => "text", - 'cancel_button_text' => "varchar(64)", - 'submit_button_text' => "varchar(64)", + 'title' => "varchar(64) NOT NULL COMMENT 'Form title.'", + 'frontend_title' => "varchar(64) COMMENT 'Profile Form Public title'", + 'help_pre' => "text COMMENT 'Description and/or help text to display before fields in form.'", + 'help_post' => "text COMMENT 'Description and/or help text to display after fields in form.'", + 'cancel_button_text' => "varchar(64) DEFAULT NULL COMMENT 'Custom Text to display on the Cancel button when used in create or edit mode'", + 'submit_button_text' => "varchar(64) DEFAULT NULL COMMENT 'Custom Text to display on the submit button on profile edit/create screens'", ], 'civicrm_uf_field' => [ - 'help_post' => "text", - 'help_pre' => "text", - 'label' => "varchar(255)", + 'help_post' => "text COMMENT 'Description and/or help text to display after this field.'", + 'help_pre' => "text COMMENT 'Description and/or help text to display before this field.'", + 'label' => "varchar(255) NOT NULL COMMENT 'To save label for fields.'", ], 'civicrm_price_field' => [ - 'label' => "varchar(255)", - 'help_pre' => "text", - 'help_post' => "text", + 'label' => "varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this field).'", + 'help_pre' => "text COMMENT 'Description and/or help text to display before this field.'", + 'help_post' => "text COMMENT 'Description and/or help text to display after this field.'", ], 'civicrm_price_field_value' => [ - 'label' => "varchar(255)", - 'description' => "text", - 'help_pre' => "text", - 'help_post' => "text", + 'label' => "varchar(255) COMMENT 'Price field option label'", + 'description' => "text DEFAULT NULL COMMENT 'Price field option description.'", + 'help_pre' => "text DEFAULT NULL COMMENT 'Price field option pre help text.'", + 'help_post' => "text DEFAULT NULL COMMENT 'Price field option post field help.'", ], 'civicrm_pcp_block' => [ - 'link_text' => "varchar(255)", + 'link_text' => "varchar(255) DEFAULT NULL COMMENT 'Link text for PCP.'", ], 'civicrm_event' => [ - 'title' => "varchar(255)", - 'summary' => "text", - 'description' => "text", - 'registration_link_text' => "varchar(255)", - 'event_full_text' => "text", + 'title' => "varchar(255) COMMENT 'Event Title (e.g. Fall Fundraiser Dinner)'", + 'summary' => "text COMMENT 'Brief summary of event. Text and html allowed. Displayed on Event Registration form and can be used on other CMS pages which need an event summary.'", + 'description' => "text COMMENT 'Full description of event. Text and html allowed. Displayed on built-in Event Information screens.'", + 'registration_link_text' => "varchar(255) COMMENT 'Text for link to Event Registration form which is displayed on Event Information screen when is_online_registration is true.'", + 'event_full_text' => "text COMMENT 'Message to display on Event Information page and INSTEAD OF Event Registration form if maximum participants are signed up. Can include email address/info about getting on a waiting list, etc. Text and html allowed.'", 'fee_label' => "varchar(255)", - 'intro_text' => "text", - 'footer_text' => "text", - 'confirm_title' => "varchar(255)", - 'confirm_text' => "text", - 'confirm_footer_text' => "text", - 'confirm_email_text' => "text", - 'confirm_from_name' => "varchar(255)", - 'thankyou_title' => "varchar(255)", - 'thankyou_text' => "text", - 'thankyou_footer_text' => "text", - 'pay_later_text' => "text", - 'pay_later_receipt' => "text", - 'initial_amount_label' => "varchar(255)", - 'initial_amount_help_text' => "text", - 'waitlist_text' => "text", - 'approval_req_text' => "text", - 'template_title' => "varchar(255)", + 'intro_text' => "text COMMENT 'Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.'", + 'footer_text' => "text COMMENT 'Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.'", + 'confirm_title' => "varchar(255) DEFAULT NULL COMMENT 'Title for Confirmation page.'", + 'confirm_text' => "text COMMENT 'Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.'", + 'confirm_footer_text' => "text COMMENT 'Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.'", + 'confirm_email_text' => "text COMMENT 'text to include above standard event info on confirmation email. emails are text-only, so do not allow html for now'", + 'confirm_from_name' => "varchar(255) COMMENT 'FROM email name used for confirmation emails.'", + 'thankyou_title' => "varchar(255) DEFAULT NULL COMMENT 'Title for ThankYou page.'", + 'thankyou_text' => "text COMMENT 'ThankYou Text.'", + 'thankyou_footer_text' => "text COMMENT 'Footer message.'", + 'pay_later_text' => "text COMMENT 'The text displayed to the user in the main form'", + 'pay_later_receipt' => "text COMMENT 'The receipt sent to the user instead of the normal receipt text'", + 'initial_amount_label' => "varchar(255) COMMENT 'Initial amount label for partial payment'", + 'initial_amount_help_text' => "text COMMENT 'Initial amount help text for partial payment'", + 'waitlist_text' => "text COMMENT 'Text to display when the event is full, but participants can signup for a waitlist.'", + 'approval_req_text' => "text COMMENT 'Text to display when the approval is required to complete registration for an event.'", + 'template_title' => "varchar(255) COMMENT 'Event Template Title'", ], ]; } diff --git a/tests/phpunit/CRM/Core/I18n/SchemaTest.php b/tests/phpunit/CRM/Core/I18n/SchemaTest.php index ec0574eb4a65..a205b00db681 100644 --- a/tests/phpunit/CRM/Core/I18n/SchemaTest.php +++ b/tests/phpunit/CRM/Core/I18n/SchemaTest.php @@ -111,4 +111,13 @@ public function testI18nSchemaRewrite($table, $expectedRewrite) { } } + public function testSchemaBuild() { + CRM_Core_I18n_Schema::makeMultilingual('en_US'); + $testCreateTable = CRM_Core_DAO::executeQuery("show create table civicrm_price_set", [], TRUE, NULL, FALSE, FALSE); + while ($testCreateTable->fetch()) { + $this->assertContains("`title_en_US` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Displayed title for the Price Set.'", $testCreateTable->Create_Table); + $this->assertContains("`help_pre_en_US` text COLLATE utf8_unicode_ci COMMENT 'Description and/or help text to display before fields in form.'", $testCreateTable->Create_Table); + } + } + }