Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 51 additions & 1 deletion blockonomics-woocommerce.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ function blockonomics_woocommerce_init()
add_action('woocommerce_email_customer_details', 'nolo_bnomics_woocommerce_email_customer_details', 10, 1);
add_filter('woocommerce_payment_gateways', 'woocommerce_add_blockonomics_gateway');
add_action('wp_enqueue_scripts', 'bnomics_enqueue_stylesheets' );
add_action('wp_enqueue_scripts', 'bnomics_enqueue_scripts' );
add_action( 'init', 'bnomics_register_bitcoin_order_post_type' );

/**
* Add this Gateway to WooCommerce
Expand Down Expand Up @@ -351,7 +353,7 @@ function bnomics_enqueue_scripts(){
wp_enqueue_script( 'angular-resource', plugins_url('js/angular-resource.min.js', __FILE__) );
wp_enqueue_script( 'app', plugins_url('js/app.js', __FILE__) );
wp_localize_script( 'app', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'wc_url' => WC()->api_request_url('WC_Gateway_Blockonomics') ) );
wp_enqueue_script( 'angular-qrcode', plugins_url('js/angular-qrcode.js', __FILE__) );
wp_enqueue_script( 'vendors', plugins_url('js/vendors.min.js', __FILE__) );
wp_enqueue_script( 'reconnecting-websocket', plugins_url('js/reconnecting-websocket.min.js', __FILE__) );
Expand Down Expand Up @@ -400,6 +402,54 @@ function bnomics_email_woocommerce_style($email, $subject, $heading, $message) {
// Send the email using woocommerce mailer send
$mailer->send( $email, $subject, $html_message, array('Content-Type: text/html; charset=UTF-8') );
}

// Create custom post type page from order details
function bnomics_register_bitcoin_order_post_type($order) {
$labels = array(
'name' => _x( 'Bitcoin Orders', 'post type general name' ),
'singular_name' => _x( 'Bitcoin Order', 'post type singular name' ),
);
$args = array(
'labels' => $labels,
'description' => 'Blockonomics order pages',
'public' => true,
);
register_post_type( 'bitcoin_orders', $args );
$show_page = get_page_by_title( 'Show', OBJECT, 'bitcoin_orders' );
$track_page = get_page_by_title( 'Track', OBJECT, 'bitcoin_orders' );
if ( ! $show_page || ! $track_page ) {
bnomics_create_pages();
flush_rewrite_rules();
}
}

function bnomics_create_pages() {
$template_url = plugins_url('templates/order.htm', __FILE__);
$post_content = '<div ng-app="shopping-cart-demo"><div ng-controller="CheckoutController">';
$post_content .= '<div ng-include="\''.wp_make_link_relative($template_url).'\'"></div>';
$post_content .= '</div></div>';
$checkout_page = array(
'post_title' => wp_strip_all_tags( 'Show' ),
'post_content' => $post_content,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'bitcoin_orders',
);
wp_insert_post( $checkout_page );

$template_url = plugins_url('templates/track.htm', __FILE__);
$post_content = '<div ng-app="shopping-cart-demo"><div ng-controller="AltcoinController">';
$post_content .= '<div ng-include="\''.wp_make_link_relative($template_url).'\'"></div>';
$post_content .= '</div></div>';
$altcoin_page = array(
'post_title' => wp_strip_all_tags( 'Track' ),
'post_content' => $post_content,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'bitcoin_orders',
);
wp_insert_post( $altcoin_page );
}
}

// After all plugins have been loaded, initialize our payment gateway plugin
Expand Down
1 change: 0 additions & 1 deletion css/order.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
}

.bnomics-order-container {
margin: 12vh auto;
padding: 10px;
max-width: 700px;
}
Expand Down
22 changes: 13 additions & 9 deletions js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ service.factory('Order', function($resource) {
};
else
param = {};
var item = $resource(window.location.pathname, param);
var item = $resource(ajax_object.wc_url, param);
return item;
});

Expand Down Expand Up @@ -57,9 +57,13 @@ service.factory('WpAjax', function($resource) {
app = angular.module("shopping-cart-demo", ["monospaced.qrcode", "shoppingcart.services"]);


app.config(function($compileProvider) {
app.config(function($compileProvider,$sceDelegateProvider) {
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|data|chrome-extension|bitcoin|ethereum|litecoin):/);
// Angular before v1.2 uses $compileProvider.urlSanitizationWhitelist(...)
$sceDelegateProvider.resourceUrlWhitelist([
// Allow same origin resource loads.
'self'
]);
});

function getParameterByNameBlocko(name, url) {
Expand All @@ -77,11 +81,11 @@ function getParameterByNameBlocko(name, url) {
//CheckoutController
app.controller('CheckoutController', function($scope, $interval, Order, $httpParamSerializer, $timeout) {
//get order id from url
$scope.address = getParameterByNameBlocko("show_order");
$scope.address = getParameterByNameBlocko("order");
var totalProgress = 100;
$scope.copyshow = false;
//blockonomics_time_period is defined on JS file as global var
var totalTime = blockonomics_time_period * 60;
var totalTime = 10 * 60;

//Create url when the order is received
$scope.finish_order_url = function() {
Expand All @@ -93,7 +97,7 @@ app.controller('CheckoutController', function($scope, $interval, Order, $httpPar
else
params = {};
params.finish_order = $scope.address;
url = window.location.pathname;
url = ajax_object.wc_url;
var serializedParams = $httpParamSerializer(params);
if (serializedParams.length > 0) {
url += ((url.indexOf('?') === -1) ? '?' : '&') + serializedParams;
Expand All @@ -115,7 +119,7 @@ app.controller('CheckoutController', function($scope, $interval, Order, $httpPar
params.amount = amount;
params.address = address;
params.order_id = order_id;
url = window.location.pathname;
url = ajax_object.wc_url;
var serializedParams = $httpParamSerializer(params);
if (serializedParams.length > 0) {
url += ((url.indexOf('?') === -1) ? '?' : '&') + serializedParams;
Expand All @@ -136,13 +140,13 @@ app.controller('CheckoutController', function($scope, $interval, Order, $httpPar
};

//Pay with altcoin button clicked
$scope.pay_altcoins = function() {
$scope.pay_altcoins = function(data) {
$interval.cancel($scope.alt_tick_interval);
$scope.order.altaddress = '';
$scope.order.altamount = '';
$scope.altcoin_waiting = true;
$scope.alt_clock = 600;
var altcoin = getAltKeyByValue($scope.altcoins, $scope.altcoinselect);
var altcoin = getAltKeyByValue($scope.altcoins, data);
$scope.order.altsymbol = getAltKeyByValue($scope.altcoins, $scope.altcoinselect);
var amount = $scope.order.satoshi / 1.0e8;
var address = $scope.order.address;
Expand Down Expand Up @@ -237,7 +241,7 @@ app.controller('AltcoinController', function($scope, $interval, Order, AltcoinNe
else
params = {};
params.uuid = uuid;
url = window.location.pathname;
url = ajax_object.wc_url;
var serializedParams = $httpParamSerializer(params);
if (serializedParams.length > 0) {
url += ((url.indexOf('?') === -1) ? '?' : '&') + serializedParams;
Expand Down
19 changes: 11 additions & 8 deletions php/WC_Gateway_Blockonomics.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -154,15 +154,18 @@ public function check_blockonomics_callback()
$address = isset($_REQUEST["show_order"]) ? $_REQUEST["show_order"] : "";
$uuid = isset($_REQUEST["uuid"]) ? $_REQUEST["uuid"] : "";
if ($address) {
$dir = plugin_dir_path(__FILE__);
add_action('wp_enqueue_scripts', 'bnomics_enqueue_scripts' );
include $dir."../templates/order.php";
exit();
$post = get_page_by_path( 'show', OBJECT, 'bitcoin_orders' );
wp_redirect( get_post_permalink($post->ID). "?order=".$address );
exit;
}else if ($uuid){
$dir = plugin_dir_path(__FILE__);
add_action('wp_enqueue_scripts', 'bnomics_enqueue_scripts' );
include $dir."../templates/track.php";
exit();
$amount = isset($_REQUEST["amount"]) ? $_REQUEST["amount"] : "";
$post = get_page_by_path( 'track', OBJECT, 'bitcoin_orders' );
if ($amount){
wp_redirect( get_post_permalink($post->ID). "?uuid=".$uuid. "&amount=".$amount. "&altcoin=".$_REQUEST["altcoin"]. "&address=".$_REQUEST["address"]. "&order_id=".$_REQUEST["order_id"] );
}else{
wp_redirect( get_post_permalink($post->ID). "?uuid=".$uuid );
}
exit;
}
$address = isset($_REQUEST["finish_order"]) ? $_REQUEST["finish_order"] : "";
if ($address) {
Expand Down
98 changes: 98 additions & 0 deletions templates/order.htm
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<div class="bnomics-order-container">
<!-- Heading row -->
<div class="bnomics-order-heading">
<div class="bnomics-order-heading-wrapper">
<div class="bnomics-payment-option" ng-hide="order.status == -3">
<span class="bnomics-paywith-label" ng-cloak>Pay with</span>
<span>
<span class="bnomics-paywith-option bnomics-paywith-btc" ng-class={'bnomics-paywith-selected':show_altcoin=='0'} ng-click="show_altcoin=0">BTC</span><span class="bnomics-paywith-option bnomics-paywith-altcoin" ng-class={'bnomics-paywith-selected':show_altcoin=='1'} ng-click="show_altcoin=1">Altcoins</span>
</span>
</div><br>
<div class="bnomics-order-id">
<span class="bnomics-order-number" ng-cloak>Order #{{order.order_id}}</span>
</div>
</div>
</div>
<!-- Amount row -->
<div class="bnomics-order-panel">
<div class="bnomics-order-info">

<div class="bnomics-bitcoin-pane" ng-hide="show_altcoin != 0" ng-init="show_altcoin=0">
<div class="bnomics-btc-info">
<!-- QR and Amount -->
<div class="bnomics-qr-code" ng-hide="order.status == -3">
<div class="bnomics-qr">
<a href="bitcoin:{{order.address}}?amount={{order.satoshi/1.0e8}}">
<qrcode data="bitcoin:{{order.address}}?amount={{order.satoshi/1.0e8}}" size="160" version="6">
<canvas class="qrcode"></canvas>
</qrcode>
</a>
</div>
<div class="bnomics-qr-code-hint">Click on the QR code to open in the wallet</div>
</div>
<!-- BTC Amount -->
<div class="bnomics-amount">
<div class="bnomics-bg">
<!-- Order Status -->
<div class="bnomics-order-status-wrapper">
<span class="bnomics-order-status-title" ng-show="order.status == -1" ng-cloak >To confirm your order, please send the exact amount of <strong>BTC</strong> to the given address</span>
<span class="warning bnomics-status-warning" ng-show="order.status == -3" ng-cloak>Payment Expired (Use the browser back button and try again)</span>
<span class="warning bnomics-status-warning" ng-show="order.status == -2" ng-cloak>Payment Error</span>
</div>
<h4 class="bnomics-amount-title" for="invoice-amount" ng-hide="order.status == -3">
{{order.satoshi/1.0e8}} BTC
</h4>
<div class="bnomics-amount-wrapper" ng-hide="order.status == -3">
<hr class="bnomics-amount-seperator"> ≈
<span ng-cloak>{{order.value}}</span>
<small ng-cloak>{{order.currency}}</small>
</div>
<!-- Bitcoin Address -->
<div class="bnomics-address" ng-hide="order.status == -3">
<input ng-click="btc_address_click()" id="bnomics-address-input" class="bnomics-address-input" type="text" ng-value="order.address" readonly="readonly">
<i ng-click="btc_address_click()" class="material-icons bnomics-copy-icon">file_copy</i>
</div>
<div class="bnomics-copy-text" ng-hide="order.status == -3 || copyshow == false" ng-cloak>Copied to clipboard</div>
<!-- Countdown Timer -->
<div ng-cloak ng-hide="order.status != -1" class="bnomics-progress-bar-wrapper">
<div class="bnomics-progress-bar-container">
<div class="bnomics-progress-bar" style="width: {{progress}}%;"></div>
</div>
</div>
<span class="ng-cloak bnomics-time-left" ng-hide="order.status != -1">{{clock*1000 | date:'mm:ss' : 'UTC'}} min left to pay your order</span>
</div>
<!-- Blockonomics Credit -->
<div class="bnomics-powered-by">
Powered by Blockonomics
</div>
</div>
</div>
</div>

<div class="bnomics-altcoin-pane" ng-style="{'border-left': (altcoin_waiting)?'none':''}" ng-hide="show_altcoin != 1">
<div class="bnomics-altcoin-bg">
<div class="bnomics-altcoin-bg-color" ng-hide="altcoin_waiting" ng-cloak>
<div class="bnomics-altcoin-info-wrapper">
<span class="bnomics-altcoin-info" >Select your preferred <strong>Altcoin</strong> then click on the button below.</span>
</div>
</br>
<!-- Coin Select -->
<div class="bnomics-address">
<select ng-model="altcoinselect" ng-options="x for (x, y) in altcoins" ng-init="altcoinselect='Ethereum'"></select>
</div>
<div class="bnomics-altcoin-button-wrapper">
<a ng-click="pay_altcoins(altcoinselect)" href=""><button><i class="cf" ng-hide="altcoinselect!='Ethereum'" ng-class={'cf-eth':'{{altcoinselect}}'!=''} ></i><i class="cf" ng-hide="altcoinselect!='Litecoin'" ng-class={'cf-ltc':'{{altcoinselect}}'!=''} ></i>Pay with {{altcoinselect}}</button></a>
</div>
</div>
</div>
</div>

</div>
</div>
</div>
<script>
var blockonomics_time_period=10;
</script>
<script>
var get_uuid="";
</script>
Loading