#!/usr/local/bin/php
<?php
/*
* (C) 2013, 2014 Christopher Olsen <cwolsen@uBixOS.com>
*
* $Id: dialer_cron.php 2230 2015-06-17 19:03:56Z reddawg $
*
*/
if (file_exists("/tmp/dialer_cron.lock")) {
print "Script is already running.\n";
exit(0);
}
$working_dir = dirname(__FILE__);
$log_file = fopen($working_dir . "/../log/dialer_cron.log", "a");
fwrite($log_file, "Start: " . date("Y-m-d H:i:s") . "\n");
system("/usr/bin/touch /tmp/dialer_cron.lock");
/* Connect To The Required Databases */
$data['ubix_db'] = new mysqli("10.0.10.59", "ubixcube", "5558585", "ubixcube");
//$data['press1_db'] = new mysqli("10.0.30.62", "dialer", "5558585", "as_dialer_002");
$data['press1_db'] = new mysqli("10.0.10.59", "dialer", "5558585", "as_dialer_002");
/* Get The Last Time This Script Ran */
$query = "SELECT value FROM system_var WHERE name = 'dialer_cron_last_run'";
if (($result = $data['ubix_db']->query($query)) === false) {
fwrite($log_file, "MySQL Error: Line " . __LINE__ . "\n");
exit(1);
}
$qData = $result->fetch_row();
$last_run = intval($qData[0]);
$result->free();
$bTime = time();
$sdate = date("Y-m-d", $last_run);
$edate = date("Y-m-d", $bTime);
fwrite($log_file, "Info - sdate: " . $sdate . ", edate: " . $edate . ", last_run: " . $last_run . ", bTime: " . $bTime . "\n");
/*
* Align Broadcast Campaigns Calls To 6 Seconds
*
* Prepare all the records to be tallied before with align them. This ensures that the dialy spending and retainer are adjusted correctly.
*/
$query = "UPDATE vicidial_log SET tallied = 1 WHERE tallied = 0 AND call_status > 0 AND call_date >= '$sdate 00:00:00' AND call_date <= '$edate 23:59:59' AND end_epoch IS NOT NULL";
if ($data['press1_db']->query($query) === true)
fwrite($log_file, "Broadcast Campaign Affected Rows: " . $data['press1_db']->affected_rows . "\n");
else {
fwrite($log_file, "MySQL Error: Line " . __LINE__ . "\n");
exit(1);
}
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
$query = "SELECT uniqueid,lead_id,length_in_sec,status,tallied,call_status FROM vicidial_log WHERE length_in_sec > 0 AND call_date >= '$sdate 00:00:00' and call_date <= '$edate 23:59:59' AND end_epoch IS NOT NULL AND MOD(length_in_sec,6) != 0";
$query = "SELECT uniqueid,lead_id,length_in_sec,status,tallied,call_status FROM vicidial_log WHERE length_in_sec > 0 AND call_date >= '$sdate 00:00:00' and call_date <= '$edate 23:59:59' AND tallied = 1 AND MOD(length_in_sec,6) != 0";
$result = $data['press1_db']->query($query);
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
if ($result === false)
fwrite($log_file, "MySQL Error: Line " . __LINE__ . "\n");
else {
$rows = $result->num_rows;
if ($rows > 0) {
while ($qData = $result->fetch_assoc()) {
fwrite($log_file, "MOD: " . $qData['tallied'] . ":" . $qData['uniqueid'] . ":" . $qData['lead_id'] . ":" . $qData['length_in_sec'] . ":" . $qData['status'] . ":" . $qData['call_status'] . "\n");
/* Set The Played Message To A Default Of 36 Seconds */
if ($qData['status'] == "PM") {
if ($qData['length_in_sec'] != 36) {
$query = "UPDATE vicidial_log SET length_in_sec = 36 WHERE uniqueid = '" . $qData['uniqueid'] . "' AND lead_id = " . $qData['lead_id'];
$data['press1_db']->query($query);
}
}
else {
$lis = ceil($qData['length_in_sec']/6) * 6;
$query = "UPDATE vicidial_log SET length_in_sec = $lis WHERE uniqueid = '" . $qData['uniqueid'] . "' AND lead_id = " . $qData['lead_id'];
$data['press1_db']->query($query);
}
}
$result->free();
fwrite($log_file, "Broadcast Campaigns: 6 Second Aligned " . $rows . " Rows.\n\n");
}
/* End Align Broadcast Campaigns */
}
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
/* Reduce Retainer For Press 1 */
$query = "SELECT aid, first_name, email, press1_group, press1_prepay, press1_cpm, company FROM accounts WHERE press1_group != 'NA'";
if (($aResult = $data['ubix_db']->query($query)) === false) {
fwrite($log_file, "MySQL Error: Line - " . __LINE__ . ", Query - [$query]\n");
exit(1);
}
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
while ($aData = $aResult->fetch_assoc()) {
$query = "SELECT campaign_id, campaign_name, daily_limit, daily_total, daily_notification, active FROM vicidial_campaigns WHERE user_group = '" . $aData['press1_group'] . "'";
if (($qResult = $data['press1_db']->query($query)) === false) {
fwrite($log_file, "MySQL Error: Line - " . __LINE__ . ", Query - [$query]\n");
exit(1);
}
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
while ($qData = $qResult->fetch_assoc()) {
$cost = 0.00;
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
$query = "SELECT SUM(length_in_sec) as total_time,COUNT(*) as total_records FROM vicidial_log WHERE campaign_id = " . $qData['campaign_id'] . " AND tallied = 1";
print "[$query]\n";
$cResult = $data['press1_db']->query($query);
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
if ($cResult->num_rows > 0) {
$cData = $cResult->fetch_assoc();
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
if ($cData['total_time'] > 0) {
$cost = ($cData['total_time']/60) * $aData['press1_cpm'];
$aData['press1_prepay'] -= $cost;
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
fwrite($log_file, "TT: [" . $cData['total_time'] . ":" . $aData['press1_cpm'] . "][" . $qData['daily_total'] . ":" . $cost . "][" . $cData['total_records'] . "]\n");
$daily_total = $cost + $qData['daily_total'];
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
if ($daily_total > $qData['daily_limit']) {
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
$query = "UPDATE vicidial_campaigns SET daily_total = " . $daily_total . ", active = 'N' WHERE campaign_id = '" . $qData['campaign_id'] . "'";
if ($qData['active'] == "Y")
sendNotification($aData['email'],$aData['first_name'],$qData['campaign_name'],$qData['campaign_id'],$qData['daily_limit'],$daily_total,100);
}
else {
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
$lP = floor(($daily_total/$qData['daily_limit'])/.25) * 25;
if ($qData['daily_notification'] < $lP) {
$query = "UPDATE vicidial_campaigns SET daily_total = " . $daily_total . ",daily_notification = " . $lP . " WHERE campaign_id = '" . $qData['campaign_id'] . "'";
sendNotification($aData['email'],$aData['first_name'],$qData['campaign_name'],$qData['campaign_id'],$qData['daily_limit'],$daily_total,$lP);
}
else
$query = "UPDATE vicidial_campaigns SET daily_total = " . $daily_total . " WHERE campaign_id = '" . $qData['campaign_id'] . "'";
}
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
if ($data['press1_db']->query($query) === false)
fwrite($log_file,"MySQL Error - [$query][$cost] on line " . __LINE__ . "\n");
else {
$query = "UPDATE accounts SET press1_prepay = " . $aData['press1_prepay'] . " WHERE aid = " . $aData['aid'];
if ($data['ubix_db']->query($query) === false)
fwrite($log_file,"MySQL Error - [$query][$cost] on line " . __LINE__ . "\n");
$query = "UPDATE vicidial_log SET tallied = $bTime WHERE campaign_id = " . $qData['campaign_id'] . " AND tallied = 1";
if ($data['press1_db']->query($query) === false)
fwrite($log_file,"MySQL Error - [$query][$cost] on line " . __LINE__ . "\n");
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
fwrite($log_file, "MySQL: [" . $query . "]\n");
fwrite($log_file, "Adjusted Broadcast Campaign Retainer By: $" . $cost . " to " . $aData['press1_prepay'] . " and Daily Total to " . $daily_total . " for " . $qData['campaign_id'] . ":" . $aData['company'] . " with bTime - $bTime\n\n");
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
}
}
}
$cResult->free();
}
$qResult->free();
}
$aResult->free();
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
$query = "UPDATE system_var SET value = '" . $bTime . "' WHERE name = 'dialer_cron_last_run'";
$data['ubix_db']->query($query);
fwrite($log_file, "Adjust System Var: [$query]\n");
print "[" . __LINE__ . ":" . date("m/d/Y H:i:s") . "]\n";
fwrite($log_file, "Finish: " . date("Y-m-d H:i:s") . "\n");
fclose($log_file);
system("/bin/rm /tmp/dialer_cron.lock");
function sendNotification($recipient, $first_name, $campaign_name, $campaign_id, $limit, $total, $lP = 100) {
$random_hash = md5(date('r', time()));
$message_body = "--PHP-alt-" . $random_hash . "\nContent-Type: text/plain; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: 7bit\n\n";
if ($lP == 100) {
$subject = "uBix Dialer Notification - Daily Spending Limit Has Been Reached";
$message_body .= "Dear $first_name,\n\nWe wanted to let you know that daily spending on " . $campaign_name . " has reached $" . number_format($total,2) . "\n\n";
$message_body .= "Your daily limit for this campaign is $" . number_format($limit,2) . "\n\nYour campaign has been automatically disabled.\n\nYou may want to consider adjusting your daily spending limit to reactivate your campaign.\n\nSincerely,\n\nuBix Technologies Support\n516-986-UBIX (8249)\n\n";
$message_body .= "--PHP-alt-" . $random_hash . "\nContent-Type: text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: 7bit\n\n";
$message_body .= "Dear $first_name,<br><br>\n\nWe wanted to let you know that daily spending on " . $campaign_name . " has reached $" . number_format($total,2) . "<br>\n<br>\n";
$message_body .= "Your daily limit for this campaign is $" . number_format($limit,2) . "<br>\n<br>\nYour campaign has been automatically disabled.<br>\n<br>\nYou may want to consider adjusting your <a href=\"https://manage.ubixtechnologies.net/dialer/edit.php?data[cid]=" . $campaign_id . "\">daily spending limit</a> to reactivate your campaign.<br>\n<br>\nSincerely,<br>\n<br>\nuBix Technologies Support<br>\n516-986-UBIX (8249)<br>\n\n";
}
else {
$subject = "uBix Dialer Notification - Daily Spending Has Reached " . $lP . "%";
$message_body .= "Dear $first_name,\n\nWe wanted to let you know that daily spending on " . $campaign_name . " has reached $" . number_format($total,2) . "\n\n";
$message_body .= "Your daily limit for this campaign is $" . number_format($limit,2) . "\n\nYou may want to consider adjusting your dial speed if you feel this has been reached to fast or slow.\n\nSincerely,\n\nuBix Technologies Support\n516-986-UBIX (8249)\n\n";
$message_body .= "--PHP-alt-" . $random_hash . "\nContent-Type: text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: 7bit\n\n";
$message_body .= "Dear $first_name,<br><br>\n\nWe wanted to let you know that daily spending on " . $campaign_name . " has reached $" . number_format($total,2) . "<br>\n<br>\n";
$message_body .= "Your daily limit for this campaign is $" . number_format($limit,2) . "<br>\n<br>\nYou may want to consider adjusting your <a href=\"https://manage.ubixtechnologies.net/dialer/edit.php?data[cid]=" . $campaign_id . "\">dial speed</a> if you feel this has been reached to fast or slow.<br>\n<br>\nSincerely,<br>\n<br>\nuBix Technologies Support<br>\n516-986-UBIX (8249)<br>\n\n";
}
$message_body .= "--PHP-alt-" . $random_hash . "--\n";
$header = "From: uBix Technologies <support@ubixtechnologies.com>\r\n";
$header .= "MIME-Version: 1.0\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"\n";
mail($recipient, $subject, $message_body, $header);
mail("cwolsen@uBixOS.com", $subject, $message_body, $header);
}
?>