Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save lukapaunovic/187145a6742c08892e46d24c3e33f490 to your computer and use it in GitHub Desktop.
Save lukapaunovic/187145a6742c08892e46d24c3e33f490 to your computer and use it in GitHub Desktop.
<?php
/**
* WHMCS Hook - Sakrivanje Payment Gateway-a na osnovu valute
* Autor: Luka @ dcx.rs
* Ovaj hook sakriva:
* - PayPal PPCP (paypal_ppcpv) za RSD valutu
* - Bank Transfer (banktransfer) za USD valutu
*/
use WHMCS\Database\Capsule;
// Hook za cart stranicu
add_hook('ClientAreaPageCart', 1, function($vars) {
// Proverava da li postoje potrebni podaci
if (!isset($vars['currency']['code']) || !isset($vars['gateways']) || !is_array($vars['gateways'])) {
return array();
}
$currencyCode = $vars['currency']['code'];
$gateways = $vars['gateways'];
// Filtriranje gateway-a na osnovu valute
$filteredGateways = array();
foreach ($gateways as $gateway) {
$shouldShow = true;
// Sakrivanje PayPal PPCP za RSD
if ($currencyCode == 'RSD' && isset($gateway['sysname']) && $gateway['sysname'] == 'paypal_ppcpv') {
$shouldShow = false;
}
// Sakrivanje Bank Transfer za USD
if ($currencyCode == 'USD' && isset($gateway['sysname']) && $gateway['sysname'] == 'banktransfer') {
$shouldShow = false;
}
if ($shouldShow) {
$filteredGateways[] = $gateway;
}
}
return array('gateways' => $filteredGateways);
});
// Hook za view invoice stranicu
add_hook('ClientAreaPageViewInvoice', 1, function($vars) {
// Proverava da li postoji invoiceid i gatewaydropdown
if (!isset($vars['invoiceid']) || !isset($vars['gatewaydropdown'])) {
return array();
}
$invoiceId = $vars['invoiceid'];
try {
// Dobijanje valute fakture iz baze
$invoice = Capsule::table('tblinvoices')
->leftJoin('tblclients', 'tblinvoices.userid', '=', 'tblclients.id')
->leftJoin('tblcurrencies', 'tblclients.currency', '=', 'tblcurrencies.id')
->where('tblinvoices.id', $invoiceId)
->select('tblcurrencies.code as currency_code')
->first();
if (!$invoice) {
return array();
}
$currencyCode = $invoice->currency_code;
// Lista gateway-a koje treba sakriti na osnovu valute
$gatewaysToHide = array();
if ($currencyCode == 'RSD') {
$gatewaysToHide[] = 'paypal_ppcpv';
}
if ($currencyCode == 'USD') {
$gatewaysToHide[] = 'banktransfer';
}
// Ako nema gateway-a za sakrivanje, vrati prazan array
if (empty($gatewaysToHide)) {
return array();
}
// Parsiranje HTML dropdown-a
$dom = new DOMDocument('1.0', 'UTF-8');
@$dom->loadHTML('<?xml encoding="UTF-8">' . $vars['gatewaydropdown']);
$xpath = new DomXPath($dom);
// Kreiranje xPath uslova za uklanjanje
$xpath_conditions = array();
foreach ($gatewaysToHide as $gateway) {
$xpath_conditions[] = '@value="' . $gateway . '"';
}
// Spajanje uslova sa " or "
$xpath_conditions = implode(' or ', $xpath_conditions);
// Pronalaženje i uklanjanje option elemenata
foreach($xpath->query('//select/option[(' . $xpath_conditions . ')]') as $node) {
$node->parentNode->removeChild($node);
}
// Vraćanje modifikovanog dropdown-a
return array(
'gatewaydropdown' => $dom->saveHTML()
);
} catch (Exception $e) {
return array();
}
});
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment