X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FBAO%2FContribution.php;h=76accef4136f25088da787ae89edc6c19076738e;hb=733e67821add3b15d4bc20df931675d2c83e7ede;hp=8e17252c2b93fcb67d7059facec2f1d0ff87bdb3;hpb=d5a0bb241c55747b7bd8e16ede5addad323453e1;p=civicrm-core.git diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 8e17252c2b..76accef413 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -23,7 +23,7 @@ | GNU Affero General Public License or the licensing of CiviCRM, | | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ -*/ + */ /** * @@ -38,7 +38,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * Static field for all the contribution information that we can potentially import * * @var array - * @static */ static $_importableFields = NULL; @@ -46,7 +45,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * Static field for all the contribution information that we can potentially export * * @var array - * @static */ static $_exportableFields = NULL; @@ -66,11 +64,17 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { */ public $_component = NULL; - /* - * construct method + /** + * Possibly obsolete variable. + * + * If you use it please explain why it is set in the create function here. + * + * @var string */ + public $trxn_result_code; + /** - * Class constructor + * Class constructor. * * @return \CRM_Contribute_DAO_Contribution */ @@ -81,7 +85,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * Takes an associative array and creates a contribution object + * Takes an associative array and creates a contribution object. * * the function extract all the params it needs to initialize the create a * contribution object. the params array could contain additional unused name/value @@ -92,12 +96,11 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * @param array $ids * The array that holds all the db ids. * - * @return CRM_Contribute_BAO_Contribution - * @static + * @return CRM_Contribute_BAO_Contribution|void */ public static function add(&$params, $ids = array()) { if (empty($params)) { - return; + return NULL; } //per http://wiki.civicrm.org/confluence/display/CRM/Database+layer we are moving away from $ids array $contributionID = CRM_Utils_Array::value('contribution', $ids, CRM_Utils_Array::value('id', $params)); @@ -202,7 +205,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * Get defaults for new entity + * Get defaults for new entity. * @return array */ public static function getDefaults() { @@ -226,7 +229,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * The array that holds all the db ids. * * @return CRM_Contribute_BAO_Contribution|null the found object or null - * @static */ public static function &getValues($params, &$values, &$ids) { if (empty($params)) { @@ -248,9 +250,13 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * @param array $params + * Calculate net_amount & fee_amount if they are not set. * - * @return mixed + * Net amount should be total - fee. + * This should only be called for new contributions. + * + * @param array $params + * Params for a new contribution before they are saved. */ public static function calculateMissingAmountParams(&$params) { if (!isset($params['fee_amount'])) { @@ -290,7 +296,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * Takes an associative array and creates a contribution object + * Takes an associative array and creates a contribution object. * * @param array $params * (reference ) an assoc array of name/value pairs. @@ -298,7 +304,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * The array that holds all the db ids. * * @return CRM_Contribute_BAO_Contribution - * @static */ public static function create(&$params, $ids = array()) { $dateFields = array('receive_date', 'cancel_date', 'receipt_date', 'thankyou_date'); @@ -400,7 +405,11 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $softParams['pcp_roll_nickname'] = CRM_Utils_Array::value('pcp_roll_nickname', $pcp); $softParams['pcp_personal_note'] = CRM_Utils_Array::value('pcp_personal_note', $pcp); $softParams['soft_credit_type_id'] = CRM_Core_OptionGroup::getValue('soft_credit_type', 'pcp', 'name'); - CRM_Contribute_BAO_ContributionSoft::add($softParams); + $contributionSoft = CRM_Contribute_BAO_ContributionSoft::add($softParams); + //Send notification to owner for PCP + if ($contributionSoft->pcp_id) { + CRM_Contribute_Form_Contribution_Confirm::pcpNotifyOwner($contribution, $contributionSoft); + } } if (isset($params['soft_credit'])) { $softParams = $params['soft_credit']; @@ -488,7 +497,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * True if we want to resolve the values in the reverse direction (value -> name). * * @return void - * @static */ public static function resolveDefaults(&$defaults, $reverse = FALSE) { self::lookupValue($defaults, 'financial_type', CRM_Contribute_PseudoConstant::financialType(), $reverse); @@ -498,12 +506,18 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * convert associative array names to values - * and vice-versa. + * 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 + * + * @param array $defaults + * @param string $property + * @param array $lookup + * @param bool $reverse + * + * @return bool */ public static function lookupValue(&$defaults, $property, &$lookup, $reverse) { $id = $property . '_id'; @@ -527,10 +541,9 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * Takes a bunch of params that are needed to match certain criteria and - * retrieves the relevant objects. We'll tweak this function to be more - * full featured over a period of time. This is the inverse function of - * create. It also stores all the retrieved values in the default array + * Retrieve DB object based on input parameters. + * + * It also stores all the retrieved values in the default array. * * @param array $params * (reference ) an assoc array of name/value pairs. @@ -541,7 +554,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * (reference) the array that holds all the db ids. * * @return CRM_Contribute_BAO_Contribution - * @static */ public static function retrieve(&$params, &$defaults, &$ids) { $contribution = CRM_Contribute_BAO_Contribution::getValues($params, $defaults, $ids); @@ -549,7 +561,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { } /** - * Combine all the importable fields from the lower levels object + * Combine all the importable fields from the lower levels object. * * The ordering is important, since currently we do not have a weight * scheme. Adding weight is super important and should be done in the @@ -560,7 +572,6 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * * @return array * array of importable Fields - * @static */ public static function &importableFields($contactType = 'Individual', $status = TRUE) { if (!self::$_importableFields) { @@ -648,13 +659,21 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { ), ); + $contributionPage = array( + 'contribution_page' => array( + 'title' => ts('Contribution Page'), + 'name' => 'contribution_page', + 'where' => 'civicrm_contribution_page.title', + 'data_type' => CRM_Utils_Type::T_STRING, + ), + ); + $contributionNote = array( - 'contribution_note' => - array( - 'title' => ts('Contribution Note'), - 'name' => 'contribution_note', - 'data_type' => CRM_Utils_Type::T_TEXT, - ), + 'contribution_note' => array( + 'title' => ts('Contribution Note'), + 'name' => 'contribution_note', + 'data_type' => CRM_Utils_Type::T_TEXT, + ), ); $contributionRecurId = array( @@ -699,7 +718,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { ), ); - $fields = array_merge($impFields, $typeField, $contributionStatus, $optionField, $expFieldProduct, + $fields = array_merge($impFields, $typeField, $contributionStatus, $contributionPage, $optionField, $expFieldProduct, $expFieldsContrib, $contributionNote, $contributionRecurId, $extraFields, $softCreditFields, $financialAccount, CRM_Core_BAO_CustomField::getFieldsForImport('Contribution') ); @@ -767,14 +786,12 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta } /** - * Delete the indirect records associated with this contribution first + * Delete the indirect records associated with this contribution first. * * @param int $id * * @return mixed|null * $results no of deleted Contribution on success, false otherwise - * @access public - * @static */ public static function deleteContribution($id) { CRM_Utils_Hook::pre('delete', 'Contribution', $id, CRM_Core_DAO::$_nullArray); @@ -841,7 +858,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta } /** - * Check if there is a contribution with the same trxn_id or invoice_id + * Check if there is a contribution with the same trxn_id or invoice_id. * * @param array $input * An assoc array of name/value pairs. @@ -849,9 +866,8 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta * (reference) store ids of duplicate contribs. * @param int $id * - * @return boolean + * @return bool * true if duplicate, false otherwise - * @static */ public static function checkDuplicate($input, &$duplicates, $id = NULL) { if (!$id) { @@ -894,7 +910,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta } /** - * Takes an associative array and creates a contribution_product object + * Takes an associative array and creates a contribution_product object. * * the function extract all the params it needs to initialize the create a * contribution_product object. the params array could contain additional unused name/value @@ -904,7 +920,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta * (reference) an assoc array of name/value pairs. * * @return CRM_Contribute_DAO_ContributionProduct - * @static */ public static function addPremium(&$params) { $contributionProduct = new CRM_Contribute_DAO_ContributionProduct(); @@ -913,7 +928,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta } /** - * Get list of contribution fields for profile + * Get list of contribution fields for profile. * For now we only allow custom contribution fields to be in * profile * @@ -922,7 +937,6 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta * * @return array * the list of contribution fields - * @static */ public static function getContributionFields($addExtraFields = TRUE) { $contributionFields = CRM_Contribute_DAO_Contribution::export(); @@ -949,9 +963,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = civicrm_contribution.conta } /** - * Add extra fields specific to contribtion - * - * @static + * Add extra fields specific to contribution. */ public static function getSpecialContributionFields() { $extraFields = array( @@ -1013,7 +1025,7 @@ GROUP BY p.id } /** - * Get list of contribution In Honor of contact Ids + * Get list of contribution In Honor of contact Ids. * * @param int $honorId * In Honor of Contact ID. @@ -1021,7 +1033,6 @@ GROUP BY p.id * @return array * list of contribution fields * - * @static */ public static function getHonorContacts($honorId) { $params = array(); @@ -1052,14 +1063,13 @@ GROUP BY p.id } /** - * Get the sort name of a contact for a particular contribution + * Get the sort name of a contact for a particular contribution. * * @param int $id * Id of the contribution. * * @return null|string * sort name of the contact if found - * @static */ public static function sortName($id) { $id = CRM_Utils_Type::escape($id, 'Integer'); @@ -1160,7 +1170,6 @@ WHERE civicrm_contribution.contact_id = civicrm_contact.id * * @return array * contribution id if success else NULL - * @static */ public static function checkDuplicateIds($params) { $dao = new CRM_Contribute_DAO_Contribution(); @@ -1184,7 +1193,7 @@ WHERE civicrm_contribution.contact_id = civicrm_contact.id } /** - * Get the contribution details for component export + * Get the contribution details for component export. * * @param int $exportMode * Export mode. @@ -1194,7 +1203,6 @@ WHERE civicrm_contribution.contact_id = civicrm_contact.id * @return array * associated array * - * @static */ public static function getContributionDetails($exportMode, $componentIds) { $paymentDetails = array(); @@ -1257,7 +1265,6 @@ LEFT JOIN civicrm_option_value contribution_status ON (civicrm_contribution.cont * * @return int * address id - * @static */ public static function createAddress(&$params, $billingLocationTypeID) { $billingFields = array( @@ -1288,12 +1295,11 @@ LEFT JOIN civicrm_option_value contribution_status ON (civicrm_contribution.cont } /** - * Delete billing address record related contribution + * Delete billing address record related contribution. * * @param int $contributionId * @param int $contactId * - * @static */ public static function deleteAddress($contributionId = NULL, $contactId = NULL) { $clauses = array(); @@ -1340,7 +1346,6 @@ WHERE $condition * * @return int * pending contribution id. - * @static */ public static function checkOnlinePendingContribution($componentId, $componentName) { $contributionId = NULL; @@ -1395,6 +1400,12 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ /** * Update contribution as well as related objects. + * + * @param array $params + * @param bool $processContributionObject + * + * @return array + * @throws \Exception */ public static function transitionComponents($params, $processContributionObject = FALSE) { // get minimum required values. @@ -1596,7 +1607,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ WHERE membership_id=$membership->id ORDER BY id DESC LIMIT 1;"; - $dao = new CRM_Core_DAO; + $dao = new CRM_Core_DAO(); $dao->query($sql); if ($dao->fetch()) { if (!empty($dao->membership_type_id)) { @@ -1751,6 +1762,10 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ /** * Returns all contribution related object ids. + * + * @param $contributionId + * + * @return array */ public static function getComponentDetails($contributionId) { $componentDetails = $pledgePayment = array(); @@ -1761,6 +1776,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $query = " SELECT c.id as contribution_id, c.contact_id as contact_id, + c.contribution_recur_id, mp.membership_id as membership_id, m.membership_type_id as membership_type_id, pp.participant_id as participant_id, @@ -1796,6 +1812,9 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ if ($dao->pledge_payment_id) { $pledgePayment[] = $dao->pledge_payment_id; } + if ($dao->contribution_recur_id) { + $componentDetails['contributionRecur'] = $dao->contribution_recur_id; + } } if ($pledgePayment) { @@ -1840,7 +1859,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ } /** - * Get individual id for onbehalf contribution + * Get individual id for onbehalf contribution. * * @param int $contributionId * Contribution id. @@ -1916,7 +1935,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac /** * @return array - * @static */ public static function getContributionDates() { $config = CRM_Core_Config::singleton(); @@ -1949,7 +1967,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac } /** - * Load objects relations to contribution object + * Load objects relations to contribution object. * Objects are stored in the $_relatedObjects property * In the first instance we are just moving functionality from BASEIpn - * @see http://issues.civicrm.org/jira/browse/CRM-9996 @@ -2478,7 +2496,6 @@ WHERE contribution_id = %1 "; $values['financial_type_id'] = $this->financial_type_id; } - $template->assign('trxn_id', $this->trxn_id); $template->assign('receive_date', CRM_Utils_Date::mysqlToIso($this->receive_date) @@ -2587,8 +2604,7 @@ WHERE contribution_id = %1 "; * * @param bool $isNotCancelled * - * @return boolean - * @static + * @return bool */ public static function isCancelSubscriptionSupported($contributionId, $isNotCancelled = TRUE) { $cacheKeyString = "$contributionId"; @@ -2613,14 +2629,13 @@ WHERE contribution_id = %1 "; } /** - * Check whether subscription is already cancelled + * Check whether subscription is already cancelled. * * @param int $contributionId * Contribution id. * * @return string * contribution status - * @static */ public static function isSubscriptionCancelled($contributionId) { $sql = " @@ -2638,7 +2653,7 @@ WHERE contribution_id = %1 "; } /** - * Create all financial accounts entry + * Create all financial accounts entry. * * @param array $params * Contribution object, line item array and params for trxn. @@ -2647,7 +2662,6 @@ WHERE contribution_id = %1 "; * @param array $financialTrxnValues * * @return null|object - * @static */ public static function recordFinancialAccounts(&$params, $financialTrxnValues = NULL) { $skipRecords = $update = $return = $isRelatedId = FALSE; @@ -2795,7 +2809,6 @@ WHERE contribution_id = %1 "; $params['trxnParams']['trxn_id'] = $params['prevContribution']->trxn_id; $params['trxnParams']['status_id'] = $params['prevContribution']->contribution_status_id; - if (!(($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatuses) || $params['prevContribution']->contribution_status_id == array_search('In Progress', $contributionStatuses)) && $params['contribution']->contribution_status_id == array_search('Completed', $contributionStatuses)) @@ -2834,6 +2847,7 @@ WHERE contribution_id = %1 "; //Update contribution status $params['trxnParams']['status_id'] = $params['contribution']->contribution_status_id; + $params['trxnParams']['trxn_id'] = $params['contribution']->trxn_id; if (!empty($params['contribution_status_id']) && $params['prevContribution']->contribution_status_id != $params['contribution']->contribution_status_id ) { @@ -2939,7 +2953,7 @@ WHERE contribution_id = %1 "; } /** - * Update all financial accounts entry + * Update all financial accounts entry. * * @param array $params * Contribution object, line item array and params for trxn. @@ -2949,7 +2963,6 @@ WHERE contribution_id = %1 "; * * @param null $skipTrxn * - * @static */ public static function updateFinancialAccounts(&$params, $context = NULL, $skipTrxn = NULL) { $itemAmount = $trxnID = NULL; @@ -3112,7 +3125,7 @@ WHERE contribution_id = %1 "; } /** - * Check status validation on update of a contribution + * Check status validation on update of a contribution. * * @param array $values * Previous form values before submit. @@ -3124,7 +3137,6 @@ WHERE contribution_id = %1 "; * List of errors. * * @return bool - * @static */ public static function checkStatusValidation($values, &$fields, &$errors) { if (CRM_Utils_System::isNull($values) && !empty($fields['id'])) { @@ -3151,14 +3163,13 @@ WHERE contribution_id = %1 "; } /** - * Delete contribution of contact + * Delete contribution of contact. * * CRM-12155 * * @param int $contactId * Contact id. * - * @static */ public static function deleteContactContribution($contactId) { $contribution = new CRM_Contribute_DAO_Contribution(); @@ -3174,12 +3185,10 @@ WHERE contribution_id = %1 "; * @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 $context see CRM_Core_DAO::buildOptionsContext. + * @param array $props whatever is known about this dao object. * - * @return Array|bool + * @return array|bool */ public static function buildOptions($fieldName, $context = NULL, $props = array()) { $className = __CLASS__; @@ -3210,7 +3219,7 @@ WHERE contribution_id = %1 "; } /** - * Validate financial type + * Validate financial type. * * CRM-13231 * @@ -3220,7 +3229,6 @@ WHERE contribution_id = %1 "; * @param string $relationName * * @return array|bool - * @static */ public static function validateFinancialType($financialTypeId, $relationName = 'Expense Account is') { $expenseTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE '{$relationName}' ")); @@ -3233,20 +3241,15 @@ WHERE contribution_id = %1 "; } - /* - * Function to record additional payment for partial and refund contributions + /** + * Function to record additional payment for partial and refund contributions. * * @param int $contributionId * is the invoice contribution id (got created after processing participant payment). - * @param array $trxnData + * @param array $trxnsData * to take user provided input of transaction details. * @param string $paymentType * 'owed' for purpose of recording partial payments, 'refund' for purpose of recording refund payments. - */ - /** - * @param int $contributionId - * @param $trxnsData - * @param string $paymentType * @param int $participantId * * @return null|object @@ -3457,7 +3460,7 @@ WHERE eft.financial_trxn_id IN ({$trxnId}, {$baseTrxnId['financialTrxnId']}) } /** - * Get list of payments displayed by Contribute_Page_PaymentInfo + * Get list of payments displayed by Contribute_Page_PaymentInfo. * * @param int $id * @param $component @@ -3590,10 +3593,18 @@ WHERE con.id = {$contributionId} return CRM_Utils_Array::value('financial_account_id', $result); } + /** + * Check tax amount. + * + * @param array $params + * @param bool $isLineItem + * + * @return mixed + */ public static function checkTaxAmount($params, $isLineItem = FALSE) { $taxRates = CRM_Core_PseudoConstant::getTaxRates(); - // Update contribution + // Update contribution. if (!empty($params['id'])) { $id = $params['id']; $values = $ids = array(); @@ -3663,4 +3674,5 @@ WHERE con.id = {$contributionId} } return $params; } + }