Jakweb.ch stuff
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
clouddesk/operator/extend.php

1373 lines
62 KiB

<?php
/*===============================================*\
|| ############################################# ||
|| # JAKWEB.CH / Version 2.1.3 # ||
|| # ----------------------------------------- # ||
|| # Copyright 2023 JAKWEB All Rights Reserved # ||
|| ############################################# ||
\*===============================================*/
// Check if the file is accessed only via index.php if not stop the script from running
if (!defined('JAK_ADMIN_PREVENT_ACCESS')) die('You cannot access this file directly.');
// Reset
$opmain = '';
$count = 0;
use JAKWEB\JAKsql;
// Include the payment class
include_once('../class/class.payment.php');
use YooKassa\Client;
// Now we finally initate the payment module
$JAK_payment = new JAK_payment();
// Now if we have multi site we have fully automated process
if (!empty(JAKDB_MAIN_NAME) && JAK_MAIN_LOC && JAK_MAIN_OP) {
// Database connection to the main site
$jakdb1 = new JAKsql([
// required
'database_type' => JAKDB_MAIN_DBTYPE,
'database_name' => JAKDB_MAIN_NAME,
'server' => JAKDB_MAIN_HOST,
'username' => JAKDB_MAIN_USER,
'password' => JAKDB_MAIN_PASS,
'charset' => 'utf8',
'port' => JAKDB_MAIN_PORT,
'prefix' => JAKDB_MAIN_PREFIX,
// [optional] driver_option for connection, read more from http://www.php.net/manual/en/pdo.setattribute.php
'option' => [PDO::ATTR_CASE => PDO::CASE_NATURAL]
]);
// We get the user data from the main table
$opmain = $jakdb1->get("users", ["id", "signup", "trial", "paidtill", "active"], ["AND" => ["opid" => JAK_USERID, "locationid" => JAK_MAIN_LOC]]);
// Now we get the packages
$packages = $jakdb1->select("packages", ["id", "title", "description", "previmg", "amount", "currency", "operators", "departments", "files", "tickets", "blog", "faq", "chatwidgets", "copyfree", "activechats", "chathistory", "phpimap", "clients", "islc3", "ishd3", "validfor", "multipleuse", "isfree"], ["AND" => ["locationid" => JAK_MAIN_LOC, "active" => 1], "GROUP" => "id", "ORDER" => ["lastedit" => "DESC"]]);
// We will need the payment gateways for each pacakge
$paygate = $jakdb1->select("package_gateways", ["[>]payment_gateways" => ["paygateid" => "id"], "[>]packages" => ["packageid" => "id"], "[>]currency_conversations" => ["packageid" => "packageid"]], ["package_gateways.packageid", "payment_gateways.id", "payment_gateways.paygateid", "payment_gateways.currency(pcurrency)", "payment_gateways.title", "payment_gateways.secretkey_one", "payment_gateways.emailkey", "payment_gateways.bank_info", "payment_gateways.sandbox", "packages.amount", "packages.currency", "currency_conversations.id(ccid)", "currency_conversations.fromcurrency", "currency_conversations.tocurrency", "currency_conversations.amount(ccamount)", "currency_conversations.updated"], ["AND" => ["package_gateways.locid" => JAK_MAIN_LOC, "payment_gateways.active" => 1], "ORDER" => ["payment_gateways.lastedit" => "DESC"]]);
// Now we get the subscriptions
$subscriptions = $jakdb1->select("subscriptions", ["[>]packages" => ["packageid" => "id"]], ["subscriptions.id", "subscriptions.packageid", "subscriptions.amount", "subscriptions.currency", "subscriptions.paidfor", "subscriptions.paidhow", "subscriptions.subscribed", "subscriptions.paidwhen", "subscriptions.paidtill", "subscriptions.active", "subscriptions.success", "packages.title"], ["AND" => ["subscriptions.locationid" => JAK_MAIN_LOC, "subscriptions.userid" => JAK_USERID], "ORDER" => ["subscriptions.paidwhen" => "DESC"]]);
// Get all extra users
$JAK_USER_ALL = $jakdb->select("user", "*", ["AND" => ["opid" => JAK_USERID, "validtill[!]" => "1980-05-06 00:00:00"]]);
// Check if we have some new and unread tickets.
$count = 0;
$count = $jakdb1->count("support_tickets", ["AND" => ["userid" => $opmain["id"], "readtime" => 0]]);
// We get the settings for the payment
$sett = array();
$settings = $jakdb1->select("settings", ["varname", "used_value"]);
foreach ($settings as $v) {
$sett[$v["varname"]] = $v["used_value"];
}
// Current time
$timenow = time();
// Current date
$loc_date_now = new DateTime();
$JAK_CURRENT_DATE = $loc_date_now->format('Y-m-d H:i:s');
// Now we will need to calculate the currencies and repack the array for easier use.
foreach ($paygate as $v) {
// Now let's run some currency exchange rate calculating
if ($v["pcurrency"] != $v["currency"]) {
if ($v["tocurrency"] != $v["pcurrency"]) {
$jakdb1->delete("currency_conversations", ["AND" => ["packageid" => $v["packageid"], "fromcurrency" => $v["currency"], "tocurrency" => $v["tocurrency"]]]);
}
if (isset($v["updated"]) && !empty($v["updated"]) && isset($v["ccamount"]) && !empty($v["ccamount"]) && (strtotime($v["updated"]) + 86400) < $timenow) {
// We have a different currency for the payment gateway so we need to have an exchange rate calculation
$paygate[$v["ccamount"]] = convertCurrency($sett["exchangekey"], $v["amount"], $v["currency"], $v["pcurrency"]);
$jakdb1->update("currency_conversations", ["amount" => $paygate[$v["ccamount"]], "updated" => $jakdb->raw("NOW()")], ["AND" => ["packageid" => $v["packageid"], "fromcurrency" => $v["currency"], "tocurrency" => $v["pcurrency"]]]);
} elseif (!isset($v["ccamount"]) && empty($v["ccamount"])) {
// We have a different currency for the payment gateway so we need to have an exchange rate calculation
$paygate[$v["ccamount"]] = convertCurrency($sett["exchangekey"], $v["amount"], $v["currency"], $v["pcurrency"]);
$jakdb1->insert("currency_conversations", ["packageid" => $v["packageid"], "fromcurrency" => $v["currency"], "tocurrency" => $v["pcurrency"], "amount" => $paygate[$v["ccamount"]], "updated" => $jakdb->raw("NOW()"), "created" => $jakdb->raw("NOW()")]);
}
}
}
// We have a succesful payment or not, let's do the confirmation stuff which is quick and dirty
if (isset($page1) && $page1 == "success" && isset($page2)) {
// Happy days Payment has been succesful and no one has cheated
$page2d = base64_url_decode($page2);
// userid, packageid, paygateid, coupon, amount, time, planid (title, packageid, interval, week, month, year), subscribed, different currency
$custom = explode(":#:", $page2d);
// Reset
$subscription_id = $subscribe_id = $subscribeToken = 0;
// Now let's check if we are still on track
if (isset($custom) && $custom[0] == JAK_USERID && $jakdb->has("payment_security", ["AND" => ["payidnow" => $page2, "success" => 0]])) {
// Update the payment security
if (isset($_GET["session_id"]) && !empty($_GET["session_id"])) {
$jakdb->update("payment_security", ["subscribe_id" => $_GET["session_id"]], ["payidnow" => $page2]);
$subscribe_id = $_GET["session_id"];
$subscribeToken = $subscribe_id;
}
// We have the subscription id in the URL
if (isset($page3) && !empty($page3)) {
$subscription_id = $jakdb1->get("payment_plans", "id", ["planid" => $page3]);
}
// Paystack needs a emailToken
if (isset($page4) && !empty($page4)) {
$subscribeToken = $page4;
if (!isset($_GET["session_id"])) {
$jakdb->update("payment_security", ["subscribe_id" => $subscribeToken], ["payidnow" => $page2]);
}
}
$jakdb->update("payment_security", ["success" => 1], ["payidnow" => $page2]);
// Get the package
$pack = $jakdb1->get("packages", ["id", "title", "amount", "currency", "operators", "departments", "files", "copyfree", "tickets", "blog", "faq", "chatwidgets", "groupchats", "operatorchat", "activechats", "chathistory", "phpimap", "clients", "islc3", "ishd3", "validfor", "isfree"], ["AND" => ["id" => $custom[1], "active" => 1]]);
// Get the payment gateway
$paga = $jakdb1->get("payment_gateways", ["id", "paygateid", "currency", "title", "secretkey_one", "secretkey_two", "emailkey", "sandbox"], ["AND" => ["id" => $custom[2], "active" => 1]]);
// We will need to check if the user has paid
if (isset($paga["paygateid"]) && $paga["paygateid"] == "yoomoney" && isset($_SESSION["yoomoney"])) {
// Now we need to check if the payment has been paid.
$yooclient = new Client();
$yooclient->setAuth($paga["secretkey_one"], $paga["secretkey_two"]);
$yoopayment = $yooclient->getPaymentInfo($_SESSION["yoomoney"]);
if (isset($yoopayment->_status) && $yoopayment->_status == "succeeded" && isset($yoopayment->_paid) && $yoopayment->_paid == true) {
} else {
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// We set the current currency and amount
$amountopay = $pack['amount'];
$currencytopay = $pack['currency'];
// We have received a different currencies
$differentcurrency = 0;
if (isset($custom[8]) && is_numeric($custom[8]) && $jakdb1->has("packages", "id", ["id" => $custom[8]])) {
$cconvert = $jakdb1->get("currency_conversations", ["id", "fromcurrency", "tocurrency", "amount"], ["id" => $custom[8]]);
if (isset($cconvert) && is_array($cconvert) && $currencytopay == $cconvert["fromcurrency"]) {
// We have a different currency
$amountopay = $cconvert['amount'];
$currencytopay = $cconvert['tocurrency'];
}
}
// Add the payment to the IPN table, so we have some evidence
$jakdb1->insert("payment_ipn", [
"userid" => $custom[0],
"status" => "success",
"amount" => $amountopay,
"currency" => $currencytopay,
"txn_id" => $page2,
"receiver_email" => $sett["emailaddress"],
"payer_email" => $jakuser->getVar("email"),
"paid_with" => $paga["paygateid"],
"time" => $jakdb->raw("NOW()")]);
// check that txn_id has not been previously processed
$onepay = $jakdb1->count("payment_ipn", ["txn_id" => $page2]);
// Current time
$timenow = time();
if ($onepay == 1 && $jakdb1) {
// First we need the old subscriptions
$subs = $jakdb->get("subscriptions", ["id", "packageid", "operators", "departments", "files", "phpimap", "chathistory", "paygateid", "subscribeid", "subscribed", "paidtill"], ["opid" => $custom[0]]);
// We get the user data from the main table
$couponvalid = false;
$couponprice = $amountopay;
if (isset($custom[3]) && !empty($custom[3]) && $jakdb1->has("coupons", ["AND" => ["locationid" => JAK_MAIN_LOC, "code" => $custom[3], "active" => 1]])) {
$cd = $jakdb1->get("coupons", ["id", "title", "discount", "freepackageid", "used", "total", "datestart", "dateend", "products"], ["AND" => ["locationid" => JAK_MAIN_LOC, "code" => $custom[3], "active" => 1]]);
// Nice, we have one let's go through and check if the coupon code is still available
if ($cd['used'] < $cd['total'] && $cd['freepackageid'] == 0 && ($cd['datestart'] == 0 && $cd['dateend'] == 0 || $cd['datestart'] < $timenow && $cd['dateend'] > $timenow)) {
// Ok, but is it also for the right product?
if ($cd['products'] == 0 || in_array($pack["id"], explode(",", $cd['products']))) {
// Calculate the discount
$totalD = $amountopay / 100 * $cd['discount'];
$couponprice = $amountopay - number_format(round($totalD, 2), 2, '.', '');
$couponvalid = true;
}
}
}
// We have Yoomoney we need to do some extra stuff
if (isset($paga["paygateid"]) && $paga["paygateid"] == "yoomoney" && isset($_SESSION["yoomoney"])) {
// We insert the subscription id for later use
if (isset($custom[7]) && $custom[7] == 1) {
$custom1 = explode("-", $custom[6]);
$jakdb1->insert("payment_plans", ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $custom1[3], "interval_count" => $custom1[2], "paygateid" => $paga["id"], "planid" => $_SESSION["yoomoney"], "opid" => JAK_USERID, "created" => $jakdb->raw("NOW()")]);
// And set the token for charging the customer again
$subscribeToken = $_SESSION["yoomoney"];
$jakdb->update("payment_security", ["subscribe_id" => $subscribeToken], ["payidnow" => $page2]);
}
// Unset the session yoomoney
unset($_SESSION["yoomoney"]);
}
// is there any open subscription
$jakdb1->update("subscriptions", ["subscribeid" => 0, "subscribed" => 0, "active" => 0], ["AND" => ["locationid" => JAK_MAIN_LOC, "userid" => $custom[0]]]);
// Get the user details.
$mainusr = $jakdb1->get("users", ["opid", "email", "username", "password"], ["AND" => ["opid" => $custom[0], "locationid" => JAK_MAIN_LOC]]);
// The unix time stamp for the subscription length
$paidunix = strtotime("+".$pack["validfor"]." days");
// get the nice time
$paidtill = date('Y-m-d H:i:s', $paidunix);
// We have an advanced payment
if ($pack["islc3"] || $pack["ishd3"]) {
// 1 stands for LC3
$islc3hd3 = 1;
if ($pack["ishd3"]) $islc3hd3 = 2;
if ($jakdb1->has("advaccess", ["AND" => ["userid" => $opmain["id"], "opid" => $custom[0]]])) {
// Update the advanced access table
$jakdb1->update("advaccess", [
"lastedit" => $jakdb->raw("NOW()"),
"paidtill" => $paidtill,
"lc3hd3" => $islc3hd3,
"paythanks" => 1], ["AND" => ["opid" => $custom[0], "id" => $opmain["id"]]]);
} else {
$jakdb1->insert("advaccess", ["userid" => $opmain["id"], "opid" => $custom[0], "lc3hd3" => $islc3hd3, "lastedit" => $jakdb->raw("NOW()"), "paythanks" => 1, "paidtill" => $paidtill, "created" => $jakdb->raw("NOW()")]);
}
// Ok, we have removed the old stuff and now we update the user subscription table
$jakdb->update("subscriptions", ["packageid" => $pack["id"], "operators" => $pack["operators"], "departments" => $pack["departments"], "tickets" => $pack["tickets"], "blog" => $pack["blog"], "faq" => $pack["faq"], "files" => $pack["files"], "activechats" => $pack["activechats"], "chathistory" => $pack["chathistory"], "phpimap" => $pack["phpimap"], "clients" => $pack["clients"], "islc3" => $pack["islc3"], "ishd3" => $pack["ishd3"], "validfor" => $pack["validfor"], "paygateid" => $subs["paygateid"], "subscribed" => $custom[7], "subscribeid" => $subscription_id, "planid" => $subscribeToken, "amount" => $couponprice, "currency" => $currencytopay, "paidhow" => $paga["id"], "paidwhen" => $jakdb->raw("NOW()"), "paidtill" => $paidtill, "trial" => 0, "active" => 1], ["opid" => $custom[0]]);
$mailadv = sprintf($jkl['i50'], $jakuser->getVar("name"), $mainusr["username"], $custom[0], $mainusr["email"], $mainusr["password"], $paidunix, ($islc3hd3 == 1 ? 'Live Chat 3' : 'HelpDesk 3'), SIGN_UP_URL.'/process/confirmadv.php?uid='.$custom[0]);
// Ok, we send the email // email address, cc email address, reply to, subject, message, attachment
jak_send_email(JAK_EMAIL, "", $mainusr["email"], $jkl['i49'], $mailadv, "");
} else {
// Nasty stuff starts
if (isset($subs) && isset($pack)) {
update_main_operator($subs, $pack, $currencytopay, $couponprice, $paga["id"], $custom[7], $subscription_id, $subscribeToken, $paga["paygateid"], $custom[0], JAK_MAIN_LOC);
}
}
// We insert the subscription into the main table for that user.
$jakdb1->insert("subscriptions", ["packageid" => $pack["id"],
"locationid" => JAK_MAIN_LOC,
"userid" => $custom[0],
"amount" => $couponprice,
"currency" => $currencytopay,
"paidfor" => $pack["title"],
"paidhow" => $paga["paygateid"],
"subscribed" => $custom[7],
"paygateid" => $subs["paygateid"],
"subscribeid" => $subscription_id,
"subscribetoken" => $subscribeToken,
"paidwhen" => $jakdb->raw("NOW()"),
"paidtill" => $paidtill,
"active" => 1,
"success" => 1]);
// finally update the main database
$jakdb1->update("users", ["trial" => "1980-05-06 00:00:00",
"paidtill" => $paidtill,
"payreminder" => 0,
"paythanks" => 1,
"active" => 1,
"confirm" => 0], ["AND" => ["opid" => $custom[0], "locationid" => JAK_MAIN_LOC]]);
// Update the coupon counter
if ($couponvalid) $jakdb1->update("coupons", ["used[+]" => 1], ["id" => $cd["id"]]);
// Now let us delete the define cache file
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.$custom[0].'.php';
if (file_exists($cachewidget)) {
unlink($cachewidget);
}
}
$_SESSION["successmsg"] = $jkl["g299"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
} elseif (isset($page1) && $page1 == "cancel") {
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
} elseif (isset($page1) && $page1 == "withdrawal") {
// We cancel the subscription
if (isset($page2) && isset($page3) && $page3 == JAK_USERID) {
// Now let's get the current subscription
$subs = $jakdb->get("subscriptions", ["id", "paidhow", "paygateid", "subscribeid", "subscribed", "planid", "paidtill"], ["opid" => JAK_USERID]);
// Confirm from the main admin panel
if (isset($subs) && !empty($subs) && $jakdb1->has("subscriptions", "id", ["AND" => ["id" => $page2, "subscribed" => 1, "subscribeid" => $subs["subscribeid"]]])) {
// Let's get the payment gateway
$paga = $jakdb1->get("payment_gateways", ["id", "paygateid", "currency", "title", "secretkey_one", "secretkey_two", "emailkey", "sandbox"], ["AND" => ["id" => $subs['paygateid'], "active" => 1]]);
// Get the left days
$datenow = new DateTime(); //current date or any date
$paidtill = new DateTime($subs["paidtill"]); //Future date
$diffdates = $paidtill->diff($datenow)->format("%a"); //find difference
$daysleft = intval($diffdates); //rounding days
// Canceled success?
$subcanceled = false;
// Go trought the payment gateways
switch ($subs['paidhow']) {
case 'stripe':
// code...
$subcanceled = $JAK_payment->JAK_pay("stripe", "", "", $subs["planid"], "", "recurring", "cancel_period_end", "", "", $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
break;
case 'paypal':
// code...
$subcanceled = $JAK_payment->JAK_pay("paypal", "", "", $subs["planid"], "User canceled subscription.", "recurring", "cancel", "", "", $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
break;
case 'verifone':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
break;
case 'authorize.net':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
break;
case 'yoomoney':
// code...
// This is not a real cancelation as YooMoney does not charge the user automatically. We just stop charging the user by cron job.
$subcanceled = true;
break;
case 'paystack':
// code...
$subcanceled = $JAK_payment->JAK_pay("paystack", "", "", $subs["planid"], "", "cancel_plan", "", "", "", $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
break;
}
// All safe and sound
if ($subcanceled) {
// Now we need to update the subscribed table
$jakdb->update("subscriptions", ["subscribeid" => 0, "subscribed" => 0, "planid" => ""], ["opid" => JAK_USERID]);
$jakdb1->update("subscriptions", ["subscribed" => 0, "subscribed" => 0, "active" => 0], ["id" => $page2]);
// Now let us delete the define cache file
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.JAK_USERID.'.php';
if (file_exists($cachewidget)) {
unlink($cachewidget);
}
$_SESSION["successmsg"] = sprintf($jkl["i45"], $daysleft);
jak_redirect(JAK_rewrite::jakParseurl('extend'));
} else {
$_SESSION["errormsg"] = $jkl["i77"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
} else {
$_SESSION["errormsg"] = $jkl["i77"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
} else {
$_SESSION["errormsg"] = $jkl["i77"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
} elseif (isset($page1) && $page1 == "opsuccess" && isset($page2)) {
// Happy days Payment has been succesful and no one has cheated
$page2d = base64_url_decode($page2);
// JAK_USERID.':#:'.$amount.':#:'.$_POST['opcount'].':#:'.microtime().':#:'.$_POST['paidhowop']
$custom = explode(":#:", $page2d);
// Now let's check if we are still on track
if (isset($custom) && $custom[0] == JAK_USERID && $jakdb->has("payment_security", ["AND" => ["payidnow" => $page2, "success" => 0]])) {
// We will need to check if the user has paid
if (isset($sett["yookassa_id"]) && $custom[4] == "yoomoney" && isset($_SESSION["yoomoney"])) {
// Now we need to check if the payment has been paid.
$yooclient = new Client();
$yooclient->setAuth($sett["yookassa_id"], $sett["yookassa_secret"]);
$yoopayment = $yooclient->getPaymentInfo($_SESSION["yoomoney"]);
if (isset($yoopayment->_status) && $yoopayment->_status == "succeeded" && isset($yoopayment->_paid) && $yoopayment->_paid == true) {
} else {
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// Ok we have a successful payment via Stripe let's add this to the extra operators
$jakdb->update("subscriptions", ["extraoperators[+]" => $custom[2]], ["opid" => JAK_USERID]);
$date = new DateTime();
// Modify the date
$date->modify('+1 month');
$paiddate = $date->format('Y-m-d H:i:s');
// Payment details insert
$jakdb1->insert("subscriptions", [
"locationid" => JAK_MAIN_LOC,
"userid" => JAK_USERID,
"amount" => $custom[1],
"currency" => $sett["currency"],
"paidfor" => sprintf($jkl['hd344'], $custom[2]),
"paidhow" => $custom[4],
"paidwhen" => $jakdb->raw("NOW()"),
"paidtill" => $paiddate,
"success" => 1,
"active" => 1]);
// Add the payment to the IPN table, so we have some evidence
$jakdb1->insert("payment_ipn", [
"userid" => $custom[0],
"status" => "success",
"amount" => $custom[1],
"currency" => $sett["currency"],
"txn_id" => $page2,
"receiver_email" => $sett["emailaddress"],
"payer_email" => $jakuser->getVar("email"),
"paid_with" => $custom[4],
"time" => $jakdb->raw("NOW()")]);
// Now let us delete the define cache file
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.JAK_USERID.'.php';
if (file_exists($cachewidget)) {
unlink($cachewidget);
}
$_SESSION["successmsg"] = $jkl["g299"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
// Finally redirect the customer
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
} elseif (isset($page1) && $page1 == "opextsuccess" && isset($page2)) {
// Happy days Payment has been succesful and no one has cheated
$page2d = base64_url_decode($page2);
// JAK_USERID.':#:'.$amount.':#:'.$_POST['opidext'].':#:'.microtime().':#:'.$_POST['paidhowopext'].':#:'.$_POST['opamountext']
$custom = explode(":#:", $page2d);
// Now let's check if we are still on track
if (isset($custom) && $custom[0] == JAK_USERID && $jakdb->has("payment_security", ["AND" => ["payidnow" => $page2, "success" => 0]])) {
// We will need to check if the user has paid
if (isset($sett["yookassa_id"]) && $custom[4] == "yoomoney" && isset($_SESSION["yoomoney"])) {
// Now we need to check if the payment has been paid.
$yooclient = new Client();
$yooclient->setAuth($sett["yookassa_id"], $sett["yookassa_secret"]);
$yoopayment = $yooclient->getPaymentInfo($_SESSION["yoomoney"]);
if (isset($yoopayment->_status) && $yoopayment->_status == "succeeded" && isset($yoopayment->_paid) && $yoopayment->_paid == true) {
} else {
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// Ok we have a successful payment via Stripe let's extend the account
$operator = $jakdb->get("user", ["id", "validtill"], ["AND" => ["id" => $custom[2], "opid" => JAK_USERID]]);
if ($operator['validtill'] > $JAK_CURRENT_DATE) {
$date = new DateTime($operator['validtill']);
} else {
$date = new DateTime();
}
// Modify the date
$date->modify('+'.$custom[5].' month');
$paiddate = $date->format('Y-m-d H:i:s');
// Payment details insert
$jakdb1->insert("subscriptions", [
"locationid" => JAK_MAIN_LOC,
"userid" => JAK_USERID,
"amount" => $custom[1],
"currency" => $sett["currency"],
"paidfor" => sprintf($jkl['hd345'], $custom[2]),
"paidhow" => $custom[4],
"paidwhen" => $jakdb->raw("NOW()"),
"paidtill" => $paiddate,
"success" => 1,
"active" => 1]);
// Add the payment to the IPN table, so we have some evidence
$jakdb1->insert("payment_ipn", [
"userid" => $custom[0],
"status" => "success",
"amount" => $custom[1],
"currency" => $sett["currency"],
"txn_id" => $page2,
"receiver_email" => $sett["emailaddress"],
"payer_email" => $jakuser->getVar("email"),
"paid_with" => $custom[4],
"time" => $jakdb->raw("NOW()")]);
// Now finally update the user profile
$jakdb->update("user", ["validtill" => $paiddate], ["id" => $operator["id"]]);
// Now let us delete the define cache file
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.JAK_USERID.'.php';
if (file_exists($cachewidget)) {
unlink($cachewidget);
}
// Finally redirect the customer
$_SESSION["successmsg"] = $jkl["g299"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
$_SESSION["errormsg"] = $jkl["g300"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
} else {
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['check'])) {
if ($_POST['check'] == "coupon") {
$coupon = filter_var($_POST['coupon'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
if (isset($_POST['pid']) && is_numeric($_POST['pid']) && isset($coupon) && !empty($coupon) && $jakdb1->has("coupons", ["AND" => ["locationid" => JAK_MAIN_LOC, "code" => $coupon, "active" => 1]])) {
// We get the coupon data from the main table
$cd = $jakdb1->get("coupons", ["id", "discount", "freepackageid", "used", "total", "datestart", "dateend", "products"], ["AND" => ["locationid" => JAK_MAIN_LOC, "code" => $coupon, "active" => 1]]);
// Nice, we have one let's go through and check if the coupon code is still available
if ($cd['used'] < $cd['total'] && ($cd['datestart'] == 0 && $cd['dateend'] == 0 || $cd['datestart'] < $timenow && $cd['dateend'] > $timenow)) {
// Ok, but is it also for the right product?
if ($cd['products'] == 0 || in_array($_POST['pid'], explode(",", $cd['products']))) {
// We have one great for the client. The last check do we have a freepackageid or a discount.
if ($cd['freepackageid'] != 0 && $cd['freepackageid'] == $_POST['pid'] && $jakdb1->has("packages", "id", ["AND" => ["id" => $cd['freepackageid'], "islc3" => 0, "ishd3" => 0]])) {
// We are on checkout
if (isset($_POST['checkout']) && $_POST['checkout'] == "true") {
// We have a free packageid and we go for it.
// First we need the old subscriptions
$subs = $jakdb->get("subscriptions", ["id", "packageid", "operators", "departments", "files", "phpimap", "chathistory", "paygateid", "subscribeid", "subscribed"], ["opid" => JAK_USERID]);
// Then we need the new subscription
$pack = $jakdb1->get("packages", ["id", "title", "amount", "currency", "operators", "departments", "files", "copyfree", "tickets", "blog", "faq", "chatwidgets", "groupchats", "operatorchat", "activechats", "chathistory", "phpimap", "clients", "islc3", "ishd3", "validfor", "isfree"], ["AND" => ["id" => $cd['freepackageid'], "active" => 1]]);
// Nasty stuff starts
if (isset($subs) && isset($pack)) {
// Run the complicated stuff
update_main_operator($subs, $pack, $sett["currency"], 0, 0, 0, 0, 0, "Free Package - Coupon", JAK_USERID, JAK_MAIN_LOC);
$paidunix = strtotime("+".$pack["validfor"]." days");
// get the nice time
$paidtill = date('Y-m-d H:i:s', $paidunix);
// Update old subscriptions to none active
$jakdb1->update("subscriptions", ["active" => 0], ["AND" => ["locationid" => JAK_MAIN_LOC, "userid" => JAK_USERID]]);
// We insert the subscription into the main table for that user.
$jakdb1->insert("subscriptions", ["packageid" => $pack["id"],
"locationid" => JAK_MAIN_LOC,
"userid" => JAK_USERID,
"amount" => 0,
"currency" => $sett["currency"],
"paidfor" => $pack["title"],
"paidhow" => "Free Package - Coupon",
"paidwhen" => $jakdb->raw("NOW()"),
"paidtill" => $paidtill,
"freeplan" => ($pack["isfree"] ? 1 : 0),
"active" => 1,
"success" => 1]);
// finally update the main database
$jakdb1->update("users", ["trial" => "1980-05-06 00:00:00",
"paidtill" => $paidtill,
"payreminder" => 0,
"paythanks" => 0,
"active" => 1,
"confirm" => 0], ["AND" => ["opid" => JAK_USERID, "locationid" => JAK_MAIN_LOC]]);
// Update the coupon counter
$jakdb1->update("coupons", ["used[+]" => 1], ["id" => $cd["id"]]);
// Now let us delete the define cache file
$cachedefinefile = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.JAK_USERID.'.php';
if (file_exists($cachedefinefile)) {
unlink($cachedefinefile);
}
$_SESSION["successmsg"] = $jkl['i43'];
if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
header('Cache-Control: no-cache');
die(json_encode(array("status" => 2, "redirect" => BASE_URL)));
} else {
// redirect back to home
jak_redirect(BASE_URL);
}
} else {
if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
header('Cache-Control: no-cache');
die(json_encode(array("status" => 0, "ctext" => $jkl['i34'])));
} else {
// redirect back to home
$_SESSION["errormsg"] = $jkl['i34'];
jak_redirect(BASE_URL);
}
}
} else {
$pgift = $jkl['i35'];
$disc_price = 0;
}
} else {
// Calculate the discount
$totalD = $_POST['amount'] / 100 * $cd['discount'];
$disc_price = $_POST['amount'] - number_format(round($totalD, 2), 2, '.', '');
if ($_POST['checkout'] === true) {
$pgift = $disc_price;
} else {
$pgift = sprintf($jkl['i33'], $cd['discount'].'%');
}
}
if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
header('Cache-Control: no-cache');
die(json_encode(array("status" => 1, "ctext" => $pgift, "newprice" => $disc_price)));
} else {
// redirect back to home
$_SESSION["successmsg"] = $jkl['g14'];
jak_redirect(BASE_URL);
}
}
}
}
if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
header('Cache-Control: no-cache');
die(json_encode(array("status" => 0, "ctext" => $jkl['i34'])));
} else {
// redirect back to home
$_SESSION["errormsg"] = $jkl['i34'];
jak_redirect(BASE_URL);
}
}
if ($_POST['check'] == "paymember") {
if (isset($_POST['pid']) && is_numeric($_POST['pid']) && isset($_POST['pgid']) && is_numeric($_POST['pgid']) && $jakdb1->has("packages", "id", ["AND" => ["id" => $_POST['pid'], "active" => 1]]) && $jakdb1->has("payment_gateways", "id", ["AND" => ["id" => $_POST['pgid'], "active" => 1]])) {
// Get the package
$pack = $jakdb1->get("packages", ["id", "title", "amount", "currency", "operators", "departments", "files", "copyfree", "tickets", "blog", "faq", "chatwidgets", "groupchats", "operatorchat", "activechats", "chathistory", "phpimap", "clients", "islc3", "ishd3", "validfor", "isfree"], ["AND" => ["id" => $_POST['pid'], "active" => 1]]);
if ($pack["isfree"] == 1 && $_POST['pgid'] == 0) {
$paga['paygateid'] = "freeaccess";
$paga['pgid'] = 0;
$paga['id'] = 0;
} else {
// Get the payment gateway
$paga = $jakdb1->get("payment_gateways", ["id", "paygateid", "currency", "title", "secretkey_one", "secretkey_two", "emailkey", "bank_info", "sandbox"], ["AND" => ["id" => $_POST['pgid'], "active" => 1]]);
}
// We set the current currency and amount
$amountopay = $pack['amount'];
$currencytopay = $pack['currency'];
// We have received a different currencies
$differentcurrency = 0;
if (isset($_POST['ccid']) && is_numeric($_POST['ccid']) && $jakdb1->has("packages", "id", ["id" => $_POST['ccid']])) {
$cconvert = $jakdb1->get("currency_conversations", ["id", "fromcurrency", "tocurrency", "amount"], ["id" => $_POST['ccid']]);
if (isset($cconvert) && is_array($cconvert) && $currencytopay != $paga["currency"]) {
// We have a different currency
$amountopay = $cconvert['amount'];
$currencytopay = $cconvert['tocurrency'];
$differentcurrency = $_POST['ccid'];
}
}
// We get the user data from the main table
$couponcode = $coupontitle = $cval = '';
$createcoupon = false;
$couponprice = $amountopay;
if (isset($_POST["cval"]) && $jakdb1->has("coupons", ["AND" => ["locationid" => JAK_MAIN_LOC, "code" => $_POST["cval"], "active" => 1]])) {
$cd = $jakdb1->get("coupons", ["id", "title", "discount", "freepackageid", "used", "total", "datestart", "dateend", "products"], ["AND" => ["locationid" => JAK_MAIN_LOC, "code" => $_POST["cval"], "active" => 1]]);
// Nice, we have one let's go through and check if the coupon code is still available
if ($cd['used'] < $cd['total'] && $cd['freepackageid'] == 0 && ($cd['datestart'] == 0 && $cd['dateend'] == 0 || $cd['datestart'] < $timenow && $cd['dateend'] > $timenow)) {
// Ok, but is it also for the right product?
if ($cd['products'] == 0 || in_array($_POST['pid'], explode(",", $cd['products']))) {
// Calculate the discount
$totalD = $amountopay / 100 * $cd['discount'];
$couponprice = $amountopay - number_format(round($totalD, 2), 2, '.', '');
// We create a coupon in Stripe
$couponcode = 'cc3-coupon-'.$cd['id'];
$createcoupon = true;
$coupontitle = $cd['title'];
$cval = $_POST["cval"];
}
}
}
// First we need the old subscriptions
$subs = $jakdb->get("subscriptions", ["id", "packageid", "operators", "departments", "files", "chathistory", "amount", "currency", "paygateid", "subscribeid", "subscribed", "paidtill", "trial"], ["opid" => JAK_USERID]);
$subscribed = 0;
$planid = $pack["title"].'-'.$pack["id"];
if ($_POST["subscribe"] == 1) {
// We subscribing
$subscribed = 1;
// Ok we need to figure out the intervals for charging the customer
$intervalc = 1;
$intervalm = "month";
if ($pack['validfor'] == 7) {
$intervalc = 1;
$intervalm = "week";
} elseif ($pack['validfor'] == 14) {
$intervalc = 2;
$intervalm = "week";
} elseif ($pack['validfor'] == 30) {
$intervalc = 1;
$intervalm = "month";
} elseif ($pack['validfor'] == 90) {
$intervalc = 3;
$intervalm = "month";
} elseif ($pack['validfor'] == 180) {
$intervalc = 6;
$intervalm = "month";
} elseif ($pack['validfor'] == 365) {
$intervalc = 1;
$intervalm = "year";
}
// plan name
$planid = $pack["title"].'-PlanID:'.$pack["id"].'-'.$intervalc.'-'.$intervalm;
}
// We have an advanced payment
$islc3hd3 = 0;
if ($pack["islc3"] || $pack["ishd3"]) {
// 1 stands for LC3
$islc3hd3 = 1;
if ($pack["ishd3"]) $islc3hd3 = 2;
}
// We have now a downgrade but we are not allowed to have a downgrade or we have a payment in a different currency
// if ((isset($subs["subscribed"]) && $subs["subscribed"] == 1 && !empty($subs["subscribeid"]) && $subs["trial"] == 0) && (($sett["subdowngrade"] == 0 && $subs["amount"] > $couponprice) || ($paga["currency"] != $subs["currency"]))) {
if (isset($subs["subscribed"]) && $subs["subscribed"] == 1 && !empty($subs["subscribeid"])) {
if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
header('Cache-Control: no-cache');
die(json_encode(array("status" => 0, "infomsg" => $jkl["i76"])));
} else {
// redirect back to home
$_SESSION["errormsg"] = $jkl["i76"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// Ok, we have no errors we need to create a payidnow for checking that the payment was legal
$payidnow = base64_url_encode(JAK_USERID.':#:'.$pack["id"].':#:'.$paga['id'].':#:'.$cval.':#:'.$couponprice.':#:'.microtime().':#:'.$planid.':#:'.$subscribed.':#:'.$differentcurrency);
// We will need to enter the information into a temporary database
$jakdb->insert("payment_security", ["opid" => $opcacheid, "userid" => JAK_USERID, "payidnow" => $payidnow, "created" => $jakdb->raw("NOW()")]);
switch ($paga['paygateid']) {
case 'stripe':
// code...
if (isset($subscribed) && $subscribed == 1) {
// Now we need to either get the plan id from the database or create one
if (isset($planid) && $jakdb1->has("payment_plans", ["AND" => ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"]]])) {
$subscription_id = $jakdb1->get("payment_plans", "planid", ["AND" => ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"]]]);
} else {
$subscription_id = $JAK_payment->JAK_pay("stripe", $couponprice, $currencytopay, $intervalm, $planid, "recurring", "create_plan", $intervalc, "", $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
if (isset($subscription_id) && !empty($subscription_id)) {
// We insert the subscription id for later use
$jakdb1->insert("payment_plans", ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"], "opid" => JAK_USERID, "planid" => $subscription_id, "created" => $jakdb->raw("NOW()")]);
} else {
// redirect back to home
$_SESSION["errormsg"] = $jkl["i53"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// We have a subscription plan
$JAK_payment->JAK_pay("stripe", "", "", $subscription_id, "", "recurring", "buy", JAK_rewrite::jakParseurl('extend', 'success', $payidnow, $subscription_id), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
} else {
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("stripe", $couponprice, $currencytopay, $pack["id"], $planid, "single", "", JAK_rewrite::jakParseurl('extend', 'success', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
}
break;
case 'paypal':
// code...
if (isset($subscribed) && $subscribed == 1) {
// Now we need to either get the plan id from the database or create one
if (isset($planid) && $jakdb1->has("payment_plans", ["AND" => ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"]]])) {
$subscription_id = $jakdb1->get("payment_plans", "planid", ["AND" => ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"]]]);
} else {
$subscription_id = $JAK_payment->JAK_pay("paypal", $couponprice, $currencytopay, "PlanID-".$pack["id"], $planid, "recurring", "create_plan", $intervalm, $intervalc, $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
if (isset($subscription_id) && !empty($subscription_id)) {
// We insert the subscription id for later use
$jakdb1->insert("payment_plans", ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"], "opid" => JAK_USERID, "planid" => $subscription_id, "created" => $jakdb->raw("NOW()")]);
} else {
// redirect back to home
$_SESSION["errormsg"] = $jkl["i53"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// We have a subscription plan
$subscribeToken = $JAK_payment->JAK_pay("paypal", $couponprice, $currencytopay, $subscription_id, "", "recurring", "buy", JAK_rewrite::jakParseurl('extend', 'success', $payidnow, $subscription_id), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
} else {
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("paypal", $couponprice, $currencytopay, $pack["id"], $planid, "single", "", JAK_rewrite::jakParseurl('extend', 'success', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
}
break;
case 'verifone':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
// More infos
/* $usrinfo = array(
'name'=>$jakuser->getVar("name"),
'email'=> $jakuser->getVar("email")
); */
break;
case 'authorize.net':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
break;
case 'yoomoney':
// code...
if (isset($subscribed) && $subscribed == 1) {
// YooKassa is strange with handling payments we just run it
$subscription_id = $JAK_payment->JAK_pay("yoomoney", $couponprice, $currencytopay, "PlanID-".$pack["id"], $planid, "recurring", "buy", JAK_rewrite::jakParseurl('extend', 'success', $payidnow), "", $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
} else {
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("yoomoney", $couponprice, $currencytopay, "", $planid, "single", "", JAK_rewrite::jakParseurl('extend', 'success', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
}
break;
case 'paystack':
// code...
if (isset($subscribed) && $subscribed == 1) {
// Now we need to either get the plan id from the database or create one
if (isset($planid) && $jakdb1->has("payment_plans", ["AND" => ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"]]])) {
$subscription_id = $jakdb1->get("payment_plans", "planid", ["AND" => ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"]]]);
} else {
$subscription_id = $JAK_payment->JAK_pay("paystack", $couponprice, $currencytopay, "PlanID-".$pack["id"], $planid, "create_plan", "", $intervalm, $intervalc, $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
if (isset($subscription_id) && !empty($subscription_id)) {
// We insert the subscription id for later use
$jakdb1->insert("payment_plans", ["amount" => $couponprice, "currency" => $currencytopay, "interval" => $intervalm, "interval_count" => $intervalc, "paygateid" => $paga["id"], "opid" => JAK_USERID, "planid" => $subscription_id, "created" => $jakdb->raw("NOW()")]);
} else {
// redirect back to home
$_SESSION["errormsg"] = $jkl["i53"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
}
// We have a subscription plan
$subscribeToken = $JAK_payment->JAK_pay("paystack", $couponprice, $currencytopay, $subscription_id, "", "buy_plan", $jakuser->getVar("email"), "",
"", $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
if ($subscribeToken) {
jak_redirect(JAK_rewrite::jakParseurl('extend', 'success', $payidnow, $subscription_id, $subscribeToken));
} else {
jak_redirect(JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow));
}
} else {
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("paystack", $couponprice, $currencytopay, $pack["id"], $planid, "single", $jakuser->getVar("email"), JAK_rewrite::jakParseurl('extend', 'success', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $paga["secretkey_one"], $paga["secretkey_two"], $paga["sandbox"]);
}
break;
case 'bank':
// Advanced Message
$mailadv = sprintf($jkl['i79'], $jakuser->getVar("name"), $jakuser->getVar("username"), JAK_USERID, $jakuser->getVar("email"), JAK_MAIN_LOC, $pack['id'], $pack['title']);
// Ok, we send the email // email address, cc email address, reply to, subject, message, attachment
jak_send_email(JAK_EMAIL, "", $jakuser->getVar("email"), $paga["title"], $mailadv, "");
// redirect back to extend with the success
$_SESSION["successmsg"] = $jkl["i80"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
break;
case 'freeaccess':
// code
$paidunix = strtotime("+".$pack["validfor"]." days");
// get the nice time
$paidtill = date('Y-m-d H:i:s', $paidunix);
// We collect the customer id from stripe
$paygateid = $subs["paygateid"];
$subscribeid = $subs["subscribeid"];
// We have an advanced payment
if ($pack["islc3"] || $pack["ishd3"]) {
// 1 stands for LC3
$islc3hd3 = 1;
if ($pack["ishd3"]) $islc3hd3 = 2;
if ($jakdb1->has("advaccess", ["AND" => ["userid" => $opmain["id"], "opid" => JAK_USERID]])) {
// Update the advanced access table
$jakdb1->update("advaccess", [
"lastedit" => $jakdb->raw("NOW()"),
"paidtill" => $paidtill,
"lc3hd3" => $islc3hd3,
"paythanks" => 1], ["AND" => ["opid" => JAK_USERID, "id" => $opmain["id"]]]);
} else {
$jakdb1->insert("advaccess", ["userid" => $opmain["id"], "opid" => JAK_USERID, "lc3hd3" => $islc3hd3, "lastedit" => $jakdb->raw("NOW()"), "paythanks" => 1, "paidtill" => $paidtill, "created" => $jakdb->raw("NOW()")]);
}
// Ok, we have removed the old stuff and now we update the user subscription table
$jakdb->update("subscriptions", ["packageid" => $pack["id"], "operators" => $pack["operators"], "departments" => $pack["departments"], "tickets" => $pack["tickets"], "blog" => $pack["blog"], "faq" => $pack["faq"], "files" => $pack["files"], "activechats" => $pack["activechats"], "chathistory" => $pack["chathistory"], "phpimap" => $pack["phpimap"], "clients" => $pack["clients"], "islc3" => $pack["islc3"], "ishd3" => $pack["ishd3"], "validfor" => $pack["validfor"], "paygateid" => $paygateid, "subscribed" => $subscribed, "amount" => $couponprice, "currency" => $currencytopay, "paidhow" => "Free Package", "paidwhen" => $jakdb->raw("NOW()"), "paidtill" => $paidtill, "trial" => 0, "active" => 1], ["opid" => JAK_USERID]);
// The time for the advanced installation
$paidunix = strtotime("+".$pack["validfor"]." days");
// Advanced Message
$mailadv = sprintf($jkl['i50'], $jakuser->getVar("name"), $jakuser->getVar("username"), JAK_USERID, $jakuser->getVar("email"), $jakuser->getVar("password"), $paidunix, ($islc3hd3 == 1 ? 'Live Chat 3' : 'HelpDesk 3'), SIGN_UP_URL.'/process/confirmadv.php?uid='.JAK_USERID);
// Ok, we send the email // email address, cc email address, reply to, subject, message, attachment
jak_send_email(JAK_EMAIL, "", $jakuser->getVar("email"), $jkl['i49'], $mailadv, "");
$stripemsg = $jkl['i51'];
$stripestatus = 2;
} else {
// Nasty stuff starts
if (isset($subs) && isset($pack)) {
// Update the main operator subscription
update_main_operator($subs, $pack, $currencytopay, $couponprice, $paygateid, $subscribeid, 0, 0, "Free Plan", JAK_USERID, JAK_MAIN_LOC);
}
}
// Update old subscriptions to none active
$jakdb1->update("subscriptions", ["active" => 0], ["AND" => ["locationid" => JAK_MAIN_LOC, "userid" => JAK_USERID]]);
// We insert the subscription into the main table for that user.
$jakdb1->insert("subscriptions", ["packageid" => $pack["id"],
"locationid" => JAK_MAIN_LOC,
"userid" => JAK_USERID,
"amount" => $couponprice,
"currency" => $currencytopay,
"paidfor" => $pack["title"],
"paidhow" => "Free Plan",
"subscribed" => 0,
"paygateid" => $paygateid,
"subscribeid" => "",
"paidwhen" => $jakdb->raw("NOW()"),
"paidtill" => $paidtill,
"freeplan" => 1,
"active" => 1,
"success" => 1]);
// finally update the main database
$jakdb1->update("users", ["trial" => "1980-05-06 00:00:00",
"paidtill" => $paidtill,
"payreminder" => 0,
"paythanks" => 1,
"active" => 1,
"confirm" => 0], ["AND" => ["opid" => JAK_USERID, "locationid" => JAK_MAIN_LOC]]);
// Now let us delete the define cache file
$cachewidget = APP_PATH.JAK_CACHE_DIRECTORY.'/opcache'.JAK_USERID.'.php';
if (file_exists($cachewidget)) {
unlink($cachewidget);
// redirect back to home
$_SESSION["successmsg"] = $jkl["i43"];
jak_redirect(BASE_URL);
}
break;
}
} else {
// Something went wrong
$_SESSION["errormsg"] = $jkl["i53"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
}
} elseif ($_POST['check'] == "payop") {
// Calculate the price from the months
$amount = $_POST['opcount']*$sett["addops"];
// Ok, we have no errors we need to create a payidnow for checking that the payment was legal
$payidnow = base64_url_encode(JAK_USERID.':#:'.$amount.':#:'.$_POST['opcount'].':#:'.microtime().':#:'.$_POST['paidhowop']);
// We will need to enter the information into a temporary database
$jakdb->insert("payment_security", ["opid" => $opcacheid, "userid" => JAK_USERID, "payidnow" => $payidnow, "created" => $jakdb->raw("NOW()")]);
// Go through the payment gateways
switch ($_POST['paidhowop']) {
case 'stripe':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("stripe", $amount, $sett["currency"], $_POST['opcount'], "Additional Operator", "single", "", JAK_rewrite::jakParseurl('extend', 'opsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["stripe_secret_key"], $sett["stripe_publish_key"], "");
break;
case 'paypal':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("paypal", $amount, $sett["currency"], $_POST['opcount'], "Additional Operator", "single", "", JAK_rewrite::jakParseurl('extend', 'opsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["paypal_client"], $sett["paypal_secret"], $sett["sandbox_mode"]);
break;
case 'verifone':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
// More infos
/* $usrinfo = array(
'name'=>$jakuser->getVar("name"),
'email'=> $jakuser->getVar("email")
); */
break;
case 'authorize.net':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
break;
case 'yoomoney':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("yoomoney", $amount, $sett["currency"], "", "Additional Operator", "single", "", JAK_rewrite::jakParseurl('extend', 'opsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["yookassa_id"], $sett["yookassa_secret"], "");
break;
case 'paystack':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("paystack", $amount, $sett["currency"], $_POST['opcount'], "Additional Operator", "single", $jakuser->getVar("email"), JAK_rewrite::jakParseurl('extend', 'opsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["paystack_secret"], "", "");
break;
}
} elseif ($_POST['check'] == "opextend") {
// Calculate the price from the months
$amount = $_POST['opamountext']*$sett["addops"];
// Ok, we have no errors we need to create a payidnow for checking that the payment was legal
$payidnow = base64_url_encode(JAK_USERID.':#:'.$amount.':#:'.$_POST['opidext'].':#:'.microtime().':#:'.$_POST['paidhowopext'].':#:'.$_POST['opamountext']);
// We will need to enter the information into a temporary database
$jakdb->insert("payment_security", ["opid" => $opcacheid, "userid" => JAK_USERID, "payidnow" => $payidnow, "created" => $jakdb->raw("NOW()")]);
// Go through the payment gateways
switch ($_POST['paidhowopext']) {
case 'stripe':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("stripe", $amount, $sett["currency"], $_POST['opcount'], "Operator Extend Membership", "single", "", JAK_rewrite::jakParseurl('extend', 'opextsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["stripe_secret_key"], $sett["stripe_publish_key"], "");
break;
case 'paypal':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("paypal", $amount, $sett["currency"], $_POST['opcount'], "Operator Extend Membership", "single", "", JAK_rewrite::jakParseurl('extend', 'opextsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["paypal_client"], $sett["paypal_secret"], $sett["sandbox_mode"]);
break;
case 'verifone':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
// More infos
/* $usrinfo = array(
'name'=>$jakuser->getVar("name"),
'email'=> $jakuser->getVar("email")
); */
break;
case 'authorize.net':
// code...
$_SESSION["infomsg"] = $jkl["i78"];
jak_redirect(JAK_rewrite::jakParseurl('extend'));
break;
case 'yoomoney':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("yoomoney", $amount, $sett["currency"], "", "Operator Extend Membership", "single", "", JAK_rewrite::jakParseurl('extend', 'opextsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["yookassa_id"], $sett["yookassa_secret"], "");
break;
case 'paystack':
// code...
// Single payment, make sure there is no subscription
$JAK_payment->JAK_pay("paystack", $amount, $sett["currency"], $_POST['opamountext'], "Operator Extend Membership", "single", $jakuser->getVar("email"), JAK_rewrite::jakParseurl('extend', 'opextsuccess', $payidnow), JAK_rewrite::jakParseurl('extend', 'cancel', $payidnow), $sett["paystack_secret"], "", "");
break;
}
}
}
}
}
if (isset($page1) && $page1 == "bank" && isset($page2) && is_numeric($page2)) {
// Now get the payment gateway details.
if (isset($paygate) && !empty($paygate)) foreach($paygate as $pg) {
if ($pg["id"] == $page2) {
// Call the template
$template = 'bank.php';
break;
}
}
} else {
// Title and Description
$SECTION_TITLE = $jkl['i63'];
$SECTION_DESC = "";
// Include the javascript file for results
$js_file_footer = 'js_extend.php';
// Call the template
$template = 'extend.php';
}
?>