X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FEvent%2FBAO%2FParticipant.php;h=76c084bc570400b291d71f0068823838628c348a;hb=2711fdbed19fb755e2e478b733904a2bbf926c79;hp=393485d78f76cd4c1fce7969025da51e0b8e7c2c;hpb=a6da8f4ce01fc90680ae8c52c976797b2a953579;p=civicrm-core.git diff --git a/CRM/Event/BAO/Participant.php b/CRM/Event/BAO/Participant.php index 393485d78f..76c084bc57 100644 --- a/CRM/Event/BAO/Participant.php +++ b/CRM/Event/BAO/Participant.php @@ -1,7 +1,7 @@ If event having some empty spaces.@static - * @access public + * @return bool|int|null|string + * 1. false => If event having some empty spaces. + * @static */ static function eventFull( $eventId, @@ -371,9 +373,9 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { // It might be case there are some empty spaces and still event // is full, as waitlist might represent group require spaces > empty. - $participantRoles = CRM_Event_PseudoConstant::participantRole(NULL, 'filter = 1'); - $countedStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1'); - $waitingStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Waiting'"); + $participantRoles = CRM_Event_PseudoConstant::participantRole(NULL, 'filter = 1'); + $countedStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1'); + $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. @@ -395,8 +397,8 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { if ($includeWaitingList && $onWaitlistStatusId) { //build the where clause. - $whereClause = ' WHERE ' . implode(' AND ', $where); - $whereClause .= " AND participant.status_id = $onWaitlistStatusId "; + $whereClause = ' WHERE ' . implode(' AND ', $where); + $whereClause .= " AND participant.status_id = $onWaitlistStatusId "; $eventSeatsWhere = implode(' AND ', $where) . " AND ( participant.status_id = $onWaitlistStatusId )"; $query = " @@ -420,8 +422,8 @@ INNER JOIN civicrm_event event ON ( event.id = participant.event_id ) } //consider only counted participants. - $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($countedStatuses)) . ' ) '; - $whereClause = ' WHERE ' . implode(' AND ', $where); + $where[] = ' participant.status_id IN ( ' . implode(', ', array_keys($countedStatuses)) . ' ) '; + $whereClause = ' WHERE ' . implode(' AND ', $where); $eventSeatsWhere = implode(' AND ', $where); $query = " @@ -434,7 +436,7 @@ INNER JOIN civicrm_event event ON ( event.id = participant.event_id ) $eventMaxSeats = NULL; $eventFullText = ts('This event is full.'); - $participants = CRM_Core_DAO::executeQuery($query, $eventParams); + $participants = CRM_Core_DAO::executeQuery($query, $eventParams); while ($participants->fetch()) { if ($participants->event_full_text) { $eventFullText = $participants->event_full_text; @@ -486,18 +488,17 @@ SELECT event.event_full_text, * Return the array of all price set field options, * with total participant count that field going to carry. * - * @param int $eventId event id. + * @param int $eventId + * Event id. * @param array $skipParticipantIds + * An array of participant ids those we should skip. * @param bool $considerCounted * @param bool $considerWaiting * @param bool $considerTestParticipants * - * @internal param array $skipParticipants an array of participant ids those we should skip. - * @internal param int $isTest would you like to consider test participants. - * - * @return array $optionsCount an array of each option id and total count + * @return array + * an array of each option id and total count * @static - * @access public */ static function priceSetOptionsCount( $eventId, @@ -571,13 +572,14 @@ INNER JOIN civicrm_price_field field ON ( value.price_field_id = field.id * Get the empty spaces for event those we can allocate * to pending participant to become confirm. * - * @param int $eventId event id. + * @param int $eventId + * Event id. * - * @return int $spaces Number of Empty Seats/null. + * @return int + * $spaces Number of Empty Seats/null. * @static - * @access public */ - static function pendingToConfirmSpaces($eventId) { + public static function pendingToConfirmSpaces($eventId) { $emptySeats = 0; if (!$eventId) { return $emptySeats; @@ -617,17 +619,17 @@ GROUP BY participant.event_id } /** - * combine all the importable fields from the lower levels object + * Combine all the importable fields from the lower levels object * * @param string $contactType * @param bool $status * @param bool $onlyParticipant * - * @return array array of importable Fields - * @access public + * @return array + * array of importable Fields * @static */ - static function &importableFields($contactType = 'Individual', $status = TRUE, $onlyParticipant = FALSE) { + public static function &importableFields($contactType = 'Individual', $status = TRUE, $onlyParticipant = FALSE) { if (!self::$_importableFields) { if (!$onlyParticipant) { if (!$status) { @@ -648,7 +650,8 @@ GROUP BY participant.event_id 'title' => ts('Participant Note'), 'name' => 'participant_note', 'headerPattern' => '/(participant.)?note$/i', - )); + ), + ); // Split status and status id into 2 fields // Fixme: it would be better to leave as 1 field and intelligently handle both during import @@ -657,7 +660,8 @@ GROUP BY participant.event_id 'title' => ts('Participant Status'), 'name' => 'participant_status', 'data_type' => CRM_Utils_Type::T_STRING, - )); + ), + ); $tmpFields['participant_status_id']['title'] = ts('Participant Status Id'); // Split role and role id into 2 fields @@ -667,7 +671,8 @@ GROUP BY participant.event_id 'title' => ts('Participant Role'), 'name' => 'participant_role', 'data_type' => CRM_Utils_Type::T_STRING, - )); + ), + ); $tmpFields['participant_role_id']['title'] = ts('Participant Role Id'); $eventType = array( @@ -675,17 +680,18 @@ GROUP BY participant.event_id 'title' => ts('Event Type'), 'name' => 'event_type', 'data_type' => CRM_Utils_Type::T_STRING, - )); + ), + ); $tmpContactField = $contactFields = array(); - $contactFields = array( ); + $contactFields = array(); if (!$onlyParticipant) { $contactFields = CRM_Contact_BAO_Contact::importableFields($contactType, NULL); // Using new Dedupe rule. $ruleParams = array( 'contact_type' => $contactType, - 'used' => 'Unsupervised', + 'used' => 'Unsupervised', ); $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams); @@ -730,13 +736,13 @@ GROUP BY participant.event_id } /** - * combine all the exportable fields from the lower levels object + * Combine all the exportable fields from the lower levels object * - * @return array array of exportable Fields - * @access public + * @return array + * array of exportable Fields * @static */ - static function &exportableFields() { + public static function &exportableFields() { if (!self::$_exportableFields) { if (!self::$_exportableFields) { self::$_exportableFields = array(); @@ -746,31 +752,41 @@ GROUP BY participant.event_id $participantFields = CRM_Event_DAO_Participant::export(); $noteField = array( - 'participant_note' => array('title' => 'Participant Note', + 'participant_note' => array( + 'title' => 'Participant Note', 'name' => 'participant_note', - )); + ), + ); $participantStatus = array( - 'participant_status' => array('title' => 'Participant Status', + 'participant_status' => array( + 'title' => 'Participant Status', 'name' => 'participant_status', - )); + ), + ); $participantRole = array( - 'participant_role' => array('title' => 'Participant Role', + 'participant_role' => array( + 'title' => 'Participant Role', 'name' => 'participant_role', - )); + ), + ); //CRM-13595 add event id to participant export $eventid = array( - 'event_id' => array('title' => 'Event ID', + 'event_id' => array( + 'title' => 'Event ID', 'name' => 'event_id', - )); + ), + ); $eventtitle = array( - 'event_title' => array('title' => 'Event Title', + 'event_title' => array( + 'title' => 'Event Title', 'name' => 'event_title', - )); + ), + ); - $discountFields = CRM_Core_DAO_Discount::export(); + $discountFields = CRM_Core_DAO_Discount::export(); $fields = array_merge($participantFields, $participantStatus, $participantRole, $eventid, $eventtitle, $noteField, $discountFields); @@ -783,16 +799,16 @@ GROUP BY participant.event_id } /** - * function to get the event name/sort name for a particular participation / participant + * Get the event name/sort name for a particular participation / participant * - * @param int $participantId id of the participant - + * @param int $participantId + * Id of the participant. * - * @return array $name associated array with sort_name and event title + * @return array + * associated array with sort_name and event title * @static - * @access public */ - static function participantDetails($participantId) { + public static function participantDetails($participantId) { $query = " SELECT civicrm_contact.sort_name as name, civicrm_event.title as title, civicrm_contact.id as cid FROM civicrm_participant @@ -804,9 +820,9 @@ WHERE civicrm_participant.id = {$participantId} $details = array(); while ($dao->fetch()) { - $details['name'] = $dao->name; + $details['name'] = $dao->name; $details['title'] = $dao->title; - $details['cid'] = $dao->cid; + $details['cid'] = $dao->cid; } return $details; @@ -815,28 +831,29 @@ WHERE civicrm_participant.id = {$participantId} /** * Get the values for pseudoconstants for name->value and reverse. * - * @param array $defaults (reference) the default values, some of which need to be resolved. - * @param boolean $reverse true if we want to resolve the values in the reverse direction (value -> name) + * @param array $defaults + * (reference) the default values, some of which need to be resolved. + * @param bool $reverse + * True if we want to resolve the values in the reverse direction (value -> name). * * @return void - * @access public * @static */ - static function resolveDefaults(&$defaults, $reverse = FALSE) { + public static function resolveDefaults(&$defaults, $reverse = FALSE) { self::lookupValue($defaults, 'event', CRM_Event_PseudoConstant::event(), $reverse); self::lookupValue($defaults, 'status', CRM_Event_PseudoConstant::participantStatus(NULL, NULL, 'label'), $reverse); self::lookupValue($defaults, 'role', CRM_Event_PseudoConstant::participantRole(), $reverse); } /** - * This function is used to convert associative array names to values + * convert associative array names to values * and vice-versa. * * This function is used by both the web form layer and the api. Note that * the api needs the name => value conversion, also the view layer typically * requires value => name conversion */ - static function lookupValue(&$defaults, $property, $lookup, $reverse) { + public static function lookupValue(&$defaults, $property, $lookup, $reverse) { $id = $property . '_id'; $src = $reverse ? $property : $id; @@ -860,13 +877,13 @@ WHERE civicrm_participant.id = {$participantId} /** * Delete the record that are associated with this participation * - * @param int $id id of the participation to delete + * @param int $id + * Id of the participation to delete. * * @return void - * @access public * @static */ - static function deleteParticipant($id) { + public static function deleteParticipant($id) { CRM_Utils_Hook::pre('delete', 'Participant', $id, CRM_Core_DAO::$_nullArray); $transaction = new CRM_Core_Transaction(); @@ -887,8 +904,8 @@ WHERE civicrm_participant.id = {$participantId} CRM_Event_BAO_ParticipantPayment::deleteParticipantPayment($p); // cleanup line items. - $participantsId = array(); - $participantsId = self::getAdditionalParticipantIds($id); + $participantsId = array(); + $participantsId = self::getAdditionalParticipantIds($id); $participantsId[] = $id; CRM_Price_BAO_LineItem::deleteLineItems($participantsId, 'civicrm_participant'); @@ -921,15 +938,16 @@ WHERE civicrm_participant.id = {$participantId} /** * Checks duplicate participants * - * @param array $duplicates (reference ) an assoc array of name/value pairs - * @param array $input an assosiative array of name /value pairs + * @param array $duplicates + * (reference ) an assoc array of name/value pairs. + * @param array $input + * An assosiative array of name /value pairs. * from other function * - * @return object CRM_Contribute_BAO_Contribution object - * @access public + * @return CRM_Contribute_BAO_Contribution object * @static */ - static function checkDuplicate($input, &$duplicates) { + public static function checkDuplicate($input, &$duplicates) { $eventId = CRM_Utils_Array::value('event_id', $input); $contactId = CRM_Utils_Array::value('contact_id', $input); @@ -952,8 +970,8 @@ WHERE civicrm_participant.id = {$participantId} $clause = implode(' AND ', $clause); - $query = "SELECT id FROM civicrm_participant WHERE $clause"; - $dao = CRM_Core_DAO::executeQuery($query, $input); + $query = "SELECT id FROM civicrm_participant WHERE $clause"; + $dao = CRM_Core_DAO::executeQuery($query, $input); $result = FALSE; while ($dao->fetch()) { $duplicates[] = $dao->id; @@ -963,19 +981,20 @@ WHERE civicrm_participant.id = {$participantId} } /** - * fix the event level + * Fix the event level * * When price sets are used as event fee, fee_level is set as ^A * separated string. We need to change that string to comma * separated string before using fee_level in view mode. * - * @param string $eventLevel event_leval string from db + * @param string $eventLevel + * Event_leval string from db. * * @static * * @return void */ - static function fixEventLevel(&$eventLevel) { + public static function fixEventLevel(&$eventLevel) { if ((substr($eventLevel, 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR) && (substr($eventLevel, -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR) ) { @@ -987,28 +1006,30 @@ WHERE civicrm_participant.id = {$participantId} } elseif ((substr($eventLevel, 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR)) { $eventLevel = implode(', ', explode(CRM_Core_DAO::VALUE_SEPARATOR, - substr($eventLevel, 0, 1) - )); + substr($eventLevel, 0, 1) + )); } elseif ((substr($eventLevel, -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR)) { $eventLevel = implode(', ', explode(CRM_Core_DAO::VALUE_SEPARATOR, - substr($eventLevel, 0, -1) - )); + substr($eventLevel, 0, -1) + )); } } /** - * get the additional participant ids. + * Get the additional participant ids. * - * @param int $primaryParticipantId primary partycipant Id - * @param boolean $excludeCancel do not include participant those are cancelled. + * @param int $primaryParticipantId + * Primary partycipant Id. + * @param bool $excludeCancel + * Do not include participant those are cancelled. * - * @param null $oldStatusId + * @param int $oldStatusId * - * @return array $additionalParticipantIds + * @return array * @static */ - static function getAdditionalParticipantIds($primaryParticipantId, $excludeCancel = TRUE, $oldStatusId = NULL) { + public static function getAdditionalParticipantIds($primaryParticipantId, $excludeCancel = TRUE, $oldStatusId = NULL) { $additionalParticipantIds = array(); if (!$primaryParticipantId) { return $additionalParticipantIds; @@ -1016,9 +1037,9 @@ WHERE civicrm_participant.id = {$participantId} $where = "participant.registered_by_id={$primaryParticipantId}"; if ($excludeCancel) { - $cancelStatusId = 0; + $cancelStatusId = 0; $negativeStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Negative'"); - $cancelStatusId = array_search('Cancelled', $negativeStatuses); + $cancelStatusId = array_search('Cancelled', $negativeStatuses); $where .= " AND participant.status_id != {$cancelStatusId}"; } @@ -1042,13 +1063,15 @@ WHERE civicrm_participant.id = {$participantId} * Get the event fee info for given participant ids * either from line item table / participant table. * - * @param array $participantIds participant ids. - * @param boolean $hasLineItems do fetch from line items. + * @param array $participantIds + * Participant ids. + * @param bool $hasLineItems + * Do fetch from line items. * - * @return array $feeDetails + * @return array * @static */ - function getFeeDetails($participantIds, $hasLineItems = FALSE) { + public function getFeeDetails($participantIds, $hasLineItems = FALSE) { $feeDetails = array(); if (!is_array($participantIds) || empty($participantIds)) { return $feeDetails; @@ -1082,12 +1105,20 @@ INNER JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field_ $where = 'WHERE participant.id IN ( ' . implode(', ', $participantIds) . ' )'; $query = "$select $from $where"; - $feeInfo = CRM_Core_DAO::executeQuery($query); - $feeProperties = array('fee_level', 'fee_amount'); + $feeInfo = CRM_Core_DAO::executeQuery($query); + $feeProperties = array('fee_level', 'fee_amount'); $lineProperties = array( - 'lineId', 'label', 'qty', 'unit_price', - 'line_total', 'field_title', 'html_type', - 'price_field_id', 'participant_count', 'price_field_value_id', 'description', + '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) { @@ -1096,7 +1127,9 @@ INNER JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field_ } } else { - foreach ($feeProperties as $property) $feeDetails[$feeInfo->id][$property] = $feeInfo->$property; + foreach ($feeProperties as $property) { + $feeDetails[$feeInfo->id][$property] = $feeInfo->$property; + } } } @@ -1107,12 +1140,14 @@ INNER JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field_ * Retrieve additional participants display-names and URL to view their participant records. * (excludes cancelled participants automatically) * - * @param int $primaryParticipantID id of primary participant record + * @param int $primaryParticipantID + * Id of primary participant record. * - * @return array $additionalParticipants $displayName => $viewUrl + * @return array + * $displayName => $viewUrl * @static */ - static function getAdditionalParticipants($primaryParticipantID) { + public static function getAdditionalParticipants($primaryParticipantID) { $additionalParticipantIDs = array(); $additionalParticipantIDs = self::getAdditionalParticipantIds($primaryParticipantID); if (!empty($additionalParticipantIDs)) { @@ -1135,19 +1170,16 @@ INNER JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field_ /** * Function for update primary and additional participant status * - * @param int $participantID primary participant's id - * @param $oldStatusID - * @param null $newStatusID + * @param int $participantID + * Primary participant's id. + * @param int $oldStatusID + * @param int $newStatusID * @param bool $updatePrimaryStatus * - * @internal param int $statusId status id for participant - * return void - * - * @return bool - * @access public + * @return bool|void * @static */ - static function updateParticipantStatus($participantID, $oldStatusID, $newStatusID = NULL, $updatePrimaryStatus = FALSE) { + public static function updateParticipantStatus($participantID, $oldStatusID, $newStatusID = NULL, $updatePrimaryStatus = FALSE) { if (!$participantID || !$oldStatusID) { return; } @@ -1174,17 +1206,17 @@ INNER JOIN civicrm_price_field_value value ON ( value.id = lineItem.price_field_ /** * Function for update status for given participant ids * - * @param int $participantIds array of participant ids - * @param int $statusId status id for participant + * @param int $participantIds + * Array of participant ids. + * @param int $statusId + * Status id for participant. * @param bool $updateRegisterDate - * @params boolean $updateRegisterDate way to track when status changed. * - * return void + * @return void * - * @access public * @static */ - static function updateStatus($participantIds, $statusId, $updateRegisterDate = FALSE) { + public static function updateStatus($participantIds, $statusId, $updateRegisterDate = FALSE) { if (!is_array($participantIds) || empty($participantIds) || !$statusId) { return; } @@ -1212,19 +1244,22 @@ UPDATE civicrm_participant * update status from $fromStatusId to $toStatusId * and send mail + create activities. * - * @param array $participantIds participant ids. - * @param int $toStatusId update status id. - * @param int $fromStatusId from status id + * @param array $participantIds + * Participant ids. + * @param int $toStatusId + * Update status id. + * @param int $fromStatusId + * From status id. * * return void * @param bool $returnResult * @param bool $skipCascadeRule * * @return array - * @access public * @static */ - static function transitionParticipants($participantIds, $toStatusId, + static function transitionParticipants( + $participantIds, $toStatusId, $fromStatusId = NULL, $returnResult = FALSE, $skipCascadeRule = FALSE ) { if (!is_array($participantIds) || empty($participantIds) || !$toStatusId) { @@ -1260,9 +1295,9 @@ UPDATE civicrm_participant $contactIds = $eventIds = $participantDetails = array(); - $statusTypes = CRM_Event_PseudoConstant::participantStatus(); + $statusTypes = CRM_Event_PseudoConstant::participantStatus(); $participantRoles = CRM_Event_PseudoConstant::participantRole(); - $pendingStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, + $pendingStatuses = CRM_Event_PseudoConstant::participantStatus(NULL, "class = 'Pending'" ); @@ -1297,7 +1332,8 @@ UPDATE civicrm_participant if (empty($domainValues)) { // making all tokens available to templates. $domain = CRM_Core_BAO_Domain::getDomain(); - $tokens = array('domain' => array('name', 'phone', 'address', 'email'), + $tokens = array( + 'domain' => array('name', 'phone', 'address', 'email'), 'contact' => CRM_Core_SelectValues::contactTokens(), ); @@ -1338,8 +1374,8 @@ UPDATE civicrm_participant //now we are ready w/ all required data. //take a decision as per statuses. - $emailType = NULL; - $toStatus = $statusTypes[$toStatusId]; + $emailType = NULL; + $toStatus = $statusTypes[$toStatusId]; $fromStatus = CRM_Utils_Array::value($fromStatusId, $statusTypes); switch ($toStatus) { @@ -1440,20 +1476,25 @@ UPDATE civicrm_participant } /** - * Function to send mail and create activity + * Send mail and create activity * when participant status changed. * - * @param int $participantId participant id. - * @param array $participantValues participant detail values. status id for participants - * @param array $eventDetails required event details - * @param array $contactDetails required contact details - * @param array $domainValues required domain values. - * @param string $mailType (eg 'approval', 'confirm', 'expired' ) + * @param int $participantId + * Participant id. + * @param array $participantValues + * Participant detail values. status id for participants. + * @param array $eventDetails + * Required event details. + * @param array $contactDetails + * Required contact details. + * @param array $domainValues + * Required domain values. + * @param string $mailType + * (eg 'approval', 'confirm', 'expired' ). * * return void * * @return bool - * @access public * @static */ static function sendTransitionParticipantMail( @@ -1524,8 +1565,8 @@ UPDATE civicrm_participant // 3. create activity record. if ($mailSent) { - $now = date('YmdHis'); - $activityType = 'Event Registration'; + $now = date('YmdHis'); + $activityType = 'Event Registration'; $activityParams = array( 'subject' => $subject, 'source_contact_id' => $contactId, @@ -1550,16 +1591,15 @@ UPDATE civicrm_participant } /** - * get participant status change message. + * Get participant status change message. * - * @param $participantId + * @param int $participantId * @param $statusChangeTo - * @param $fromStatusId + * @param int $fromStatusId * * @return string - * @access public */ - function updateStatusMessage($participantId, $statusChangeTo, $fromStatusId) { + public function updateStatusMessage($participantId, $statusChangeTo, $fromStatusId) { $statusMsg = NULL; $results = self::transitionParticipants(array($participantId), $statusChangeTo, $fromStatusId, TRUE @@ -1574,11 +1614,11 @@ UPDATE civicrm_participant array_key_exists($processedId, $results['mailedParticipants']) ) { $statusMsg .= '
' . ts("Participant status has been updated to '%1'. An email has been sent to %2.", - array( - 1 => $allStatuses[$statusChangeTo], - 2 => $results['mailedParticipants'][$processedId], - ) - ); + array( + 1 => $allStatuses[$statusChangeTo], + 2 => $results['mailedParticipants'][$processedId], + ) + ); } } } @@ -1588,15 +1628,14 @@ UPDATE civicrm_participant } /** - * get event full and waiting list message. + * Get event full and waiting list message. * - * @param $eventId - * @param null $participantId + * @param int $eventId + * @param int $participantId * * @return string - * @access public */ - static function eventFullMessage($eventId, $participantId = NULL) { + public static function eventFullMessage($eventId, $participantId = NULL) { $eventfullMsg = $dbStatusId = NULL; $checkEventFull = TRUE; if ($participantId) { @@ -1617,7 +1656,8 @@ UPDATE civicrm_participant if (is_string($emptySeats) && $emptySeats !== NULL) { $maxParticipants = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $eventId, 'max_participants'); $eventfullMsg = ts("This event currently has the maximum number of participants registered (%1). However, you can still override this limit and register additional participants using this form.", array( - 1 => $maxParticipants)) . '
'; + 1 => $maxParticipants, + )) . '
'; } $hasWaiting = FALSE; @@ -1650,14 +1690,14 @@ UPDATE civicrm_participant } /** - * check for whether participant is primary or not + * Check for whether participant is primary or not * - * @param $participantId + * @param int $participantId * - * @return true if participant is primary - * @access public + * @return bool + * true if participant is primary */ - static function isPrimaryParticipant($participantId) { + public static function isPrimaryParticipant($participantId) { $participant = new CRM_Event_DAO_Participant(); $participant->registered_by_id = $participantId; @@ -1669,16 +1709,19 @@ UPDATE civicrm_participant } /** - * get additional participant Ids for cascading with primary participant status + * Get additional participant Ids for cascading with primary participant status * - * @param int $participantId participant id. - * @param int $oldStatusId previous status - * @param int $newStatusId new status + * @param int $participantId + * Participant id. + * @param int $oldStatusId + * Previous status. + * @param int $newStatusId + * New status. * - * @return true if allowed - * @access public + * @return bool + * true if allowed */ - static function getValidAdditionalIds($participantId, $oldStatusId, $newStatusId) { + public static function getValidAdditionalIds($participantId, $oldStatusId, $newStatusId) { $additionalParticipantIds = array(); @@ -1698,17 +1741,15 @@ UPDATE civicrm_participant } /** - * Function to get participant record count for a Contact - * - * @param $contactID + * Get participant record count for a Contact * - * @internal param int $contactId Contact ID + * @param int $contactID * - * @return int count of participant records - * @access public + * @return int + * count of participant records * @static */ - static function getContactParticipantCount($contactID) { + public static function getContactParticipantCount($contactID) { $query = "SELECT count(*) FROM civicrm_participant WHERE civicrm_participant.contact_id = {$contactID} AND @@ -1717,16 +1758,17 @@ WHERE civicrm_participant.contact_id = {$contactID} AND } /** - * Function to get participant ids by contribution id + * Get participant ids by contribution id * - * @param int $contributionId Contribution Id - * @param bool $excludeCancelled Exclude cancelled additional participant + * @param int $contributionId + * Contribution Id. + * @param bool $excludeCancelled + * Exclude cancelled additional participant. * - * @return array $participantsId - * @access public + * @return array * @static */ - static function getParticipantIds($contributionId, $excludeCancelled = FALSE) { + public static function getParticipantIds($contributionId, $excludeCancelled = FALSE) { $ids = array(); if (!$contributionId) { @@ -1740,28 +1782,28 @@ WHERE civicrm_participant.contact_id = {$contactID} AND // get additional participant ids (including cancelled) if ($participantId) { $ids = array_merge(array( - $participantId), self::getAdditionalParticipantIds($participantId, - $excludeCancelled - )); + $participantId, + ), self::getAdditionalParticipantIds($participantId, + $excludeCancelled + )); } return $ids; } /** - * Function to get additional Participant edit & view url . - * - * @param $participantIds + * Get additional Participant edit & view url . * - * @internal param array $paticipantIds an array of additional participant ids. + * @param array $participantIds + * An array of additional participant ids. * - * @return array of Urls. - * @access public + * @return array + * of Urls. * @static */ - static function getAdditionalParticipantUrl($participantIds) { + public static function getAdditionalParticipantUrl($participantIds) { foreach ($participantIds as $value) { - $links = array(); + $links = array(); $details = self::participantDetails($value); $viewUrl = CRM_Utils_System::url('civicrm/contact/view/participant', "action=view&reset=1&id={$value}&cid={$details['cid']}" @@ -1776,26 +1818,30 @@ WHERE civicrm_participant.contact_id = {$contactID} AND } /** - * to create trxn entry if an event has discount. + * create trxn entry if an event has discount. * - * @param int $eventID event id - * @param array $contributionParams contribution params. + * @param int $eventID + * Event id. + * @param array $contributionParams + * Contribution params. * * @param $feeLevel * * @static */ - static function createDiscountTrxn($eventID, $contributionParams, $feeLevel) { + public static function createDiscountTrxn($eventID, $contributionParams, $feeLevel) { // CRM-11124 - $checkDiscount = CRM_Core_BAO_Discount::findSet($eventID,'civicrm_event'); + $checkDiscount = CRM_Core_BAO_Discount::findSet($eventID, 'civicrm_event'); if (!empty($checkDiscount)) { $feeLevel = current($feeLevel); $priceSetId = CRM_Price_BAO_PriceSet::getFor('civicrm_event', $eventID, NULL); $query = "SELECT cpfv.amount FROM `civicrm_price_field_value` cpfv LEFT JOIN civicrm_price_field cpf ON cpfv.price_field_id = cpf.id WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; - $params = array(1 => array($priceSetId, 'Integer'), - 2 => array($feeLevel, 'String')); + $params = array( + 1 => array($priceSetId, 'Integer'), + 2 => array($feeLevel, 'String'), + ); $mainAmount = CRM_Core_DAO::singleValueQuery($query, $params); $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Discounts Account is' ")); $contributionParams['trxnParams']['from_financial_account_id'] = CRM_Contribute_PseudoConstant::financialAccountType( @@ -1803,8 +1849,8 @@ WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; if (!empty($contributionParams['trxnParams']['from_financial_account_id'])) { $contributionParams['trxnParams']['total_amount'] = $mainAmount - $contributionParams['total_amount']; $contributionParams['trxnParams']['payment_processor_id'] = $contributionParams['trxnParams']['payment_instrument_id'] = - $contributionParams['trxnParams']['check_number'] = $contributionParams['trxnParams']['trxn_id'] = - $contributionParams['trxnParams']['net_amount'] = $contributionParams['trxnParams']['fee_amount'] = NULL; + $contributionParams['trxnParams']['check_number'] = $contributionParams['trxnParams']['trxn_id'] = + $contributionParams['trxnParams']['net_amount'] = $contributionParams['trxnParams']['fee_amount'] = NULL; CRM_Core_BAO_FinancialTrxn::create($contributionParams['trxnParams']); } @@ -1813,16 +1859,16 @@ WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; } /** - * Function to delete participants of contact + * Delete participants of contact * * CRM-12155 * - * @param integer $contactId contact id + * @param int $contactId + * Contact id. * - * @access public * @static */ - static function deleteContactParticipant($contactId) { + public static function deleteContactParticipant($contactId) { $participant = new CRM_Event_DAO_Participant(); $participant->contact_id = $contactId; $participant->find(); @@ -1832,15 +1878,15 @@ WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; } /** - * @param $params - * @param $participantId - * @param $contributionId + * @param array $params + * @param int $participantId + * @param int $contributionId * @param $feeBlock - * @param $lineItems + * @param array $lineItems * @param $paidAmount - * @param $priceSetId + * @param int $priceSetId */ - static function changeFeeSelections($params, $participantId, $contributionId, $feeBlock, $lineItems, $paidAmount, $priceSetId) { + public static function changeFeeSelections($params, $participantId, $contributionId, $feeBlock, $lineItems, $paidAmount, $priceSetId) { $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); $partiallyPaidStatusId = array_search('Partially paid', $contributionStatuses); $pendingRefundStatusId = array_search('Pending refund', $contributionStatuses); @@ -1854,27 +1900,30 @@ WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; CRM_Price_BAO_LineItem::format($id, $params, $values, $submittedLineItems); $submittedFieldId[] = CRM_Utils_Array::retrieveValueRecursive($submittedLineItems, 'price_field_id'); } - $insertLines = $submittedLineItems; - - $submittedFieldValueIds = array_keys($submittedLineItems); - $updateLines = array(); - foreach ($previousLineItems as $id => $previousLineItem) { - // check through the submitted items if the previousItem exists, - // if found in submitted items, do not use it for new item creations - if (in_array($previousLineItem['price_field_value_id'], $submittedFieldValueIds)) { - // if submitted line items are existing don't fire INSERT query - unset($insertLines[$previousLineItem['price_field_value_id']]); - // for updating the line items i.e. use-case - once deselect-option selecting again - if ($previousLineItem['line_total'] != $submittedLineItems[$previousLineItem['price_field_value_id']]['line_total']) { - $updateLines[$previousLineItem['price_field_value_id']] = $submittedLineItems[$previousLineItem['price_field_value_id']]; - $updateLines[$previousLineItem['price_field_value_id']]['id'] = $id; + if (!empty($submittedLineItems)) { + $insertLines = $submittedLineItems; + + $submittedFieldValueIds = array_keys($submittedLineItems); + $updateLines = array(); + foreach ($previousLineItems as $id => $previousLineItem) { + // check through the submitted items if the previousItem exists, + // if found in submitted items, do not use it for new item creations + if (in_array($previousLineItem['price_field_value_id'], $submittedFieldValueIds)) { + // if submitted line items are existing don't fire INSERT query + unset($insertLines[$previousLineItem['price_field_value_id']]); + // for updating the line items i.e. use-case - once deselect-option selecting again + if (($previousLineItem['line_total'] != $submittedLineItems[$previousLineItem['price_field_value_id']]['line_total']) || + ($submittedLineItems[$previousLineItem['price_field_value_id']]['line_total'] == 0 && $submittedLineItems[$previousLineItem['price_field_value_id']]['qty'] == 1) + ) { + $updateLines[$previousLineItem['price_field_value_id']] = $submittedLineItems[$previousLineItem['price_field_value_id']]; + $updateLines[$previousLineItem['price_field_value_id']]['id'] = $id; + } } } - } - - $submittedFields = implode(', ', $submittedFieldId); - $submittedFieldValues = implode(', ', $submittedFieldValueIds); + $submittedFields = implode(', ', $submittedFieldId); + $submittedFieldValues = implode(', ', $submittedFieldValueIds); + } if (!empty($submittedFields) && !empty($submittedFieldValues)) { $updateLineItem = "UPDATE civicrm_line_item li INNER JOIN civicrm_financial_item fi @@ -1910,11 +1959,11 @@ GROUP BY li.entity_table, li.entity_id, price_field_value_id // if not submitted and difference is not 0 make it negative if (!in_array($updateFinancialItemInfoValues['price_field_value_id'], $submittedFieldValueIds) && $updateFinancialItemInfoValues['differenceAmt'] != 0) { // INSERT negative financial_items - $updateFinancialItemInfoValues['amount'] = - $updateFinancialItemInfoValues['amount']; + $updateFinancialItemInfoValues['amount'] = -$updateFinancialItemInfoValues['amount']; CRM_Financial_BAO_FinancialItem::create($updateFinancialItemInfoValues, NULL, $trxnId); // INSERT negative financial_items for tax amount if ($previousLineItems[$updateFinancialItemInfoValues['entity_id']]['tax_amount']) { - $updateFinancialItemInfoValues['amount'] = - ($previousLineItems[$updateFinancialItemInfoValues['entity_id']]['tax_amount']); + $updateFinancialItemInfoValues['amount'] = -($previousLineItems[$updateFinancialItemInfoValues['entity_id']]['tax_amount']); $updateFinancialItemInfoValues['description'] = $taxTerm; if ($updateFinancialItemInfoValues['financial_type_id']) { $updateFinancialItemInfoValues['financial_account_id'] = CRM_Contribute_BAO_Contribution::getFinancialAccountId($updateFinancialItemInfoValues['financial_type_id']); @@ -1940,7 +1989,16 @@ GROUP BY li.entity_table, li.entity_id, price_field_value_id } } } - + elseif (empty($submittedFields) && empty($submittedFieldValues)) { + $updateLineItem = "UPDATE civicrm_line_item li + INNER JOIN civicrm_financial_item fi + ON (li.id = fi.entity_id AND fi.entity_table = 'civicrm_line_item') + SET li.qty = 0, + li.line_total = 0.00, + li.tax_amount = NULL + WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantId})"; + CRM_Core_DAO::executeQuery($updateLineItem); + } if (!empty($updateLines)) { foreach ($updateLines as $valueId => $vals) { if (isset($vals['tax_amount'])) { @@ -1965,11 +2023,13 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI // insert new 'adjusted amount' transaction entry and update contribution entry. // ensure entity_financial_trxn table has a linking of it. // insert new line items - foreach ($insertLines as $valueId => $lineParams) { - $lineParams['entity_table'] = 'civicrm_participant'; - $lineParams['entity_id'] = $participantId; - $lineParams['contribution_id'] = $contributionId; - $lineObj = CRM_Price_BAO_LineItem::create($lineParams); + if (!empty($insertLines)) { + foreach ($insertLines as $valueId => $lineParams) { + $lineParams['entity_table'] = 'civicrm_participant'; + $lineParams['entity_id'] = $participantId; + $lineParams['contribution_id'] = $contributionId; + $lineObj = CRM_Price_BAO_LineItem::create($lineParams); + } } // the recordAdjustedAmt code would execute over here @@ -1995,20 +2055,29 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI $fetchCon = array('id' => $contributionId); $updatedContribution = CRM_Contribute_BAO_Contribution::retrieve($fetchCon, CRM_Core_DAO::$_nullArray, CRM_Core_DAO::$_nullArray); // insert financial items - foreach ($insertLines as $valueId => $lineParams) { - $lineParams['entity_table'] = 'civicrm_participant'; - $lineParams['entity_id'] = $participantId; - $lineObj = CRM_Price_BAO_LineItem::retrieve($lineParams, CRM_Core_DAO::$_nullArray); - // insert financial items - // ensure entity_financial_trxn table has a linking of it. - $prevItem = CRM_Financial_BAO_FinancialItem::add($lineObj, $updatedContribution); - if (isset($lineObj->tax_amount)) { - CRM_Financial_BAO_FinancialItem::add($lineObj, $updatedContribution, TRUE); + if (!empty($insertLines)) { + foreach ($insertLines as $valueId => $lineParams) { + $lineParams['entity_table'] = 'civicrm_participant'; + $lineParams['entity_id'] = $participantId; + $lineObj = CRM_Price_BAO_LineItem::retrieve($lineParams, CRM_Core_DAO::$_nullArray); + // insert financial items + // ensure entity_financial_trxn table has a linking of it. + $prevItem = CRM_Financial_BAO_FinancialItem::add($lineObj, $updatedContribution); + if (isset($lineObj->tax_amount)) { + CRM_Financial_BAO_FinancialItem::add($lineObj, $updatedContribution, TRUE); + } } } // update participant fee_amount column $partUpdateFeeAmt['id'] = $participantId; + foreach ($lineItems as $lineValue) { + if ($lineValue['price_field_value_id']) { + $line[$lineValue['price_field_value_id']] = $lineValue['label'] . ' - ' . $lineValue['qty']; + } + } + + $partUpdateFeeAmt['fee_level'] = implode(', ', $line); $partUpdateFeeAmt['fee_amount'] = $params['amount']; self::add($partUpdateFeeAmt); @@ -2019,9 +2088,9 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI /** * @param $updatedAmount * @param $paidAmount - * @param $contributionId + * @param int $contributionId */ - static function recordAdjustedAmt($updatedAmount, $paidAmount, $contributionId, $taxAmount = NULL) { + public static function recordAdjustedAmt($updatedAmount, $paidAmount, $contributionId, $taxAmount = NULL) { $balanceAmt = $updatedAmount - $paidAmount; $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); $partiallyPaidStatusId = array_search('Partially paid', $contributionStatuses); @@ -2069,7 +2138,7 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI 'payment_instrument_id' => $updatedContribution->payment_instrument_id, 'contribution_id' => $updatedContribution->id, 'trxn_date' => date('YmdHis'), - 'currency' => $updatedContribution->currency + 'currency' => $updatedContribution->currency, ); $adjustedTrxn = CRM_Core_BAO_FinancialTrxn::create($adjustedTrxnValues); } @@ -2083,12 +2152,12 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI } /** - * @param $participantId + * @param int $participantId * @param $activityType * * @throws CRM_Core_Exception */ - static function addActivityForSelection($participantId, $activityType) { + public static function addActivityForSelection($participantId, $activityType) { $eventId = CRM_Core_DAO::getFieldValue('CRM_Event_BAO_Participant', $participantId, 'event_id'); $contactId = CRM_Core_DAO::getFieldValue('CRM_Event_BAO_Participant', $participantId, 'contact_id'); @@ -2130,9 +2199,11 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI * Get options for a given field. * @see CRM_Core_DAO::buildOptions * - * @param String $fieldName - * @param String $context : @see CRM_Core_DAO::buildOptionsContext - * @param Array $props : whatever is known about this dao object + * @param string $fieldName + * @param string $context + * : @see CRM_Core_DAO::buildOptionsContext. + * @param array $props + * : whatever is known about this dao object. * * @return Array|bool */