[guadec-web] updated registration form code
- From: Andreas Nilsson <andreasn src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [guadec-web] updated registration form code
- Date: Wed, 2 Jul 2014 19:54:12 +0000 (UTC)
commit f337ec5a0da70cea25b17c91b5f6fe699274ebe2
Author: Andreas Nilsson <anilsson redhat com>
Date: Wed Jul 2 21:54:03 2014 +0200
updated registration form code
guadec/js/calculate-total.js | 40 ++++++-
guadec/js/calculate.php | 5 +-
guadec/js/ipn.php | 91 ++++++++++++
guadec/js/ipnlistener.php | 310 ++++++++++++++++++++++++++++++++++++++++++
guadec/js/page-4865.php | 93 +++++++++++++
5 files changed, 536 insertions(+), 3 deletions(-)
---
diff --git a/guadec/js/calculate-total.js b/guadec/js/calculate-total.js
index f7c559e..bb8c947 100644
--- a/guadec/js/calculate-total.js
+++ b/guadec/js/calculate-total.js
@@ -1,5 +1,7 @@
/*calculate-total.js*/
-/*Jquery file to calculate net amount during registration */
+/*Jquery file to calculate net amount during registration
+ GUADEC 2014
+ Author: Saumya Dwivedi */
function callTotalCalculate() {
$.ajax({
@@ -11,6 +13,7 @@ function callTotalCalculate() {
result = result.trim();
if(result != 'error' ) {
$(".total").html(result);
+ $('[name=tfee]').prop('value', result);
}
else {
console.log(result);
@@ -29,6 +32,7 @@ function callLunchCalculate() {
result = result.trim();
if(result != 'error' ) {
$(".lunchfee").html(result);
+ $('[name=lfee]').prop('value', result);
}
else {
console.log(result);
@@ -48,6 +52,7 @@ function callAccomCalculate() {
result = result.trim();
if(result != 'error' ) {
$(".accomfee").html(result);
+ $('[name=afee]').prop('value', result);
}
else {
console.log(result);
@@ -56,6 +61,27 @@ function callAccomCalculate() {
});
callTotalCalculate();
}
+function enableDisableA(obj) {
+ if ($(obj).is(":checked")) {
+ $("#arrive").prop("disabled", false);
+ $("#depart").prop("disabled", false);
+ }
+ else {
+ $("#arrive").prop("disabled", true);
+ $("#depart").prop("disabled", true);
+ }
+}
+
+function enableDisableL(obj) {
+ if ($(obj).is(":checked")) {
+ $("form input[value*='lunch_']").prop("disabled", false);
+
+ }
+ else {
+ $("form input[value*='lunch_']").prop("disabled", true);
+
+ }
+}
$(function() {
/*Dropdown triggered event*/
@@ -100,5 +126,17 @@ $(function() {
$(this).val(sanitized);
});
+ $(document).ready(function() {
+ enableDisableA(this);
+ $("[name=accommodation]").click(function() {
+ enableDisableA(this);
+ });
+ });
+ $(document).ready(function() {
+ enableDisableL(this);
+ $("[name=lunch]").click(function() {
+ enableDisableL(this);
+ });
+ });
});
diff --git a/guadec/js/calculate.php b/guadec/js/calculate.php
index 4511a38..1ac8ca8 100644
--- a/guadec/js/calculate.php
+++ b/guadec/js/calculate.php
@@ -1,7 +1,8 @@
+
<?php
- define('day_fee', 2);
- define('lunch_fee', 3);
+ define('day_fee', 25);
+ define('lunch_fee', 8.5);
function dayParser($arrive_string, $depart_string){
$result = "";
diff --git a/guadec/js/ipn.php b/guadec/js/ipn.php
new file mode 100644
index 0000000..f34d342
--- /dev/null
+++ b/guadec/js/ipn.php
@@ -0,0 +1,91 @@
+<?php
+/*
+PayPal Instant Notification Receiver Page
+GUADEC 2014 Registration
+*/
+?>
+<?php
+// tell PHP to log errors to ipn_errors.log in this directory
+ini_set('log_errors', true);
+//ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
+
+ini_set('error_log', 'ipn_errors.log');
+
+// intantiate the IPN listener
+include('ipnlistener.php');
+$listener = new IpnListener();
+
+// tell the IPN listener to use the PayPal test sandbox
+$listener->use_sandbox = true;
+
+// try to process the IPN POST
+try {
+ $listener->requirePostMethod();
+ $verified = $listener->processIpn();
+} catch (Exception $e) {
+ error_log($e->getMessage());
+ error_log("fdfds");
+ exit(0);
+}
+
+// TODO: Handle IPN Response here
+
+if ($verified) {
+ // TODO: Implement additional fraud checks and MySQL storage
+
+ $errmsg = ''; // stores errors from fraud checks
+
+ // 1. Make sure the payment status is "Completed"
+ if ($_POST['payment_status'] != 'Completed') {
+ // simply ignore any IPN that is not completed
+ exit(0);
+ }
+
+ // 2. Make sure seller email matches your primary account email.
+ if ($_POST['receiver_email'] !='saumya zero-felicitator gmail com') {
+ $errmsg .= "'receiver_email' does not match: ";
+ $errmsg .= $_POST['receiver_email']."\n";
+ }
+
+ // 3. Make sure the amount(s) paid match
+ if ($_POST['mc_gross'] != '9.99') {
+ $errmsg .= "'mc_gross' does not match: ";
+ $errmsg .= $_POST['mc_gross']."\n";
+ }
+
+ // 4. Make sure the currency code matches
+ if ($_POST['mc_currency'] != 'GBP') {
+ $errmsg .= "'mc_currency' does not match: ";
+ $errmsg .= $_POST['mc_currency']."\n";
+ }
+
+ // TODO: Check for duplicate user_id
+
+ if (!empty($errmsg)) {
+
+ // manually investigate errors from the fraud checking
+ $body = "IPN failed fraud checks: \n$errmsg\n\n";
+ $body .= $listener->getTextReport();
+ error_log($body);
+ error_log($_POST['custom']);
+ mail($_POST['receiver_email'], 'IPN Fraud Warning', $body);
+
+ } else {
+ error_log($_POST['custom']);
+ mail($_POST['receiver_email'], 'Registration Successful', $body);
+ mail($_POST['payer_email'], 'Registration Successful', $body);
+
+ // TODO: process order here
+ }
+} else {
+ // manually investigate the invalid IPN
+
+ error_log($listener->getTextReport());
+
+ error_log("2");
+ mail('saumya zero gmail com', 'Invalid IPN', $listener->getTextReport());
+
+ error_log($listener->getTextReport());
+}
+
+?>
diff --git a/guadec/js/ipnlistener.php b/guadec/js/ipnlistener.php
new file mode 100644
index 0000000..140a8ff
--- /dev/null
+++ b/guadec/js/ipnlistener.php
@@ -0,0 +1,310 @@
+<?php
+/**
+ * PayPal IPN Listener
+ *
+ * A class to listen for and handle Instant Payment Notifications (IPN) from
+ * the PayPal server.
+ *
+ * https://github.com/Quixotix/PHP-PayPal-IPN
+ *
+ * @package PHP-PayPal-IPN
+ * @author Micah Carrick
+ * @copyright (c) 2012 - Micah Carrick
+ * @version 2.1.0
+ */
+class IpnListener {
+
+ /**
+ * If true, the recommended cURL PHP library is used to send the post back
+ * to PayPal. If flase then fsockopen() is used. Default true.
+ *
+ * @var boolean
+ */
+ public $use_curl = false;
+
+ /**
+ * If true, explicitly sets cURL to use SSL version 3. Use this if cURL
+ * is compiled with GnuTLS SSL.
+ *
+ * @var boolean
+ */
+ public $force_ssl_v3 = false;
+
+ /**
+ * If true, cURL will use the CURLOPT_FOLLOWLOCATION to follow any
+ * "Location: ..." headers in the response.
+ *
+ * @var boolean
+ */
+ public $follow_location = false;
+
+ /**
+ * If true, an SSL secure connection (port 443) is used for the post back
+ * as recommended by PayPal. If false, a standard HTTP (port 80) connection
+ * is used. Default true.
+ *
+ * @var boolean
+ */
+ public $use_ssl = true;
+
+ /**
+ * If true, the paypal sandbox URI www.sandbox.paypal.com is used for the
+ * post back. If false, the live URI www.paypal.com is used. Default false.
+ *
+ * @var boolean
+ */
+ public $use_sandbox = true;
+
+ /**
+ * The amount of time, in seconds, to wait for the PayPal server to respond
+ * before timing out. Default 30 seconds.
+ *
+ * @var int
+ */
+ public $timeout = 30;
+
+ private $post_data = array();
+ private $post_uri = '';
+ private $response_status = '';
+ private $response = '';
+
+ const PAYPAL_HOST = 'www.paypal.com';
+ const SANDBOX_HOST = 'www.sandbox.paypal.com';
+
+ /**
+ * Post Back Using cURL
+ *
+ * Sends the post back to PayPal using the cURL library. Called by
+ * the processIpn() method if the use_curl property is true. Throws an
+ * exception if the post fails. Populates the response, response_status,
+ * and post_uri properties on success.
+ *
+ * @param string The post data as a URL encoded string
+ */
+ protected function curlPost($encoded_data) {
+
+ if ($this->use_ssl) {
+ $uri = 'https://'.$this->getPaypalHost().'/cgi-bin/webscr';
+ $this->post_uri = $uri;
+ } else {
+ $uri = 'http://'.$this->getPaypalHost().'/cgi-bin/webscr';
+ $this->post_uri = $uri;
+ }
+
+ $ch = curl_init();
+
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+ curl_setopt($ch, CURLOPT_CAINFO,
+ dirname(__FILE__)."/cert/api_cert_chain.crt");
+ curl_setopt($ch, CURLOPT_URL, $uri);
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_data);
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->follow_location);
+ curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, true);
+
+ if ($this->force_ssl_v3) {
+ curl_setopt($ch, CURLOPT_SSLVERSION, 3);
+ }
+
+ $this->response = curl_exec($ch);
+ $this->response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
+
+ if ($this->response === false || $this->response_status == '0') {
+ $errno = curl_errno($ch);
+ $errstr = curl_error($ch);
+ throw new Exception("cURL error: [$errno] $errstr");
+ }
+ }
+
+ /**
+ * Post Back Using fsockopen()
+ *
+ * Sends the post back to PayPal using the fsockopen() function. Called by
+ * the processIpn() method if the use_curl property is false. Throws an
+ * exception if the post fails. Populates the response, response_status,
+ * and post_uri properties on success.
+ *
+ * @param string The post data as a URL encoded string
+ */
+ protected function fsockPost($encoded_data) {
+
+ if ($this->use_ssl) {
+ $uri = 'ssl://'.$this->getPaypalHost();
+ $port = '443';
+ $this->post_uri = $uri.'/cgi-bin/webscr';
+ } else {
+ $uri = $this->getPaypalHost(); // no "http://" in call to fsockopen()
+ $port = '80';
+ $this->post_uri = 'http://'.$uri.'/cgi-bin/webscr';
+ }
+
+ $fp = fsockopen($uri, $port, $errno, $errstr, $this->timeout);
+
+ if (!$fp) {
+ // fsockopen error
+ throw new Exception("fsockopen error: [$errno] $errstr");
+ }
+
+ $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
+ $header .= "Host: ".$this->getPaypalHost()."\r\n";
+ $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
+ $header .= "Content-Length: ".strlen($encoded_data)."\r\n";
+ $header .= "Connection: Close\r\n\r\n";
+
+ fputs($fp, $header.$encoded_data."\r\n\r\n");
+
+ while(!feof($fp)) {
+ if (empty($this->response)) {
+ // extract HTTP status from first line
+ $this->response .= $status = fgets($fp, 1024);
+ $this->response_status = trim(substr($status, 9, 4));
+ } else {
+ $this->response .= fgets($fp, 1024);
+ }
+ }
+
+ fclose($fp);
+ }
+
+ private function getPaypalHost() {
+ if ($this->use_sandbox) return self::SANDBOX_HOST;
+ else return self::PAYPAL_HOST;
+ }
+
+ /**
+ * Get POST URI
+ *
+ * Returns the URI that was used to send the post back to PayPal. This can
+ * be useful for troubleshooting connection problems. The default URI
+ * would be "ssl://www.sandbox.paypal.com:443/cgi-bin/webscr"
+ *
+ * @return string
+ */
+ public function getPostUri() {
+ return $this->post_uri;
+ }
+
+ /**
+ * Get Response
+ *
+ * Returns the entire response from PayPal as a string including all the
+ * HTTP headers.
+ *
+ * @return string
+ */
+ public function getResponse() {
+ return $this->response;
+ }
+
+ /**
+ * Get Response Status
+ *
+ * Returns the HTTP response status code from PayPal. This should be "200"
+ * if the post back was successful.
+ *
+ * @return string
+ */
+ public function getResponseStatus() {
+ return $this->response_status;
+ }
+
+ /**
+ * Get Text Report
+ *
+ * Returns a report of the IPN transaction in plain text format. This is
+ * useful in emails to order processors and system administrators. Override
+ * this method in your own class to customize the report.
+ *
+ * @return string
+ */
+ public function getTextReport() {
+
+ $r = '';
+
+ // date and POST url
+ for ($i=0; $i<80; $i++) { $r .= '-'; }
+ $r .= "\n[".date('m/d/Y g:i A').'] - '.$this->getPostUri();
+ if ($this->use_curl) $r .= " (curl)\n";
+ else $r .= " (fsockopen)\n";
+
+ // HTTP Response
+ for ($i=0; $i<80; $i++) { $r .= '-'; }
+ $r .= "\n{$this->getResponse()}\n";
+
+ // POST vars
+ for ($i=0; $i<80; $i++) { $r .= '-'; }
+ $r .= "\n";
+
+ foreach ($this->post_data as $key => $value) {
+ $r .= str_pad($key, 25)."$value\n";
+ }
+ $r .= "\n\n";
+ return $r;
+ }
+
+ /**
+ * Process IPN
+ *
+ * Handles the IPN post back to PayPal and parsing the response. Call this
+ * method from your IPN listener script. Returns true if the response came
+ * back as "VERIFIED", false if the response came back "INVALID", and
+ * throws an exception if there is an error.
+ *
+ * @param array
+ *
+ * @return boolean
+ */
+ public function processIpn($post_data=null) {
+
+ $encoded_data = 'cmd=_notify-validate';
+
+ if ($post_data === null) {
+ // use raw POST data
+ if (!empty($_POST)) {
+ $this->post_data = $_POST;
+ $encoded_data .= '&'.file_get_contents('php://input');
+ } else {
+ throw new Exception("No POST data found.");
+ }
+ } else {
+ // use provided data array
+ $this->post_data = $post_data;
+
+ foreach ($this->post_data as $key => $value) {
+ $encoded_data .= "&$key=".urlencode($value);
+ }
+ }
+
+ if ($this->use_curl) $this->curlPost($encoded_data);
+ else $this->fsockPost($encoded_data);
+
+ if (strpos($this->response_status, '200') === false) {
+ throw new Exception("Invalid response status: ".$this->response_status);
+ }
+
+ if (strpos($this->response, "VERIFIED") !== false) {
+ return true;
+ } elseif (strpos($this->response, "INVALID") !== false) {
+ return false;
+ } else {
+ throw new Exception("Unexpected response from PayPal.");
+ }
+ }
+
+ /**
+ * Require Post Method
+ *
+ * Throws an exception and sets a HTTP 405 response header if the request
+ * method was not POST.
+ */
+ public function requirePostMethod() {
+ // require POST requests
+ if ($_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST') {
+ header('Allow: POST', true, 405);
+ throw new Exception("Invalid HTTP request method.");
+ }
+ }
+}
diff --git a/guadec/js/page-4865.php b/guadec/js/page-4865.php
new file mode 100644
index 0000000..986d894
--- /dev/null
+++ b/guadec/js/page-4865.php
@@ -0,0 +1,93 @@
+<?php
+
+$application_submitted = false;
+
+if (!empty($_POST)) {
+
+ $application_submitted = true;
+ $errors = false;
+
+ $name = trim(stripslashes($_POST['contact_name']));
+ $email = trim(stripslashes($_POST['contact_email']));
+ $irc = trim(stripslashes($_POST['irc']));
+ $gender = trim(stripslashes($_POST['contact_gender']));
+ $entry = trim(stripslashes($_POST['entry-fee']));
+ $lamount = ($_POST['lfee']);
+ $aamount = ($_POST['afee']);
+ $tamount = ($_POST['tfee']);
+
+ $obfuscated_email = str_replace("@", " AT ", $email);
+
+ if (empty($name) || empty($email)) {
+ $errors = true;
+ }
+
+ if(!isset($_POST['accommodation'])){
+ $arrive = "NA";
+ $depart = "NA";
+ }
+ else{
+ $arrive = $_POST['arrival'];
+ $depart = $_POST['departure'];
+ }
+ $lunch_days = " ";
+ $x = 0;
+ if(isset($_POST['lunch'])){
+ foreach($_POST['lentry-fee'] as $value){
+ $lunch_days = $lunch_days . " " . $value . "--\n";
+ $x = $x + 1;
+ }
+ }
+ $sponsor_check = ($_POST['sponsored'] == true)?"YES":"NA";
+ if ($errors == false) {
+
+ $registerInfo = "Contact Information\n" .
+ "-------------------\r\n\r\n" .
+
+ " Name: " . $name . "\n".
+ " Email: " . $obfuscated_email . "\n\n" .
+ " IRC nick " . $irc . "\n".
+ " Gender " . $gender . "\n\n" .
+ " [Registration received at " . date("D M j G:i:s Y") . " (Eastern time)]" . "\n\n".
+ " Accomodation\n" ."\r\n".
+ " Arrival : ". $arrive . "\r\n".
+ " Departure : ". $depart . "\r\n".
+ " Sponsorship Status : ". $sponsor_check . "\r\n".
+ " Lunch : ".$x." days [". $lunch_days ."]". "\r\n".
+ " Entry Fees : ". $entry ."\r\n".
+ " Lunch Amount : ".$lamount."\r\n".
+ " Accomodation Amount : ".$aamount."\r\n".
+ " Total Amount : ".$tamount."\r\n"
+ ;
+ }
+
+}
+
+?>
+<?php require_once("header.php"); ?>
+
+<div>
+<?php if(!($application_submitted == true)): ?>
+ <div> "Invalid Submission. Please go through registration page first."</div>
+<?php else: ?>
+ <?php if ($errors == true): ?>
+ <div> "Invalid name or email. Please check."<a href=""> Go back to Registration </a>
+ <?php else: ?>
+ <form name="_xclick" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_xclick">
+ <input type="hidden" name="business" value="saumya zero-facilitator gmail com">
+ <input type="hidden" name="currency_code" value="GBP">
+ <input type="hidden" name="item_name" value="Digital Download">
+ <input type="hidden" name="amount" value="<?php echo $tamount; ?>">
+ <input type="hidden" name="return" value="http://localhost/wordpress/?page_id=4823">
+ <input type="hidden" name="custom" value="<?php echo $registerInfo; ?>">
+ <input type="hidden" name="notify_url" value="http://web.iiit.ac.in/~saumya.dwivedi/test/ipn.php">
+ <input type="image" src="http://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif" border="0"
name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
+ </form>
+<?php $_POST['contact_name']; ?>
+
+<?php echo $registerInfo; ?>
+ <?php endif; ?>
+<?php endif; ?>
+</div>
+<?php require_once("footer.php"); ?>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]