| Server IP : 91.108.98.166 / Your IP :
216.73.216.109 [
Web Server : LiteSpeed System : Linux nl-srv-web1124.main-hosting.eu 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64 User : u964240598 ( 964240598) PHP Version : 8.4.19 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail Domains : 2 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/u964240598/domains/hofam.org/public_html/churchapp/application/models/ |
Upload File : |
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Donations_model extends CI_Model {
public $status = 'error';
public $message = 'Error processing requested operation.';
function __construct(){
parent::__construct();
}
/* =========================================================
* REPORTING
* ========================================================= */
function getDonationByTypes($branch, $year, $month, $reason){
return [
$this->getTotalweekDonation($branch,$year,$month,1,$reason),
$this->getTotalweekDonation($branch,$year,$month,2,$reason),
$this->getTotalweekDonation($branch,$year,$month,3,$reason),
$this->getTotalweekDonation($branch,$year,$month,4,$reason),
$this->getTotalweekDonation($branch,$year,$month,5,$reason),
];
}
function getTotalweekDonation($branch, $year, $month, $week, $reason){
$this->db->select_sum('amount');
$this->db->from('tbl_donations');
$this->db->where([
'year' => $year,
'month' => $month,
'week' => $week,
'reason' => $reason,
'status' => 'COMPLETED'
]);
if ($branch != 0) {
$this->db->where('branch', $branch);
}
$query = $this->db->get();
$amount = $query->row()->amount;
return $amount ? (float)$amount : 0;
}
/* =========================================================
* LISTING / DATATABLES
* ========================================================= */
function donationsListing($columnName,$columnSortOrder,$searchValue,$start,$length){
$this->db->select('tbl_donations.*, tbl_branches.name AS branchname');
$this->db->from('tbl_donations');
$this->db->join(
'tbl_branches',
'tbl_branches.id = tbl_donations.branch',
'left'
);
if ($searchValue != "") {
$this->db->group_start()
->like('tbl_donations.email',$searchValue)
->or_like('tbl_donations.name',$searchValue)
->or_like('tbl_donations.reference',$searchValue)
->or_like('tbl_donations.amount',$searchValue)
->or_like('tbl_donations.reason',$searchValue)
->group_end();
}
if ($columnName != "") {
$this->db->order_by($columnName,$columnSortOrder);
}
$this->db->limit($length,$start);
return $this->db->get()->result();
}
public function get_total_donations($searchValue=""){
if ($searchValue == "") {
return $this->db->count_all('tbl_donations');
}
$this->db->from('tbl_donations');
$this->db->group_start()
->like('email',$searchValue)
->or_like('reference',$searchValue)
->or_like('amount',$searchValue)
->group_end();
return $this->db->count_all_results();
}
/* =========================================================
* PESAPAL PAYMENT FLOW
* ========================================================= */
/**
* STEP 1: Create donation BEFORE redirecting to Pesapal
*/
public function createPendingDonation($data)
{
if ($this->verifyReferenceExists($data['reference'])) {
$this->status = 'error';
$this->message = 'Duplicate donation reference.';
return false;
}
$insert = [
'branch' => $data['branch'] ?? 1,
'email' => $data['email'],
'name' => $data['name'] ?? 'Anonymous',
'amount' => $data['amount'],
'currency' => 'UGX',
'reason' => $data['reason'],
'method' => 'PESAPAL',
'reference' => $data['reference'],
'status' => 'PENDING',
'day' => date('j'),
'month' => date('n'),
'year' => date('Y'),
'week' => date('W'),
'date' => date('Y-m-d H:i:s'),
];
$this->db->insert('tbl_donations', $insert);
$this->status = 'ok';
$this->message = 'Donation initiated';
return true;
}
/**
* STEP 2: Update donation AFTER Pesapal verification
*/
public function markDonationCompleted($reference, $trackingId, $paymentStatus)
{
$this->db->where('reference', $reference);
$this->db->update('tbl_donations', [
'order_tracking_id' => $trackingId,
'status' => strtoupper($paymentStatus),
'updated_at' => date('Y-m-d H:i:s')
]);
return $this->db->affected_rows() > 0;
}
/**
* Prevent duplicate references
*/
public function verifyReferenceExists($reference)
{
return $this->db
->where('reference',$reference)
->count_all_results('tbl_donations') > 0;
}
/* =========================================================
* SETTINGS (UNCHANGED)
* ========================================================= */
function getSettings(){
return $this->db
->where('id',100)
->get('tbl_donation_settings')
->row();
}
function updateSettings($data){
$this->db->where('id',100)->update('tbl_donation_settings',$data);
$this->status = 'ok';
$this->message = 'Donations Settings updated successfully';
}
public function createTempDonation($data)
{
if ($this->verifyTempReferenceExists($data['reference'])) {
return false;
}
return $this->db->insert('tbl_donations_tmp', $data);
}
public function verifyTempReferenceExists($reference)
{
return $this->db
->where('reference', $reference)
->count_all_results('tbl_donations_tmp') > 0;
}
public function getTempDonation($reference)
{
return $this->db
->where('reference', $reference)
->get('tbl_donations_tmp')
->row_array();
}
public function finalizeDonation($reference, $trackingId)
{
$tmp = $this->getTempDonation($reference);
if (!$tmp) return false;
$insert = [
'branch' => $tmp['branch'],
'email' => $tmp['email'],
'name' => $tmp['name'],
'amount' => $tmp['amount'],
'currency' => $tmp['currency'],
'reason' => $tmp['reason'],
'method' => 'PESAPAL',
'reference' => $tmp['reference'],
'status' => 'COMPLETED',
'day' => date('j'),
'month' => date('n'),
'year' => date('Y'),
'week' => date('W'),
'date' => date('Y-m-d H:i:s'),
'order_tracking_id' => $trackingId
];
$this->db->trans_start();
// 1️⃣ Insert into main table
$this->db->insert('tbl_donations', $insert);
// 2️⃣ DELETE from temp table (THIS IS WHAT YOU ASKED)
$this->db->where('reference', $reference)
->delete('tbl_donations_tmp');
$this->db->trans_complete();
return $this->db->trans_status();
}
public function finalizeDonationOLD($reference, $trackingId)
{
$tmp = $this->getTempDonation($reference);
if (!$tmp) return false;
$insert = [
'branch' => $tmp['branch'],
'email' => $tmp['email'],
'name' => $tmp['name'],
'amount' => $tmp['amount'],
'currency' => $tmp['currency'],
'reason' => $tmp['reason'],
'method' => 'PESAPAL',
'reference' => $tmp['reference'],
'status' => 'COMPLETED',
'day' => date('j'),
'month' => date('n'),
'year' => date('Y'),
'week' => date('W'),
'date' => date('Y-m-d H:i:s'),
'order_tracking_id' => $trackingId
];
$this->db->trans_start();
$this->db->insert('tbl_donations', $insert);
$this->db->where('reference', $reference)
->delete('tbl_donations_tmp');
$this->db->trans_complete();
return $this->db->trans_status();
}
}
Anon7 - 2022
AnonSec Team
