*
* @param bool $returnWaitingCount
* @param bool $considerTestParticipant
+ * When TRUE, include participant records where is_test = 1.
+ * @param bool $onlyPositiveStatuses
+ * When FALSE, count all participant statuses where is_counted = 1. This includes
+ * both "Positive" participants (Registered, Attended, etc.) and waitlisted
+ * (and some pending) participants.
+ * When TRUE, count only participants with statuses of "Positive".
*
* @return bool|int|null|string
* 1. false => If event having some empty spaces.
$returnEmptySeats = FALSE,
$includeWaitingList = TRUE,
$returnWaitingCount = FALSE,
- $considerTestParticipant = FALSE
+ $considerTestParticipant = FALSE,
+ $onlyPositiveStatuses = FALSE
) {
$result = NULL;
if (!$eventId) {
$participantRoles = CRM_Event_PseudoConstant::participantRole(NULL, 'filter = 1');
$countedStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1');
+ $positiveStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Positive'");
$waitingStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Waiting'");
$onWaitlistStatusId = array_search('On waitlist', $waitingStatuses);
- //when we do require only waiting count don't consider counted.
- if (!$returnWaitingCount && !empty($countedStatuses)) {
- $allStatusIds = array_keys($countedStatuses);
- }
-
$where = [' event.id = %1 '];
if (!$considerTestParticipant) {
$where[] = ' ( participant.is_test = 0 OR participant.is_test IS NULL ) ';
}
+
+ // Only count Participant Roles with the "Counted?" flag.
if (!empty($participantRoles)) {
$escapedRoles = [];
foreach (array_keys($participantRoles) as $participantRole) {
}
}
- //consider only counted participants.
- $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($countedStatuses)) . ' ) ';
+ //Consider only counted participants, or alternatively only registered (not on waitlist) participants.
+ if ($onlyPositiveStatuses) {
+ $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($positiveStatuses)) . ' ) ';
+ }
+ else {
+ $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($countedStatuses)) . ' ) ';
+ }
$whereClause = ' WHERE ' . implode(' AND ', $where);
$eventSeatsWhere = implode(' AND ', $where);
* Get the empty spaces for event those we can allocate
* to pending participant to become confirm.
*
+ * @deprecated
+ *
* @param int $eventId
* Event id.
*
* $spaces Number of Empty Seats/null.
*/
public static function pendingToConfirmSpaces($eventId) {
- $emptySeats = 0;
- if (!$eventId) {
- return $emptySeats;
- }
-
- $positiveStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Positive'");
- $statusIds = '(' . implode(',', array_keys($positiveStatuses)) . ')';
-
- $query = "
- SELECT count(participant.id) as registered,
- civicrm_event.max_participants
- FROM civicrm_participant participant, civicrm_event
- WHERE participant.event_id = {$eventId}
- AND civicrm_event.id = participant.event_id
- AND participant.status_id IN {$statusIds}
-GROUP BY participant.event_id
-";
- $dao = CRM_Core_DAO::executeQuery($query);
- if ($dao->fetch()) {
-
- //unlimited space.
- if ($dao->max_participants == NULL || $dao->max_participants <= 0) {
- return NULL;
- }
-
- //no space.
- if ($dao->registered >= $dao->max_participants) {
- return $emptySeats;
- }
-
- //difference.
- return $dao->max_participants - $dao->registered;
- }
-
- //space in case no registeration yet.
- return CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $eventId, 'max_participants');
+ CRM_Core_Error::deprecatedFunctionWarning('CRM_Event_BAO_Participant::eventFull');
+ return CRM_Event_BAO_Participant::eventFull($eventId, TRUE, FALSE, TRUE, FALSE, TRUE);
}
/**
}
}
+ /**
+ * Get the ID of the default (first) participant role
+ *
+ * @return int
+ * @throws \CiviCRM_API3_Exception
+ */
+ public static function getDefaultRoleID() {
+ return (int) civicrm_api3('OptionValue', 'getvalue', [
+ 'return' => 'value',
+ 'option_group_id' => 'participant_role',
+ 'is_active' => 1,
+ 'options' => ['limit' => 1, 'sort' => 'is_default DESC'],
+ ]);
+ }
+
/**
* Get the additional participant ids.
*
return CRM_Core_DAO::singleValueQuery($query, $params);
}
- /**
- * Get the event fee info for given participant ids
- * either from line item table / participant table.
- *
- * @param array $participantIds
- * Participant ids.
- * @param bool $hasLineItems
- * Do fetch from line items.
- *
- * @return array
- */
- public function getFeeDetails($participantIds, $hasLineItems = FALSE) {
- $feeDetails = [];
- if (!is_array($participantIds) || empty($participantIds)) {
- return $feeDetails;
- }
-
- $select = '
-SELECT participant.id as id,
- participant.fee_level as fee_level,
- participant.fee_amount as fee_amount';
- $from = 'FROM civicrm_participant participant';
- if ($hasLineItems) {
- $select .= ' ,
-lineItem.id as lineId,
-lineItem.label as label,
-lineItem.qty as qty,
-lineItem.unit_price as unit_price,
-lineItem.line_total as line_total,
-field.label as field_title,
-field.html_type as html_type,
-field.id as price_field_id,
-value.id as price_field_value_id,
-value.description as description,
-IF( value.count, value.count, 0 ) as participant_count';
- $from .= "
-INNER JOIN civicrm_line_item lineItem ON ( lineItem.entity_table = 'civicrm_participant'
- AND lineItem.entity_id = participant.id )
-INNER JOIN civicrm_price_field field ON ( field.id = lineItem.price_field_id )
-INNER JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field_value_id )
-";
- }
- $where = 'WHERE participant.id IN ( ' . implode(', ', $participantIds) . ' )';
- $query = "$select $from $where";
-
- $feeInfo = CRM_Core_DAO::executeQuery($query);
- $feeProperties = ['fee_level', 'fee_amount'];
- $lineProperties = [
- 'lineId',
- 'label',
- 'qty',
- 'unit_price',
- 'line_total',
- 'field_title',
- 'html_type',
- 'price_field_id',
- 'participant_count',
- 'price_field_value_id',
- 'description',
- ];
- while ($feeInfo->fetch()) {
- if ($hasLineItems) {
- foreach ($lineProperties as $property) {
- $feeDetails[$feeInfo->id][$feeInfo->lineId][$property] = $feeInfo->$property;
- }
- }
- else {
- foreach ($feeProperties as $property) {
- $feeDetails[$feeInfo->id][$property] = $feeInfo->$property;
- }
- }
- }
-
- return $feeDetails;
- }
-
/**
* Retrieve additional participants display-names and URL to view their participant records.
* (excludes cancelled participants automatically)
];
// create activity with target contacts
- $id = CRM_Core_Session::singleton()->getLoggedInContactID();;
+ $id = CRM_Core_Session::singleton()->getLoggedInContactID();
if ($id) {
$activityParams['source_contact_id'] = $id;
$activityParams['target_contact_id'][] = $contactId;