/** * Get Gift Aid declaration record for Individual. * * @param int $contactID - the Individual for whom we retrieve declaration * @param date $date - date for which we retrieve declaration (in ISO date format) * - e.g. the date for which you would like to check if the contact has a valid * declaration * @return array - declaration record as associative array, * else empty array. * @access public * @static */ static function getDeclaration($contactID, $date = null, $charity = null) { static $charityColumnExists = null; if (is_null($date)) { $date = date('Y-m-d H:i:s'); } if ($charityColumnExists === NULL) { $charityColumnExists = CRM_Core_DAO::checkFieldExists('civicrm_value_gift_aid_declaration', 'charity'); } $charityClause = ''; if ($charityColumnExists) { $charityClause = $charity ? " AND charity='{$charity}'" : " AND ( charity IS NULL OR charity = '' )"; } // Get current declaration: start_date in past, end_date in future or null // - if > 1, pick latest end_date $currentDeclaration = array(); $sql = "\n SELECT id, eligible_for_gift_aid, start_date, end_date, reason_ended, source, notes\n FROM civicrm_value_gift_aid_declaration\n WHERE entity_id = %1 AND start_date <= %2 AND (end_date > %2 OR end_date IS NULL) {$charityClause}\n ORDER BY end_date DESC"; $sqlParams = array(1 => array($contactID, 'Integer'), 2 => array(CRM_Utils_Date::isoToMysql($date), 'Timestamp')); // allow query to be modified via hook CRM_Civigiftaid_Utils_Hook::alterDeclarationQuery($sql, $sqlParams); $dao = CRM_Core_DAO::executeQuery($sql, $sqlParams); if ($dao->fetch()) { $currentDeclaration['id'] = $dao->id; $currentDeclaration['eligible_for_gift_aid'] = $dao->eligible_for_gift_aid; $currentDeclaration['start_date'] = $dao->start_date; $currentDeclaration['end_date'] = $dao->end_date; $currentDeclaration['reason_ended'] = $dao->reason_ended; $currentDeclaration['source'] = $dao->source; $currentDeclaration['notes'] = $dao->notes; } //CRM_Core_Error::debug('currentDeclaration', $currentDeclaration); return $currentDeclaration; }