X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FEvent%2FBAO%2FParticipant.php;h=fb282d354f1ac77d9e54983c6057cd36574a6f21;hb=94c1e8ffaf3ee4a357c976d9050f10da4dc0d729;hp=b39f8030fee2a381ce504d815db939b848d21959;hpb=771e2548641c460d0f7a244ad0aefb05c703b478;p=civicrm-core.git diff --git a/CRM/Event/BAO/Participant.php b/CRM/Event/BAO/Participant.php index b39f8030fe..fb282d354f 100644 --- a/CRM/Event/BAO/Participant.php +++ b/CRM/Event/BAO/Participant.php @@ -1,7 +1,7 @@ array('Registered', 'Cancelled'), @@ -68,9 +65,8 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { ); /** - * */ - function __construct() { + public function __construct() { parent::__construct(); } @@ -81,13 +77,12 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { * participant object. the params array could contain additional unused name/value * pairs * - * @param array $params (reference ) an assoc array of name/value pairs + * @param array $params + * (reference ) an assoc array of name/value pairs. * - * @return CRM_Event_BAO_Participant object - * @access public - * @static + * @return CRM_Event_BAO_Participant */ - static function &add(&$params) { + public static function &add(&$params) { if (!empty($params['id'])) { CRM_Utils_Hook::pre('edit', 'Participant', $params['id'], $params); @@ -111,6 +106,10 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { // ensure that role ids are encoded as a string if (isset($params['role_id']) && is_array($params['role_id'])) { + if (in_array(key($params['role_id']), CRM_Core_DAO::acceptedSQLOperators())) { + $op = key($params['role_id']); + $params['role_id'] = $params['role_id'][$op]; + } $params['role_id'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $params['role_id']); } @@ -158,16 +157,16 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { * Given the list of params in the params array, fetch the object * and store the values in the values array * - * @param array $params input parameters to find object - * @param array $values output values of the object + * @param array $params + * Input parameters to find object. + * @param array $values + * Output values of the object. * * @param $ids * * @return CRM_Event_BAO_Participant|null the found object or null - * @access public - * @static */ - static function getValues(&$params, &$values, &$ids) { + public static function getValues(&$params, &$values, &$ids) { if (empty($params)) { return NULL; } @@ -186,13 +185,12 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { /** * Takes an associative array and creates a participant object * - * @param array $params (reference ) an assoc array of name/value pairs + * @param array $params + * (reference ) an assoc array of name/value pairs. * - * @return CRM_Event_BAO_Participant object - * @access public - * @static + * @return CRM_Event_BAO_Participant */ - static function create(&$params) { + public static function create(&$params) { $transaction = new CRM_Core_Transaction(); $status = NULL; @@ -242,7 +240,9 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { $noteValue = NULL; $hasNoteField = FALSE; foreach (array( - 'note', 'participant_note') as $noteFld) { + 'note', + 'participant_note', + ) as $noteFld) { if (array_key_exists($noteFld, $params)) { $noteValue = $params[$noteFld]; $hasNoteField = TRUE; @@ -338,16 +338,19 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { * Check whether the event is full for participation and return as * per requirements. * - * @param int $eventId event id. - * @param boolean $returnEmptySeats are we require number if empty seats. - * @param boolean $includeWaitingList consider waiting list in event full + * @param int $eventId + * Event id. + * @param bool $returnEmptySeats + * Are we require number if empty seats. + * @param bool $includeWaitingList + * Consider waiting list in event full. * calculation or not. (it is for cron job purpose) * * @param bool $returnWaitingCount * @param bool $considerTestParticipant * - * @return bool|int|null|string 1. false => If event having some empty spaces.@static - * @access public + * @return bool|int|null|string + * 1. false => If event having some empty spaces. */ static function eventFull( $eventId, @@ -367,9 +370,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. @@ -391,8 +394,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 = " @@ -416,8 +419,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 = " @@ -430,7 +433,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; @@ -482,15 +485,16 @@ 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 array $skipParticipantIds an array of participant ids those we should skip. + * @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 * - * @return array $optionsCount an array of each option id and total count - * @static - * @access public + * @return array + * an array of each option id and total count */ static function priceSetOptionsCount( $eventId, @@ -564,13 +568,13 @@ 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. - * @static - * @access public + * @return int + * $spaces Number of Empty Seats/null. */ - static function pendingToConfirmSpaces($eventId) { + public static function pendingToConfirmSpaces($eventId) { $emptySeats = 0; if (!$eventId) { return $emptySeats; @@ -616,11 +620,10 @@ GROUP BY participant.event_id * @param bool $status * @param bool $onlyParticipant * - * @return array array of importable Fields - * @access public - * @static + * @return array + * array of importable Fields */ - 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) { @@ -641,7 +644,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 @@ -650,7 +654,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 @@ -660,7 +665,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( @@ -668,17 +674,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); @@ -725,11 +732,10 @@ GROUP BY participant.event_id /** * Combine all the exportable fields from the lower levels object * - * @return array array of exportable Fields - * @access public - * @static + * @return array + * array of exportable Fields */ - static function &exportableFields() { + public static function &exportableFields() { if (!self::$_exportableFields) { if (!self::$_exportableFields) { self::$_exportableFields = array(); @@ -738,34 +744,31 @@ GROUP BY participant.event_id $fields = array(); $participantFields = CRM_Event_DAO_Participant::export(); + $eventFields = CRM_Event_DAO_Event::export(); $noteField = array( - 'participant_note' => array('title' => 'Participant Note', + 'participant_note' => array( + 'title' => 'Participant Note', 'name' => 'participant_note', + 'type' => CRM_Utils_Type::T_STRING, )); $participantStatus = array( - 'participant_status' => array('title' => 'Participant Status', + 'participant_status' => array( + 'title' => 'Participant Status', 'name' => 'participant_status', + 'type' => CRM_Utils_Type::T_STRING, )); $participantRole = array( - 'participant_role' => array('title' => 'Participant Role', + 'participant_role' => array( + 'title' => 'Participant Role', 'name' => 'participant_role', + 'type' => CRM_Utils_Type::T_STRING, )); - //CRM-13595 add event id to participant export - $eventid = array( - 'event_id' => array('title' => 'Event ID', - 'name' => 'event_id', - )); - $eventtitle = array( - '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); + $fields = array_merge($participantFields, $participantStatus, $participantRole, $eventFields, $noteField, $discountFields); // add custom data $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport('Participant')); @@ -778,14 +781,13 @@ GROUP BY participant.event_id /** * 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 - * @static - * @access public + * @return array + * associated array with sort_name and event title */ - 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 @@ -797,9 +799,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; @@ -808,28 +810,28 @@ 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; @@ -853,13 +855,12 @@ 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(); @@ -880,8 +881,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'); @@ -914,15 +915,15 @@ 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 - * from other function + * @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 CRM_Contribute_BAO_Contribution object - * @access public - * @static + * @return CRM_Contribute_BAO_Contribution */ - 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); @@ -945,8 +946,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; @@ -962,13 +963,13 @@ WHERE civicrm_participant.id = {$participantId} * 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) ) { @@ -980,28 +981,29 @@ 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. * - * @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 int $oldStatusId * - * @return array $additionalParticipantIds - * @static + * @return array */ - static function getAdditionalParticipantIds($primaryParticipantId, $excludeCancel = TRUE, $oldStatusId = NULL) { + public static function getAdditionalParticipantIds($primaryParticipantId, $excludeCancel = TRUE, $oldStatusId = NULL) { $additionalParticipantIds = array(); if (!$primaryParticipantId) { return $additionalParticipantIds; @@ -1009,9 +1011,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}"; } @@ -1035,13 +1037,14 @@ 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 - * @static + * @return array */ - function getFeeDetails($participantIds, $hasLineItems = FALSE) { + public function getFeeDetails($participantIds, $hasLineItems = FALSE) { $feeDetails = array(); if (!is_array($participantIds) || empty($participantIds)) { return $feeDetails; @@ -1075,12 +1078,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) { @@ -1089,7 +1100,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; + } } } @@ -1100,12 +1113,13 @@ 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 - * @static + * @return array + * $displayName => $viewUrl */ - static function getAdditionalParticipants($primaryParticipantID) { + public static function getAdditionalParticipants($primaryParticipantID) { $additionalParticipantIDs = array(); $additionalParticipantIDs = self::getAdditionalParticipantIds($primaryParticipantID); if (!empty($additionalParticipantIDs)) { @@ -1128,16 +1142,15 @@ 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 int $participantID + * Primary participant's id. * @param int $oldStatusID * @param int $newStatusID * @param bool $updatePrimaryStatus * * @return bool|void - * @access public - * @static */ - static function updateParticipantStatus($participantID, $oldStatusID, $newStatusID = NULL, $updatePrimaryStatus = FALSE) { + public static function updateParticipantStatus($participantID, $oldStatusID, $newStatusID = NULL, $updatePrimaryStatus = FALSE) { if (!$participantID || !$oldStatusID) { return; } @@ -1164,16 +1177,16 @@ 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 * * @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; } @@ -1201,19 +1214,19 @@ 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 - * - * return void + * @param array $participantIds + * Participant ids. + * @param int $toStatusId + * Update status id. + * @param int $fromStatusId + * From status id. * @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) { @@ -1249,9 +1262,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'" ); @@ -1286,7 +1299,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(), ); @@ -1327,8 +1341,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) { @@ -1432,18 +1446,20 @@ UPDATE civicrm_participant * 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' ) - * - * return void + * @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 bool - * @access public - * @static */ static function sendTransitionParticipantMail( $participantId, @@ -1513,8 +1529,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, @@ -1546,9 +1562,8 @@ UPDATE civicrm_participant * @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 @@ -1563,11 +1578,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], + ) + ); } } } @@ -1583,9 +1598,8 @@ UPDATE civicrm_participant * @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) { @@ -1606,7 +1620,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; @@ -1643,10 +1658,10 @@ UPDATE civicrm_participant * * @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; @@ -1660,14 +1675,17 @@ UPDATE civicrm_participant /** * 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(); @@ -1691,11 +1709,10 @@ UPDATE civicrm_participant * * @param int $contactID * - * @return int count of participant records - * @access public - * @static + * @return int + * count of participant records */ - static function getContactParticipantCount($contactID) { + public static function getContactParticipantCount($contactID) { $query = "SELECT count(*) FROM civicrm_participant WHERE civicrm_participant.contact_id = {$contactID} AND @@ -1706,14 +1723,14 @@ WHERE civicrm_participant.contact_id = {$contactID} AND /** * 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 - * @static + * @return array */ - static function getParticipantIds($contributionId, $excludeCancelled = FALSE) { + public static function getParticipantIds($contributionId, $excludeCancelled = FALSE) { $ids = array(); if (!$contributionId) { @@ -1727,9 +1744,10 @@ 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; @@ -1738,15 +1756,15 @@ WHERE civicrm_participant.contact_id = {$contactID} AND /** * Get additional Participant edit & view url . * - * @param array $participantIds an array of additional participant ids. + * @param array $participantIds + * An array of additional participant ids. * - * @return array of Urls. - * @access public - * @static + * @return array + * Array of Urls. */ - 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']}" @@ -1761,26 +1779,29 @@ 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( @@ -1788,8 +1809,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']); } @@ -1802,12 +1823,11 @@ WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; * * 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(); @@ -1825,7 +1845,7 @@ WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2"; * @param $paidAmount * @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); @@ -1839,27 +1859,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 @@ -1895,11 +1918,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']); @@ -1925,7 +1948,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'])) { @@ -1950,11 +1982,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 @@ -1980,15 +2014,17 @@ 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); + } } } @@ -1996,8 +2032,8 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI $partUpdateFeeAmt['id'] = $participantId; foreach ($lineItems as $lineValue) { if ($lineValue['price_field_value_id']) { - $line[$lineValue['price_field_value_id']] = $lineValue['label'] . ' - '. $lineValue['qty']; - } + $line[$lineValue['price_field_value_id']] = $lineValue['label'] . ' - ' . $lineValue['qty']; + } } $partUpdateFeeAmt['fee_level'] = implode(', ', $line); @@ -2013,7 +2049,7 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI * @param $paidAmount * @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); @@ -2061,7 +2097,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); } @@ -2080,7 +2116,7 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI * * @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'); @@ -2122,9 +2158,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 */