25,
"status[is]" => "active"
));
foreach ($all as $entry) {
$plan = $entry->plan();
$plan_id = $plan->id;
$plan_name = $plan->name;
$credit_days = $plan->cfCreditDays;
$include_oddsmaker = $plan->cfIncludeOddsmaker;
$is_test_drive = $plan->cfIsTestDrive;
$test_drive_start = $plan->cfTestDriveStart;
$test_drive_end = $plan->cfTestDriveEnd;
$test_drive_days = $plan->cfTestDriveDays;
$include_ai_trading = $plan->cfIncludeAiTrading;
$include_brokerage_plus = $plan->cfIncludeBrokeragePlus;
$include_paper_trading = $plan->cfIncludePaperTrading;
$infusionsoft_tags = $plan->cfInfusionsoftTags;
$all_plans[$plan_id] = array(
"name" => $plan_name,
"credit_days" => $credit_days,
"include_oddsmaker" => $include_oddsmaker == "True",
"include_ai_trading" => $include_ai_trading == "True",
"include_brokerage_plus" => $include_brokerage_plus == "True",
"include_paper_trading" => $include_paper_trading == "True",
"is_test_drive" => $is_test_drive == "True",
"test_drive_start" => $test_drive_start,
"test_drive_end" => $test_drive_end,
"test_drive_days" => $test_drive_days,
"infusionsoft_tags" => $infusionsoft_tags,
);
}
?>
Got payment
Event type: $event_type";
$plan_id = $request_content["content"]["subscription"]["plan_id"];
$hasTrialPeriod = false; //(not for test-drive)
$isGift = false;
$oneHundredPctDiscount = false;
if ($event_type == "payment_succeeded" || $event_type == "subscription_changed") {
$transaction_id = $request_content["content"]["transaction"]["id"];
$event_id = $request_content["id"];
$already_entered_sql = "SELECT id FROM aggregate_revenue WHERE orderid = '" . mysql_escape_string($event_id) . "' LIMIT 1";
echo "Using $already_entered_sql\n";
$sqlResult = mysql_query($already_entered_sql);
$row = mysql_fetch_assoc($sqlResult);
$already_entered = is_numeric($row['id']);
if ($already_entered) { //UNCOMMENT AFTER DEBUGGING;
echo "Already entered, so skipping this.\n";
exit;
}
$plan_id = $request_content["content"]["subscription"]["plan_id"];
if (!$plan_id && $request_content["content"]["invoice"]["line_items"][0]["entity_type"] == "plan" && $request_content["content"]["invoice"]["line_items"][0]["entity_id"]) {
$plan_id = $request_content["content"]["invoice"]["line_items"][0]["entity_id"];
}
$payment_username = $request_content["content"]["subscription"]["cf_payment_username"];
$transaction_date = $request_content["occurred_at"]["transaction"]["date"];
if (!$transaction_date) {
$transaction_date = $request_content["occurred_at"];
}
$email = $request_content["content"]["customer"]["email"];
$first_name = trim($request_content["content"]["customer"]["first_name"]);
$last_name = trim($request_content["content"]["customer"]["last_name"]);
$chargebee_customer_id = $request_content["content"]["customer"]["id"];
$tradeideas_username = $request_content["content"]["customer"]["cf_tradeideas_username"];
if ($plan_id && array_key_exists($plan_id, $all_plans)) {
$credit_days = $all_plans[$plan_id]["credit_days"];
$include_oddsmaker = $all_plans[$plan_id]["include_oddsmaker"] ? 1 : 0;
$include_ai_trading = $all_plans[$plan_id]["include_ai_trading"] ? 1 : 0;
$include_brokerage_plus = $all_plans[$plan_id]["include_brokerage_plus"] ? 1 : 0;
$include_paper_trading = $all_plans[$plan_id]["include_paper_trading"] ? 1 : 0;
$infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id);
$is_test_drive = 0;
$test_drive_start = "";
$test_drive_end = "";
$test_drive_days = "";
$itemname = $plan_id;
$addon_entity_id = $request_content["content"]["invoice"]["line_items"][0]["entity_id"];
if ($plan_id == "test-drive-dummy-subscription" && $addon_entity_id != "trade-ideas-brokerage-plus") {
$itemname = "test drive";
echo "Seems like a test drive. " . print_r($request_content["content"]["subscription"]);
//echo "Invoice. " . print_r($request_content["content"]["invoice"]);
echo "Entity-id: $addon_entity_id\n";
$is_test_drive = 1;
$test_drive_start = $request_content["content"]["subscription"]["cf_testdrivestart"];
$test_drive_end = $request_content["content"]["subscription"]["cf_testdriveend"];
}
if ($addon_entity_id == "trade-ideas-brokerage-plus") {
$itemname = $addon_entity_id;
$include_ai_trading = 1;
$include_brokerage_plus = 1;
}
echo "Found $plan_id, $email, $first_name, $last_name, $chargebee_customer_id, $tradeideas_username, $payment_username, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading\n";
$user_info = retrieve_or_create_user($email, $payment_username, $tradeideas_username, $first_name, $last_name, $email);
print_r($user_info);
$user_id = $user_info['id'];
$username = $user_info['username'];
if ($event_type == "payment_succeeded") {
$tune_transaction_id = $request_content["content"]["subscription"]["cf_tune_transaction_id"];
if($username == null)
$username = $email;
if($username != null && $tune_transaction_id != null){
$sql = "UPDATE tune_id_storage SET lead_username='$username', lead_subscription_status='active' WHERE transaction_id='$tune_transaction_id'";
$result = mysql_query($sql);
}
}
if (is_numeric($user_id)) {
$success = make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id,$oneHundredPctDiscount);
echo "Success for $user_id\n";
echo "Inserting into aggregate_revenue.\n";
$payment_amount = $request_content["content"]["transaction"]["amount"] / 100;
$contactid = $request_content["content"]["customer"]["id"];
$ordertype = "subscr_payment";
if ($event_type == "subscription_changed") {
$ordertype = "subscr_changed";
}
$paytype = "Credit Card";
$ispayment = 1;
$issubscription = 0;
$provider = "chargebee";
$insert_sql = "INSERT INTO aggregate_revenue (creation, updated, orderid, itemname, payment_gross, payment_fee, ordertype, paytype, provider, userid, contactid, username, paydate, issubscription, ispayment) VALUES (";
$insert_sql .= "NOW(), NOW(), '" . mysql_escape_string($event_id) . "', '" . mysql_escape_string($itemname) . "', '" . mysql_escape_string($payment_amount) . "', '0', '" . mysql_escape_string($ordertype) . "', '";
$insert_sql .= mysql_escape_string($paytype) . "', '" . mysql_escape_string($provider) . "', '" . mysql_escape_string($user_id) . "', '" . mysql_escape_string($contactid) . "', '";
$insert_sql .= mysql_escape_string($username) . "', FROM_UNIXTIME('" . mysql_escape_string($transaction_date) . "'), '$issubscription', '$ispayment')";
echo "Inserting $insert_sql\n";
$result = mysql_query($insert_sql);
if ($result) {
echo "Successfully inserted.\n";
} else {
echo "Error inserting. " . mysql_error() . "\n";
}
} else {
// TODO handle error
echo "Couldn't find username\n";
}
} else {
echo "Couldn't find plan_id $plan_id ";
print_r($all_plans);
}
} else if (($event_type == "subscription_cancelled" && $plan_id != "test-drive-dummy-subscription") || $event_type == "subscription_renewed") {
$event_id = $request_content["id"];
$email = $request_content["content"]["customer"]["email"];
$subscription_plan_id = $request_content["content"]["subscription"]["plan_id"];
if($event_type == "subscription_cancelled"){
assignInfusionTag($email, 1727);
$tune_transaction_id = $request_content["content"]["subscription"]["cf_tune_transaction_id"];
if($tune_transaction_id != null){
$sql = "UPDATE tune_id_storage SET lead_subscription_status='cancelled' WHERE transaction_id='$tune_transaction_id'";
$result = mysql_query($sql);
}
}
//now we send an email to marissa - but ONLY if this user is professional
$tradeideas_username = $request_content["content"]["customer"]["cf_tradeideas_username"];
$ti_username = getUsername($email,$tradeideas_username);
if ($ti_username != null) {
//get the relevant info needed to notify Marissa
$userSql = "SELECT id, status FROM users WHERE username = '" . mysql_escape_string($ti_username) . "'";
$sqlResult = mysql_query($userSql);
if ($sqlResult) {
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
$status = $row['status'];
if($status === "pro"){
if($event_type == "subscription_cancelled")
sendDevEmail($userId,$ti_username,$subscription_plan_id,"Successful subscription cancellation of Professional user.","kathleen@trade-ideas.com","Professional User Cancellation");
else if ($event_type == "subscription_renewed"){
sendDevEmail($userId,$ti_username,$subscription_plan_id,"Successful subscription renewal of Professional user.","kathleen@trade-ideas.com","Professional User Renewal");
}
}
} else {
echo "Error: " . mysql_error() . "\n";
}
}
} else if ($event_type == "subscription_created") {
$event_id = $request_content["id"];
$email = $request_content["content"]["customer"]["email"];
$first_name = trim($request_content["content"]["customer"]["first_name"]);
$last_name = trim($request_content["content"]["customer"]["last_name"]);
$payment_username = $request_content["content"]["subscription"]["cf_payment_username"];
$tradeideas_username = $request_content["content"]["customer"]["cf_tradeideas_username"];
$user_info = retrieve_or_create_user($email, $payment_username, $tradeideas_username, $first_name, $last_name, $email);
$include_oddsmaker = getFeatureStatus($all_plans,$plan_id,"include_oddsmaker");
$include_ai_trading = getFeatureStatus($all_plans,$plan_id,"include_ai_trading");
$include_brokerage_plus = getFeatureStatus($all_plans,$plan_id,"include_brokerage_plus");
$include_paper_trading = getFeatureStatus($all_plans,$plan_id,"include_paper_trading");
//seek discount-100%
$purchaseAmount = $request_content["content"]["subscription"]["plan_amount"];
// $line_items = $request_content["content"]["invoice"]["line_items"][0];
$invoice = $request_content["content"]["invoice"];
$user_id = $user_info['id'];
$username = $user_info['username'];
echo "Adding record to infusionsoft: $email, $first_name, $last_name, $plan_id\n";
$add_result = addDataToInfusionsoftContact($email, array("FirstName" => $first_name, "LastName" => $last_name, "Email" => $email, "Username" => $username));
echo "Result of add: $add_result\n";
if ($plan_id == "test-drive-dummy-subscription") {
echo "Adding tag to test drive infusionsoft: $email, $first_name, $last_name\n";
$tagAssignmentResult = assignInfusionTag($email, 1777);
echo "Result: $tagAssignmentResult\n";
exit;
}
if($invoice && $request_content["content"]["subscription"]["trial_end"] == null){ //Here we're looking specifically for a plan that has 100% off for a discount coupon, and it's not a plan with a trial
$line_items = $request_content["content"]["invoice"]["line_items"];
if($line_items){
$item = $line_items[0];
}
$discount_amount = $item["discount_amount"];
if(($discount_amount == $purchaseAmount) && is_numeric($user_id)){
$oneHundredPctDiscount = true;
$hasTrialPeriod = false;
$credit_days = $all_plans[$plan_id]["credit_days"];
$transaction_date = $request_content["content"]["subscription"]["created_at"];
$is_test_drive = 0;
make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount);
$infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id);
addInfusionsoftTags($email, $infusionsoft_tags);
exit;
}
}
if($request_content["content"]["subscription"]["trial_end"]){ //if this parameter is present, we have a subscription that has a trial period.
/*
*This else block handles subscriptions with a trial periods. In this case, the $ credit_days are computed by getting the days
* of the trial period by using the "trial_start" and "trial_end" values obtained from the firing of the webhook..
*/
$is_test_drive = 0;
$transaction_date = $request_content["content"]["subscription"]["created_at"];
$planId = $request_content["content"]["subscription"]["plan_id"];
$result = ChargeBee_Plan::retrieve($planId);
$credit_days = getCreditDaysForTrialPeriod($result);
if (is_numeric($user_id)){
$hasTrialPeriod = true;
make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount);
$infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id);
addInfusionsoftTags($email, $infusionsoft_tags);
}
exit;
}
if($request_content["content"]["subscription"]["gift_id"]){ // we want to create record of future user but not activated. That will happen in the subscription-started event(recipient claims gift)
$is_test_drive = 0;
if (is_numeric($user_id)){
$hasTrialPeriod = false;
make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount);
}
exit;
}else{
echo "Adding tag to payment infusionsoft: $email, $first_name, $last_name\n";
$infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id);
addInfusionsoftTags($email, $infusionsoft_tags);
}
$payment_amount = $request_content["content"]["transaction"]["amount"] / 100;
$transaction_date = $request_content["occurred_at"];
$contactid = $request_content["content"]["customer"]["id"];
$ordertype = "subscr_signup";
$couponCode = getCouponCode($request_content["content"]);
$paytype = "Credit Card";
$ispayment = 0;
$issubscription = 1;
$provider = "chargebee";
$itemname = $plan_id;
$already_entered_sql = "SELECT id FROM aggregate_revenue WHERE orderid = '" . mysql_escape_string($event_id) . "' LIMIT 1";
echo "Using $already_entered_sql\n";
$sqlResult = mysql_query($already_entered_sql);
$row = mysql_fetch_assoc($sqlResult);
$already_entered = is_numeric($row['id']);
if ($already_entered) {
echo "Already entered, so skipping this.\n";
exit;
}
$insert_sql = "INSERT INTO aggregate_revenue (creation, updated, orderid, itemname, discountname,payment_gross, payment_fee, ordertype, paytype, provider, userid, contactid, username, paydate, issubscription, ispayment) VALUES (";
$insert_sql .= "NOW(), NOW(), '" . mysql_escape_string($event_id) . "', '" . mysql_escape_string($itemname) . "','" . mysql_escape_string($couponCode) . "','" . mysql_escape_string($payment_amount) . "', '0', '" . mysql_escape_string($ordertype) . "', '";
$insert_sql .= mysql_escape_string($paytype) . "', '" . mysql_escape_string($provider) . "', '" . mysql_escape_string($user_id) . "', '" . mysql_escape_string($contactid) . "', '";
$insert_sql .= mysql_escape_string($username) . "', FROM_UNIXTIME('" . mysql_escape_string($transaction_date) . "'), '$issubscription', '$ispayment')";
echo "Inserting $insert_sql\n";
$result = mysql_query($insert_sql);
if ($result) {
echo "Successfully inserted.\n";
} else {
echo "Error inserting. " . mysql_error() . "\n";
}
} else if($event_type == "subscription_started") {
if ($request_content["content"]["subscription"]["gift_id"]) { //activates the subscription when gift recipient claims gift
$is_test_drive = 0;
$include_oddsmaker = getFeatureStatus($all_plans,$plan_id,"include_oddsmaker");
$include_ai_trading = getFeatureStatus($all_plans,$plan_id,"include_ai_trading");
$include_brokerage_plus = getFeatureStatus($all_plans,$plan_id,"include_brokerage_plus");
$include_paper_trading = getFeatureStatus($all_plans,$plan_id,"include_paper_trading");
$infusionsoft_tags = getInfusionsoftTags($all_plans,$plan_id);
$transaction_date = $request_content["content"]["subscription"]["created_at"];
$start = $request_content["content"]["subscription"]["activated_at"];
$end = $request_content["content"]["subscription"]["cancelled_at"];
$credit_days = getCreditDaysGiftPeriod($start,$end);
$email = $request_content["content"]["customer"]["email"];
$user_id = getIdFromGiftRecipient($email);
if (is_numeric($user_id)){
$hasTrialPeriod = false;
$isGift = true;
make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount);
addInfusionsoftTags($email, $infusionsoft_tags);
}
exit;
}
}
function addInfusionsoftTags($email, $infusionsoft_tags) {
echo "In addInfusionsoftTags with $email and tags $infusionsoft_tags
";
if ($infusionsoft_tags) {
$tags = explode(",", $infusionsoft_tags);
foreach ($tags as $tag) {
$tag = trim($tag);
echo "Assigning tag $tag to $email\n";
assignInfusionTag($email, $tag);
}
} else {
assignInfusionTag($email, 250);
assignInfusionTag($email, 166);
}
}
function getCouponCode($content){
$retVal = $content["invoice"];
if($retVal != null)
$retVal = $content["invoice"]["discounts"][0];
if($retVal != null)
$retVal = $content["invoice"]["discounts"][0]["entity_id"];
if($retVal != null)
return $retVal;
else
return "";
}
function logRequest($request_content, $event_type) {
$yyyymmdd = date("Ymd");
$logFile = "/var/www/Supporting_Scripts/chargebee_logs/chargebee_webhook.$yyyymmdd.log";
echo "Opening log: $logFile\n";
$message = "++ new request\n";
foreach ($_SERVER as $h => $v) {
$message .= "$h = $v\n";
}
$message .= file_get_contents('php://input') . "\n";
$message .= print_r($request_content, true) . "\n";
$fh = fopen($logFile, 'a');
if ($fh) {
echo "Opened file successfully.\n";
fwrite($fh, $message);
fclose($fh);
} else {
$last_error = error_get_last();
echo "Didn't open file successfully: " . print_r($last_error, true) . "\n";
}
//$sendTo = 'dmabe@trade-ideas.com';
//echo "Sending mail: " . $sendTo . "
";
//mail($sendTo, "Payment Processed from Chargebee: $event_type", $message);
}
function retrieve_or_create_user($email, $paymentusername, $tiusername, $firstName, $lastName) {
$username = $paymentusername;
if (!$username && $tiusername) {
$username = $tiusername;
}
echo "Using username $username ($paymentusername, $tiusername)\n";
if ($username) {
$userSql = "SELECT id, username FROM mydb.users WHERE username = '" . mysql_escape_string($username) . "'";
echo "userSql=$userSql\n";
$sqlResult = mysql_query($userSql);
if ($sqlResult) {
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
echo "Checking userId $userId\n";
if (preg_match("/^\d+$/", $userId)) {
return $row;
}
} else {
echo "Error: " . mysql_error() . "\n";
}
}
$lower_email = strtolower($email);
$userSql = "SELECT id, username FROM users WHERE LOWER(username) = '" . mysql_escape_string($lower_email) . "'";
$sqlResult = mysql_query($userSql);
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
if (preg_match("/^\d+$/", $userId)) {
return $row;
} else {
$logMessage .= "Creating user for $email\n";
echo "Creating user for $email\n";
createUser($firstName, $lastName, $email);
$userSql = "SELECT id, username FROM users WHERE username = '" . mysql_escape_string($email) . "'";
$sqlResult = mysql_query($userSql);
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
if (preg_match("/^\d+$/", $userId)) {
return $row;
}
}
}
function createUser($firstName, $lastName, $email) {
$userCreateSql = "INSERT INTO users (username, password, creation, real_name, email, initial_ip, wl_include, us_mail) VALUES (\""
. mysql_escape_string($email)
. '", "'
. generateRandomString()
. '", now(), "'
. mysql_escape_string($firstName . " " . $lastName) . '", "'
. mysql_escape_string($email) . '", "'
. mysql_escape_string($_SERVER["REMOTE_ADDR"]) . '", "'
. mysql_escape_string($wl_include) . '", "N")';
$userCreationResult = mysql_query($userCreateSql);
$logMessage .= "Creating user with sql: $userCreateSql\n";
$userid = mysql_insert_id();
}
function usernameExists($email, $paymentusername, $tiusername) {
$username = $paymentusername;
if (!$username && $tiusername) {
$username = $tiusername;
}
if ($username) {
$userSql = "SELECT id FROM users WHERE username = '" . mysql_escape_string($username) . "'";
$sqlResult = mysql_query($userSql);
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
if (preg_match("/^\d+$/", $userId)) {
return true;
}
}
$userSql = "SELECT id FROM users WHERE username = '" . mysql_escape_string($email) . "'";
$sqlResult = mysql_query($userSql);
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
if (preg_match("/^\d+$/", $userId)) {
return true;
}
return false;
}
function getUsername($mail,$tiusername){
if($tiusername != null)
return trim($tiusername);
//check if $email is the $tiusername
$email = trim(strtolower($mail));
$userSql = "SELECT * FROM users WHERE username = '" . mysql_escape_string($email) . "'";
$result = mysql_query($userSql);
$rowcount= mysql_num_rows($result);
if($rowcount > 0)
return $email;
else
return null;
}
function getIdFromGiftRecipient($mail){ //during the gift process, the username is the email address
$email = trim(strtolower($mail));
$userSql = "SELECT id FROM users WHERE username = '" . mysql_escape_string($email) . "'";
$sqlResult = mysql_query($userSql);
$row = mysql_fetch_assoc($sqlResult);
$userId = $row['id'];
return $userId;
}
function sendDevEmail($contact_id,$ti_username,$subscriptionName,$message,$recipient,$sub){
$to = $recipient;
$subject = $sub;
$headers = "From: Trade-Ideas \r\n"
. "MIME-Version: 1.0\r\n"
. "Content-type: text/plain; charset=iso-8859-1\r\n";
$txt = "The user's contact id is: " . $contact_id . " The user's ti_username is: " . $ti_username . " The subscription is: " .$subscriptionName;
$message = $message . "\r\n" . $txt;
mail($to,$subject,$message,$headers);
}
function make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount) {
global $chargebee_site_id;
$test_drive_start_time = '08:00:00';
// update_user_info takes two arrays to make changes. The first has values that get escaped before updating the database.
// The second has special values that don't get escaped, like "now()"
$additional_notes = "";
$user_info_sql = "SELECT * FROM users WHERE id = '" . mysql_escape_string($user_id) . "'";
$user_info_result = mysql_query($user_info_sql);
$user_info = null;
if ($user_info_result) {
$user_info = mysql_fetch_assoc($user_info_result);
}
if ($is_test_drive) {
$trial_end = "'$test_drive_start' + INTERVAL 7 DAY";
if ($test_drive_end) {
$trial_end = "'$test_drive_end 00:00:00'";
} elseif (is_numeric($test_drive_days)) {
$trial_end = "'$test_drive_start' + INTERVAL $test_drive_days DAY";
}
if ($user_info) {
$found_test_drive = 0;
$test_drive_info_sql = "SELECT COUNT(*) AS cnt FROM free_preview WHERE user_id = '" . mysql_escape_string($user_id) . "' AND DATE(scheduled_start) = '" . mysql_escape_string($test_drive_start) . "'";
$test_drive_info_result = mysql_query($test_drive_info_sql);
if ($test_drive_info_result) {
$test_drive_info = mysql_fetch_assoc($test_drive_info_result);
if ($test_drive_info['cnt'] > 0) {
$found_test_drive = 1;
}
}
if ($found_test_drive) {
$additional_notes = "Duplicate test drive for $test_drive_start";
} else {
$free_preview_sql = "INSERT INTO free_preview (contactlastname, email, scheduled_start, trial_start, trial_end, status,
hadaccount, authorization_expires, oddsmaker_free, user_id, username, contactid, creation, updated) VALUES
('" . mysql_escape_string($user_info['real_name']) . "'," .
"'" . mysql_escape_string($user_info['email']) . "'," .
"'" . mysql_escape_string($test_drive_start) . " $test_drive_start_time'," .
"NULL," .
$trial_end . ",".
"'queued'," .
"1," . # had account
"'" . mysql_escape_string($user_info['authorization_expires']) . "'," .
"'" . mysql_escape_string($user_info['oddsmaker_free']) . "'," .
"'" . mysql_escape_string($user_id) . "'," .
"'" . mysql_escape_string($user_info['username']) . "'," .
"NULL," .
"NOW()," .
"NOW())";
$logMessage .= "mysql query: $free_preview_sql\n";
$free_preview_result = mysql_query($free_preview_sql);
if ($free_preview_result) {
$updates_escaped = array(
"authorization_type" => "initial_demo",
);
$updates_raw = array();
$additional_notes = "Test Drive Record created";
} else {
$additional_notes = "Test Drive Record creation error";
$logMessage .= "mysql error: " . mysql_error() . "\n";
mail('dmabe@trade-ideas.com', 'Infusionsoft Paid Trial Error', $logMessage);
}
}
}
} else {
$is_nyse_redo_disabled = $user_info["nyse_disabled_authorization_expires"] && $user_info["nyse_disabled_authorization_expires"] != "0000-00-00 00:00:00";
$updates_escaped = array(
"authorization_type" => "creditcard",
);
$updates_raw = array();
# this can be reached if event_type is payment_succeeded OR subscription_changed. If subscription_changed, then don't add time to the account
# since the payment_succeeded might not be coming.
if ($event_type == "payment_succeeded" && is_numeric($credit_days) && $credit_days > 0) {
if ($is_nyse_redo_disabled) {
$updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
} else {
$updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
}
}
if ($event_type == "subscription_created" && $hasTrialPeriod == true && is_numeric($credit_days) && $credit_days > 0) {
if ($is_nyse_redo_disabled) {
$updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
} else {
$updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
}
}
if ($event_type == "subscription_created" && $oneHundredPctDiscount == true && $hasTrialPeriod == false && is_numeric($credit_days) && $credit_days > 0) {
if ($is_nyse_redo_disabled) {
$updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
} else {
$updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
}
}
if ($event_type == "subscription_started" && $isGift == true && is_numeric($credit_days) && $credit_days > 0) { //make sure this is for gift only TODO //&& $isGift == true
if ($is_nyse_redo_disabled) {
$updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
} else {
$updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)";
}
}
if ($include_oddsmaker) {
$updates_raw["oddsmaker_free"] = "NULL";
}
$misc_permissions_start = "misc_permissions";
if ($include_brokerage_plus) {
$updates_raw["misc_permissions"] .= $misc_permissions_start . " | 1";
$misc_permissions_start = "";
}
if ($include_ai_trading) {
$updates_raw["misc_permissions"] .= $misc_permissions_start . " | 2";
$misc_permissions_start = "";
}
if ($include_paper_trading) {
$updates_raw["misc_permissions"] .= $misc_permissions_start . " | 4";
$misc_permissions_start = "";
}
if ($event_type == "subscription_changed" && preg_match("/-standard-/", $plan_id)) {
$updates_raw["oddsmaker_free"] = 10;
$updates_raw["misc_permissions"] = 1;
}
}
$admin_note = "Chargebee eventid: $event_id, planid: $plan_id";
if ($additional_notes) {
$admin_note = $admin_note . ": $additional_notes";
}
$success = update_user_info($user_id, $updates_escaped, $updates_raw, false, $admin_note);
return $success;
}
function generateRandomString($length = 10) {
$characters = '023456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
function addDataToInfusionsoftContact($email, $data) {
$app = new iSDK;
$log = "";
if ($app->cfgCon(INFUSION_CONNECTION_NAME)) {
$returnFields = array('Id', 'Groups');
$dups = $app->findByEmail($email, $returnFields);
if (!empty($dups)) {
$existingContactID = $dups[0]['Id'];
$log .= "Updating $email using contact id: $existingContactID with data: " . print_r($data, true) . "\n";
$app->updateCon($existingContactID, $data);
} else {
$log .= "Adding contact $email with data: " . print_r($data, true) . "\n";
$contactId = $app->addCon($data);
$log .= "Contact id is $contactId\n";
}
}
return $log;
}
function assignInfusionTag($email, $tagId) {
$resultLog = "";
$resultLog .= "Going to assign tag: $tagId to email $email\n";
$app = new iSDK;
if ($app->cfgCon(INFUSION_CONNECTION_NAME)) {
$contactInfo = array(
'Email' => $email,
);
$returnFields = array('Id', 'Groups');
$dups = $app->findByEmail($contactInfo['Email'], $returnFields);
if (!empty($dups)) {
$existingContactID = $dups[0]['Id'];
$existingGroups = $dups[0]['Groups'];
$groups = explode(",", $existingGroups);
if (!$groups[$tagId]) {
$resultLog .= "Assigning tag to existing contact with id: $existingContactID\n";
$app->grpAssign($existingContactID, $tagId);
} else {
$resultLog .= "Existing contact with id: $existingContactID already has tag assigned.\n";
}
} else {
$resultLog .= "Couldn't find contact for email: $email to assign tag to.\n";
}
}
return $resultLog;
}
function getCreditDaysGiftPeriod($start,$end){
$diff = abs($end - $start);
return ceil($diff / (60 * 60 * 24));
}
function getCreditDaysForTrialPeriod($result){
$plan = $result->plan();
$days = 0;
$tPeriod = $plan->trialPeriod;
$unit = $plan->trialPeriodUnit;
if($unit == "month")
$days = 30;
else
$days = 1;
return $tPeriod * $days;
}
function getInfusionsoftTags($allPlans, $plan_id) {
if ($plan_id && array_key_exists($plan_id, $allPlans)) {
if (array_key_exists("infusionsoft_tags", $allPlans[$plan_id])) {
return $allPlans[$plan_id]["infusionsoft_tags"];
}
}
return "";
}
function getFeatureStatus($allPlans,$plan_id,$include){ //this is for computing features (i.e. oddsmaker,papertrade..) for certain types of subscriptions (i.e. those with trial, gifts..) where we're not focusing on the "payment_succeeded" event
if ($plan_id && array_key_exists($plan_id, $allPlans)){
return $allPlans[$plan_id][$include] ? 1 : 0;
}
return 0;
}
?>