/*
* Plugin Name: PayXay - Payment gateway for Woocommerce
* Plugin URI: https://www.payxaf.com/plug-in/pauxaf-payment-gateway/
* Description: This plugin uses PayXaf API for mobile money payment systems.
* Author: Payxaf
* Author URI: https://www.payxaf.com/
* Version: 0.0.1
* License URL: http://www.gnu.org/licenses/gpl-2.0.txt
*/
/*
* This action hook registers our PHP class as a WooCommerce payment gateway
*/
/**
* Try to prevent direct access data leaks
*/
if (!defined('ABSPATH')) exit;
/**
* Check if WooCommerce is present and active
**/
if (!in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) return;
/**
* Add Payxaf to WooCommerce available gateways
* @param array $gateways all available WooCommerce gateways
* @return array $gateways all WooCommerce gateways + Payxaf gateway
*/
function payxaf_add_to_woocommerce(array $gateways): array
{
$gateways[] = 'Payxaf_Woocommerce_Gateway';
return $gateways;
}
add_filter('woocommerce_payment_gateways', 'payxaf_add_to_woocommerce');
/**
* Called when the plugin loads
*/
function payxaf_gateway_init()
{
class Payxaf_Woocommerce_Gateway extends WC_Payment_Gateway
{
const ID = 'pay_xaf';
const API_URL = 'https://www.payxaf.com/';
const SERVER_IP = '15.236.140.89';
const CURRENCIES = ['XAF', 'EUR'];
const SUPPORTED_CURRENCIES = ['XAF' => 1, 'XOF' => 1, 'EUR' => 650, 'USD' => 550];
/**
* @var string
*/
private $public_key;
/**
* @var string
*/
private $secret_key;
/**
* @var string
*/
private $success_url;
/**
* @var bool
*/
private $autocomplete_orders;
/**
* Constructor for the gateway.
*/
public function __construct()
{
// The global ID for this Payment method
$this->id = self::ID;
// This basically defines your settings which are then loaded with init_settings()
$this->init_form_fields();
// After init_settings() is called, you can get the settings and load them into variables
$this->init_settings();
// Boolean. Can be set to true if you want payment fields to show on the checkout
$this->has_fields = false;
// Image to be displayed to the user
$image_url = $this->get_image_url();
// check if Payxaf icon image exists or not
if (@getimagesize($image_url)) {
//Show an image on the frontend
$this->icon = $image_url;
}
// Payment method name for order details and emails
$this->title = "Payxaf";
// Payment method name for admin pages
$this->method_title = "Payxaf - Payment Gateway for WooCommerce";
// The description for this Payment Gateway, shown on the actual Payment options page on the backend
$this->method_description = __(
"Secured payments made simple - designed exclusively for WooCommerce stores. Accept mtn mobile money, Orange money, credit cards, debit cards, and other popular payment methods. allows customers to conveniently checkout using our secure payment gateway",
self::ID
);
// Define user set variables
$this->order_button_text = $this->get_option('order_button_text');
$this->description = $this->get_option('description');
$this->public_key = $this->get_option('public_key');
$this->secret_key = $this->get_option('secret_key');
$this->success_url = $this->get_option('success_url');
$this->autocomplete_orders = $this->get_option('autocomplete_orders') === 'yes';
// Used to perform plugin information updated by the admin
add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']);
}
/**
* Generates a callback url only once
*/
private function generate_success_url()
{
if (!$this->get_option('success_url')) {
$this->update_option(
'success_url',
get_home_url() . '/wp-json/callback/' . md5(uniqid() . mt_rand())
);
}
}
/**
* Image to be displayed to the user
*/
private function get_test_mode(): string
{
$test_mode = $this->get_option('test_mode');
$url = '';
if ($test_mode === 'sand_box')
$url = 'https://app.payxaf.com/sandbox/payment/initiate';
else if ($test_mode === 'live')
$url = 'https://app.payxaf.com/payment/initiate';
return $url;
}
/**
* Image to be displayed to the user
*/
private function get_checkout_theme(): string
{
$checkout_theme = $this->get_option('dark');
$theme = '';
if ($checkout_theme === 'dark')
$theme = 'dark';
else if ($checkout_theme === 'light')
$theme = 'light';
return $theme;
}
/**
* Image to be displayed to the user
*/
private function get_image_url(): string
{
$payment_methods = $this->get_option('payment_methods');
$image = 'payxaf_operators.png';
if ($payment_methods === 'mobile')
$image = 'payxaf_momo_om.png';
else if ($payment_methods === 'credit_card')
$image = 'payxaf_visa_master.png';
return WP_PLUGIN_URL . '/' . plugin_basename(dirname(__FILE__)) . '/images/' . $image;
}
/**
* Initializes gateway settings form
*/
public function init_form_fields()
{
// Generate a callback url
$this->generate_success_url();
$this->form_fields = apply_filters(
'payxaf_form_fields',
[
'enabled' => [
'title' => __('Enable/Disable', self::ID),
'type' => 'checkbox',
'label' => __('Enable Payxaf', self::ID),
'description' => __('Check to enable this plugin', self::ID),
'default' => 'yes',
'desc_tip' => true,
],
'test_mode' => [
'title' => __('Enabled live or test environment', self::ID),
'type' => 'select',
'description' => __('Use this payment gateway in test/sandbox mode, when testing the plugin. The tesing credentials are: Test Mode eMail: test_mode@mail.com Test Mode Verification Code: 222666', self::ID),
'default' => "sandbox",
'options' => [
"sand_box" => __("Sandbox", self::ID),
"live" => __("Live", self::ID),
],
'desc_tip' => true,
],
'checkout_theme' => [
'title' => __('Select the the theme on the checkout of your shop.', self::ID),
'type' => 'select',
'description' => __('Choose either a dark or light theme for the checkout form.', self::ID),
'default' => "sandbox",
'options' => [
"sand_box" => __("Sandbox", self::ID),
"live" => __("Live", self::ID),
],
'desc_tip' => true,
],
'success_url' => [
'title' => __('Callback URL', self::ID),
'type' => 'hidden',
'description' => __('Copy the URL below and paste it in settings of your application in Payxaf
' . $this->get_option('success_url') . '
', self::ID),
],
'description' => [
'title' => __('Description', self::ID),
'type' => 'textarea',
'description' => __('Payment method description, visible by customers on your checkout page', self::ID),
'default' => __('Pay safely using Orange Money, MTN Mobile Money, VISA, MasterCard or Payxaf Wallet', self::ID),
'desc_tip' => true,
],
'public_key' => [
'title' => __('Public key', self::ID),
'type' => 'text',
'description' => __('Copy and paste the public key from your mechant account on Payxaf', self::ID),
'default' => '',
'desc_tip' => true,
],
'secret_key' => [
'title' => __('Secret key', self::ID),
'type' => 'text',
'description' => __('Copy and paste the secret key from your mechant account on Payxaf', self::ID),
'default' => '',
'desc_tip' => true,
],
'payment_methods' => [
'title' => __('Enabled payment methods', self::ID),
'type' => 'select',
'description' => __('This will change operators logos displayed on your checkout page', self::ID),
'default' => "all",
'options' => [
"all" => __("All", self::ID),
"mobile" => "Mobile Money (OM + MoMo)",
"credit_card" => __("Credit Card (VISA + MasterCard)", self::ID),
],
'desc_tip' => true,
],
'order_button_text' => [
'title' => __('Payment button text', self::ID),
'type' => 'text',
'description' => __('Text of the payment button on which customers click to make the payment', self::ID),
'default' => __('Pay with Payxaf', self::ID),
'desc_tip' => true,
],
'currency' => [
'title' => __('Payxaf currency', self::ID),
'type' => 'select',
'description' => __('This is the currency that your customers will see on payment page. If you choose Euro, only card payment will be available on payment page', self::ID),
'default' => "default",
'options' => [
"default" => __("Same as on WooCommerce", self::ID),
"XAF" => "CFA Franc (FCFA)",
"EUR" => __("Euro (€)", self::ID),
"USD" => __("Dollar ($)", self::ID),
],
'desc_tip' => true,
],
'autocomplete_orders' => array(
'title' => __('Autocomplete orders', self::ID),
'label' => __('Autocomplete orders on payment success', self::ID),
'type' => 'checkbox',
'description' => __('If enabled, orders statuses will go directly to complete after successful payment', self::ID),
'default' => 'no',
'desc_tip' => true,
),
]);
}
public function get_public_key(): string
{
return $this->public_key;
}
public function get_secret_key(): string
{
return $this->secret_key;
}
public function get_success_url(): string
{
return $this->success_url;
}
public function get_autocomplete_orders(): bool
{
return $this->autocomplete_orders;
}
/**
* Get order amount and currency for Payxaf
* @throws Exception
*/
private function get_order_amount_currency(WC_Order $order): array
{
$woocommerce_currency = get_woocommerce_currency();
// Throws an exception when currency is not defined in PAYXAF_CURRENCIES
if (!isset(self::SUPPORTED_CURRENCIES[$woocommerce_currency]))
throw new Exception("Currency '$woocommerce_currency' is not currently supported. Please, try using one of the following: " . implode(', ', array_keys(self::SUPPORTED_CURRENCIES)));
$currency = $this->get_option('currency');
if (!in_array($currency, self::CURRENCIES))
$currency = $woocommerce_currency;
$amount = $order->get_total();
if ($currency !== $woocommerce_currency)
$amount *= self::SUPPORTED_CURRENCIES[$woocommerce_currency] / self::SUPPORTED_CURRENCIES[$currency];
return compact('amount', 'currency');
}
/**
* Checks if billing country is CM and billing phone is a valid Mobile Money phone
*/
private function is_order_from_cameroon(WC_Order $order): bool
{
return $order->get_billing_country() === 'CM'
&& preg_match(
'/^((\+|00)?237)?6[5789][0-9]{7}$/',
preg_replace('/[^0-9]/', '', $order->get_billing_phone()) // Ignore non numeric
);
}
/**
* Returns user's locale
*/
private function get_locale(): string
{
return strpos('fr_FR', get_locale()) != false ? 'fr' : 'en';
}
/**
* This function handles the processing of the order, telling WooCommerce
* what status the order should have and where customers go after it’s used.
*/
public function process_payment($order_id)
{
global $woocommerce;
$order = new WC_Order( $order_id );
// Mark as on-hold (we're awaiting the cheque)
$order->update_status('on-hold', __( 'Awaiting cheque payment', 'woocommerce' ));
//$order = wc_get_order($order_id);
/* try {
$order_desc = implode(
', ',
array_map(
function (WC_Order_Item $item) {
return $item->get_name();
},
$order->get_items()
)
); */
$amount_currency = $this->get_order_amount_currency($order);
$body = [
"transaction_amount" => $amount_currency['amount'],
"transaction_currency" => $amount_currency['currency'],
"transaction_reason" => substr($order_desc, 0, 255), // Get first 255 chars
"app_transaction_ref" => $order->get_order_key(),
"customer_name" => $order->get_formatted_billing_full_name(),
"customer_email" => $order->get_billing_email(),
"customer_lang" => $this->get_locale()
];
if ($this->is_order_from_cameroon($order))
$body['customer_phone_number'] = preg_replace('/[^0-9]/', '', $order->get_billing_phone()); // Ignore non numeric
$mode = get_test_mode(); //<------------ Change to TEST for test server, PROD for production-->
/* $parameters = [
'identifier' => $identifier,
'currency' => $currency,
'amount' => $amount,
'details' => $details,
'ipn_url' => $ipn_url,
'cancel_url' => $cancel_url,
'success_url' => $success_url,
'payxaf_public_key' => $payxaf_public_key,
'site_logo' => $site_logo,
'checkout_theme' => $checkout_theme,
'customer_name' => $customer_name,
'customer_email' => $customer_email,
];
*/
$url = get_test_mode();
// Get payment link from Payxaf
$result = wp_remote_post($url, array(
/* str_replace('{public_key}', $this->public_key, self::API_URL),
["body" => $body, "sslverify" => false] */ //byme
// Passing variables from form page
$identifier = uniqid(),
$payxaf_public_key = "get_public_key()",
$site_logo= "https://app.payxaf.com/assets/images/logoIcon/logo.png",
$checkout_theme = "get_checkout_theme()",
$currency = $this->get_option('currency'),
$amount = $this->get_option('amount'),
$details = "testing",
$ipn_url = "www.one.com",
$cancel_url = "www.two.com",
$success_url = "www.three.com",
$customer_name = $order->get_formatted_billing_full_name(),
$customer_email = $order->get_billing_email(),
));
if(!is_wp_error($result))
{
$response_body = wp_remote_retrieve_body($result);
$resp_array = json_decode($response_body);
if(isset($resp_array->status))
return $resp_array->status;
if(!isset($resp_array->status) && isset($resp_array->message))
return; //wc_add_notice( $resp_array->message, 'error' ); by me
}
else
wc_add_notice( 'Failed to initiate transaction please try again later', 'error' );
}
/*
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch); */
//$result contains the response back.
//echo $result;
/*$_SESSION['result'] = $result;
$data = json_decode($result, false);
$success = $data->success;
$_SESSION['success'] = $success;
$_SESSION['details'] = $details;
$_SESSION['identifier'] = $identifier;
$_SESSION['currency'] = $currency;
$_SESSION['amount'] = $amount; */
//echo $success;
//echo $details;
// $data = json_decode( $resul, false);
// $success = $data->success;
// header("Location: $data->url");
// echo $result;
// Get raw response
/// $raw_response = wp_remote_retrieve_body($result);
// Parse response
/* $response = json_decode($raw_response, true);
if (!(isset($response["success"]) && $response["success"] === "ok")) {
throw new Exception($response["message"] ?? "An error has occurred. Please try again later");
} else { /*
$order->set_transaction_id($response['message']);
$order->add_order_note('Payxaf payment initiated with reference: ' . $response['message']);
// Clear cart
WC()->cart->empty_cart();
return [
'result' => 'success',
'redirect' => $response['payment_url']
]; */
} /* catch (Exception $ex) {
$order->add_order_note("Payxaf payment init failed with message: " . $ex->getMessage());
wc_add_notice(__('Payment error : ', 'woothemes') . $ex->getMessage(), 'error');
if (isset($result)) {
payxaf_log_data('Request <-----');
payxaf_log_data($result);
}
if (isset($raw_response)) {
payxaf_log_data('Raw response <-----');
payxaf_log_data($raw_response);
}
if (isset($response)) {
payxaf_log_data('Response <-----');
payxaf_log_data($response);
}
return;
} */
}
// }
/* ============================================ INCLUDE OTHER FILE =========================================== */
// including the callback
include 'include/payxaf_callback.php';
// including the order_key in wc admin order list
include 'include/payxaf_hooks.php';
/*=========================================================================================================== */
//}
add_action('plugins_loaded', 'payxaf_gateway_init', 0);
Becoming a Total Quality Negotiator – OCASET – Online Centre for Art Sciences Engineering and Technology
The book spells out the tactics, strategies and techniques that permit all categories of per- sons (individuals, businesspersons, politicians, administrative officials, diplomats, economic operators and institutions) to obtain satisfaction in any negotiation with any- body, anywhere, at any time, on any issue, in any circumstances.
By the Same Author
Nkobena, Boniface Fontem. Sacerdotal Politics and Systems Stability: the Paul Biya Paradigm. Yaoundé: Presses Universitaires de Yaoundé, 2008 (held in 16 WorldCat member libraries worldwide (see http://www.worldcat.org/ identities/lccn-n91-4276/).
Nkobena, Boniface Fontem. Sacerdoce politique et stabilité des systèmes : le paradigme Paul Biya. Presses Universitaires de Yaoundé (co-published with NENA, Dakar, Senegal, 2016).
[Also available on Amazon (www.amazon.fr) and Fnac, France (https://www.fnac.com/ia4466049/Dr-Nkobena-Boniface-Fontem). Also held by several WorldCat member libraries worldwide – see http:// www.worldcat.org/
identities/lccn-n91-4276/].
Nkobena, Boniface Fontem. The African Food Security Problem: Its trade dimensions and implications for economic growth. UNCTAD publication No TD/B/C.I, 1984.;
Nkobena, Boniface. The Agenda of UNCTAD VI: Towards Long-term Solutions? In Development Education Forum, No 7, 1983.
Nkobena, Boniface Fontem. The African Group in the UN System and Negotiations for a New International Economic Order: A Theory and Practice of Africa’s Involvement in Multilateral Diplomacy. Geneva: IUHEI, 1984 (Library of Congress Access No
25947010).
Nkobena, Boniface Fontem. Statement at the UN 40th Session (1985), 2nd Committee (Economic Affairs). Library of Congress Doc. No A/C.2/40/SR.17.
Nkobena, Boniface Fontem. ‘La circulation illicite des armes légères en Afrique Centrale: traçabilité et solutions’, Paper presented at the International Seminar on the Prevention and Management of Conflict in the Economic Community of Central African States (CEMAC). Yaounde: International Relations Institute of Cameroon, 14 May 2008.
******
Forthcoming
Nkobena, Boniface Fontem. International Negotiation and the African Factor
In preparation
Volumes around the themes:
Watching out for mutual false steps in negotiation.
The book spells out the tactics, strategies and techniques that permit all categories of per- sons (individuals, businesspersons, politicians, administrative officials, diplomats, economic operators and institutions) to obtain satisfaction in any negotiation with any- body, anywhere, at any time, on any issue, in any circumstances.
1 review for Becoming a Total Quality Negotiator
admin
(verified owner)
July 28, 2022
PREFACE
I am pleased to write this Preface to set the stage for Boniface Nkobena’s exhaustive treatment on Becoming a Total Quality Negotiator. Negotiation is as old as the encounter between Abraham and the Lord over the fate of Sodom (Exodus 14) who showed that principles come first, then details. But the study of negotiations began with the little book of advice that Francois de Callières wrote for the young King Louis XIV de la manière de négocier avec les souverains (1716). It was accompanied—and indeed sometimes vigorously rivaled—by what modern commentator Alain Pékar Lempereur (2002) calls “une boulimie” of works of counsel on how to act as a negotiator, what can perhaps more poetically called books of proverbs presenting the lines of proper conduct for successful diplomats trying to best other successful diplomats in the great game of diplomacy. Les Négociations ou l’art de négocier was brought into Fortune Barthélémy de Felice’s Dictionnaire de la justice naturelle et civille de l’Humanité (1778) to show that negotiation is found in business, diplomacy, and everyday life and that it can be learned. They are among the value goals pursued consistently in Nkobena’s work.
That stream of study has continued to present day, including Jimmy Carter’s memorial to Negotiation as The Alternative to Hostility (1984) and leading to but certainly not concluding with the popular guideline for getting to Yes by Roger Fisher and William Ury (1981). No work on the nature of negotiators can ignore the path cleared by four centuries—almost to the year of wisdom.
But a different approach also developed in recent times as a study of negotiation as a process. It began with the works of economists, launched by Frances Edgeworth as Mathematical Physics (1881) and by Frederik Zeuthen as Problems of Monopoly and Economic Warfare (1930) but their models of concession rates were too schematic. The study of process was then revived by game theoretic and diplomatic commentators as Nobel prize winner Thomas Schelling (1960) and Fred Iklé’s (1964) examination of How Nations Negotiate. The psychology of the actor and the process were combined in an insightful synthesis by Jeffry Rubin and Bert Brown (1975) in The Social Psychology of Bargaining and Negotiation, by Dean Pruitt’s Negotiation.
Behavior (1981), and on the same wave, in social and political science by I. William Zartman as The Practical Negotiator (1982). Meanwhile, mainstream political science, as James Fearon explained in 1995, essentially relegated negotiation to the problem of why obvious rational outcomes are not achieved.
The wave of analysis and scholarship continues with the focus on negotiation as a process, as a dynamic encounter. It has also moved beyond the limited scope of negotiation as an interpersonal exchange to persuade. My own work has been concerned with the dynamics and evolving structure of that process, including development of the diagnosis, formula, and detail phases in negotiation (1982), and the identification and analysis of the negotiation modes of concession, ompensation, and construction (2008). But I have also been intrigued by the conditions for opening negotiation, seen in the concept of ripeness, including the mutually hurting stalemate and the way out (1989), and for closure, going back to identifiable types of negotiators’ behavior—dueling, driving, dragging, and mixed and mismatched (2015).
On this background, Boniface Nkobena’s wide-ranging work goes back to the basics, focusing broadly on the promise and pitfalls of negotiator’s behavior for the diminution of conflict and the improvement of agreements so that individuals and states (and whatever is between) can pursue their goals and live together more peacefully and productively. The book is of a nature to carry one more step forward in the permanent quest to improve the bargaining acumen of practicing and preparing effective negotiators in various fields of life. For this it is necessary to go back through the four centuries of evolving analysis to take into account not only where our knowledge and
understanding came from but also where it is now.
William I. Zartman
Distinguished Professor Emeritus of International Organization and Conflict Resolution at the Advanced School of International Studies of the Johns Hopkins University, Washington; member of the Steering Committee of the Process of International Negotiation Program (PIN) at the German Institute of Global and Area Studies (GIGA), Hamburg; member of the International Advisor Board for the Mediation Initiative of the UN Department of Political Affairs; former Director of African studies and conflict management programs at SAIS; former professor at the University of South Carolina, University of New York, and American University in Cairo; consultant for the State Department (US); taught in the Paris institute of Political Science; gave lectures in many African University Institutions (Algeria, Cameroon, Egypt, Ghana, Somali); author and Director of numerous publications (see bibliography).
An Introduction to Computer Networks is a free and open general-purpose computer-networking textbook, complete with diagrams and exercises. It covers the LAN, internetworking and transport layers, focusing primarily on…
Making a training video can become a labyrinth if you do not have the appropriate know-how. This eBook will help you understand the entire process and…
admin
(verified owner)PREFACE
I am pleased to write this Preface to set the stage for Boniface Nkobena’s exhaustive treatment on Becoming a Total Quality Negotiator. Negotiation is as old as the encounter between Abraham and the Lord over the fate of Sodom (Exodus 14) who showed that principles come first, then details. But the study of negotiations began with the little book of advice that Francois de Callières wrote for the young King Louis XIV de la manière de négocier avec les souverains (1716). It was accompanied—and indeed sometimes vigorously rivaled—by what modern commentator Alain Pékar Lempereur (2002) calls “une boulimie” of works of counsel on how to act as a negotiator, what can perhaps more poetically called books of proverbs presenting the lines of proper conduct for successful diplomats trying to best other successful diplomats in the great game of diplomacy. Les Négociations ou l’art de négocier was brought into Fortune Barthélémy de Felice’s Dictionnaire de la justice naturelle et civille de l’Humanité (1778) to show that negotiation is found in business, diplomacy, and everyday life and that it can be learned. They are among the value goals pursued consistently in Nkobena’s work.
That stream of study has continued to present day, including Jimmy Carter’s memorial to Negotiation as The Alternative to Hostility (1984) and leading to but certainly not concluding with the popular guideline for getting to Yes by Roger Fisher and William Ury (1981). No work on the nature of negotiators can ignore the path cleared by four centuries—almost to the year of wisdom.
But a different approach also developed in recent times as a study of negotiation as a process. It began with the works of economists, launched by Frances Edgeworth as Mathematical Physics (1881) and by Frederik Zeuthen as Problems of Monopoly and Economic Warfare (1930) but their models of concession rates were too schematic. The study of process was then revived by game theoretic and diplomatic commentators as Nobel prize winner Thomas Schelling (1960) and Fred Iklé’s (1964) examination of How Nations Negotiate. The psychology of the actor and the process were combined in an insightful synthesis by Jeffry Rubin and Bert Brown (1975) in The Social Psychology of Bargaining and Negotiation, by Dean Pruitt’s Negotiation.
Behavior (1981), and on the same wave, in social and political science by I. William Zartman as The Practical Negotiator (1982). Meanwhile, mainstream political science, as James Fearon explained in 1995, essentially relegated negotiation to the problem of why obvious rational outcomes are not achieved.
The wave of analysis and scholarship continues with the focus on negotiation as a process, as a dynamic encounter. It has also moved beyond the limited scope of negotiation as an interpersonal exchange to persuade. My own work has been concerned with the dynamics and evolving structure of that process, including development of the diagnosis, formula, and detail phases in negotiation (1982), and the identification and analysis of the negotiation modes of concession, ompensation, and construction (2008). But I have also been intrigued by the conditions for opening negotiation, seen in the concept of ripeness, including the mutually hurting stalemate and the way out (1989), and for closure, going back to identifiable types of negotiators’ behavior—dueling, driving, dragging, and mixed and mismatched (2015).
On this background, Boniface Nkobena’s wide-ranging work goes back to the basics, focusing broadly on the promise and pitfalls of negotiator’s behavior for the diminution of conflict and the improvement of agreements so that individuals and states (and whatever is between) can pursue their goals and live together more peacefully and productively. The book is of a nature to carry one more step forward in the permanent quest to improve the bargaining acumen of practicing and preparing effective negotiators in various fields of life. For this it is necessary to go back through the four centuries of evolving analysis to take into account not only where our knowledge and
understanding came from but also where it is now.
William I. Zartman
Distinguished Professor Emeritus of International Organization and Conflict Resolution at the Advanced School of International Studies of the Johns Hopkins University, Washington; member of the Steering Committee of the Process of International Negotiation Program (PIN) at the German Institute of Global and Area Studies (GIGA), Hamburg; member of the International Advisor Board for the Mediation Initiative of the UN Department of Political Affairs; former Director of African studies and conflict management programs at SAIS; former professor at the University of South Carolina, University of New York, and American University in Cairo; consultant for the State Department (US); taught in the Paris institute of Political Science; gave lectures in many African University Institutions (Algeria, Cameroon, Egypt, Ghana, Somali); author and Director of numerous publications (see bibliography).