CRM_Utils_Hook::tabs($allTabs, $this->_contactId);
CRM_Utils_Hook::tabset('civicrm/contact/view', $allTabs, $context);
+ $allTabs[] = array(
+ 'id' => 'summary',
+ 'url' => '#contact-summary',
+ 'title' => ts('Summary'),
+ 'weight' => 0,
+ );
+
// now sort the tabs based on weight
usort($allTabs, array('CRM_Utils_Sort', 'cmpFunc'));
$participant = CRM_Utils_Array::value('participant', $objects);
$memberships = CRM_Utils_Array::value('membership', $objects);
$recurContrib = CRM_Utils_Array::value('contributionRecur', $objects);
+ $recurringContributionID = (empty($recurContrib->id)) ? NULL : $recurContrib->id;
$event = CRM_Utils_Array::value('event', $objects);
$completedContributionStatusID = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed');
), array_intersect_key($input, array_fill_keys($inputContributionWhiteList, 1)
));
- if (!empty($recurContrib->id)) {
- $contributionParams['contribution_recur_id'] = $recurContrib->id;
+ if ($recurringContributionID) {
+ $contributionParams['contribution_recur_id'] = $recurringContributionID;
}
$changeDate = CRM_Utils_Array::value('trxn_date', $input, date('YmdHis'));
// Figure out what we gain from this.
CRM_Contribute_BAO_ContributionPage::setValues($contribution->contribution_page_id, $values);
}
- elseif ($recurContrib && $recurContrib->id) {
+ elseif ($recurContrib && $recurringContributionID) {
$values['amount'] = $recurContrib->amount;
$values['financial_type_id'] = $objects['contributionType']->id;
$values['title'] = $source = ts('Offline Recurring Contribution');
}
- if ($recurContrib && $recurContrib->id && !isset($input['is_email_receipt'])) {
+ if ($recurContrib && $recurringContributionID && !isset($input['is_email_receipt'])) {
//CRM-13273 - is_email_receipt setting on recurring contribution should take precedence over contribution page setting
// but CRM-16124 if $input['is_email_receipt'] is set then that should not be overridden.
$values['is_email_receipt'] = $recurContrib->is_email_receipt;
$contributionParams['id'] = $contribution->id;
- civicrm_api3('Contribution', 'create', $contributionParams);
+ $contributionResult = civicrm_api3('Contribution', 'create', $contributionParams);
// Add new soft credit against current $contribution.
if (CRM_Utils_Array::value('contributionRecur', $objects) && $objects['contributionRecur']->id) {
CRM_Core_Error::debug_log_message("Contribution record updated successfully");
$transaction->commit();
- CRM_Contribute_BAO_ContributionRecur::updateRecurLinkedPledge($contribution);
+ CRM_Contribute_BAO_ContributionRecur::updateRecurLinkedPledge($contribution->id, $recurringContributionID,
+ $input['contribution_status_id'], $input['total_amount']);
// create an activity record
if ($input['component'] == 'contribute') {
CRM_Contribute_BAO_ContributionRecur::sendRecurringStartOrEndNotification($ids, $recur,
$isFirstOrLastRecurringPayment);
}
+ return $contributionResult;
}
/**
* The pledge payment record should already exist & will need to be updated with the new contribution ID.
* If not the contribution will also need to be linked to the pledge
*
- * @param CRM_Contribute_BAO_Contribution $contribution
+ * @param int $contributionID
+ * @param int $contributionRecurID
+ * @param int $contributionStatusID
+ * @param float $contributionAmount
+ *
+ * @throws \CiviCRM_API3_Exception
*/
- public static function updateRecurLinkedPledge($contribution) {
+ public static function updateRecurLinkedPledge($contributionID, $contributionRecurID, $contributionStatusID, $contributionAmount) {
$returnProperties = array('id', 'pledge_id');
$paymentDetails = $paymentIDs = array();
- if (CRM_Core_DAO::commonRetrieveAll('CRM_Pledge_DAO_PledgePayment', 'contribution_id', $contribution->id,
+ if (CRM_Core_DAO::commonRetrieveAll('CRM_Pledge_DAO_PledgePayment', 'contribution_id', $contributionID,
$paymentDetails, $returnProperties
)
) {
else {
//payment is not already linked - if it is linked with a pledge we need to create a link.
// return if it is not recurring contribution
- if (!$contribution->contribution_recur_id) {
+ if (!$contributionRecurID) {
return;
}
$relatedContributions = new CRM_Contribute_DAO_Contribution();
- $relatedContributions->contribution_recur_id = $contribution->contribution_recur_id;
+ $relatedContributions->contribution_recur_id = $contributionRecurID;
$relatedContributions->find();
while ($relatedContributions->fetch()) {
// return now so we don't create a core error & roll back
return;
}
- $paymentDetails['contribution_id'] = $contribution->id;
- $paymentDetails['status_id'] = $contribution->contribution_status_id;
- $paymentDetails['actual_amount'] = $contribution->total_amount;
+ $paymentDetails['contribution_id'] = $contributionID;
+ $paymentDetails['status_id'] = $contributionStatusID;
+ $paymentDetails['actual_amount'] = $contributionAmount;
// put contribution against it
- $payment = CRM_Pledge_BAO_PledgePayment::add($paymentDetails);
- $paymentIDs[] = $payment->id;
+ $payment = civicrm_api3('PledgePayment', 'create', $paymentDetails);
+ $paymentIDs[] = $payment['id'];
}
// update pledge and corresponding payment statuses
- CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeId, $paymentIDs, $contribution->contribution_status_id,
- NULL, $contribution->total_amount
+ CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeId, $paymentIDs, $contributionStatusID,
+ NULL, $contributionAmount
);
}
}
else {
// In other contexts show a paperclip icon
- $icons = CRM_Core_BAO_File::paperIconAttachment('*', $value);
- $display = $icons[$value];
+ if (CRM_Utils_Rule::integer($value)) {
+ $icons = CRM_Core_BAO_File::paperIconAttachment('*', $value);
+ $display = $icons[$value];
+ }
+ else {
+ //CRM-18396, if filename is passed instead
+ $display = $value;
+ }
}
}
break;
CRM_Core_DAO::executeQuery('SET @uniqueID = %1', array(1 => array(CRM_Utils_Request::id(), 'String')));
}
+ /**
+ * @return DB_common
+ */
+ public static function getConnection() {
+ global $_DB_DATAOBJECT;
+ $dao = new CRM_Core_DAO();
+ return $_DB_DATAOBJECT['CONNECTIONS'][$dao->_database_dsn_md5];
+ }
+
/**
* @param string $fieldName
* @param $fieldDef
*/
protected $_paymentProcessorID;
protected $currency;
+ protected $_values = array();
/**
* @var array
}
/**
- * @param $dsn
+ * @param string|NULL $dsn
+ * Use NULL to load the default/active connection from CRM_Core_DAO.
+ * Otherwise, give a full DSN string.
* @param string $fileName
* @param null $prefix
* @param bool $isQueryString
* @param bool $dieOnErrors
*/
public static function sourceSQLFile($dsn, $fileName, $prefix = NULL, $isQueryString = FALSE, $dieOnErrors = TRUE) {
- require_once 'DB.php';
+ if ($dsn === NULL) {
+ $db = CRM_Core_DAO::getConnection();
+ }
+ else {
+ require_once 'DB.php';
+ $db = DB::connect($dsn);
+ }
- $db = DB::connect($dsn);
if (PEAR::isError($db)) {
die("Cannot open $dsn: " . $db->getMessage());
}
crm-entityref="{entity: 'Campaign', select: {allowClear: true, placeholder: ts('Select Campaign')}}"
crm-ui-id="setupForm.campaign"
name="campaign"
- ng-model="mailing.campaign_id"
+ ng-model="abtest.mailings.a.campaign_id"
+ ng-change="abtest.mailings.b.campaign_id=abtest.mailings.a.campaign_id"
/>
</div>
<div crm-ui-field="{title: ts('Test Type')}" ng-if="fields.testing_criteria">
* @param array $params
* Input parameters.
*
- * @throws API_Exception
- * Api result array.
+ * @return array
+ * API result array
+ * @throws \API_Exception
+ * @throws \CRM_Core_Exception
+ * @throws \Exception
*/
function civicrm_api3_contribution_completetransaction(&$params) {
if (!empty($params['fee_amount'])) {
$input['fee_amount'] = $params['fee_amount'];
}
- $params = _ipn_process_transaction($params, $contribution, $input, $ids);
+ return _ipn_process_transaction($params, $contribution, $input, $ids);
}
);
$input = array_intersect_key($params, array_fill_keys($passThroughParams, NULL));
- $params = _ipn_process_transaction($params, $contribution, $input, $ids, $original_contribution);
+ return _ipn_process_transaction($params, $contribution, $input, $ids, $original_contribution);
}
catch(Exception $e) {
throw new API_Exception('failed to load related objects' . $e->getMessage() . "\n" . $e->getTraceAsString());
$input['receipt_from_email'] = CRM_Utils_Array::value('receipt_from_email', $params, $domainFromEmail);
}
$transaction = new CRM_Core_Transaction();
- CRM_Contribute_BAO_Contribution::completeOrder($input, $ids, $objects, $transaction, !empty($contribution->contribution_recur_id), $contribution,
+ return CRM_Contribute_BAO_Contribution::completeOrder($input, $ids, $objects, $transaction, !empty
+ ($contribution->contribution_recur_id), $contribution,
FALSE, FALSE);
- return $params;
}
/**
<div class="crm-block crm-content-block crm-contact-page crm-inline-edit-container">
<div id="mainTabContainer">
<ul class="crm-contact-tabs-list">
- <li id="tab_summary" class="crm-tab-button ui-corner-all">
- <a href="#contact-summary" title="{ts}Summary{/ts}">
- <span> </span> {ts}Summary{/ts}
- <em></em>
- </a>
- </li>
{foreach from=$allTabs key=tabName item=tabValue}
<li id="tab_{$tabValue.id}" class="crm-tab-button ui-corner-all crm-count-{$tabValue.count}{if isset($tabValue.class)} {$tabValue.class}{/if}">
<a href="{$tabValue.url}" title="{$tabValue.title}">
* Load saved search sql files into the DB.
*/
public function loadSavedSearches() {
- $dsn = CRM_Core_Config::singleton()->dsn;
foreach (glob(dirname(__FILE__) . "/SavedSearchDataSets/*.sql") as $file) {
- CRM_Utils_File::sourceSQLFile($dsn, $file);
+ CRM_Utils_File::sourceSQLFile(NULL, $file);
}
}
*/
protected $paymentInstruments = array();
+ /**
+ * @var CiviMailUtils
+ */
+ protected $mut;
+
/**
* Test setup for every test.
*
*/
public function testSubmit() {
$form = $this->getForm();
+ $this->mut = new CiviMailUtils($this, TRUE);
$form->_mode = 'test';
$this->createLoggedInUser();
$params = array(
'soft_credit_type_id' => '',
'soft_credit_contact_id' => '',
'from_email_address' => '"Demonstrators Anonymous" <info@example.org>',
- 'receipt_text_signup' => 'Thank you text',
'payment_processor_id' => $this->_paymentProcessorID,
'credit_card_number' => '4111111111111111',
'cvv2' => '123',
'billing_state_province_id-5' => '1003',
'billing_postal_code-5' => '90210',
'billing_country_id-5' => '1228',
+ 'send_receipt' => TRUE,
+ 'receipt_text' => 'Receipt text',
);
$form->_contactID = $this->_individualId;
$form->testSubmit($params);
'entity_table' => 'civicrm_membership',
'contribution_id' => $contribution['id'],
), 1);
+ $this->mut->checkMailLog(array(
+ '50',
+ 'Receipt text',
+ ));
+ $this->mut->stop();
}
/**
'civicrm_participant',
'civicrm_participant_payment',
'civicrm_pledge',
+ 'civicrm_pledge_payment',
'civicrm_price_set_entity',
'civicrm_price_field_value',
'civicrm_price_field',
$this->assertEquals(date('Y-m-d 00:00:00', strtotime('+1 month')), $contributionRecur['next_sched_contribution_date']);
}
+ /**
+ * Test completing a pledge with the completeTransaction api..
+ *
+ * Note that we are creating a logged in user because email goes out from
+ * that person.
+ */
+ public function testCompleteTransactionUpdatePledgePayment() {
+ $mut = new CiviMailUtils($this, TRUE);
+ $mut->clearMessages();
+ $this->createLoggedInUser();
+ $contributionID = $this->createPendingPledgeContribution();
+ $this->callAPISuccess('contribution', 'completetransaction', array(
+ 'id' => $contributionID,
+ 'trxn_date' => '1 Feb 2013',
+ ));
+ $pledge = $this->callAPISuccessGetSingle('Pledge', array(
+ 'id' => $this->_ids['pledge'],
+ ));
+ $this->assertEquals('Completed', $pledge['pledge_status']);
+
+ $status = $this->callAPISuccessGetValue('PledgePayment', array(
+ 'pledge_id' => $this->_ids['pledge'],
+ 'return' => 'status_id',
+ ));
+ $this->assertEquals(1, $status);
+ $mut->checkMailLog(array(
+ '$ 500.00',
+ 'May 11th, 2012 12:00 AM',
+ ));
+ $mut->stop();
+ }
+
/**
* Test completing a transaction with an event via the API.
*
}
}
+ /**
+ * Create a pending contribution & linked pending pledge record.
+ */
+ public function createPendingPledgeContribution() {
+
+ $pledgeID = $this->pledgeCreate(array('contact_id' => $this->_individualId, 'installments' => 1, 'amount' => 500));
+ $this->_ids['pledge'] = $pledgeID;
+ $contribution = $this->callAPISuccess('contribution', 'create', array_merge($this->_params, array(
+ 'contribution_status_id' => 'Pending',
+ 'total_amount' => 500,
+ ))
+ );
+ $paymentID = $this->callAPISuccessGetValue('PledgePayment', array(
+ 'options' => array('limit' => 1),
+ 'return' => 'id',
+ ));
+ $this->callAPISuccess('PledgePayment', 'create', array(
+ 'id' => $paymentID,
+ 'contribution_id' =>
+ $contribution['id'],
+ 'status_id' => 'Pending',
+ 'scheduled_amount' => 500,
+ ));
+
+ return $contribution['id'];
+ }
+
/**
* Create a pending contribution & linked pending participant record (along with an event).
*/
<import>true</import>
<export>false</export>
<type>int unsigned</type>
+ <pseudoconstant>
+ <optionGroupName>contribution_status</optionGroupName>
+ </pseudoconstant>
<comment>Implicit foreign key to civicrm_option_values in the contribution_status option group.</comment>
<add>2.1</add>
</field>
<export>false</export>
<type>int unsigned</type>
<add>2.1</add>
+ <pseudoconstant>
+ <optionGroupName>contribution_status</optionGroupName>
+ </pseudoconstant>
</field>
<index>
<name>index_status</name>