*/
/**
- *
+ * Back office participant form.
*
* @package CRM
* @copyright CiviCRM LLC https://civicrm.org/licensing
*/
/**
- * This class generates form components for processing a participation
- * in an event
+ * Back office participant form.
*/
class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment {
+ /**
+ * Participant ID - use getParticipantID.
+ *
+ * @var int
+ */
+ public $_pId;
+
+ /**
+ * ID of discount record.
+ *
+ * @var int
+ */
+ public $_discountId;
+
public $useLivePageJS = TRUE;
/**
/**
* If event is paid or unpaid.
+ *
* @var bool
*/
public $_isPaidEvent;
/**
* Page action.
+ *
* @var int
*/
public $_action;
/**
* Role Id.
+ *
* @var int
*/
protected $_roleId = NULL;
/**
* Event Type Id.
+ *
* @var int
*/
protected $_eventTypeId = NULL;
/**
* Participant status Id.
+ *
* @var int
*/
protected $_statusId = NULL;
/**
* Cache all the participant statuses.
+ *
* @var array
*/
protected $_participantStatuses;
/**
* Participant mode.
+ *
* @var string
*/
public $_mode = NULL;
/**
* Event ID preselect.
+ *
* @var int
*/
public $_eID = NULL;
/**
* Line Item for Price Set.
+ *
* @var array
*/
public $_lineItem = NULL;
/**
* Contribution mode for event registration for offline mode.
+ *
* @var string
* @deprecated
*/
/**
* Store id of role custom data type ( option value )
+ *
* @var int
*/
protected $_roleCustomDataTypeID;
/**
* Store id of event Name custom data type ( option value)
+ *
* @var int
*/
protected $_eventNameCustomDataTypeID;
/**
* Selected discount id.
+ *
* @var int
*/
public $_originalDiscountId = NULL;
/**
* Event id.
+ *
* @var int
*/
public $_eventId = NULL;
/**
* Id of payment, if any
+ *
* @var int
*/
public $_paymentId = NULL;
*/
public $_onlinePendingContributionId = NULL;
+ /**
+ * Stored participant record.
+ *
+ * @var array
+ */
+ protected $participantRecord;
+
/**
* Explicitly declare the entity api name.
*/
//CRM-15372 patch to fix fee amount replacing amount
$this->_params['fee_amount'] = $this->_params['amount'];
- $participants[] = $this->addParticipant($this, $contactID);
+ $participants[] = $this->addParticipant($this, $this->_params, $contactID);
//add custom data for participant
CRM_Core_BAO_CustomValueTable::postProcess($this->_params,
$form->addElement('hidden', 'hidden_feeblock', 1);
}
- $eventfullMsg = CRM_Event_BAO_Participant::eventFullMessage($form->_eventId, $form->_pId);
+ $eventfullMsg = CRM_Event_BAO_Participant::eventFullMessage($form->_eventId, $this->getParticipantID());
$form->addElement('hidden', 'hidden_eventFullMsg', $eventfullMsg, ['id' => 'hidden_eventFullMsg']);
}
- if ($form->_pId) {
- if (CRM_Core_DAO::getFieldValue('CRM_Event_DAO_ParticipantPayment',
- $form->_pId, 'contribution_id', 'participant_id'
- )
- ) {
- $form->_online = !$form->isBackOffice;
- }
- }
-
if ($form->_isPaidEvent) {
$params = ['id' => $form->_eventId];
CRM_Event_BAO_Event::retrieve($params, $event);
FALSE,
['class' => "crm-select2"]
);
-
- if ($form->_online) {
- $element->freeze();
- }
}
if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()
&& !CRM_Utils_Array::value('fee', $form->_values)
*
* @return array
*
- * @throws \CRM_Core_Exception
* @throws \CiviCRM_API3_Exception
*/
protected function preparePaidEventProcessing($params): array {
$participantStatus = CRM_Event_PseudoConstant::participantStatus();
- $contributionParams = ['skipCleanMoney' => TRUE];
+ $contributionParams = [
+ 'skipCleanMoney' => TRUE,
+ 'revenue_recognition_date' => $this->getRevenueRecognitionDate(),
+ ];
$lineItem = [];
$additionalParticipantDetails = [];
- if (Civi::settings()->get('deferred_revenue_enabled')) {
- $eventStartDate = $this->getEventValue('start_date');
- if (strtotime($eventStartDate) > strtotime(date('Ymt'))) {
- $contributionParams['revenue_recognition_date'] = date('Ymd', strtotime($eventStartDate));
- }
- }
+
if ($this->isPaymentOnExistingContribution()) {
- $participantBAO = new CRM_Event_BAO_Participant();
- $participantBAO->id = $this->_id;
- $participantBAO->find(TRUE);
- $contributionParams['total_amount'] = $participantBAO->fee_amount;
+ $contributionParams['total_amount'] = $this->getParticipantValue('fee_amount');
$params['discount_id'] = NULL;
//re-enter the values for UPDATE mode
- $params['fee_level'] = $params['amount_level'] = $participantBAO->fee_level;
- $params['fee_amount'] = $participantBAO->fee_amount;
+ $params['fee_level'] = $params['amount_level'] = $this->getParticipantValue('fee_level');
+ $params['fee_amount'] = $this->getParticipantValue('fee_amount');
if (isset($params['priceSetId'])) {
$lineItem[0] = CRM_Price_BAO_LineItem::getLineItems($this->_id);
}
'invoice_id'
);
}
+ $contribParams['revenue_recognition_date'] = $this->getRevenueRecognitionDate();
- if (Civi::settings()->get('deferred_revenue_enabled')) {
- $eventStartDate = CRM_Utils_Array::value(
- 'start_date',
- CRM_Utils_Array::value(
- 'event',
- $form->_values
- )
- );
- if (strtotime($eventStartDate) > strtotime(date('Ymt'))) {
- $contribParams['revenue_recognition_date'] = date('Ymd', strtotime($eventStartDate));
- }
- }
//create an contribution address
// The concept of contributeMode is deprecated. Elsewhere we use the function processBillingAddress() - although
// currently that is only inherited by back-office forms.
* Process the participant.
*
* @param CRM_Core_Form $form
+ * @param array $params
* @param int $contactID
*
* @return \CRM_Event_BAO_Participant
- * @throws \CiviCRM_API3_Exception
+ * @throws \CRM_Core_Exception
*/
- protected function addParticipant(&$form, $contactID) {
- if (empty($form->_params)) {
- return NULL;
- }
- $params = $form->_params;
+ protected function addParticipant(&$form, $params, $contactID) {
$transaction = new CRM_Core_Transaction();
// handle register date CRM-4320
}
$participantFields = CRM_Event_DAO_Participant::fields();
- $participantParams = array(
+ $participantParams = [
'id' => CRM_Utils_Array::value('participant_id', $params),
'contact_id' => $contactID,
'event_id' => $form->_eventId ? $form->_eventId : $params['event_id'],
'discount_id' => CRM_Utils_Array::value('discount_id', $params),
'fee_currency' => CRM_Utils_Array::value('currencyID', $params),
'campaign_id' => CRM_Utils_Array::value('campaign_id', $params),
- );
+ ];
if ($form->_action & CRM_Core_Action::PREVIEW || CRM_Utils_Array::value('mode', $params) == 'test') {
$participantParams['is_test'] = 1;
* @return bool
*/
protected function isPaymentOnExistingContribution(): bool {
- return ($this->_id && $this->_action & CRM_Core_Action::UPDATE) && $this->_paymentId;
+ return ($this->getParticipantID() && $this->_action & CRM_Core_Action::UPDATE) && $this->_paymentId;
}
/**
return $this->_event[$fieldName];
}
+ /**
+ * Get a value from the existing participant record (applies to edits).
+ *
+ * @param string $fieldName
+ *
+ * @return array
+ * @throws \CiviCRM_API3_Exception
+ */
+ protected function getParticipantValue($fieldName) {
+ if (!$this->participantRecord) {
+ $this->participantRecord = civicrm_api3('Participant', 'get', ['id' => $this->_id]);
+ }
+ return $this->participantRecord[$fieldName];
+ }
+
+ /**
+ * Get id of participant being edited.
+ *
+ * @return int|null
+ */
+ protected function getParticipantID() {
+ return $this->_id ?? $this->_pId;
+ }
+
+ /**
+ * Get the value for the revenue recognition date field.
+ *
+ * @return string
+ *
+ * @throws \CiviCRM_API3_Exception
+ */
+ protected function getRevenueRecognitionDate() {
+ if (Civi::settings()->get('deferred_revenue_enabled')) {
+ $eventStartDate = $this->getEventValue('start_date');
+ if (strtotime($eventStartDate) > strtotime(date('Ymt'))) {
+ return date('Ymd', strtotime($eventStartDate));
+ }
+ }
+ return '';
+ }
+
}