*
* @package CRM
* @copyright CiviCRM LLC (c) 2004-2018
- * $Id$
- *
*/
/**
*/
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.
+ *
+ * If the postProcess form cannot use the api & instead uses a BAO function it will need.
+ * $params['custom'] = CRM_Core_BAO_CustomField::postProcess($submitted, $this->_id, $this->getDefaultEntity());
+ *
+ * @param CRM_Core_Form $form
+ * @param null|string $subType values stored in civicrm_custom_group.extends_entity_column_value
+ * e.g Student for contact type
+ * @param null|string $subName value in civicrm_custom_group.extends_entity_column_id
+ * @param null|int $groupCount number of entities that could have custom data
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public static function addToForm(&$form, $subType = NULL, $subName = 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
* @param string $type
* @param null|int $entityID
* @param null $onlySubType
+ *
+ * @throws \CRM_Core_Exception
*/
public static function preProcess(
&$form, $subName = NULL, $subType = NULL,
public $_priceSet;
/**
- * The id of the participation that we are proceessing.
+ * The id of the participation that we are processing.
*
* @var int
*/
// when custom data is included in this page
if (!empty($_POST['hidden_custom'])) {
+ $eventId = (int) CRM_Utils_Array::value('event_id', $_POST);
// Custom data of type participant role
// Note: Some earlier commits imply $_POST['role_id'] could be a comma separated string,
// not sure if that ever really happens
}
//custom data of type participant event
- CRM_Custom_Form_CustomData::preProcess($this, $this->_eventNameCustomDataTypeID, $_POST['event_id'], 1, 'Participant', $this->_id);
+ CRM_Custom_Form_CustomData::preProcess($this, $this->_eventNameCustomDataTypeID, $eventId, 1, 'Participant', $this->_id);
CRM_Custom_Form_CustomData::buildQuickForm($this);
CRM_Custom_Form_CustomData::setDefaultValues($this);
// custom data of type participant event type
$eventTypeId = NULL;
- if ($eventId = CRM_Utils_Array::value('event_id', $_POST)) {
+ if ($eventId) {
$eventTypeId = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $eventId, 'event_type_id', 'id');
}
CRM_Custom_Form_CustomData::preProcess($this, $this->_eventTypeCustomDataTypeID, $eventTypeId,
);
$customFields = CRM_Utils_Array::crmArrayMerge($customFieldsEvent, $customFields);
$customFields = CRM_Utils_Array::crmArrayMerge($customFieldsEventType, $customFields);
- $params['custom'] = CRM_Core_BAO_CustomField::postProcess($params,
- $this->_id,
- 'Participant'
- );
+
+ $params['custom'] = CRM_Core_BAO_CustomField::postProcess($params, $this->_id, $this->getDefaultEntity());
}
//do cleanup line items if participant edit the Event Fee.
*/
public $_priceSet;
+ /**
+ * Explicitly declare the entity api name.
+ */
+ public function getDefaultEntity() {
+ return 'Membership';
+ }
+
/**
* Values submitted to the form, processed along the way.
*
$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);
// CRM-4395, get the online pending contribution id.
$this->_onlinePendingContributionId = NULL;
$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(