| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2014 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: | |
| * Edouard Poitras (Eclipse Foundation) - Minor Modifications | |
| *******************************************************************************/ | |
| if (isset($_SERVER['HTTP_REFERER']) && | |
| strpos($_SERVER['HTTP_REFERER'], 'dev.eclipse.org/site_login') !== FALSE) { | |
| header('Location: /donate'); | |
| return; | |
| } | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/session.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/paypal.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/friend.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/smartconnection.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/contribution.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/friendsContributionsList.class.php"); | |
| require_once("/home/data/httpd/eclipse-php-classes/system/ldapconnection.class.php"); | |
| require_once("emails.php"); | |
| $App = new App(); | |
| $Nav = new Nav(); | |
| $Menu = new Menu(); | |
| $LDAP = new LDAPConnection(); | |
| include($App->getProjectCommon()); | |
| // Disable Caching | |
| // Date in the past | |
| header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); | |
| // always modified | |
| header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); | |
| // HTTP/1.1 | |
| header("Cache-Control: no-store, no-cache, must-revalidate"); | |
| header("Cache-Control: post-check=0, pre-check=0", false); | |
| // HTTP/1.0 | |
| header("Pragma: no-cache"); | |
| // Set up Paypal | |
| $Paypal = new Paypal(); | |
| //$Paypal->set_debug_mode(TRUE); | |
| //$Paypal->set_sandbox_mode(TRUE); | |
| //$Paypal->set_show_all(TRUE); | |
| // Handle Logged in User Session | |
| $Session = new Session(); | |
| $Friend = $Session->getFriend(); | |
| function getLDAPUIDFromEmail($_email) { | |
| $LDAP = new LDAPConnection(); | |
| if ($response = $LDAP->getUIDFromMail($_email)) { | |
| return $response; | |
| } | |
| return NULL; | |
| } | |
| function getActiveEmail($friend, $paypal) { | |
| if ($_POST['login'] && $_POST['login'] != '') return $_POST['login']; // User posted Eclipse.org ID | |
| else if ($friend && $friend->getEmail() != '') return $friend->getEmail(); | |
| else return $paypal->get_email(); // Paypal email on first page load after redirect | |
| } | |
| function sendEmail($data) { | |
| $transaction_id = $data['transaction_id']; | |
| if ($data['amount'] >= 35 && $data['email'] != "" && !isset($_COOKIE['email_sent' . $transaction_id])) { | |
| // Need the UID to store in tshirt table | |
| if ($data['amount'] >= 100 && !$data['uid']) return; // User should submit Eclipse Login ID to receive shirt | |
| send_email($data); | |
| // Ensure we don't keep sending emails after user updates | |
| setcookie("email_sent" . $data['transaction_id'], TRUE, time()+600, '/', '.eclipse.org'); | |
| } | |
| } | |
| function logABTesting($paypal, $app) { | |
| if (isset($_GET['cm']) && ($_GET['cm'] === 'A' || $_GET['cm'] === 'B')) { // Custom Variable (A or B) | |
| $data = $paypal->get_transaction_data(); | |
| $amount = $app->sqlSanitize($data['amount']); | |
| $test = $app->sqlSanitize($_GET['cm']); | |
| $transaction_id = $data['transaction_id']; | |
| $sql = "SELECT * FROM thankyou_a_b WHERE transaction_id = '$transaction_id'"; | |
| $res = $app->eclipse_sql($sql); | |
| if (is_numeric($amount) && mysql_num_rows($res) === 0) { | |
| $sql = "INSERT INTO thankyou_a_b VALUES (NOW(), '$test', $amount, '$transaction_id')"; | |
| $app->eclipse_sql($sql); | |
| } | |
| } | |
| } | |
| // PHP sends headers every print/echo statement | |
| // We use ob_start so that the setcookie() function can be used to set header values without PHP complaining | |
| // about headers having already been sent (through a print/echo statement somewhere else). | |
| ob_start(); | |
| // Confirm Donation | |
| $success = $Paypal->confirm_donation(); | |
| if ($success) { | |
| // Make sure user stops getting bothered by donation banner | |
| setcookie ("thankyou_page[donation]", TRUE, time() + (3600 * 24 * 279), '/', '.eclipse.org'); | |
| // A/B Testing | |
| logABTesting($Paypal, $App); | |
| // Sanitize Variables | |
| $_POST['first_name'] = $App->sqlSanitize(filter_var($_POST['first_name'], FILTER_SANITIZE_FULL_SPECIAL_CHARS)); | |
| $_POST['last_name'] = $App->sqlSanitize(filter_var($_POST['last_name'], FILTER_SANITIZE_FULL_SPECIAL_CHARS)); | |
| $_POST['comment'] = $App->sqlSanitize(filter_var($_POST['comment'], FILTER_SANITIZE_FULL_SPECIAL_CHARS)); | |
| $_POST['login'] = $App->sqlSanitize(filter_var($_POST['login'], FILTER_SANITIZE_EMAIL)); | |
| // Handle User Updating Information (anonymity, comments, etc) | |
| $Paypal->set_comment($_POST['comment']); | |
| $Paypal->set_email(getActiveEmail($Friend, $Paypal)); | |
| if ($Friend->getFirstName()) $Paypal->set_first_name($Friend->getFirstName()); | |
| else if ($_POST['first_name'] != "") $Paypal->set_first_name($_POST['first_name']); | |
| if ($Friend->getLastName()) $Paypal->set_last_name($Friend->getLastName()); | |
| else if ($_POST['last_name'] != "") $Paypal->set_last_name($_POST['last_name']); | |
| // Anonymity | |
| if (isset($_POST['save'])) { // On Save/POST | |
| $Paypal->set_anonymous($_POST['os1'] === 'Private'); | |
| } else { // First time always anonymous | |
| $Paypal->set_anonymous(TRUE); | |
| } | |
| // Ready Transaction Data | |
| $data = $Paypal->get_transaction_data(); | |
| $data['uid'] = getLDAPUIDFromEmail(getActiveEmail($Friend, $Paypal)); | |
| sendEmail($data); | |
| // Check to see if this transaction has already been processed. | |
| $check_contribution = new Contribution(); | |
| $check_transaction = $check_contribution->selectContributionExists($data['transaction_id']); | |
| if ($check_transaction == FALSE) { // Contribution Doesn't Already Exist | |
| //Check to see if user already exists in friends | |
| $check_friends = new Friend(); | |
| $ldapuid = getLDAPUIDFromEmail(getActiveEmail($Friend, $Paypal)); | |
| $friend_id = $check_friends->selectFriendID("uid", $ldapuid); | |
| if ($friend_id != 0) { // User Already Exist | |
| // Lets Update the Friend Information | |
| $new_friend = new Friend(); | |
| $new_friend->selectFriend($friend_id); // Want to keep existing date_joined | |
| $new_friend->setFirstName($data['firstname']); | |
| $new_friend->setLastName($data['lastname']); | |
| $new_friend->setIsAnonymous($data['anonymous']); | |
| $new_friend->setIsBenefit($data['benefit']); | |
| $new_friend->setFriendID($friend_id); | |
| $new_friend->setLDAPUID($ldapuid); | |
| $new_friend_id = $new_friend->insertUpdateFriend(); | |
| // Friend_id does not equal 0 so we have an existing user. We need to add a new contribution | |
| $insert_contribution = new Contribution(); | |
| $insert_contribution->setFriendID($friend_id); | |
| $insert_contribution->setAmount($data['amount']); | |
| $insert_contribution->setMessage($data['comment']); | |
| $insert_contribution->setTransactionID($data['transaction_id']); | |
| $insert_contribution->insertContribution(); | |
| //Record Inserted | |
| } else { | |
| // No friend_id found so add a new friend record then add the contribution record. | |
| $new_friend = new Friend(); | |
| $new_friend->setFirstName($data['firstname']); | |
| $new_friend->setLastName($data['lastname']); | |
| $new_friend->setLDAPUID($ldapuid); | |
| $new_friend->setIsAnonymous($data['anonymous']); | |
| $new_friend->setIsBenefit($data['benefit']); | |
| $new_friend_id = $new_friend->insertUpdateFriend(); | |
| $insert_contribution = new Contribution(); | |
| $insert_contribution->setFriendID($new_friend_id); | |
| $insert_contribution->setAmount($data['amount']); | |
| $insert_contribution->setMessage($data['comment']); | |
| $insert_contribution->setTransactionID($data['transaction_id']); | |
| $insert_contribution->insertContribution(); | |
| } | |
| } | |
| // User submitted an Eclipse.org ID | |
| if (isset($_POST['login']) && $_POST['login'] != "") { | |
| // Need to reload friend incase we're dealing with a non-logged in user | |
| // Update Anonymity | |
| $check_contribution->selectContributionWithTransaction($data['transaction_id']); | |
| $anon_friend = new Friend(); | |
| $anon_friend->selectFriend($check_contribution->getFriendID()); | |
| $anon_friend->setIsAnonymous($data['anonymous']); | |
| // Update Name | |
| $check_friends = new Friend(); | |
| $ldapuid = getLDAPUIDFromEmail($_POST['login']); | |
| $friend_id = $check_friends->selectFriendID("uid", $ldapuid); | |
| if (!$friend_id) { // If no friend_id found, create the friend based on ldap information | |
| $dn = $LDAP->getDNFromMail($_POST['login']); | |
| $firstname = $LDAP->getLDAPAttribute($dn, 'givenName'); | |
| $lastname = $LDAP->getLDAPAttribute($dn, 'sn'); | |
| $anon_friend->setFirstName($firstname); | |
| $anon_friend->setLastName($lastname); | |
| $anon_friend->setEmail($_POST['login']); | |
| $anon_friend->setLDAPUID($ldapuid); | |
| $data['firstname'] = $firstname; | |
| $data['lastname'] = $lastname; | |
| $anon_friend->insertUpdateFriend(); | |
| $check_contribution->setFriendID($anon_friend->getFriendID()); | |
| $check_contribution->updateContribution(); | |
| } else { | |
| $existing_friend = new Friend(); | |
| $existing_friend->selectFriend($friend_id); | |
| $existing_friend->setIsAnonymous($data['anonymous']); | |
| $existing_friend->insertUpdateFriend(); | |
| $data['firstname'] = $existing_friend->getFirstName(); | |
| $data['lastname'] = $existing_friend->getLastName(); | |
| $check_contribution->setFriendID($friend_id); | |
| $check_contribution->updateContribution(); | |
| } | |
| } | |
| // Check to see if this transaction has already been processed. | |
| $check_contribution = new Contribution(); | |
| $check_transaction = $check_contribution->selectContributionExists($data['transaction_id']); | |
| if ($check_transaction == TRUE) { // Contribution Already Exist - Check for name and message change | |
| // Update contribution | |
| $check_contribution->selectContributionWithTransaction($data['transaction_id']); | |
| $check_contribution->setMessage($data['comment']); | |
| $check_contribution->updateContribution(); | |
| // Get friend from friend_id from transaction | |
| $check_friends = new Friend(); | |
| $check_friends->selectFriend($check_contribution->getFriendID()); | |
| if ($check_friends->getFriendID() != 0) { // User Already Exist | |
| // Update Anonymity | |
| $check_friends->setIsAnonymous($data['anonymous']); | |
| $check_friends->insertUpdateFriend(); | |
| } else { | |
| $ldapuid = getLDAPUIDFromEmail(getActiveEmail($Friend, $Paypal)); | |
| $check_friends->setFirstName($data['firstname']); | |
| $check_friends->setLastName($data['lastname']); | |
| $check_friends->setIsAnonymous($data['anonymous']); | |
| $check_friends->setIsBenefit($data['benefit']); | |
| $check_friends->setLDAPUID($ldapuid); | |
| $check_friends->insertUpdateFriend(); | |
| } | |
| } | |
| } | |
| $pageTitle = "Thank You"; | |
| $pageKeywords = "friends of eclipse, donation, contribution"; | |
| $pageAuthor = "Edouard Poitras"; | |
| include('content/en_thankyou.php'); | |
| $html = ob_get_clean(); | |
| # Generate the web page | |
| $App->AddExtraHtmlHeader('<script type="text/javascript" src="/donate/functions.js"></script>'); | |
| $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/donate/style.css" media="screen" />'); | |
| // Don't generate the page for PayPal IPN | |
| if (!isset($_GET['IPN'])) { | |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | |
| } | |
| ?> |