/home/devfahim/www/fluentlab.devfahim.site/wp-content/plugins/bkash/bkash.php
<?php
/**
* Plugin core start
* Checked Woocommerce activation
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
/**
* bKash gateway register
*/
add_filter( 'woocommerce_payment_gateways', 'softtech_bkash_payment_gateways' );
function softtech_bkash_payment_gateways( $gateways ) {
$gateways[] = 'SoftTechIT_Bkash';
return $gateways;
}
/**
* bKash gateway init
*/
add_action( 'plugins_loaded', 'softtech_bkash_plugin_activation' );
function softtech_bkash_plugin_activation() {
class SoftTechIT_Bkash extends WC_Payment_Gateway {
public $bkash_number;
public $number_type;
public $order_status;
public $instructions;
public $bkash_charge;
public function __construct() {
$this->id = 'softtech_bkash';
$this->title = $this->get_option( 'title', 'bKash' );
$this->description = $this->get_option( 'description', 'bKash payment Gateway' );
$this->method_title = esc_html__( "bKash", "stb" );
$this->method_description = esc_html__( "bKash Payment Gateway Options", "stb" );
$this->icon = plugins_url( 'images/bkash.png', __FILE__ );
$this->has_fields = true;
$this->softtech_bkash_options_fields();
$this->init_settings();
$this->bkash_number = $this->get_option( 'bkash_number' );
$this->number_type = $this->get_option( 'number_type' );
$this->order_status = $this->get_option( 'order_status' );
$this->instructions = $this->get_option( 'instructions' );
$this->bkash_charge = $this->get_option( 'bkash_charge' );
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
add_filter( 'woocommerce_thankyou_order_received_text', array( $this, 'softtech_bkash_thankyou_page' ) );
add_action( 'woocommerce_email_before_order_table', array( $this, 'softtech_bkash_email_instructions' ), 10, 3 );
add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'bkash_process_upload_file' ) );
}
public function bkash_process_upload_file() {
if ( isset( $_FILES['woocommerce_softtech_bkash_upload_file'] ) && !empty( $_FILES['woocommerce_softtech_bkash_upload_file']['name'] ) ) {
if ( !function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
$uploaded_file = $_FILES['woocommerce_softtech_bkash_upload_file'];
// Upload the file
$upload = wp_handle_upload( $uploaded_file, array( 'test_form' => false ) );
if ( isset( $upload['url'] ) && !isset( $upload['error'] ) ) {
// Save the URL in WooCommerce settings
$this->update_option( 'bkash_upload_file_url', $upload['url'] );
} else {
// Handle errors
WC_Admin_Settings::add_error( esc_html__( 'Error uploading file: ', 'stb' ) . $upload['error'] );
}
}
}
public function softtech_bkash_options_fields() {
$this->form_fields = array(
'enabled' => array(
'title' => esc_html__( 'Enable/Disable', "stb" ),
'type' => 'checkbox',
'label' => esc_html__( 'bKash Payment', "stb" ),
'default' => 'yes',
),
'title' => array(
'title' => esc_html__( 'Title', "stb" ),
'type' => 'text',
'default' => esc_html__( 'bKash', "stb" ),
),
'description' => array(
'title' => esc_html__( 'Description', "stb" ),
'type' => 'textarea',
'default' => esc_html__( 'Please complete your bKash payment at first, then fill up the form below.', "stb" ),
'desc_tip' => true,
),
'order_status' => array(
'title' => esc_html__( 'Order Status', "stb" ),
'type' => 'select',
'class' => 'wc-enhanced-select',
'description' => esc_html__( 'Choose whether status you wish after checkout.', "stb" ),
'default' => 'wc-on-hold',
'desc_tip' => true,
'options' => wc_get_order_statuses(),
),
'bkash_number' => array(
'title' => esc_html__( 'bKash Number', "stb" ),
'description' => esc_html__( 'Add a bKash mobile no which will be shown in checkout page', "stb" ),
'type' => 'text',
'desc_tip' => true,
),
'number_type' => array(
'title' => esc_html__( 'Agent/Personal', "stb" ),
'type' => 'select',
'class' => 'wc-enhanced-select',
'description' => esc_html__( 'Select bKash account type', "stb" ),
'options' => array(
'Agent' => esc_html__( 'Agent', "stb" ),
'Personal' => esc_html__( 'Personal', "stb" ),
),
'desc_tip' => true,
),
'bkash_charge' => array(
'title' => esc_html__( 'Enable bKash Charge', "stb" ),
'type' => 'checkbox',
'label' => esc_html__( 'Add 1.85% bKash "Send Money" charge to net price', "stb" ),
'description' => esc_html__( 'If a product price is 1000 then customer have to pay ( 1000 + 18.5 ) = 1018.5 Here 18.5 is bKash send money charge', "stb" ),
'default' => 'no',
'desc_tip' => true,
),
'instructions' => array(
'title' => esc_html__( 'Instructions', "stb" ),
'type' => 'textarea',
'description' => esc_html__( 'Instructions that will be added to the thank you page and emails.', "stb" ),
'default' => esc_html__( 'Thanks for purchasing through bKash. We will check and give you update as soon as possible.', "stb" ),
'desc_tip' => true,
),
'upload_file' => array(
'title' => esc_html__( 'Upload QR Code Image', "stb" ),
'type' => 'file',
'description' => esc_html__( 'Upload your bKash QR Code image here.', "stb" ),
),
'bkash_upload_file_url' => array(
'type' => 'hidden',
),
);
}
public function payment_fields() {
global $woocommerce;
$bkash_charge = ( $this->bkash_charge == 'yes' ) ? esc_html__( ' Also note that 1.85% bKash "SEND MONEY" cost will be added with net price. Total amount you need to send us at', 'stb' ) . ' ' . get_woocommerce_currency_symbol() . $woocommerce->cart->total : '';
echo wpautop( wptexturize( esc_html__( $this->description, 'stb' ) . $bkash_charge ) );
// Display bKash QR Code
$qr_code_url = $this->get_option( 'bkash_upload_file_url' );
if ( !empty( $qr_code_url ) ) {
echo '<img src="' . esc_url( $qr_code_url ) . '" class="bkash-qr-code-image" alt="bKash QR Code">';
}
// Display bKash Number
echo wpautop( wptexturize( "bKash " . $this->number_type . " Number : " . $this->bkash_number ) );
?>
<table border="0">
<tr>
<td><label for="bkash_number"><?php esc_html_e( 'bKash Number', 'stb' ); ?></label></td>
<td><input class="widefat" type="text" name="bkash_number" id="bkash_number" placeholder="017XXXXXXXX"></td>
</tr>
<tr>
<td><label for="bkash_transaction_id"><?php esc_html_e( 'bKash Transaction ID', 'stb' ); ?></label></td>
<td><input class="widefat" type="text" name="bkash_transaction_id" id="bkash_transaction_id"
placeholder="8N7A6D5EE7M"></td>
</tr>
</table>
<?php
}
public function process_payment( $order_id ) {
global $woocommerce;
$order = new WC_Order( $order_id );
$status = 'wc-' === substr( $this->order_status, 0, 3 ) ? substr( $this->order_status, 3 ) : $this->order_status;
// Mark as on-hold (we're awaiting the bKash)
$order->update_status( $status, esc_html__( 'Checkout with bKash payment. ', "stb" ) );
// Reduce stock levels
$order->reduce_order_stock();
// Remove cart
$woocommerce->cart->empty_cart();
// Return thankyou redirect
return array(
'result' => 'success',
'redirect' => $this->get_return_url( $order ),
);
}
public function softtech_bkash_thankyou_page() {
$order_id = get_query_var( 'order-received' );
$order = new WC_Order( $order_id );
if ( $order->get_payment_method() == $this->id ) {
$thankyou = $this->instructions;
return $thankyou;
} else {
return esc_html__( 'Thank you. Your order has been received.', "stb" );
}
}
public function softtech_bkash_email_instructions( $order, $sent_to_admin, $plain_text = false ) {
if ( $order->get_payment_method() != $this->id )
return;
if ( $this->instructions && !$sent_to_admin && $this->id === $order->get_payment_method() ) {
echo wpautop( wptexturize( $this->instructions ) ) . PHP_EOL;
}
}
}
}
/**
* Add settings page link in plugins
*/
add_filter( "plugin_action_links_" . plugin_basename( __FILE__ ), 'softtech_bkash_settings_link' );
function softtech_bkash_settings_link( $links ) {
$settings_links = array();
$settings_links[] = '<a href="https://www.facebook.com/softtechitinstitute/" target="_blank">' . esc_html__( 'Follow US', 'stb' ) . '</a>';
$settings_links[] = '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=softtech_bkash' ) . '">' . esc_html__( 'Settings', 'stb' ) . '</a>';
// add the links to the list of links already there
foreach ( $settings_links as $link ) {
array_unshift( $links, $link );
}
return $links;
}
/**
* If bKash charge is activated
*/
$bkash_charge = get_option( 'woocommerce_softtech_bkash_settings' );
if ( isset( $bkash_charge['bkash_charge'] ) ) {
if ( $bkash_charge['bkash_charge'] == 'yes' ) {
add_action( 'woocommerce_cart_calculate_fees', 'softtech_bkash_charge' );
function softtech_bkash_charge() {
global $woocommerce;
$available_gateways = $woocommerce->payment_gateways->get_available_payment_gateways();
$current_gateway = '';
if ( !empty( $available_gateways ) ) {
if ( isset( $woocommerce->session->chosen_payment_method ) && isset( $available_gateways[$woocommerce->session->chosen_payment_method] ) ) {
$current_gateway = $available_gateways[$woocommerce->session->chosen_payment_method];
}
}
if ( $current_gateway != '' ) {
$current_gateway_id = $current_gateway->id;
if ( is_admin() && !defined( 'DOING_AJAX' ) )
return;
if ( $current_gateway_id == 'softtech_bkash' ) {
$percentage = 0.0185;
$surcharge = round( $woocommerce->cart->cart_contents_total * $percentage );
$woocommerce->cart->add_fee( esc_html__( 'bKash Charge', 'stb' ), $surcharge, true, '' );
}
}
}
}
}
/**
* Empty field validation
*/
add_action( 'woocommerce_checkout_process', 'softtech_bkash_payment_process' );
function softtech_bkash_payment_process() {
if ( $_POST['payment_method'] != 'softtech_bkash' )
return;
$bkash_number = sanitize_text_field( $_POST['bkash_number'] );
$bkash_transaction_id = sanitize_text_field( $_POST['bkash_transaction_id'] );
$match_number = isset( $bkash_number ) ? $bkash_number : '';
$match_id = isset( $bkash_transaction_id ) ? $bkash_transaction_id : '';
$validate_number = preg_match( '/^01[1-9]\d{8}$/', $match_number );
$validate_id = preg_match( '/[a-zA-Z0-9]+/', $match_id );
if ( !isset( $bkash_number ) || empty( $bkash_number ) )
wc_add_notice( esc_html__( 'Please add your mobile number', 'stb' ), 'error' );
if ( !empty( $bkash_number ) && $validate_number == false )
wc_add_notice( esc_html__( 'Incorrect mobile number. It must be 11 digit, starts with 013 / 015 / 016 / 017 / 018 / 019', 'stb' ), 'error' );
if ( !isset( $bkash_transaction_id ) || empty( $bkash_transaction_id ) )
wc_add_notice( esc_html__( 'Please add your bKash transaction ID', 'stb' ), 'error' );
if ( !empty( $bkash_transaction_id ) && $validate_id == false )
wc_add_notice( esc_html__( 'Only number or letter is acceptable', 'stb' ), 'error' );
}
/**
* Update bKash field to database
*/
add_action( 'woocommerce_checkout_update_order_meta', 'softtech_bkash_additional_fields_update' );
function softtech_bkash_additional_fields_update( $order_id ) {
if ( $_POST['payment_method'] != 'softtech_bkash' )
return;
$bkash_number = sanitize_text_field( $_POST['bkash_number'] );
$bkash_transaction_id = sanitize_text_field( $_POST['bkash_transaction_id'] );
$number = isset( $bkash_number ) ? $bkash_number : '';
$transaction = isset( $bkash_transaction_id ) ? $bkash_transaction_id : '';
update_post_meta( $order_id, '_bkash_number', $number );
update_post_meta( $order_id, '_bkash_transaction', $transaction );
}
/**
* Admin order page bKash data output
*/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'softtech_bkash_admin_order_data' );
function softtech_bkash_admin_order_data( $order ) {
if ( $order->get_payment_method() != 'softtech_bkash' )
return;
// get order id
$order_id = $order->get_id();
// $number = ( get_post_meta( $_GET['post'], '_bkash_number', true ) ) ? get_post_meta( $_GET['post'], '_bkash_number', true ) : '';
$number = get_post_meta( $order_id, '_bkash_number', true ) ?? '';
// $transaction = ( get_post_meta( $_GET['post'], '_bkash_transaction', true ) ) ? get_post_meta( $_GET['post'], '_bkash_transaction', true ) : '';
$transaction = get_post_meta( $order_id, '_bkash_transaction', true ) ?? '';
?>
<div class="form-field form-field-wide">
<img src='<?php echo plugins_url( "images/bkash.png", __FILE__ ); ?>' alt="bKash">
<table class="wp-list-table widefat fixed striped posts">
<tbody>
<tr>
<th><strong><?php esc_html_e( 'bKash No.', 'stb' ); ?></strong></th>
<td>: <?php echo esc_attr( $number ); ?></td>
</tr>
<tr>
<th><strong><?php esc_html_e( 'Transaction ID', 'stb' ); ?></strong></th>
<td>: <?php echo esc_attr( $transaction ); ?></td>
</tr>
</tbody>
</table>
</div>
<?php
}
/**
* Order review page bKash data output
*/
add_action( 'woocommerce_order_details_after_customer_details', 'softtech_bkash_additional_info_order_review_fields' );
function softtech_bkash_additional_info_order_review_fields( $order ) {
if ( $order->get_payment_method() != 'softtech_bkash' )
return;
global $wp;
// Get the order ID
$order_id = absint( $wp->query_vars['order-received'] );
$number = ( get_post_meta( $order_id, '_bkash_number', true ) ) ? get_post_meta( $order_id, '_bkash_number', true ) : '';
$transaction = ( get_post_meta( $order_id, '_bkash_transaction', true ) ) ? get_post_meta( $order_id, '_bkash_transaction', true ) : '';
?>
<table>
<tr>
<th><?php esc_html_e( 'bKash No:', 'stb' ); ?></th>
<td><?php echo esc_attr( $number ); ?></td>
</tr>
<tr>
<th><?php esc_html_e( 'Transaction ID:', 'stb' ); ?></th>
<td><?php echo esc_attr( $transaction ); ?></td>
</tr>
</table>
<?php
}
/**
* Register new admin column
*/
add_filter( 'manage_edit-shop_order_columns', 'softtech_bkash_admin_new_column' );
function softtech_bkash_admin_new_column( $columns ) {
$new_columns = ( is_array( $columns ) ) ? $columns : array();
unset( $new_columns['order_actions'] );
$new_columns['mobile_no'] = esc_html__( 'bKash No.', 'stb' );
$new_columns['tran_id'] = esc_html__( 'Tran. ID', 'stb' );
$new_columns['order_actions'] = $columns['order_actions'];
return $new_columns;
}
/**
* Load data in new column
*/
add_action( 'manage_shop_order_posts_custom_column', 'softtech_bkash_admin_column_value', 2 );
function softtech_bkash_admin_column_value( $column ) {
global $post;
$mobile_no = ( get_post_meta( $post->ID, '_bkash_number', true ) ) ? get_post_meta( $post->ID, '_bkash_number', true ) : '';
$tran_id = ( get_post_meta( $post->ID, '_bkash_transaction', true ) ) ? get_post_meta( $post->ID, '_bkash_transaction', true ) : '';
if ( $column == 'mobile_no' ) {
echo esc_attr( $mobile_no );
}
if ( $column == 'tran_id' ) {
echo esc_attr( $tran_id );
}
}
} else {
/**
* Admin Notice
*/
add_action( 'admin_notices', 'softtech_bkash_admin_notice__error' );
function softtech_bkash_admin_notice__error() {
?>
<div class="notice notice-error">
<p><a href="http://wordpress.org/extend/plugins/woocommerce/"><?php esc_html_e( 'Woocommerce', 'stb' ); ?></a>
<?php esc_html_e( 'plugin needs to actived if you want to install this plugin.', 'stb' ); ?></p>
</div>
<?php
}
/**
* Deactivate Plugin
*/
add_action( 'admin_init', 'softtech_bkash_deactivate' );
function softtech_bkash_deactivate() {
deactivate_plugins( plugin_basename( __FILE__ ) );
unset( $_GET['activate'] );
}
}