X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FEvent%2FForm%2FParticipant.php;h=ef44f134932292c7e8f5184d86dc8d2b32f69754;hb=a4d42ed6184ae28d52b0273bcb53597b87605f26;hp=baa0440b6fd2375d0bcbb844db51e97274aa3b51;hpb=7c60edb1bf1ca31accfafd35ef0ae02409615e7c;p=civicrm-core.git diff --git a/CRM/Event/Form/Participant.php b/CRM/Event/Form/Participant.php index baa0440b6f..ef44f13493 100644 --- a/CRM/Event/Form/Participant.php +++ b/CRM/Event/Form/Participant.php @@ -218,8 +218,10 @@ class CRM_Event_Form_Participant extends CRM_Contact_Form_Task { if ($this->_contactId) { $displayName = CRM_Contact_BAO_Contact::displayName($this->_contactId); $this->assign('displayName', $displayName); - // omitting contactImage from title for now since the summary overlay css doesn't work outside of our crm-container - CRM_Utils_System::setTitle(ts('Event Registration for') . ' ' . $displayName); + $this->setPageTitle(ts('Event Registration for %1', array(1 => $displayName))); + } + else { + $this->setPageTitle(ts('Event Registration')); } // check the current path, if search based, then dont get participantID @@ -561,7 +563,7 @@ class CRM_Event_Form_Participant extends CRM_Contact_Form_Task { $roleID = $submittedRole[0]; } $submittedEvent = $this->getElementValue('event_id'); - if ($submittedEvent[0]) { + if (!empty($submittedEvent[0])) { $eventID = $submittedEvent[0]; } } @@ -931,6 +933,21 @@ class CRM_Event_Form_Participant extends CRM_Contact_Form_Task { CRM_Price_BAO_PriceField::priceSetValidation($priceSetId, $values, $errorMsg, TRUE); } } + // For single additions - show validation error if the contact has already been registered + // for this event with the same role. + if($self->_single && ($self->_action & CRM_Core_Action::ADD)) { + $contactId = $self->_contactId; + $eventId = CRM_Utils_Array::value('event_id', $values); + if(!empty($contactId) && !empty($eventId)) { + $dupeCheck = new CRM_Event_BAO_Participant; + $dupeCheck->contact_id = $contactId; + $dupeCheck->event_id = $eventId; + $dupeCheck->find(TRUE); + if(!empty($dupeCheck->id)) { + $errorMsg['event_id'] = ts("This contact has already been assigned to this event."); + } + } + } return CRM_Utils_Array::crmIsEmptyArray($errorMsg) ? TRUE : $errorMsg; } @@ -962,6 +979,41 @@ class CRM_Event_Form_Participant extends CRM_Contact_Form_Task { } return; } + // When adding a single contact, the formRule prevents you from adding duplicates + // (See above in formRule()). When adding more than one contact, the duplicates are + // removed automatically and the user receives one notification. + if ($this->_action & CRM_Core_Action::ADD) { + if(!$this->_single && !empty($this->_eventId)) { + $duplicateContacts = 0; + while(list($k,$dupeCheckContactId) = each($this->_contactIds)) { + // Eliminate contacts that have already been assigned to this event. + $dupeCheck = new CRM_Event_BAO_Participant; + $dupeCheck->contact_id = $dupeCheckContactId; + $dupeCheck->event_id = $this->_eventId; + $dupeCheck->find(TRUE); + if(!empty($dupeCheck->id)) { + $duplicateContacts++; + unset($this->_contactIds[$k]); + } + } + if($duplicateContacts > 0) { + $msg = ts( + "%1 contacts have already been assigned to this event. They were not added a second time.", + array(1 => $duplicateContacts) + ); + CRM_Core_Session::setStatus($msg); + } + if(count($this->_contactIds) == 0) { + CRM_Core_Session::setStatus(ts("No participants were added.")); + return; + } + // We have to re-key $this->_contactIds so each contact has the same + // key as their corresponding record in the $participants array that + // will be created below. + $this->_contactIds = array_values($this->_contactIds); + } + } + $participantStatus = CRM_Event_PseudoConstant::participantStatus(); // set the contact, when contact is selected @@ -1487,7 +1539,7 @@ class CRM_Event_Form_Participant extends CRM_Contact_Form_Task { $participantRoles = CRM_Utils_Array::value('role_id', $params); if (is_array($participantRoles)) { $selectedRoles = array(); - foreach (array_keys($participantRoles) as $roleId) { + foreach ($participantRoles as $roleId) { $selectedRoles[] = $role[$roleId]; } $event['participant_role'] = implode(', ', $selectedRoles); @@ -1660,6 +1712,7 @@ class CRM_Event_Form_Participant extends CRM_Contact_Form_Task { $sent[] = $contactID; foreach ($participants as $ids => $values) { if ($values->contact_id == $contactID) { + $values->details = CRM_Utils_Array::value('receipt_text', $params); CRM_Activity_BAO_Activity::addActivity($values, 'Email'); break; }