/home/techb158/exp.abdallabala.com/application/controllers
NameSizeModeActions
.DS_Store61480644editdlrm
accounts.php77290644editdlrm
admin.php67330644editdlrm
ajax.date-summary.php37960644editdlrm
ajax.expense-calendar.php10310644editdlrm
ajax.income-calendar.php9970644editdlrm
api.php75950644editdlrm
appearance.php20290644editdlrm
autologin.php15990644editdlrm
board.php9890644editdlrm
calendar.php49490644editdlrm
client.php630190644editdlrm
clx_api.php431780644editdlrm
console.php57000644editdlrm
contacts.php612540644editdlrm
cp.php15570644editdlrm
customers.php970644editdlrm
dashboard-alt.php320644editdlrm
dashboard.php365810644editdlrm
default.php1420644editdlrm
delete.php96310644editdlrm
demo.php6890644editdlrm
documents.php54930644editdlrm
editor.php21490644editdlrm
export.php48740644editdlrm
files.php12430644editdlrm
generate.php14680644editdlrm
help.php3810644editdlrm
ibtest.php2110644editdlrm
index.html1120644editdlrm
invoices.php581820644editdlrm
iview.php14100644editdlrm
jsonapi.php47010644editdlrm
jsonexport.php33120644editdlrm
legacy.php250644editdlrm
login.php64400644editdlrm
logout.php800644editdlrm
orders.php88460644editdlrm
plugins.php4260644editdlrm
ps.php100160644editdlrm
quotes.php393340644editdlrm
reorder.php24040644editdlrm
reports.php262270644editdlrm
search.php21250644editdlrm
settings.php1100910644editdlrm
sys_imgcrop.php39380644editdlrm
tags.php19130644editdlrm
tax.php50240644editdlrm
transactions.php285610644editdlrm
update.php18390644editdlrm
update_473.php527630644editdlrm
util.php180270644editdlrm
Edit: /home/techb158/exp.abdallabala.com/application/controllers/client.php (63019B)
assign('_application_menu', 'invoices'); $ui->assign('_st', 'Invoices'); $ui->assign('_title', $config['CompanyName']); if (isset($routes[1]) && $routes[1] != '') { $action = $routes[1]; } else { $action = 'login'; } $ui->assign('tplheader', 'sections/client_header'); $ui->assign('tplfooter', 'sections/client_footer'); Event::trigger('client', [$action]); switch ($action) { case 'iview': Event::trigger('client/iview/'); $xfooter = Asset::js(['numeric']); $id = $routes['2']; $d = ORM::for_table('sys_invoices')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } $items = ORM::for_table('sys_invoiceitems') ->where('invoiceid', $id) ->order_by_asc('id') ->find_many(); $ui->assign('items', $items); //find related transactions $trs_c = ORM::for_table('sys_transactions') ->where('iid', $id) ->count(); $trs = ORM::for_table('sys_transactions') ->where('iid', $id) ->order_by_desc('id') ->find_many(); $ui->assign('trs', $trs); $ui->assign('trs_c', $trs_c); //find the user $a = ORM::for_table('crm_accounts')->find_one($d['userid']); $ui->assign('a', $a); $ui->assign('d', $d); $i_credit = $d['credit']; $i_due = '0.00'; $i_total = $d['total']; if ($d['credit'] != '0.00') { $i_due = $i_total - $i_credit; } else { $i_due = $d['total']; } $ui->assign('i_due', $i_due); $pgs = ORM::for_table('sys_pg') ->where('status', 'Active') ->order_by_asc('sorder') ->find_many(); $payment_gateways = []; foreach ($pgs as $pg) { $payment_gateways[$pg->processor] = [ 'id' => $pg->id, 'name' => $pg->name, 'settings' => $pg->settings, 'value' => $pg->value, 'ins' => $pg->ins, 'c1' => $pg->c1, 'c2' => $pg->c2, 'c3' => $pg->c3, 'c4' => $pg->c4, 'c5' => $pg->c5, ]; } $ui->assign('payment_gateways', $payment_gateways); $ui->assign('pgs', $pgs); $cf = ORM::for_table('crm_customfields') ->where('showinvoice', 'Yes') ->order_by_asc('id') ->find_many(); $ui->assign('cf', $cf); $x_html = ''; Event::trigger('view_invoice'); $ui->assign('xfooter', $xfooter); $ui->assign( 'xjq', ' $(\'.amount\').autoNumeric(\'init\', { aSign: \'' . $config['currency_code'] . ' \', dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' });' ); $ui->assign('x_html', $x_html); $ui->display('client-iview.tpl'); } else { r2(U . 'customers/list', 'e', $_L['Account_Not_Found']); } break; case 'stripe-create-checkout-session': $invoice_id = (int) route(2); $view_token = route(3); if ($invoice_id) { $invoice = Invoice::find($invoice_id); if ($invoice) { if ($invoice->vtoken != $view_token) { exit('token does not match'); } $stripe_payment_gateway = PaymentGateway::where( 'processor', 'stripe' ) ->where('status', 'Active') ->first(); if ($stripe_payment_gateway) { $i_credit = $invoice->credit ?? 0.0; $i_due = 0.0; $i_total = $invoice->total; if ($i_credit !== 0.0) { $i_due = $i_total - $i_credit; } else { $i_due = $i_total; } $currency = $stripe_payment_gateway->c2 ?? 'usd'; $currency = strtolower($currency); $charge_amount = $i_due * 100; $invoice_id = $invoice->id; $ptoken = $invoice->ptoken; $customer_email = ''; if ($invoice->userid) { $customer = Contact::find($invoice->userid); if ($customer) { $customer_email = $customer->email; } } \Stripe\Stripe::setApiKey($stripe_payment_gateway->c1); header('Content-Type: application/json'); $checkout_session = \Stripe\Checkout\Session::create([ 'customer_email' => $customer_email, 'payment_method_types' => ['card'], 'line_items' => [ [ 'price_data' => [ 'currency' => $currency, 'unit_amount' => $charge_amount, 'product_data' => [ 'name' => 'Invoice# ' . $invoice->id, ], ], 'quantity' => 1, ], ], 'mode' => 'payment', 'success_url' => U . "client/ipay_success/$invoice_id/token_$ptoken/", 'cancel_url' => U . "client/ipay_cancel/$invoice_id/token_$view_token/", ]); echo json_encode(['id' => $checkout_session->id]); exit(); } } } break; case 'q': Event::trigger('client/q/'); $id = $routes['2']; $d = ORM::for_table('sys_quotes')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } $items = ORM::for_table('sys_quoteitems') ->where('qid', $id) ->order_by_asc('id') ->find_many(); $ui->assign('items', $items); $a = ORM::for_table('crm_accounts')->find_one($d['userid']); $ui->assign('a', $a); $ui->assign('d', $d); $cf = ORM::for_table('crm_customfields') ->where('showinvoice', 'Yes') ->order_by_asc('id') ->find_many(); $ui->assign('cf', $cf); $x_html = ''; $ui->assign('x_html', $x_html); $ui->display('client-quote.tpl'); } else { r2(U . 'customers/list', 'e', $_L['Account_Not_Found']); } break; case 'iprint': Event::trigger('client/iprint/'); $id = $routes['2']; $d = ORM::for_table('sys_invoices')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } //find all activity for this user $items = ORM::for_table('sys_invoiceitems') ->where('invoiceid', $id) ->order_by_asc('id') ->find_many(); $trs_c = ORM::for_table('sys_transactions') ->where('iid', $id) ->count(); $trs = ORM::for_table('sys_transactions') ->where('iid', $id) ->order_by_desc('id') ->find_many(); //find the user $a = ORM::for_table('crm_accounts')->find_one($d['userid']); $i_credit = $d['credit']; $i_due = '0.00'; $i_total = $d['total']; if ($d['credit'] != '0.00') { $i_due = $i_total - $i_credit; } require 'application/lib/invoices/render.php'; } else { r2(U . 'customers/list', 'e', $_L['Account_Not_Found']); } break; case 'ipdf': Event::trigger('client/ipdf/'); $id = $routes['2']; $token = $routes['3']; Invoice::pdf($id, 'inline', $token); break; case 'qpdf': Event::trigger('client/qpdf/'); $id = $routes['2']; $d = ORM::for_table('sys_quotes')->find_one($id); if ($d) { //find all activity for this user $items = ORM::for_table('sys_quoteitems') ->where('qid', $id) ->order_by_asc('id') ->find_many(); $a = ORM::for_table('crm_accounts')->find_one($d['userid']); $cf = ORM::for_table('crm_customfields') ->where('showinvoice', 'Yes') ->order_by_asc('id') ->find_many(); $pdf_c = ''; $ib_w_font = 'dejavusanscondensed'; if ($config['pdf_font'] == 'default') { $pdf_c = 'c'; $ib_w_font = 'Helvetica'; } $mpdf = new \Mpdf\Mpdf(); $mpdf->SetTitle($config['CompanyName'] . ' ' . $_L['Quote']); $mpdf->SetAuthor($config['CompanyName']); $mpdf->SetWatermarkText($d['status']); $mpdf->showWatermarkText = true; $mpdf->watermark_font = $ib_w_font; $mpdf->watermarkTextAlpha = 0.1; $mpdf->SetDisplayMode('fullpage'); if ($config['pdf_font'] == 'AdobeCJK') { $mpdf->useAdobeCJK = true; $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; } ob_start(); require 'application/lib/invoices/q-x2.php'; $html = ob_get_contents(); ob_end_clean(); $mpdf->WriteHTML($html); if (isset($routes[4]) and $routes[4] == 'dl') { $mpdf->Output(date('Y-m-d') . _raid(4) . '.pdf', 'D'); # D } else { $mpdf->Output(date('Y-m-d') . _raid(4) . '.pdf', 'I'); # D } } break; case 'ipay': Event::trigger('client/ipay/'); $id = $routes[2]; $token = $routes[3]; $pg = _post('pg'); if ($pg == '') { $pg = route(4); } Event::trigger('client/ipay/pg', [$pg, $id, $token]); $d = ORM::for_table('sys_invoices')->find_one($id); if ($d) { $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } $ui->assign('d', $d); $i_credit = $d['credit']; $i_due = '0.00'; $i_total = $d['total']; $amount = $i_total - $i_credit; $invoiceid = $d['id']; $vtoken = $d['vtoken']; $ptoken = $d['ptoken']; $u = ORM::for_table('crm_accounts')->find_one($d['userid']); switch ($pg) { case 'paypal': $p = ORM::for_table('sys_pg') ->where('processor', 'paypal') ->find_one(); if ($p) { $currency_id = $d['currency']; $currency_find = Model::factory( 'Models_Currency' )->find_one($currency_id); if ($currency_find) { $currency = $currency_id; $currency_code = $currency_find->cname; $currency_rate = $currency_find->rate; } else { $currency = 0; $currency_code = $p['c1']; $currency_rate = 1.0; } $ppemail = $p['value']; $c2 = $p['c2']; if ($c2 != '' and is_numeric($c2) and $c2 != '1') { $amount = $amount / $c2; $amount = round($amount, 2); } $url = 'https://www.paypal.com/cgi-bin/webscr'; $params = [ ['name' => "business", 'value' => $ppemail], [ 'name' => "return", 'value' => U . "client/ipay_submitted/$invoiceid/token_$vtoken/", ], [ 'name' => "cancel_return", 'value' => U . "client/ipay_cancel/$invoiceid/token_$vtoken/", ], [ 'name' => "notify_url", 'value' => U . "client/ipay_ipn/$invoiceid/token_$ptoken/", ], [ 'name' => "item_name", 'value' => "Payment For INV # $invoiceid", ], ['name' => "amount", 'value' => $amount], ['name' => "cmd", 'value' => '_xclick'], ['name' => "no_shipping", 'value' => '1'], ['name' => "rm", 'value' => '2'], [ 'name' => "currency_code", 'value' => $currency_code, ], ]; Fsubmit::form($url, $params); } else { echo 'Paypal is Not Found!'; } break; case 'manualpayment': Event::trigger('client/manualpayment/'); $p = ORM::for_table('sys_pg') ->where('processor', 'manualpayment') ->find_one(); if ($p) { $ui->assign('i_due', $amount); $ui->assign('ins', $p['value']); $ui->display('client-ipay.tpl'); } break; case 'stripe': $p = ORM::for_table('sys_pg') ->where('processor', 'stripe') ->find_one(); if ($p) { $a = ORM::for_table('crm_accounts')->find_one( $d['userid'] ); $it = $i_total - $i_credit; $amount = $it * 100; $ins = ' '; $ui->assign('ins', $ins); $ui->display('stripe.tpl'); } break; case 'stripe_post': $p = ORM::for_table('sys_pg') ->where('processor', 'stripe') ->find_one(); if ($p) { $a = ORM::for_table('crm_accounts')->find_one( $d['userid'] ); $it = $i_total - $i_credit; $amount = $it * 100; $currency_code = $p['c1']; require_once 'application/lib/stripe/init.php'; $description = "Payment For INV # $invoiceid"; $cardNumber = _post('cardNumber'); $cardExpiry = _post('cardExpiry'); $ce = explode('/', $cardExpiry); $cardCVC = _post('cardCVC'); $myCard = [ 'number' => $cardNumber, 'exp_month' => $ce['0'], 'exp_year' => $ce['1'], ]; try { \Stripe\Stripe::setApiKey($p['value']); $charge = \Stripe\Charge::create([ 'card' => $myCard, 'amount' => $amount, 'currency' => $currency_code, "description" => $description, ]); $charge = str_replace( 'Stripe\Charge JSON:', '', $charge ); $resp = json_decode($charge, true); $trid = $resp['id']; $last4 = $resp['source']['last4']; $captured = $resp['captured']; if ($captured == true) { $inv = ORM::for_table('sys_invoices')->find_one( $id ); if ($inv) { $inv->status = 'Paid'; $inv->save(); Event::trigger( 'invoices/markpaid/', $invoice = $inv ); _msglog('s', 'Payment Successful'); r2( U . 'client/iview/' . $d['id'] . '/' . 'token_' . $d['vtoken'] ); } } else { _msglog( 'e', 'This API call cannot be made with a publishable API key. Please use a secret API key. You can find a list of your API keys at https://dashboard.stripe.com/account/apikeys.' ); r2( U . 'client/iview/' . $d['id'] . '/' . 'token_' . $d['vtoken'] ); } } catch (\Stripe\Error\Card $e) { // Since it's a decline, \Stripe\Error\Card will be caught $body = $e->getJsonBody(); $err = $body['error']; print 'Status is:' . $e->getHttpStatus() . "\n"; print 'Type is:' . $err['type'] . "\n"; print 'Code is:' . $err['code'] . "\n"; // param is '' in this case print 'Param is:' . $err['param'] . "\n"; print 'Message is:' . $err['message'] . "\n"; } catch (\Stripe\Error\InvalidRequest $e) { // Invalid parameters were supplied to Stripe's API var_dump($e); } catch (\Stripe\Error\Authentication $e) { // Authentication with Stripe's API failed // (maybe you changed API keys recently) var_dump($e); } catch (\Stripe\Error\ApiConnection $e) { // Network communication with Stripe failed } catch (\Stripe\Error\Base $e) { // Display a very generic error to the user, and maybe send // yourself an email var_dump($e); } catch (Exception $e) { // Something else happened, completely unrelated to Stripe var_dump($e); } } break; case 'authorize_net': $p = ORM::for_table('sys_pg') ->where('processor', 'authorize_net') ->find_one(); if ($p) { $invoiceid = $d['id']; $amount = $i_total - $i_credit; $url = 'https://secure.authorize.net/gateway/transact.dll'; $loginID = $p['value']; $transactionKey = $p['c1']; $description = "Invoice Payment - $invoiceid"; // an invoice is generated using the date and time $invoice = $invoiceid; // a sequence number is randomly generated $sequence = rand(1, 1000); // a timestamp is generated $timeStamp = time(); $testMode = "false"; if (phpversion() >= '5.1.2') { $fingerprint = hash_hmac( "md5", $loginID . "^" . $sequence . "^" . $timeStamp . "^" . $amount . "^", $transactionKey ); } else { $fingerprint = bin2hex( mhash( MHASH_MD5, $loginID . "^" . $sequence . "^" . $timeStamp . "^" . $amount . "^", $transactionKey ) ); } $params = [ ['name' => "x_login", 'value' => $loginID], ['name' => "x_amount", 'value' => $amount], [ 'name' => "x_description", 'value' => $description, ], ['name' => "x_invoice_num", 'value' => $invoice], ['name' => "x_fp_sequence", 'value' => $sequence], ['name' => "x_fp_timestamp", 'value' => $timeStamp], ['name' => "x_fp_hash", 'value' => $fingerprint], ['name' => "x_test_request", 'value' => $testMode], [ 'name' => "x_show_form", 'value' => "PAYMENT_FORM", ], ]; Fsubmit::form($url, $params); } break; case 'ccavenue': $p = ORM::for_table('sys_pg') ->where('processor', 'ccavenue') ->find_one(); if ($p) { require 'application/lib/misc/ccavenue.php'; $currency_code = $p['c2']; $c3 = $p['c3']; if ($c3 != '' and is_numeric($c3) and $c3 != '1') { $amount = $amount / $c3; } $Merchant_Id = $p['value']; //Given to merchant by ccavenue $WorkingKey = $p['c1']; //Given to merchant by ccavenue $redirect_url = U . "client/ipay_ipn/$invoiceid/token_$ptoken/"; require 'application/lib/misc/ccform.php'; } break; case 'braintree': $p = ORM::for_table('sys_pg') ->where('processor', 'braintree') ->find_one(); Braintree_Configuration::environment($p['c4']); Braintree_Configuration::merchantId($p['value']); Braintree_Configuration::publicKey($p['c1']); Braintree_Configuration::privateKey($p['c2']); if ($p) { $a = ORM::for_table('crm_accounts')->find_one( $d['userid'] ); $it = $i_total - $i_credit; $amount = $it * 100; $clientToken = Braintree_ClientToken::generate([]); $formurl = U . "client/btpay_submitted/$invoiceid/token_$vtoken/"; $vamount = $config['currency_code'] . number_format( $d['total'], 2, $config['dec_point'], $config['thousands_sep'] ); $ins = '
'; $ui->assign('ins', $ins); $ui->display('client-ipay.tpl'); } break; case 'quickpay': $p = ORM::for_table('sys_pg') ->where('processor', 'quickpay') ->find_one(); if ($p) { require 'application/lib/misc/quickpay.php'; $qp = new Quickpay($p['value'], $p['c1']); $data_fields['msgtype'] = 'authorize'; $data_fields['language'] = 'en'; $data_fields['ordernumber'] = $invoiceid; $data_fields['amount'] = $amount; $data_fields['currency'] = $p['c3']; $data_fields['continueurl'] = U . "client/ipay_submitted/$invoiceid/token_$vtoken/"; $data_fields['cancelurl'] = U . "client/ipay_cancel/$invoiceid/token_$vtoken/"; $data_fields['callbackurl'] = U . "client/ipay_ipn/$invoiceid/token_$ptoken/"; Fsubmit::input( 'https://secure.quickpay.dk/form/', $qp->form_fields($data_fields) ); } break; default: echo 'Payment Gateway Not Found!'; } } else { echo 'Sorry Invoice Not Found!'; exit(); } break; /* * CCAvenue * * */ case 'ipay_cancel': Event::trigger('client/ipay_cancel/'); $id = $routes['2']; $token = $routes['3']; r2(U . "client/iview/$id/$token/", 'e', $_L['Payment Cancelled']); break; case 'ipay_submitted': Event::trigger('client/ipay_submitted/'); $id = $routes['2']; $token = $routes['3']; r2(U . "client/iview/$id/$token/", 's', $_L['Payment Successful']); break; case 'ipay_ipn': Event::trigger('client/ipay_ipn/'); $id = $routes['2']; $token = $routes['3']; // r2(U."client/iview/$id/$token/",'s',$_L['Payment Successful']); $d = ORM::for_table('sys_invoices')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $ptoken = $d['ptoken']; if ($token != $ptoken) { echo 'Sorry Token does not match!'; exit(); } $d->status = 'Paid'; $d->save(); Event::trigger('invoices/markpaid/', $invoice = $d); } break; case 'ipay_success': Event::trigger('client/ipay_success/'); $id = $routes['2']; $token = $routes['3']; // r2(U."client/iview/$id/$token/",'s',$_L['Payment Successful']); $d = ORM::for_table('sys_invoices')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $ptoken = $d->ptoken; $vtoken = $d->vtoken; if ($token != $ptoken) { echo 'Sorry Token does not match!'; exit(); } $d->status = 'Paid'; $d->save(); Event::trigger('invoices/markpaid/', $invoice = $d); // send email $msg = Invoice::gen_email($id, 'confirm'); $subj = $msg['subject']; $message_o = $msg['body']; $email = $msg['email']; $name = $msg['name']; Notify_Email::_send( $name, $email, $subj, $message_o, $d->userid, $id ); // r2(U . "client/iview/$id/$vtoken/", 's', $_L['Payment Successful']); } break; case 'btpay_submitted': Event::trigger('client/btpay_submitted/'); $id = $routes['2']; $d = ORM::for_table('sys_invoices')->find_one($id); $ui->assign('d', $d); $token = $routes['3']; $p = ORM::for_table('sys_pg') ->where('processor', 'braintree') ->find_one(); if ($p) { $merchantId = $p["value"]; $publicKey = $p["c1"]; $privateKey = $p["c2"]; $account = $p["c3"]; $environment = $p["c4"]; $accountname = $p["name"]; Braintree_Configuration::environment($environment); Braintree_Configuration::merchantId($merchantId); Braintree_Configuration::publicKey($publicKey); Braintree_Configuration::privateKey($privateKey); $nonce = isset($_POST["payment_method_nonce"]) ? $_POST["payment_method_nonce"] : 0; if ($nonce) { // get user $a = ORM::for_table('crm_accounts')->find_one($d['userid']); // get invoice $id = $routes['2']; $iid = $id; // invoice ID $i = ORM::for_table('sys_invoices')->find_one($iid); $d = ORM::for_table('sys_invoices')->find_one($id); if ($d) { // we have an invoice, validate token... $token = $routes['3']; $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } else { // echo 'TOKEN MATCHES!!!!!!!!!!!!!!!!'; $i_credit = $d['credit']; $i_due = '0.00'; $i_total = $d['total']; $amount = $i_total - $i_credit; $invoiceid = $d['id']; $result = Braintree_Transaction::sale([ 'amount' => $amount, 'orderId' => $id, 'paymentMethodNonce' => $nonce, 'options' => [ 'submitForSettlement' => true, ], ]); if ($result->success) { $invoiceview = U . "invoices/pdf/$invoiceid/view/token_$vtoken"; $invoiceprint = U . "iview/print/$invoiceid/token_$vtoken"; // Thank you! Your payment has been successfully processed for $16.95 $ins = "Success!: Thank you for your payment."; if ($i) { $pc = $i['credit']; $it = $i['total']; $dp = $it - $pc; if ($dp == $amount or $dp < $amount) { $i->status = 'Paid'; $i->datepaid = date('Y-m-d H:i:s'); Event::trigger( 'invoices/markpaid/', $invoice = $i ); } else { $i->status = 'Partially Paid'; } $i->credit = $pc + $amount; $i->paymentmethod = $accountname; $i->save(); } //if ($i) { } elseif ($result->transaction) { $ins = "Error processing transaction:"; $ins .= "\n code: " . $result->transaction->processorResponseCode; $ins .= "\n text: " . $result->transaction->processorResponseText; } else { $ins = "Validation errors: \n"; $ins .= $result->errors->deepAll(); } r2( U . 'client/iview/' . $i->id . '/' . $i->vtoken . '/', 's', $ins ); } } } /* eof bernie changes */ } else { echo 'Payment Gateway Not Found!'; } break; case 'ccsubmit': $p = ORM::for_table('sys_pg') ->where('processor', 'ccavenue') ->find_one(); if ($p) { require 'application/lib/misc/ccavenue.php'; $currency_code = $p['c2']; $c3 = $p['c3']; if ($c3 != '' and is_numeric($c3) and $c3 != '1') { $amount = $amount / $c3; } $Merchant_Id = $p['value']; //Given to merchant by ccavenue $WorkingKey = $p['c1']; //Given to merchant by ccavenue $redirect_url = U . "client/ipay_ipn/$invoiceid/token_$ptoken/"; require 'application/lib/misc/ccsubmit.php'; } break; case 'login': Event::trigger('client/login/'); Contacts::isLogged(); $ui->display('client_login.tpl'); break; case 'register': $extra_fields = []; $ui->assign('extra_fields', $extra_fields); Event::trigger('client/register/'); Contacts::isLogged(); $ui->assign('xfooter', Asset::js(['contacts/register'])); $ui->display('client_register.tpl'); break; case 'forgot_pw': Event::trigger('client/forgot_pw/'); $ui->display('client_forgot_pw.tpl'); break; case 'forgot_pw_post': Event::trigger('client/forgot_pw_post/'); $username = _post('username'); $d = ORM::for_table('crm_accounts') ->where('email', $username) ->find_one(); if ($d) { // $fullname = $d->account; $password = Ib_Str::random_string(8); $password_hash = Password::_crypt($password); $d->password = $password_hash; $d->save(); // Send email notification $mail = Notify_Email::_init(); $mail->AddAddress($username, $fullname); $mail->Subject = 'Password Reset for ' . $config['CompanyName']; $mail->MsgHTML( 'Your Password has been reset to: ' . $password . ' Go to this link to login with new password- ' . U . 'client/login/' ); $mail->Send(); r2( U . 'client/login/', 's', 'New Password has been sent to your email.' ); } else { r2(U . 'client/forgot_pw/', 'e', 'No User found with this Email'); } break; case 'auth': Event::trigger('client/auth/'); $email = _post('username'); $password = _post('password'); $remember_me = _post('remember_me'); $auth = Contacts::login($email, $password); if ($auth) { // store authentication key in the cookies if ($remember_me == 'yes') { setcookie('ib_ct', $auth, time() + 86400 * 30, "/"); // 86400 = 1 day } else { $_SESSION['ib_ct'] = $auth; } r2(U . 'client/dashboard/'); } else { r2(U . 'client/login/', 'e', $_L['Invalid Username or Password']); } break; case 'auto_login': Event::trigger('client/auto_login/'); break; case 'register_post': // sleep(3); if (!isset($_SESSION['recaptcha_verified'])) { $_SESSION['recaptcha_verified'] = false; } if ($config['recaptcha'] == 1) { if (!$_SESSION['recaptcha_verified']) { if ( Ib_Recaptcha::isValid($config['recaptcha_secretkey']) == false ) { ib_die($_L['Recaptcha Verification Failed']); } else { $_SESSION['recaptcha_verified'] = true; } } } $msg = ''; $data = []; Event::trigger('client/register_post/'); $data['account'] = _post('fullname'); $data['email'] = _post('email'); $data['password'] = _post('password'); $data['password2'] = _post('password2'); $o_password = $data['password']; if ($data['account'] == '') { $msg .= 'Fullname is required
'; } if (Validator::Email($data['email']) == false) { $msg .= $_L['Invalid Email'] . '
'; } $f = ORM::for_table('crm_accounts') ->where('email', $data['email']) ->find_one(); if ($f) { $msg .= $_L['Email already exist'] . '
'; } if ($data['password'] != '') { if (!Validator::Length($data['password'], 15, 5)) { $msg .= 'Password should be between 6 to 15 characters' . '
'; } if ($data['password'] != $data['password2']) { $msg .= 'Passwords does not match' . '
'; } $data['password'] = Password::_crypt($data['password']); } else { $msg .= 'Password is required
'; } // API call for extra fields // // optional params $data['phone'] = _post('phone'); $data['address'] = _post('address'); $data['city'] = _post('city'); $data['zip'] = _post('zip'); $data['state'] = _post(''); $data['country'] = _post('country'); $data['company'] = _post('company'); $data['created_at'] = date('Y-m-d H:i:s'); $data['updated_at'] = date('Y-m-d H:i:s'); $data['email_verified'] = 'No'; $ip = get_client_ip(); $data['signed_up_ip'] = $ip; $isp = gethostbyaddr($ip); if (!$isp) { $isp = ''; } $data['isp'] = $isp; $data['balance'] = '0.00'; $data['status'] = 'Active'; $data['notes'] = ''; $data['token'] = ''; $data['img'] = ''; $data['web'] = ''; $data['facebook'] = ''; $data['google'] = ''; $data['linkedin'] = ''; $data['twitter'] = ''; $data['skype'] = ''; // $data[''] = ''; // $ = _post(''); Event::trigger('client_register_post_data_posted'); if ($msg == '') { $d = ORM::for_table('crm_accounts')->create(); $d->account = $data['account']; $d->email = $data['email']; $d->phone = $data['phone']; $d->address = $data['address']; $d->city = $data['city']; $d->zip = $data['zip']; $d->state = $data['state']; $d->country = $data['country']; $d->tags = ''; //others $d->fname = ''; $d->lname = ''; $d->company = $data['company']; $d->jobtitle = ''; $d->cid = '0'; $d->o = '0'; $d->balance = $data['balance']; $d->status = $data['status']; $d->notes = $data['notes']; $d->password = $data['password']; $d->token = ''; $d->ts = ''; $d->img = $data['img']; $d->web = $data['web']; $d->facebook = $data['facebook']; $d->google = $data['google']; $d->linkedin = $data['linkedin']; // v 4.2 $d->gname = ''; $d->gid = 0; $d->signed_up_ip = $ip; $d->isp = $data['isp']; // $d->save(); $cid = $d->id(); _log( $_L['New Contact Added'] . ' ' . $data['account'] . ' [CID: ' . $cid . ']', 'Portal Registration' ); $send_email = Ib_Email::send_client_welcome_email($data); $auth = Contacts::login($data['email'], $o_password); if ($auth) { // store authentication key in the cookies setcookie('ib_ct', $auth, time() + 86400 * 30, "/"); // 86400 = 1 day } echo $cid; Event::trigger('client/client_registered', $data); } else { echo $msg; } break; case 'dashboard': $dashboard_summary_extras = ''; $dashboard_extra_row_1 = ''; $c = Contacts::details(); Event::trigger('client/dashboard/'); $ui->assign('_application_menu', 'dashboard'); $ui->assign('_st', $_L['Dashboard']); $ui->assign( '_title', $config['CompanyName'] . ' - ' . $_L['Dashboard'] ); $cf = ORM::for_table('crm_customfields') ->where('ctype', 'crm') ->order_by_asc('id') ->find_many(); $ui->assign('cf', $cf); $ui->assign('user', $c); $cid = $c->id; $d = ORM::for_table('sys_transactions') ->where_any_is([['payerid' => $cid], ['payeeid' => $cid]]) ->limit(5) ->find_many(); $ui->assign('t', $d); $d = ORM::for_table('sys_invoices') ->where('userid', $c->id) ->limit(5) ->find_array(); $ui->assign('d', $d); $d = ORM::for_table('sys_quotes') ->where('userid', $c->id) ->limit(5) ->find_array(); $ui->assign('q', $d); $ui->assign( 'xjq', ' $(\'.amount\').autoNumeric(\'init\', { dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' });' ); $ui->assign('dashboard_summary_extras', $dashboard_summary_extras); $ui->assign('dashboard_extra_row_1', $dashboard_extra_row_1); $ui->display('client_dashboard.tpl'); break; case 'invoices': Event::trigger('client/invoices/'); $ui->assign('_application_menu', 'invoices'); $ui->assign('_st', $_L['Invoices']); $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Invoices']); $c = Contacts::details(); $ui->assign('user', $c); $d = ORM::for_table('sys_invoices') ->where('userid', $c->id) ->find_array(); $ui->assign('d', $d); $ui->assign('total_invoice', count($d)); // aSign: \''.$config['currency_code'].' \', $ui->assign( 'xjq', ' $(\'.amount\').autoNumeric(\'init\', { dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' });' ); $ui->display('client_invoices.tpl'); break; case 'quotes': Event::trigger('client/quotes/'); $ui->assign('_application_menu', 'quotes'); $ui->assign('_st', $_L['Quotes']); $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Quotes']); $c = Contacts::details(); $ui->assign('user', $c); $d = ORM::for_table('sys_quotes') ->where('userid', $c->id) ->find_array(); $ui->assign('d', $d); $ui->assign('total_quotes', count($d)); $ui->assign( 'xjq', ' $(\'.amount\').autoNumeric(\'init\', { aSign: \'' . $config['currency_code'] . ' \', dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' });' ); $ui->display('client_quotes.tpl'); break; case 'transactions': Event::trigger('client/transactions/'); $ui->assign('_application_menu', 'transactions'); $ui->assign('_st', $_L['Transactions']); $ui->assign( '_title', $config['CompanyName'] . ' - ' . $_L['Transactions'] ); $c = Contacts::details(); $cid = $c->id; $ui->assign('user', $c); $d = ORM::for_table('sys_transactions') ->where_any_is([['payerid' => $cid], ['payeeid' => $cid]]) ->find_many(); $ui->assign('d', $d); $ti = ORM::for_table('sys_transactions') ->where('payerid', $cid) ->sum('cr'); if ($ti == '') { $ti = '0'; } $ui->assign('ti', $ti); $te = ORM::for_table('sys_transactions') ->where('payeeid', $cid) ->sum('dr'); if ($te == '') { $te = '0'; } $ui->assign('total_quotes', count($d)); $ui->assign( 'xjq', ' $(\'.amount\').autoNumeric(\'init\', { aSign: \'' . $config['currency_code'] . ' \', dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' });' ); $ui->display('client_transactions.tpl'); break; case 'profile': Event::trigger('client/profile/'); $ui->assign('_application_menu', 'profile'); $ui->assign('_st', $_L['Profile']); $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Profile']); $c = Contacts::details(); $ui->assign('user', $c); $ui->assign('d', $c); $ui->assign('countries', Countries::all($c->country)); $ui->assign('xfooter', Asset::js(['contacts/client_profile_edit'])); $cf = ORM::for_table('crm_customfields') ->where('ctype', 'crm') ->order_by_asc('id') ->find_many(); $ui->assign('cf', $cf); $ui->display('client_profile.tpl'); break; case 'profile_edit_post': Event::trigger('client/profile_edit_post/'); $c = Contacts::details(); $id = $c->id; $d = ORM::for_table('crm_accounts')->find_one($id); if ($d) { $account = _post('account'); $company = _post('company'); $email = _post('edit_email'); $phone = _post('phone'); $address = _post('address'); $city = _post('city'); $state = _post('state'); $zip = _post('zip'); $country = _post('country'); $msg = ''; if ($account == '') { $msg .= $_L['Account Name is required'] . '
'; } if ($email != $d['email']) { $f = ORM::for_table('crm_accounts') ->where('email', $email) ->find_one(); if ($f) { $msg .= $_L['Email already exist'] . '
'; } } if (Validator::Email($email) == false) { $msg .= $_L['Invalid Email'] . '
'; } $password = _post('password'); if ($msg == '') { $d = ORM::for_table('crm_accounts')->find_one($id); $d->account = $account; $d->company = $company; $d->email = $email; $d->phone = $phone; $d->address = $address; $d->city = $city; $d->zip = $zip; $d->state = $state; $d->country = $country; if ($password != '') { $d->password = Password::_crypt($password); } $d->save(); _msglog('s', $_L['account_updated_successfully']); echo $id; } else { echo $msg; } } else { r2(U . $myCtrl . '/list', 'e', $_L['Account_Not_Found']); } break; case 'logout': Event::trigger('client/logout/'); $c = Contacts::details(); session_destroy(); Contacts::logout_using_token($c->token); setcookie('ib_ct', 'expired', 1, "/"); r2(U . 'client/login/', 's', 'You have successfully logged out.'); break; case 'where': r2(U . 'client/login/'); break; case 'q_accept': $id = route(2); $d = ORM::for_table('sys_quotes')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } $d->stage = 'Accepted'; $d->save(); r2(U . 'client/q/' . $id . '/token_' . $vtoken . '/'); } break; case 'q_decline': $id = route(2); $d = ORM::for_table('sys_quotes')->find_one($id); if ($d) { $token = $routes['3']; $token = str_replace('token_', '', $token); $vtoken = $d['vtoken']; if ($token != $vtoken) { echo 'Sorry Token does not match!'; exit(); } $d->stage = 'Lost'; $d->save(); r2(U . 'client/q/' . $id . '/token_' . $vtoken . '/'); } break; case 'dl': require 'application/helpers/mime.php'; $req = route(2); $req_e = explode('_', $req); $id = $req_e[0]; $token = $req_e[1]; $doc = ORM::for_table('sys_documents')->find_one($id); if ($doc) { $db_token = $doc->file_dl_token; if ($db_token != $token) { i_close('Token does not match.'); } $file_path = $doc->file_path; $file = 'application/storage/docs/' . $file_path; $ext = pathinfo($file_path, PATHINFO_EXTENSION); $file_name = $doc->title; $file_name = str_replace(' ', '_', $file_name); $file_name = strtolower($file_name); $dl_file_name = $file_name . '.' . $ext; $c_type = mime_content_type($file); if (file_exists($file)) { $basename = basename($file); // $mime = ($mime = getimagesize($file)) ? $mime['mime'] : $mime; $mime = mime_content_type($file); $size = filesize($file); $fp = fopen($file, "rb"); if (!($mime && $size && $fp)) { // Error. return; } header("Content-type: " . $mime); header("Content-Length: " . $size); // header("Content-Disposition: attachment; filename=" . $basename); header( "Content-Disposition: attachment; filename=" . $dl_file_name ); header('Content-Transfer-Encoding: binary'); header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); fpassthru($fp); } } else { i_close('Not Found'); } break; case 'downloads': $ui->assign('_application_menu', 'downloads'); $ui->assign('_st', $_L['Downloads']); $ui->assign( '_title', $config['CompanyName'] . ' - ' . $_L['Downloads'] ); $c = Contacts::details(); $ui->assign('user', $c); $file_ids = ORM::for_table('ib_doc_rel') ->where('rtype', 'contact') ->where('rid', $c->id) ->find_array(); $ids = []; foreach ($file_ids as $f) { $ids[] = $f['did']; } if (!empty($ids)) { $d = ORM::for_table('sys_documents') ->where_in('id', $ids) ->find_many(); } else { $d = []; } $ui->assign('d', $d); $ui->display('client_downloads.tpl'); break; case 'orders': $ui->assign('_application_menu', 'orders'); $ui->assign('_st', $_L['Orders']); $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Orders']); $c = Contacts::details(); $ui->assign('user', $c); $d = ORM::for_table('sys_orders') ->where('cid', $c->id) ->find_array(); $ui->assign('d', $d); $xjq = ' $(\'.amount\').autoNumeric(\'init\', { aSign: \'' . $config['currency_code'] . ' \', dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' }); '; $ui->assign('xjq', $xjq); $ui->display('client_orders.tpl'); break; case 'order_view': $ui->assign('_application_menu', 'orders'); $ui->assign('_st', $_L['Orders']); $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Orders']); $c = Contacts::details(); $ui->assign('user', $c); $xjq = ' $(\'.amount\').autoNumeric(\'init\', { aSign: \'' . $config['currency_code'] . ' \', dGroup: ' . $config['thousand_separator_placement'] . ', aPad: ' . $config['currency_decimal_digits'] . ', pSign: \'' . $config['currency_symbol_position'] . '\', aDec: \'' . $config['dec_point'] . '\', aSep: \'' . $config['thousands_sep'] . '\' }); '; $ui->assign('xjq', $xjq); $oid = route(2); $ordernum = route(3); $order = ORM::for_table('sys_orders')->find_one($oid); if ($order) { $db_ordernum = $order->ordernum; if ($ordernum != $db_ordernum) { i_close('Order number does not match.'); } $ui->assign('order', $order); $ui->display('client_order_view.tpl'); } break; case 'autologin': $token = route(2); $token_length = strlen($token); if ($token_length < 20) { i_close('Invalid Token.'); } $d = ORM::for_table('crm_accounts') ->where('autologin', $token) ->find_one(); if ($d) { $auth_key = Ib_Str::random_string(20) . md5(time()); $d->token = $auth_key; $d->save(); setcookie('ib_ct', $auth_key, time() + 86400 * 30, "/"); // 86400 = 1 day r2(U . 'client/dashboard/'); } else { i_close('Token Expired.'); } break; default: echo 'action not defined'; }