Skip to content

Commit

Permalink
Move towards generic custom data support for all forms
Browse files Browse the repository at this point in the history
  • Loading branch information
mattwire committed May 6, 2018
1 parent acfc2f2 commit 28bbc8d
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 12 deletions.
31 changes: 31 additions & 0 deletions CRM/Custom/Form/CustomData.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,35 @@
*/
class CRM_Custom_Form_CustomData {

/**
* Generic wrapper to add custom data to a form via a single line in preProcess.
* $this->getDefaultEntity() must be defined for the form class for this to work.
*
* You also have to add something like this to the postProcess:
* $params['custom'] = CRM_Core_BAO_CustomField::postProcess($submitted, $this->_id, $this->getDefaultEntity());
*
* @param CRM_Core_Form $form
* @param null|string $subName
* @param null|string $subType
* @param null|int $groupCount
*
* @throws \CRM_Core_Exception
*/
public static function addToForm(&$form, $subName = NULL, $subType = NULL, $groupCount = 1) {
$entityName = $form->getDefaultEntity();

// when custom data is included in this page
if (!empty($_POST['hidden_custom'])) {
self::preProcess($form, $subName, $subType, $groupCount, $entityName, $form->_id);
self::buildQuickForm($form);
self::setDefaultValues($form);
}
// need to assign custom data type and subtype to the template
$form->assign('customDataType', $entityName);
$form->assign('customDataSubType', $subType);
$form->assign('entityID', $form->_id);
}

/**
* @param CRM_Core_Form $form
* @param null|string $subName
Expand All @@ -46,6 +75,8 @@ class CRM_Custom_Form_CustomData {
* @param string $type
* @param null|int $entityID
* @param null $onlySubType
*
* @throws \CRM_Core_Exception
*/
public static function preProcess(
&$form, $subName = NULL, $subType = NULL,
Expand Down
7 changes: 7 additions & 0 deletions CRM/Member/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment {
*/
public $_priceSet;

/**
* Explicitly declare the entity api name.
*/
public function getDefaultEntity() {
return 'Membership';
}

/**
* Values submitted to the form, processed along the way.
*
Expand Down
14 changes: 3 additions & 11 deletions CRM/Member/Form/Membership.php
Original file line number Diff line number Diff line change
Expand Up @@ -243,12 +243,9 @@ public function preProcess() {
$this->_memType = $params['membership_type_id'][1];
}
}
// when custom data is included in this page
if (!empty($_POST['hidden_custom'])) {
CRM_Custom_Form_CustomData::preProcess($this, NULL, $this->_memType, 1, 'Membership', $this->_id);
CRM_Custom_Form_CustomData::buildQuickForm($this);
CRM_Custom_Form_CustomData::setDefaultValues($this);
}

// Add custom data to form
CRM_Custom_Form_CustomData::addToForm($this, $this->_memType, 1);

// CRM-4395, get the online pending contribution id.
$this->_onlinePendingContributionId = NULL;
Expand Down Expand Up @@ -455,11 +452,6 @@ public function buildQuickForm() {
$this->assign('hasPriceSets', $buildPriceSet);
}

//need to assign custom data type and subtype to the template
$this->assign('customDataType', 'Membership');
$this->assign('customDataSubType', $this->_memType);
$this->assign('entityID', $this->_id);

if ($this->_action & CRM_Core_Action::DELETE) {
$this->addButtons(array(
array(
Expand Down
2 changes: 1 addition & 1 deletion api/v3/utils.php
Original file line number Diff line number Diff line change
Expand Up @@ -1117,7 +1117,7 @@ function _civicrm_api3_format_params_for_create(&$params, $entity) {
}
$values = array();
_civicrm_api3_custom_format_params($params, $values, $entity);
$params = array_merge($params, $values);
$params = CRM_Utils_Array::crmArrayMerge($params, $values);
}

/**
Expand Down

0 comments on commit 28bbc8d

Please sign in to comment.