table_prefix = 'testing_'; } $this->Donor = new Donor($test_mode); $this->App = new App(); } /** * Validate if the user is passing the right info * for linking a donation with an eclipse account * * @return boolean */ public function link_donation() { $txn_id = $this->App->getHTTPParameter('tid', 'get'); $invoice_id = $this->App->getHTTPParameter('iid', 'get'); if (!empty($txn_id) && !empty($invoice_id)){ $this->set_donation_txn_id($txn_id); $this->set_donation_random_invoice_id($invoice_id); $this->Donor->set_donor_contribution_with_txn_id($this->get_donation_txn_id()); $cid = $this->Donor->Contribution->getContributionID(); if (empty($cid)){ return FALSE; } if ($this->update_donor_from_process_table()) { $this->Donor->Friend->selectFriend($this->Donor->Contribution->getFriendID()); $this->set_donation_amount($this->Donor->Contribution->getAmount()); return TRUE; } } return FALSE; } /** * Try to update a donation with an eclipse account * * @return boolean/string */ public function update_donation() { $uid = $this->Donor->get_donor_uid(); $cfid = $this->Donor->Contribution->getFriendID(); $fid = $this->Donor->Friend->getFriendID(); if (!empty($uid) && $cfid == $fid) { return 'link_already_done'; } $stage = $this->App->getHTTPParameter('form-stage', 'post'); // Let's try to link automaticaly, if the user is logged in if (empty($stage)){ $Session = new Session(); $Friend = $Session->getFriend(); $email = $Friend->getEmail(); $this->Donor->set_donor_email($email); $uid = $this->Donor->get_donor_uid(); if (!empty($uid)) { $this->get_or_create_friend(); $this->Donor->Contribution->setFriendID($this->Donor->Friend->getFriendID()); $this->Donor->Contribution->updateContribution(); $DonationEmails = new DonationEmails($this); $DonationEmails->send_email(); return 'updated'; } } if ($stage == 'update') { $this->Donor->set_donor_email($this->App->getHTTPParameter('email', 'post')); $this->set_donation_message($this->App->getHTTPParameter('message', 'post')); $this->set_donation_is_anonymous($this->App->getHTTPParameter('is_anonymous', 'post')); $uid = $this->Donor->get_donor_uid(); if (!empty($uid)) { $this->get_or_create_friend(); $this->Donor->Contribution->setMessage($this->get_donation_message()); $this->Donor->Contribution->setFriendID($this->Donor->Friend->getFriendID()); $this->Donor->Contribution->updateContribution(); $DonationEmails = new DonationEmails($this); $DonationEmails->send_email(); return 'updated'; } return 'invalid_eclipse_id'; } return FALSE; } /** * Get human friendly string of $is_anonymous * * @return string */ public function get_donation_is_anonymous_string() { if (!$this->donation_is_anonymous) { return 'Public'; } return 'Private'; } /** * Get donation amount * * @return number */ public function get_donation_amount() { $this->_set_donation_benefit_level(); return $this->donation_amount; } /** * Get donation_benefit value */ public function get_donation_benefit(){ return (int)$this->donation_benefit; } /** * Get donation_benefit group/level */ public function get_donation_benefit_level() { $this->_set_donation_benefit_level(); return $this->donation_benefit_group; } /** * Set donation benefit level * * This should only be called when we sent the donation * amount. */ private function _set_donation_benefit_level() { $amount = $this->donation_amount; $currency = $this->get_donation_currency(); // Access to the Friends of Eclipse mirrors. if ($amount >= 35) { $this->set_donation_benefit(1); } // Minimum donation of 250USD or 0.70 BTC if ($amount >= 250) { $this->donation_benefit_group = 'webmaster_idol'; } // Minumum donation of 100USD or 0.25 BTC elseif ($amount >= 50) { $this->donation_benefit_group = 'best_friend'; } // Minimum donation of 35USD or 0.15 BTC elseif ($amount >= 35) { $this->donation_benefit_group = 'friend'; } else{ $this->donation_benefit_group = 'donor'; } } /** * Get donation currency type */ public function get_donation_currency() { if (empty($this->donation_currency)) { $this->donation_currency = 'USD'; } return $this->donation_currency; } /** * Get $is_anonymous value * * @return number */ public function get_donation_is_anonymous(){ return (int)$this->donation_is_anonymous; } /** * Get donation message * * @return string */ public function get_donation_message() { return $this->donation_message; } /** * Get donation random invoice id * * @param number $length * @return Ambigous */ public function get_donation_random_invoice_id() { if (empty($this->donation_random_invoice_id)) { $this->set_donation_random_invoice_id(); } return $this->donation_random_invoice_id; } /** * Get donation status * * @return unknown */ public function get_donation_status() { if (empty($this->donation_status)){ $this->set_donation_status('initial'); } return strtoupper($this->donation_status); } /** * Get $donation_landing_page * * @return string */ public function get_donation_landing_page() { if (empty($this->donation_landing_page)){ $this->set_donation_landing_page('donate'); } return strtoupper($this->donation_landing_page); } /** * Get $donation_file_id * * @return string */ public function get_donation_file_id() { if (!is_numeric($this->donation_file_id)) { $this->donation_file_id = NULL; } return $this->donation_file_id; } /** * Get $donation_scope * * @return string */ public function get_donation_scope() { if (!is_string($this->donation_scope)) { $this->donation_scope = NULL; } return $this->donation_scope; } /** * Get $donation_campaign * * @return string */ public function get_donation_campaign() { if (!is_string($this->donation_campaign)) { $this->donation_campaign = NULL; } return $this->donation_campaign; } /** * Get donation_subscription value * * @return unknown */ public function get_donation_subscription(){ return (int)$this->donation_subscription; } /** * Get id for transaction * @param string $txn_id */ public function get_donation_txn_id() { return $this->donation_txn_id; } public function get_or_create_friend() { $update = FALSE; $active_email = $this->Donor->get_active_email(); $this->Donor->Friend->setEmail($active_email); $this->Donor->get_friend_id_from_uid(); $this->Donor->Friend->setIsAnonymous($this->get_donation_is_anonymous()); $this->Donor->Friend->setIsBenefit($this->get_donation_benefit()); $new_friend_id = $this->Donor->Friend->insertUpdateFriend(); $this->Donor->Friend->setFriendID($new_friend_id); $this->Donor->Contribution->setFriendID($new_friend_id); } /** * Set donation amount * * @param string $donation_amount */ public function set_donation_amount($donation_amount = 0) { //Make sure the amount is a number and it's not 0 if ($donation_amount == "0" or $donation_amount == "" or is_nan($donation_amount)) { $donation_amount = 35.00; } // Format the amount $donation_amount = number_format($donation_amount, 2, '.', ''); $this->donation_amount = $donation_amount; $this->_set_donation_benefit_level(); } /** * Set donation_benefit value */ public function set_donation_benefit($value) { if ($value === 1 || $value === '1' || $value === TRUE) { return $this->donation_benefit = 1; } } /** * Set donation currency type */ public function set_donation_currency($currency = '') { $valid_currency = array('USD'); $valid_type = array('PAYPAL'); $currency = strtoupper($currency); if (in_array($currency, $valid_currency)) { $this->donation_currency = $currency; } // We might be passing $paymentGateway->gateway_type and // we know that we only accept USD for paypal. elseif (in_array($currency, $valid_type)) { if ($currency == 'PAYPAL') { $this->donation_currency = 'USD'; } } } /** * Set $is_anonymous value * * @param unknown $value */ public function set_donation_is_anonymous($value) { $this->donation_is_anonymous = 1; if ($value == 'recognition' || ($value === 0 || $value === '0')) { $this->donation_is_anonymous = 0; } } /** * Set donation message * * @param unknown $message */ public function set_donation_message($message) { $message = filter_var($message, FILTER_SANITIZE_STRING); $this->donation_message = strip_tags($message); } /** * Set donation random invoice id */ public function set_donation_random_invoice_id($key = '') { $key = filter_var($key, FILTER_SANITIZE_STRING); if (empty($key)) { $length = 30; $keys = array_merge(range(0, 9), range('a', 'z')); for ($i = 0; $i < $length; $i++) { $key .= $keys[array_rand($keys)]; } } $this->donation_random_invoice_id = $key; } /** * Set donation status * * @param unknown $status */ public function set_donation_status($status) { $status = strtolower($status); $available_status = array( 'completed', // paypal payment_status 'no_eclipse_id', // Completed but addionnal steps are required to link donation with eclipse_id. 'new_donation_form', // This was created by the process.php script. ); if (in_array($status, $available_status)) { $this->donation_status = strtoupper($status); } } /** * Set donation $landing_page * * @param string $page */ public function set_donation_landing_page($page) { $page = strtolower($page); $available = array( 'donate', // eclipse.org/donate/ 'download', // eclipse.org/downloads/ 'eclipse_ide', // eclipse.org/donate/ide/ ); if (in_array($page, $available)) { $this->donation_landing_page = strtoupper($page); } } /** * Get $donation_file_id * * @return string */ public function set_donation_file_id($file_id) { if (!empty($file_id) && is_numeric($file_id) && $file_id <= 2147483647){ $this->donation_file_id = $file_id; } return $this->donation_file_id; } /** * Get $donation_scope * * @return string */ public function set_donation_scope($scope = "") { if (!empty($scope) && is_string($scope)){ $this->donation_scope = substr($scope, 0, 128); } return $this->donation_scope; } /** * Get $donation_campaign * * @return string */ public function set_donation_campaign($campaign = "") { if (!empty($campaign) && is_string($campaign)){ $this->donation_campaign = substr($campaign, 0, 128); } return $this->donation_campaign; } /** * Set donation subscription value * @param string $donation_subscription */ public function set_donation_subscription($donation_subscription = NULL) { $this->donation_subscription = 0; if ($donation_subscription) { $this->donation_subscription = 1; } } /** * Set id for transaction * @param string $txn_id */ public function set_donation_txn_id($txn_id = "") { $txn_id = filter_var($txn_id, FILTER_SANITIZE_STRING); $this->donation_txn_id = $txn_id; } /** * Update donor() & donation() based off the info from the * friends_process table. * * @return bool */ public function update_donor_from_process_table() { $unique_id = $this->get_donation_random_invoice_id(); $sql = 'SELECT /* USE MASTER */ * FROM ' . $this->table_prefix . 'friends_process WHERE id_unique = '; $sql .= $this->App->returnQuotedString($this->App->sqlSanitize($unique_id)); $sql .= ' LIMIT 1'; $rs = $this->App->eclipse_sql($sql); $process = mysql_fetch_assoc($rs); // We found a match in the friends_process table :) if (!empty($process)) { $this->Donor->set_donor_first_name($process['first_name']); $this->Donor->set_donor_last_name($process['last_name']); $this->set_donation_message($process['message']); $this->set_donation_subscription($process['subscription']); $this->set_donation_is_anonymous($process['is_anonymous']); $this->set_donation_landing_page($process['landing_page']); $this->set_donation_file_id($process['file_id']); $this->set_donation_scope($process['scope']); $this->set_donation_campaign($process['campaign']); $this->Donor->set_donor_email($process['email']); $this->Donor->set_donor_paypal_email($process['email_paypal']); $this->Donor->set_donor_uid($process['uid']); return TRUE; } return FALSE; } /** * Update/create Contribution from the IPN script * * @param string $update */ public function update_donation_from_ipn($update = TRUE) { $this->get_or_create_friend(); if ($this->Donor->Contribution->getContributionID() == "") { // Contribution Doesn't Already Exist $this->Donor->Contribution->setAmount($this->get_donation_amount()); $this->Donor->Contribution->setMessage($this->get_donation_message()); $this->Donor->Contribution->setTransactionID($this->get_donation_txn_id()); $this->Donor->Contribution->setProcessId($this->get_donation_random_invoice_id()); $this->Donor->Contribution->setCurrency($this->get_donation_currency()); $this->Donor->Contribution->setFriendID($this->Donor->Friend->getFriendID()); $this->Donor->Contribution->insertContribution(); } else{ // Update transaction. This should not append... //$this->Donor->Contribution->setProcessId($this->get_donation_random_invoice_id()); $this->Donor->Contribution->setFriendID($this->Donor->Friend->getFriendID()); $this->Donor->Contribution->updateContribution(); } // Send out Emails $DonationEmails = new DonationEmails($this); $content = $DonationEmails->send_email(); } }