//CRM-5001
if (!empty($this->_values['is_for_organization'])) {
$msg = ts('Mixed profile not allowed for on behalf of registration/sign up.');
- if ($preID = CRM_Utils_Array::value('custom_pre_id', $this->_values)) {
- $preProfile = CRM_Core_BAO_UFGroup::profileGroups($preID);
+ $ufJoinParams = array(
+ 'module' => 'onBehalf',
+ 'entity_table' => 'civicrm_contribution_page',
+ 'entity_id' => $this->_id,
+ );
+ $onBehalfProfileIDs = CRM_Core_BAO_UFJoin::getUFGroupIds($ufJoinParams);
+ // getUFGroupIDs returns an array with the first item being the ID we need
+ $onBehalfProfileID = $onBehalfProfileIDs[0];
+ if ($onBehalfProfileID) {
+ $onBehalfProfile = CRM_Core_BAO_UFGroup::profileGroups($onBehalfProfileID);
foreach (array(
'Individual', 'Organization', 'Household') as $contactType) {
- if (in_array($contactType, $preProfile) &&
- (in_array('Membership', $preProfile) ||
- in_array('Contribution', $preProfile)
+ if (in_array($contactType, $onBehalfProfile) &&
+ (in_array('Membership', $onBehalfProfile) ||
+ in_array('Contribution', $onBehalfProfile)
)
) {
CRM_Core_Error::fatal($msg);
// $this->_defaults['amount'] = 168;
// $this->_defaults['credit_card_number'] = '4111111111111111';
// $this->_defaults['cvv2'] = '000';
- // $this->_defaults['credit_card_exp_date'] = array('Y' => '2014', 'M' => '05');
+ // $this->_defaults['credit_card_exp_date'] = array('Y' => date('Y')+1, 'M' => '05');
// // hack to simplify direct debit entry for testing
// $this->_defaults['account_holder'] = 'Max Müller';
$this->_defaults["billing_state_province_id-{$this->_bltID}"] = $config->defaultContactStateProvince;
}
- // now fix all state country selectors
- CRM_Core_BAO_Address::fixAllStateSelects($this, $this->_defaults);
-
if ($this->_priceSetId) {
if (($this->_useForMember && !empty($this->_currentMemberships)) || $this->_defaultMemTypeId) {
$selectedCurrentMemTypes = array();
$otherAmount = $priceField->id;
}
elseif (!empty($fields["price_{$priceField->id}"])) {
- $otherAmountVal = $fields["price_{$priceField->id}"];
+ $otherAmountVal = CRM_Utils_Rule::cleanMoney($fields["price_{$priceField->id}"]);
$min = CRM_Utils_Array::value('min_amount', $self->_values);
$max = CRM_Utils_Array::value('max_amount', $self->_values);
if ($min && $otherAmountVal < $min) {
}
}
+ $currentMemberships = NULL;
+ if ($membershipIsActive) {
+ $is_test = $self->_mode != 'live' ? 1 : 0;
+ $memContactID = $self->_membershipContactID;
+
+ // For anonymous user check using dedupe rule
+ // if user has Cancelled Membership
+ if (!$memContactID) {
+ $dedupeParams = CRM_Dedupe_Finder::formatParams($fields, 'Individual');
+ $dedupeParams['check_permission'] = FALSE;
+ $ids = CRM_Dedupe_Finder::dupesByParams($dedupeParams, 'Individual');
+ // if we find more than one contact, use the first one
+ $memContactID = CRM_Utils_Array::value(0, $ids);
+ }
+ $currentMemberships = CRM_Member_BAO_Membership::getContactsCancelledMembership($memContactID,
+ $is_test
+ );
+
+ $errorText = 'Your %1 membership was previously cancelled and can not be renewed online. Please contact the site administrator for assistance.';
+ foreach ($self->_values['fee'] as $fieldKey => $fieldValue) {
+ if ($fieldValue['html_type'] != 'Text' && CRM_Utils_Array::value('price_' . $fieldKey, $fields)) {
+ if (!is_array($fields['price_' . $fieldKey])) {
+ if (array_key_exists('membership_type_id', $fieldValue['options'][$fields['price_' . $fieldKey]])
+ && in_array($fieldValue['options'][$fields['price_' . $fieldKey]]['membership_type_id'], $currentMemberships)) {
+ $errors['price_' . $fieldKey] = ts($errorText, array(1 => CRM_Member_PseudoConstant::membershipType($fieldValue['options'][$fields['price_' . $fieldKey]]['membership_type_id'])));
+ }
+ }
+ else {
+ foreach ($fields['price_' . $fieldKey] as $key => $ignore) {
+ if (array_key_exists('membership_type_id', $fieldValue['options'][$key])
+ && in_array($fieldValue['options'][$key]['membership_type_id'], $currentMemberships)) {
+ $errors['price_' . $fieldKey] = ts($errorText, array(1 => CRM_Member_PseudoConstant::membershipType($fieldValue['options'][$key]['membership_type_id'])));
+ }
+ }
+ }
+ }
+ }
+ }
+
// CRM-12233
if ($membershipIsActive && !$self->_membershipBlock['is_required']
&& $self->_values['amount_block_is_active']) {
if (!empty($value['options'])) {
foreach ($value['options'] as $val) {
- if (!empty($val['membership_type_id'])) {
+ if (!empty($val['membership_type_id']) && (
+ ($fields['price_' . $priceId] == $val['id']) ||
+ (isset($fields['price_' . $priceId]) && !empty($fields['price_' . $priceId][$val['id']]))
+ )
+ ) {
$priceFieldMemTypes[] = $val['membership_type_id'];
}
}
$params['amount'] = $memFee ? $memFee : 0;
}
}
-
//If the membership & contribution is used in contribution page & not separate payment
$fieldId = $memPresent = $membershipLabel = $fieldOption = $is_quick_config = NULL;
$proceFieldAmount = 0;
}
}
}
-
+
if (!isset($params['amount_other'])) {
$this->set('amount_level', CRM_Utils_Array::value('amount_level', $params));
}
$lineItem = array();
$is_quick_config = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $priceSetId, 'is_quick_config' );
if ( $is_quick_config ) {
- foreach ( $this->_values['fee'] as $key => & $val ) {
- if ( $val['name'] == 'other_amount' && $val['html_type'] == 'Text' && array_key_exists( 'price_'.$key, $params ) && $params['price_'.$key] != 0 ) {
- foreach ( $val['options'] as $optionKey => & $options ) {
- $options['amount'] = CRM_Utils_Array::value( 'price_'.$key, $params );
- break;
+ foreach ( $this->_values['fee'] as $key => & $val ) {
+ if ( $val['name'] == 'other_amount' && $val['html_type'] == 'Text' && array_key_exists( 'price_'.$key, $params ) ) {
+ $params['price_'.$key] = CRM_Utils_Rule::cleanMoney($params['price_'.$key]); //Clean out any currency symbols
+ if($params['price_'.$key] != 0){
+ foreach ( $val['options'] as $optionKey => & $options ) {
+ $options['amount'] = CRM_Utils_Array::value( 'price_'.$key, $params );
+ break;
+ }
}
$params['price_'.$key] = 1;
break;
}
}
}
-
$component = '';
if ($this->_membershipBlock) {
$component = 'membership';
}
+
CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], $params, $lineItem[$priceSetId], $component);
if ($proceFieldAmount) {
// redirect to thank you page
CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contribute/transact', "_qf_ThankYou_display=1&qfKey=$qfKey", TRUE, NULL, FALSE));
}
+
}
/**