From 3a0ba1c541d1c53d6bbdcf9ae7d6508346df0262 Mon Sep 17 00:00:00 2001 From: eileen Date: Wed, 23 May 2018 15:23:40 +1200 Subject: [PATCH] Remove inheritance of MembershipConfig form from MembershipStatus form. This is part of trying to move towards an entity form (ie. support custom data) for MembershipType. Currently the 2 forms share a parent class - but really the add buttons is the only shared functionality. This change uses the EntityTrait to add the buttons as well. There is some minor tidy up in there but I tried to keep it very limited. I switched only one field over to being added via addField, the parent mechanism so far --- CRM/Core/Form/EntityFormTrait.php | 2 +- CRM/Member/DAO/MembershipStatus.php | 19 ++++- CRM/Member/Form/MembershipConfig.php | 5 -- CRM/Member/Form/MembershipStatus.php | 81 ++++++++++++++----- .../CRM/Member/Form/MembershipStatus.tpl | 12 +-- xml/schema/Member/MembershipStatus.xml | 18 ++++- 6 files changed, 104 insertions(+), 33 deletions(-) diff --git a/CRM/Core/Form/EntityFormTrait.php b/CRM/Core/Form/EntityFormTrait.php index c102c94e7f..76b1a2cd69 100644 --- a/CRM/Core/Form/EntityFormTrait.php +++ b/CRM/Core/Form/EntityFormTrait.php @@ -161,7 +161,7 @@ trait CRM_Core_Form_EntityFormTrait { protected function addEntityFieldsToTemplate() { foreach ($this->getEntityFields() as $fieldSpec) { if (empty($fieldSpec['not-auto-addable'])) { - $this->addField($fieldSpec['name']); + $this->addField($fieldSpec['name'], [], CRM_Utils_Array::value('required', $fieldSpec)); } } } diff --git a/CRM/Member/DAO/MembershipStatus.php b/CRM/Member/DAO/MembershipStatus.php index bf4302c3eb..e38b155933 100644 --- a/CRM/Member/DAO/MembershipStatus.php +++ b/CRM/Member/DAO/MembershipStatus.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipStatus.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:dfe977e53a6b66703ab4eca3560048e6) + * (GenCodeChecksum:ea7435287a239f4851dd354150980069) */ /** @@ -186,6 +186,9 @@ class CRM_Member_DAO_MembershipStatus extends CRM_Core_DAO { 'entity' => 'MembershipStatus', 'bao' => 'CRM_Member_BAO_MembershipStatus', 'localizable' => 1, + 'html' => [ + 'type' => 'Text', + ], ], 'start_event' => [ 'name' => 'start_event', @@ -292,12 +295,15 @@ class CRM_Member_DAO_MembershipStatus extends CRM_Core_DAO { 'is_admin' => [ 'name' => 'is_admin', 'type' => CRM_Utils_Type::T_BOOLEAN, - 'title' => ts('Admin Assigned Only?'), + 'title' => ts('Administrator Only?'), 'description' => 'Is this status for admin/manual assignment only.', 'table_name' => 'civicrm_membership_status', 'entity' => 'MembershipStatus', 'bao' => 'CRM_Member_BAO_MembershipStatus', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + ], ], 'weight' => [ 'name' => 'weight', @@ -317,6 +323,9 @@ class CRM_Member_DAO_MembershipStatus extends CRM_Core_DAO { 'entity' => 'MembershipStatus', 'bao' => 'CRM_Member_BAO_MembershipStatus', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + ], ], 'is_active' => [ 'name' => 'is_active', @@ -328,6 +337,9 @@ class CRM_Member_DAO_MembershipStatus extends CRM_Core_DAO { 'entity' => 'MembershipStatus', 'bao' => 'CRM_Member_BAO_MembershipStatus', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + ], ], 'is_reserved' => [ 'name' => 'is_reserved', @@ -338,6 +350,9 @@ class CRM_Member_DAO_MembershipStatus extends CRM_Core_DAO { 'entity' => 'MembershipStatus', 'bao' => 'CRM_Member_BAO_MembershipStatus', 'localizable' => 0, + 'html' => [ + 'type' => 'CheckBox', + ], ], ]; CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); diff --git a/CRM/Member/Form/MembershipConfig.php b/CRM/Member/Form/MembershipConfig.php index a18034dc84..357a74bf0f 100644 --- a/CRM/Member/Form/MembershipConfig.php +++ b/CRM/Member/Form/MembershipConfig.php @@ -53,11 +53,6 @@ class CRM_Member_Form_MembershipConfig extends CRM_Core_Form { */ protected $_BAOName; - public function preProcess() { - $this->_id = $this->get('id'); - $this->_BAOName = $this->get('BAOName'); - } - /** * Set default values for the form. MobileProvider that in edit/view mode * the default values are retrieved from the database diff --git a/CRM/Member/Form/MembershipStatus.php b/CRM/Member/Form/MembershipStatus.php index 7600d88181..5a47ed7e97 100644 --- a/CRM/Member/Form/MembershipStatus.php +++ b/CRM/Member/Form/MembershipStatus.php @@ -34,8 +34,9 @@ /** * This class generates form components for Membership Type */ -class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig { +class CRM_Member_Form_MembershipStatus extends CRM_Core_Form { + use CRM_Core_Form_EntityFormTrait; /** * Explicitly declare the entity api name. @@ -51,15 +52,70 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig return 'create'; } + /** + * Fields for the entity to be assigned to the template. + * + * Fields may have keys + * - name (required to show in tpl from the array) + * - description (optional, will appear below the field) + * - not-auto-addable - this class will not attempt to add the field using addField. + * (this will be automatically set if the field does not have html in it's metadata + * or is not a core field on the form's entity). + * - help (optional) add help to the field - e.g ['id' => 'id-source', 'file' => 'CRM/Contact/Form/Contact']] + * - template - use a field specific template to render this field + * @var array + */ + protected $entityFields = []; + + /** + * Set entity fields to be assigned to the form. + */ + protected function setEntityFields() { + $this->entityFields = [ + 'label' => [ + 'name' => 'label', + 'description' => ts("Display name for this Membership status (e.g. New, Current, Grace, Expired...)."), + 'required' => TRUE, + ], + 'is_admin' => [ + 'name' => 'is_admin', + 'description' => ts("Check this box if this status is for use by administrative staff only. If checked, this status is never automatically assigned by CiviMember. It is assigned to a contact's Membership by checking the Status Override flag when adding or editing the Membership record. Start and End Event settings are ignored for Administrator statuses. EXAMPLE: This setting can be useful for special case statuses like 'Non-expiring', 'Barred' or 'Expelled', etc."), + ], + ]; + } + + /** + * Set the delete message. + * + * We do this from the constructor in order to do a translation. + */ + public function setDeleteMessage() { + $this->deleteMessage = ts('WARNING: Deleting this option will result in the loss of all membership records of this status.') . ' ' . ts('This may mean the loss of a substantial amount of data, and the action cannot be undone.') . ' ' . ts('Do you want to continue?'); + } + + public function preProcess() { + $this->_id = $this->get('id'); + $this->_BAOName = 'CRM_Member_BAO_MembershipStatus'; + } + /** * Set default values for the form. MobileProvider that in edit/view mode * the default values are retrieved from the database * - * - * @return void + * @return array */ public function setDefaultValues() { - $defaults = parent::setDefaultValues(); + $defaults = array(); + + if ($this->getEntityId()) { + $params = array('id' => $this->getEntityId()); + $baoName = $this->_BAOName; + $baoName::retrieve($params, $defaults); + } + + if ($this->_action & CRM_Core_Action::ADD) { + $defaults['is_active'] = 1; + } //finding default weight to be put if (empty($defaults['weight'])) { @@ -70,18 +126,15 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig /** * Build the form object. - * - * @return void */ public function buildQuickForm() { + self::buildQuickEntityForm(); parent::buildQuickForm(); if ($this->_action & CRM_Core_Action::DELETE) { return; } - $this->applyFilter('__ALL__', 'trim'); - if ($this->_id) { $name = $this->add('text', 'name', ts('Name'), CRM_Core_DAO::getAttribute('CRM_Member_DAO_MembershipStatus', 'name') @@ -89,9 +142,6 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig $name->freeze(); $this->assign('id', $this->_id); } - $this->add('text', 'label', ts('Label'), - CRM_Core_DAO::getAttribute('CRM_Member_DAO_MembershipStatus', 'label'), TRUE - ); $this->addRule('label', ts('A membership status with this label already exists. Please select another label.'), 'objectExists', array('CRM_Member_DAO_MembershipStatus', $this->_id, 'name') ); @@ -107,7 +157,6 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig CRM_Core_DAO::getAttribute('CRM_Member_DAO_MembershipStatus', 'end_event_adjust_interval') ); $this->add('checkbox', 'is_current_member', ts('Current Membership?')); - $this->add('checkbox', 'is_admin', ts('Administrator Only?')); $this->add('text', 'weight', ts('Order'), CRM_Core_DAO::getAttribute('CRM_Member_DAO_MembershipStatus', 'weight') @@ -118,9 +167,6 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig /** * Process the form submission. - * - * - * @return void */ public function postProcess() { if ($this->_action & CRM_Core_Action::DELETE) { @@ -133,7 +179,6 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig CRM_Core_Session::setStatus(ts('Selected membership status has been deleted.'), ts('Record Deleted'), 'success'); } else { - $params = $ids = array(); // store the submitted values in an array $params = $this->exportValues(); $params['is_active'] = CRM_Utils_Array::value('is_active', $params, FALSE); @@ -142,7 +187,7 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig $params['is_default'] = CRM_Utils_Array::value('is_default', $params, FALSE); if ($this->_action & CRM_Core_Action::UPDATE) { - $ids['membershipStatus'] = $this->_id; + $params['id'] = $this->getEntityId(); } $oldWeight = NULL; if ($this->_id) { @@ -155,7 +200,7 @@ class CRM_Member_Form_MembershipStatus extends CRM_Member_Form_MembershipConfig $params['name'] = $params['label']; } - $membershipStatus = CRM_Member_BAO_MembershipStatus::add($params, $ids); + $membershipStatus = CRM_Member_BAO_MembershipStatus::add($params); CRM_Core_Session::setStatus(ts('The membership status \'%1\' has been saved.', array(1 => $membershipStatus->label) ), ts('Saved'), 'success'); diff --git a/templates/CRM/Member/Form/MembershipStatus.tpl b/templates/CRM/Member/Form/MembershipStatus.tpl index d6bdbe176e..37f8147d05 100644 --- a/templates/CRM/Member/Form/MembershipStatus.tpl +++ b/templates/CRM/Member/Form/MembershipStatus.tpl @@ -27,12 +27,12 @@
{if $action eq 1}{ts}New Membership Status{/ts}{elseif $action eq 2}{ts}Edit Membership Status{/ts}{else}{ts}Delete Membership Status{/ts}{/if}
{include file="CRM/common/formButtons.tpl" location="top"}
- {if $action eq 8} -
-
- {ts}WARNING: Deleting this option will result in the loss of all membership records of this status.{/ts} {ts}This may mean the loss of a substantial amount of data, and the action cannot be undone.{/ts} {ts}Do you want to continue?{/ts} -
- {else} + {if $action eq 8} +
+
+ {$deleteMessage|escape} +
+ {else} {if $action eq 2} diff --git a/xml/schema/Member/MembershipStatus.xml b/xml/schema/Member/MembershipStatus.xml index b25d44f453..5ef3ce5004 100644 --- a/xml/schema/Member/MembershipStatus.xml +++ b/xml/schema/Member/MembershipStatus.xml @@ -31,9 +31,13 @@ label + Label varchar 128 true + + Text + Label for Membership Status 3.2 @@ -110,9 +114,12 @@ is_admin - Admin Assigned Only? + Administrator Only? boolean Is this status for admin/manual assignment only. + + CheckBox + 1.5 @@ -125,6 +132,9 @@ is_default Default Status? boolean + + CheckBox + Assign this status to a membership record if no other status match is found. 1.5 @@ -133,6 +143,9 @@ Is Activeboolean1 + + CheckBox + Is this membership_status enabled.1.5 @@ -141,6 +154,9 @@ Is Reservedboolean0 + + CheckBox + Is this membership_status reserved.2.1 -- 2.25.1