Файловый менеджер - Редактировать - /var/www/html/components/com_jdonation/model/donation.php
Ðазад
<?php use Joomla\CMS\Factory; use Joomla\CMS\User\UserHelper; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Table\Table; use Joomla\CMS\Language\Text; use Joomla\Registry\Registry; /** * @version 5.6.0 * @package Joomla * @subpackage Joom Donation * @author Tuan Pham Ngoc * @copyright Copyright (C) 2009 - 2023 Ossolution Team * @license GNU/GPL, see LICENSE.php */ // Check to ensure this file is included in Joomla! defined('_JEXEC') or die(); class DonationModelDonation extends OSFModel { /** * Process Donation * * @param $data * * @return bool * @throws Exception */ public function processDonation($data) { jimport('joomla.user.helper'); $db = Factory::getDbo(); $query = $db->getQuery(true); $config = DonationHelper::getConfig(); $user = Factory::getUser(); $donationType = isset($data['donation_type']) ? $data['donation_type'] : 'onetime'; $paymentMethod = $data['payment_method']; $data['transaction_id'] = strtoupper(UserHelper::genRandomPassword()); PluginHelper::importPlugin('jdonation'); Factory::getApplication()->triggerEvent('onBeforeStoreDonor', array()); $row = Table::getInstance('Donor', 'DonationTable'); //Convert the amount to the format supported by PHP $dec_point = isset($config->dec_point) ? $config->dec_point : '.'; $thousands_sep = isset($config->thousands_sep) ? $config->thousands_sep : ','; $data['amount'] = str_replace($thousands_sep, '', $data['amount']); $data['amount'] = str_replace($dec_point, '.', $data['amount']); $row->bind($data); $row->published = 0; $row->created_date = gmdate('Y-m-d H:i:s'); $row->user_id = $user->get('id'); if ($donationType == 'onetime' || $paymentMethod == 'os_offline') { $row->donation_type = 'I'; } else { $row->donation_type = 'R'; } if($config->store_ip_address == 1) { $row->ip_address = $_SERVER['REMOTE_ADDR']; } else { $row->ip_address = ''; } if (!$user->id && $config->registration_integration && !empty($data['username']) && !empty($data['password1'])) { $row->user_id = DonationHelper::saveRegistration($data); } $campaignTitle = ''; if ($row->campaign_id) { $query->select('title, donation_type') ->from('#__jd_campaigns') ->where('id=' . (int) $row->campaign_id); $db->setQuery($query); $rowCampaign = $db->loadObject(); $campaignTitle = $rowCampaign->title; $campaignDonationType = $rowCampaign->donation_type; } else { //Disabled recurring but Donation type is recurring if(!$config->enable_recurring && $row->donation_type == "R") { throw new \Exception(Text::_('JD_DONATION_TYPE_IS_NOT_SUPPORTED'), 500); } $query->select('id, title, donation_type') ->from('#__jd_campaigns') ->where('published = 1') ->order('ordering'); $db->setQuery($query, 0, 1); $rowCampaign = $db->loadObject(); if ($rowCampaign) { $row->campaign_id = $rowCampaign->id; $campaignTitle = $rowCampaign->title; $campaignDonationType = $rowCampaign->donation_type; } } switch($campaignDonationType) { case "1": //this campaign only allows one time donation but this is recurring donation if($row->donation_type == "R") { throw new \Exception(Text::_('JD_DONATION_TYPE_IS_NOT_SUPPORTED'), 500); } break; case "2": //this campaign only allows recurring donation but this is one time donation if($row->donation_type == "I") { throw new \Exception(Text::_('JD_DONATION_TYPE_IS_NOT_SUPPORTED'), 500); } break; } //Save the active language if (Factory::getApplication()->getLanguageFilter()) { $row->language = Factory::getLanguage()->getTag(); } else { $row->language = '*'; } $currency = $config->currency; $converted_amount = $row->amount; $currency_code = $row->currency_code; if($currency_code == "") { $currency_code = $currency; } if($currency_code != "" && $currency_code != $currency && $config->convert_currency_before_donation) { $converted_amount = DonationHelper::convertAmountToDefaultCurrency($row->amount,$currency_code); $row->currency_code = $currency; $row->currency_converted = $currency_code; $data['currency_code'] = $currency; } else { $converted_amount = $row->amount; $row->currency_code = $currency_code; $row->currency_converted = $currency_code; $data['currency_code'] = $currency_code; } $row->amount_converted = (float)$row->amount; $row->amount = (float)$converted_amount; // Store the payment gateway fee as part of donation amount, too //print_r($data);die(); if($config->pay_payment_gateway_fee) { $pay_payment_gateway_fee = (int)$data['pay_payment_gateway_fee']; } else { $pay_payment_gateway_fee = 1; } $query->clear(); $query->select('params') ->from('#__jd_payment_plugins') ->where('name=' . $db->quote($paymentMethod)) ->where('published = 1'); $db->setQuery($query); $plugin = $db->loadObject(); if (!$plugin) { throw new Exception(Text::sprintf('The payemnt method %s is not available', $paymentMethod), 403); } $params = new Registry($plugin->params); $paymentFeeAmount = (float) $params->get('payment_fee_amount'); $paymentFeePercent = (float) $params->get('payment_fee_percent'); //If the payment plugin has different payment gateway fee, we will use those parameters if (($paymentFeeAmount != 0 || $paymentFeePercent != 0) && $pay_payment_gateway_fee == 1) { $payment_plugin_fee = round($paymentFeeAmount + $row->amount * $paymentFeePercent / 100, 2); $data['gateway_amount'] = round($row->amount + $payment_plugin_fee, 2); $data['payment_fee'] = $payment_plugin_fee; } //no payment fee on Offline payment elseif ($config->convenience_fee && $pay_payment_gateway_fee == 1 && $paymentMethod != "os_offline") { $data['gateway_amount'] = round($row->amount * (1 + $config->convenience_fee / 100), 2); $data['payment_fee'] = round($row->amount * $config->convenience_fee / 100, 2); } else { $data['gateway_amount'] = round($row->amount, 2); $data['payment_fee'] = 0; } $data['amount'] = $row->amount; $row->payment_fee = $data['payment_fee']; $row->receive_user_id = (int) $row->receive_user_id; $row->r_times = (int) $row->r_times; if($row->mollie_recurring_start_date == "") { $row->mollie_recurring_start_date = "0000-00-00"; } $row->params = ""; $row->id = 0; if(!$row->store()) { throw new Exception( $row->getError() ); } /* Accept privacy consent to avoid Joomla requires users to accept it again */ if (PluginHelper::isEnabled('system', 'privacyconsent') && $row->user_id > 0 && $config->show_privacy) { DonationHelper::acceptPrivacyConsent($row); } //print_r($data);die(); DonationHelper::storeFormData($row->id, $data); PluginHelper::importPlugin('jdonation'); Factory::getApplication()->triggerEvent('onAfterStoreDonor', array($row)); $itemName = Text::_('JD_ONLINE_DONATION_PAYMENT_TITLE'); $itemName = str_replace('[CAMPAIGN_TITLE]', $campaignTitle, $itemName); $data['item_name'] = $itemName; // Store ID of donation record into session to use on donation complete page Factory::getSession()->set('id', $row->id); $country = empty($data['country']) ? $config->default_country : $data['country']; $data['country'] = DonationHelper::getCountryCode($country); $currency = empty($data['currency_code']) ? $config->currency : $data['currency_code']; if ($donationType == 'onetime') { require_once JPATH_COMPONENT . '/payments/' . $paymentMethod . '.php'; $paymentClass = new $paymentMethod($params); if (method_exists($paymentClass, 'getSupportedCurrencies')) { $currencies = $paymentClass->getSupportedCurrencies(); if (!in_array($currency, $currencies)) { $data['gateway_amount'] = DonationHelper::convertAmountToUSD($data['gateway_amount'], $currency); $currency = 'USD'; } } $data['currency'] = $currency; $paymentClass->processPayment($row, $data); } else { if ($paymentMethod == 'os_authnet') { $paymentMethod = 'os_authnet_arb'; } require_once JPATH_COMPONENT . '/payments/' . $paymentMethod . '.php'; $paymentClass = new $paymentMethod($params); if (method_exists($paymentClass, 'getSupportedCurrencies')) { $currencies = $paymentClass->getSupportedCurrencies(); if (!in_array($currency, $currencies)) { $data['gateway_amount'] = DonationHelper::convertAmountToUSD($data['gateway_amount'], $currency); $currency = 'USD'; } } $data['currency'] = $currency; $paymentClass->processRecurringPayment($row, $data); } } public function cancelRecurringDonation($row) { $method = DonationHelper::loadPaymentMethod($row->payment_method); /* @var os_authnet $method */ $ret = false; if (method_exists($method, 'cancelDonation')) { $ret = $method->cancelDonation($row); } if ($ret) { DonationHelper::cancelRecurringDonation($row->id); } return $ret; } }
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0 |
proxy
|
phpinfo
|
ÐаÑтройка