blob: 4efeb56fa899b7c5293934d4de4e9a0a679ce90b [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2015 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christopher Guindon (Eclipse Foundation)- initial API and implementation
*******************************************************************************/
require_once(realpath(dirname(__FILE__) . '/../../system/eclipseenv.class.php'));
/**
* Base class for PaymentGateway()
*
* @author chrisguindon
*/
class Payment extends EclipseEnv {
/**
* List of message to show to the end user
*
* @var array
*/
protected $client_message = '';
/**
* Proxy value for curl requests
*
* @var string
*/
protected $proxy = '';
/**
* Constructor
*/
public function Payment() {
parent::__construct();
}
/**
* Writes $contents to the system logger which is usually the webserver's error log
* but can be changed depending on your development requirements.
*
* @param mixed $contents
* @return boolean
* @throws Exception $e
*/
public function error_logger($contents) {
if (!$this->_get_debug_mode()){
return FALSE;
}
if (!isset($contents) || trim($contents) == '' || is_null($contents) || empty($contents))
return 'Error in error_logger(): Nothing to log was supplied. Usage: error_logger($contents)';
try {
/*
* System Error Logging: bool error_log ( string $message )
* $message is sent to PHP's system logger, using the Operating System's system
* logging mechanism or a file, depending on what the error_log configuration
* directive is set to. This is the default option.
* See: http://www.php.net/manual/en/function.error-log.php
*/
if (isset($contents)) {
if (is_resource($contents)) {
return error_log(serialize($contents));
}
else {
return error_log(var_dump($contents));
}
}
else {
return false;
}
} catch (Exception $e) {
echo 'Error in error_logger(): ' . $e->getMessage();
}
}
/**
* Get HTML for messages to the client
*
* @return string
*/
public function get_client_message(){
$html = "";
foreach ($this->client_message as $type => $msgs) {
foreach ($msgs as $m) {
$html .= '<div class="alert alert-' . $type . '" role="alert">' . $m . '</div>';
}
}
return $html;
}
/**
* Set a client message
*
* @param string $message
* @param string $type
* This should be either danger, warning, info or success
*/
public function set_client_message($message = '', $type = 'success') {
$alert_type = array('success', 'warning', 'danger', 'info');
if (!in_array($type, $alert_type)) {
$type = 'warning';
}
$this->client_message[$type][] = $message;
}
/**
* Get HTML for proccess page
*
* This is based of the class name that is calling this function
*
* @return string
*/
public function get_process_html(){
ob_start();
include('tpl/'. strtolower(get_class($this)) . '-process.tpl.php');
return ob_get_clean();
}
/**
* Email IPN results to webdev@eclipse.org
*/
protected function _email_ipn_post() {
// Bug 2442 - Stop sending IPN email notifications to webdev
return TRUE;
ob_start();
print '-------$_POST---------' . PHP_EOL;
print_r($_POST) . PHP_EOL;
print '-------$_SERVER---------' . PHP_EOL;
print_r($_SERVER) . PHP_EOL;
$this->_extend_email_ipn_post();
$message = ob_get_clean();
mail('webdev@eclipse.org', 'Eclipse Donation IPN: This a debug message', $message);
}
/**
* Set default curl option for all curl request
*/
protected function _get_curl_options(&$curl) {
curl_setopt($curl, CURLOPT_FORBID_REUSE, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
// CONFIG: Optional proxy configuration
curl_setopt($curl, CURLOPT_PROXY, $this->_get_proxy());
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);
if ($this->getEnvShortName() === 'local') {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_PROXY, '');
}
}
/**
* Get proxy value
*
* @return string
*/
protected function _get_proxy() {
if (empty($this->proxy)) {
$this->_set_proxy();
}
return $this->proxy;
}
/**
* Allow classes to extend the ipn post e-mail
* @return string
*/
protected function _extend_email_ipn_post() {
return '';
}
/**
* Log donation status in the EvtLog.
*
* @param unknown $action
*/
protected function _log_database($action) {
// Database Logging
$EvtLog = new EvtLog();
$EvtLog->setLogTable("__paypal.class");
if ($this->transaction) {
$EvtLog->setPK1("$this->donation_transaction_id,$this->donation_amount,$this->donation_status");
}
else {
$EvtLog->setPK1("Unknown");
}
$ip = $_SERVER['REMOTE_ADDR'];
$EvtLog->setPK2($ip);
$EvtLog->setLogAction($action);
if ($this->donor_email) {
$EvtLog->insertModLog($this->donor_email);
}
else {
$EvtLog->insertModLog("Unknown");
}
}
/**
* Append class specific functionnality to _set_debug_mode()
*/
protected function _extend_set_debug_mode() {
return TRUE;
}
/**
* Enable/disable debug/sandbox mode
*/
protected function _set_debug_mode($debug_mode = FALSE){
$this->debug_mode = $debug_mode;
if ($this->_get_debug_mode()) {
$this->set_client_message('Debug, logging and Sandbox mode is enabled.', 'warning');
$this->_extend_set_debug_mode();
}
}
/**
* Set eclipse proxy for staging/production
*/
protected function _set_proxy(){
if ($this->_get_prefix_domain() === 'www.eclipse.org') {
$this->proxy = 'proxy.eclipse.org:9899';
}
}
/**
* Helper SQL function to Insert/Update
*
* @param unknown $table
* @param unknown $fields
* @param unknown $possible_null_field
* @return string
*/
protected function _sql_on_duplicate_update($table, $fields = array(), $possible_null_field = array()) {
if ($this->_get_debug_mode()) {
$table = 'testing_' . $table;
}
$sql = "INSERT INTO " . $table . " (";
$columns = array();
$values = array();
foreach ($fields as $key => $value) {
if (!empty($value)) {
$columns[] = $key;
$values[] = '"' . $this->App->sqlSanitize($value) . '"';
}
else if(in_array($key, $possible_null_field)) {
$columns[] = $key;
$values[] = 'NULL';
}
}
$sql .= implode(',', $columns);
$sql .= ') VALUES (';
$sql .= implode(',', $values);
$sql .= ") ON DUPLICATE KEY UPDATE";
foreach ($columns as $key => $value){
$sql .= ' ' .$value . '=' . $values[$key] . ',';
}
$sql = rtrim($sql, ',');
return $sql;
}
}
require_once("gateway/paypal.class.php");
require_once("gateway/bitpay.class.php");