diff --git a/agc_2-X/trunk/www/vicidial/AST_CLOSERstats_v2.php b/agc_2-X/trunk/www/vicidial/AST_CLOSERstats_v2.php
index 7a297e8c..004a68be 100644
--- a/agc_2-X/trunk/www/vicidial/AST_CLOSERstats_v2.php
+++ b/agc_2-X/trunk/www/vicidial/AST_CLOSERstats_v2.php
@@ -57,6 +57,7 @@
# 160227-1101 - Uniform form format
# 160714-2348 - Added and tested ChartJS features for more aesthetically appealing graphs
# 160819-0054 - Fixed chart bugs
+# 161207-2037 - Fix for issue #982, formatting
#
$startMS = microtime();
@@ -2971,9 +2972,9 @@ $TOTavg=0;
$ASCII_text="\n";
$ASCII_text.="---------- "._QXZ("AGENT STATS",17)." "._QXZ("DOWNLOAD")."\n";
-$ASCII_text.="+--------------------------+------------+------------+--------+\n";
-$ASCII_text.="| "._QXZ("AGENT",24)." | $rpt_type_verbiages | "._QXZ("TIME H:M:S",10)." |"._QXZ("AVERAGE",8)."|\n";
-$ASCII_text.="+--------------------------+------------+------------+--------+\n";
+$ASCII_text.="+--------------------------+------------+------------+---------+\n";
+$ASCII_text.="| "._QXZ("AGENT",24)." | $rpt_type_verbiages | "._QXZ("TIME H:M:S",10)." | "._QXZ("AVERAGE",8)."|\n";
+$ASCII_text.="+--------------------------+------------+------------+---------+\n";
$CSV_text7.="\n\""._QXZ("AGENT STATS")."\"\n";
$CSV_text7.="\""._QXZ("AGENT")."\",\"$rpt_type_verbiages\",\""._QXZ("TIME H:M:S")."\",\""._QXZ("AVERAGE")."\"\n";
@@ -3026,7 +3027,9 @@ while ($i < $users_to_print)
$USERtotTALK_MS = sprintf("%9s", $USERtotTALK_MS);
$USERavgTALK_MS = sprintf("%6s", $USERavgTALK_MS);
- $ASCII_text.="| $user - $full_name | $USERcalls | $USERtotTALK_MS | $USERavgTALK_MS |\n";
+# $ASCII_text.="| $user - $full_name | $USERcalls | $USERtotTALK_MS | $USERavgTALK_MS |\n";
+ $str_full_name = substr(($user . " - " . $full_name), 0, 24);
+ $ASCII_text.="| ".substr(($user . " - " . $full_name), 0, 24)." | $USERcalls | $USERtotTALK_MS | $USERavgTALK_MS |\n";
$CSV_text7.="\"$user - $full_name\",\"$USERcalls\",\"$USERtotTALK_MS\",\"$USERavgTALK_MS\"\n";
$i++;
@@ -3044,9 +3047,9 @@ $TOTcalls = sprintf("%10s", $TOTcalls);
$TOTtime = sprintf("%8s", $TOTtime);
$TOTavg = sprintf("%6s", $TOTavg);
-$ASCII_text.="+--------------------------+------------+------------+--------+\n";
+$ASCII_text.="+--------------------------+------------+------------+---------+\n";
$ASCII_text.="| "._QXZ("TOTAL Agents:",13)." $TOTagents | $TOTcalls | $TOTtime | $TOTavg |\n";
-$ASCII_text.="+--------------------------+------------+------------+--------+\n";
+$ASCII_text.="+--------------------------+------------+------------+---------+\n";
$GRAPH_text="";
# USE THIS FOR multiple graphs, use pipe-delimited array elements, dataset_name|index|link_name
diff --git a/agc_2-X/trunk/www/vicidial/AST_agentDIDstats.php b/agc_2-X/trunk/www/vicidial/AST_agentDIDstats.php
new file mode 100644
index 00000000..8783b4db
--- /dev/null
+++ b/agc_2-X/trunk/www/vicidial/AST_agentDIDstats.php
@@ -0,0 +1,768 @@
+ LICENSE: AGPLv2
+#
+# CHANGES
+#
+# 161207-1952 - First build
+#
+
+$startMS = microtime();
+
+require("dbconnect_mysqli.php");
+require("functions.php");
+
+$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER'];
+$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW'];
+$PHP_SELF=$_SERVER['PHP_SELF'];
+if (isset($_GET["group"])) {$group=$_GET["group"];}
+ elseif (isset($_POST["group"])) {$group=$_POST["group"];}
+if (isset($_GET["query_date"])) {$query_date=$_GET["query_date"];}
+ elseif (isset($_POST["query_date"])) {$query_date=$_POST["query_date"];}
+if (isset($_GET["end_date"])) {$end_date=$_GET["end_date"];}
+ elseif (isset($_POST["end_date"])) {$end_date=$_POST["end_date"];}
+if (isset($_GET["shift"])) {$shift=$_GET["shift"];}
+ elseif (isset($_POST["shift"])) {$shift=$_POST["shift"];}
+if (isset($_GET["submit"])) {$submit=$_GET["submit"];}
+ elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];}
+if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];}
+ elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];}
+if (isset($_GET["DB"])) {$DB=$_GET["DB"];}
+ elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];}
+if (isset($_GET["file_download"])) {$file_download=$_GET["file_download"];}
+ elseif (isset($_POST["file_download"])) {$file_download=$_POST["file_download"];}
+if (isset($_GET["report_display_type"])) {$report_display_type=$_GET["report_display_type"];}
+ elseif (isset($_POST["report_display_type"])) {$report_display_type=$_POST["report_display_type"];}
+if (isset($_GET["search_archived_data"])) {$search_archived_data=$_GET["search_archived_data"];}
+ elseif (isset($_POST["search_archived_data"])) {$search_archived_data=$_POST["search_archived_data"];}
+
+if (strlen($shift)<2) {$shift='ALL';}
+
+$report_name = 'Agent DID Report';
+$db_source = 'M';
+if ($file_download>0) {$DB="";}
+
+#############################################
+##### START SYSTEM_SETTINGS LOOKUP #####
+$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,enable_languages,language_method FROM system_settings;";
+$rslt=mysql_to_mysqli($stmt, $link);
+if ($DB) {$MAIN.="$stmt\n";}
+$qm_conf_ct = mysqli_num_rows($rslt);
+if ($qm_conf_ct > 0)
+ {
+ $row=mysqli_fetch_row($rslt);
+ $non_latin = $row[0];
+ $outbound_autodial_active = $row[1];
+ $slave_db_server = $row[2];
+ $reports_use_slave_db = $row[3];
+ $SSenable_languages = $row[4];
+ $SSlanguage_method = $row[5];
+ }
+##### END SETTINGS LOOKUP #####
+###########################################
+
+### ARCHIVED DATA CHECK CONFIGURATION
+$archives_available="N";
+$table_name="vicidial_did_log";
+$archive_table_name=use_archive_table($table_name);
+if ($archive_table_name!=$table_name) {$archives_available="Y";}
+
+if ($search_archived_data)
+ {
+ $vicidial_did_log_table=use_archive_table("vicidial_did_log");
+ $vicidial_closer_log_table=use_archive_table("vicidial_closer_log");
+ }
+else
+ {
+ $vicidial_did_log_table="vicidial_did_log";
+ $vicidial_closer_log_table="vicidial_closer_log";
+ }
+#############
+
+if ($non_latin < 1)
+ {
+ $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_USER);
+ $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_PW);
+ }
+else
+ {
+ $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW);
+ $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER);
+ }
+
+$stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';";
+if ($DB) {echo "|$stmt|\n";}
+$rslt=mysql_to_mysqli($stmt, $link);
+$sl_ct = mysqli_num_rows($rslt);
+if ($sl_ct > 0)
+ {
+ $row=mysqli_fetch_row($rslt);
+ $VUselected_language = $row[0];
+ }
+
+$auth=0;
+$reports_auth=0;
+$admin_auth=0;
+$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'REPORTS',1);
+if ($auth_message == 'GOOD')
+ {$auth=1;}
+
+if ($auth > 0)
+ {
+ $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 7 and view_reports='1';";
+ if ($DB) {echo "|$stmt|\n";}
+ $rslt=mysql_to_mysqli($stmt, $link);
+ $row=mysqli_fetch_row($rslt);
+ $admin_auth=$row[0];
+
+ $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 6 and view_reports='1';";
+ if ($DB) {echo "|$stmt|\n";}
+ $rslt=mysql_to_mysqli($stmt, $link);
+ $row=mysqli_fetch_row($rslt);
+ $reports_auth=$row[0];
+
+ if ($reports_auth < 1)
+ {
+ $VDdisplayMESSAGE = _QXZ("You are not allowed to view reports");
+ Header ("Content-type: text/html; charset=utf-8");
+ echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n";
+ exit;
+ }
+ if ( ($reports_auth > 0) and ($admin_auth < 1) )
+ {
+ $ADD=999999;
+ $reports_only_user=1;
+ }
+ }
+else
+ {
+ $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again");
+ if ($auth_message == 'LOCK')
+ {
+ $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes");
+ Header ("Content-type: text/html; charset=utf-8");
+ echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n";
+ exit;
+ }
+ Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\"");
+ Header("HTTP/1.0 401 Unauthorized");
+ echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n";
+ exit;
+ }
+
+
+$stmt="SELECT user_group from vicidial_users where user='$PHP_AUTH_USER';";
+if ($DB) {$MAIN.="|$stmt|\n";}
+$rslt=mysql_to_mysqli($stmt, $link);
+$row=mysqli_fetch_row($rslt);
+$LOGuser_group = $row[0];
+
+$stmt="SELECT allowed_campaigns,allowed_reports,admin_viewable_groups,admin_viewable_call_times from vicidial_user_groups where user_group='$LOGuser_group';";
+if ($DB) {$MAIN.="|$stmt|\n";}
+$rslt=mysql_to_mysqli($stmt, $link);
+$row=mysqli_fetch_row($rslt);
+$LOGallowed_campaigns = $row[0];
+$LOGallowed_reports = $row[1];
+$LOGadmin_viewable_groups = $row[2];
+$LOGadmin_viewable_call_times = $row[3];
+
+if ( (!preg_match("/$report_name/",$LOGallowed_reports)) and (!preg_match("/ALL REPORTS/",$LOGallowed_reports)) )
+ {
+ Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\"");
+ Header("HTTP/1.0 401 Unauthorized");
+ echo _QXZ("You are not allowed to view this report").": |$PHP_AUTH_USER|$report_name|\n";
+ exit;
+ }
+
+$LOGadmin_viewable_groupsSQL='';
+$whereLOGadmin_viewable_groupsSQL='';
+if ( (!preg_match('/\-\-ALL\-\-/i',$LOGadmin_viewable_groups)) and (strlen($LOGadmin_viewable_groups) > 3) )
+ {
+ $rawLOGadmin_viewable_groupsSQL = preg_replace("/ -/",'',$LOGadmin_viewable_groups);
+ $rawLOGadmin_viewable_groupsSQL = preg_replace("/ /","','",$rawLOGadmin_viewable_groupsSQL);
+ $LOGadmin_viewable_groupsSQL = "and user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')";
+ $whereLOGadmin_viewable_groupsSQL = "where user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')";
+ }
+
+$LOGadmin_viewable_call_timesSQL='';
+$whereLOGadmin_viewable_call_timesSQL='';
+if ( (!preg_match('/\-\-ALL\-\-/i', $LOGadmin_viewable_call_times)) and (strlen($LOGadmin_viewable_call_times) > 3) )
+ {
+ $rawLOGadmin_viewable_call_timesSQL = preg_replace("/ -/",'',$LOGadmin_viewable_call_times);
+ $rawLOGadmin_viewable_call_timesSQL = preg_replace("/ /","','",$rawLOGadmin_viewable_call_timesSQL);
+ $LOGadmin_viewable_call_timesSQL = "and call_time_id IN('---ALL---','$rawLOGadmin_viewable_call_timesSQL')";
+ $whereLOGadmin_viewable_call_timesSQL = "where call_time_id IN('---ALL---','$rawLOGadmin_viewable_call_timesSQL')";
+ }
+
+$NOW_DATE = date("Y-m-d");
+$NOW_TIME = date("Y-m-d H:i:s");
+$STARTtime = date("U");
+if (!isset($group)) {$group = '';}
+if (!isset($query_date)) {$query_date = $NOW_DATE;}
+if (!isset($end_date)) {$end_date = $NOW_DATE;}
+
+$stmt="select did_id,did_pattern,did_description from vicidial_inbound_dids $whereLOGadmin_viewable_groupsSQL order by did_pattern;";
+$rslt=mysql_to_mysqli($stmt, $link);
+if ($DB) {$MAIN.="$stmt\n";}
+$groups_to_print = mysqli_num_rows($rslt);
+$groups_string='|';
+$i=0;
+while ($i < $groups_to_print)
+ {
+ $row=mysqli_fetch_row($rslt);
+ $groups[$i] = $row[0];
+ $group_patterns[$i] = $row[1];
+ $group_names[$i] = $row[2];
+ $groups_string .= "$groups[$i]|";
+ $i++;
+ }
+
+$i=0;
+$group_string='|';
+$group_ct = count($group);
+while($i < $group_ct)
+ {
+ if ( (strlen($group[$i]) > 0) and (preg_match("/\|$group[$i]\|/",$groups_string)) )
+ {
+ $group_string .= "$group[$i]|";
+ $group_SQL .= "'$group[$i]',";
+ $groupQS .= "&group[]=$group[$i]";
+ }
+ $i++;
+ }
+if ( (preg_match('/\s\-\-NONE\-\-\s/',$group_string) ) or ($group_ct < 1) )
+ {
+ $group_SQL = "''";
+# $group_SQL = "group_id IN('')";
+ }
+else
+ {
+ $group_SQL = preg_replace('/,$/i', '',$group_SQL);
+# $group_SQL = "group_id IN($group_SQL)";
+ }
+if (strlen($group_SQL)<3) {$group_SQL="''";}
+
+
+##### BEGIN log visit to the vicidial_report_log table #####
+$LOGip = getenv("REMOTE_ADDR");
+$LOGbrowser = getenv("HTTP_USER_AGENT");
+$LOGscript_name = getenv("SCRIPT_NAME");
+$LOGserver_name = getenv("SERVER_NAME");
+$LOGserver_port = getenv("SERVER_PORT");
+$LOGrequest_uri = getenv("REQUEST_URI");
+$LOGhttp_referer = getenv("HTTP_REFERER");
+if (preg_match("/443/i",$LOGserver_port)) {$HTTPprotocol = 'https://';}
+ else {$HTTPprotocol = 'http://';}
+if (($LOGserver_port == '80') or ($LOGserver_port == '443') ) {$LOGserver_port='';}
+else {$LOGserver_port = ":$LOGserver_port";}
+$LOGfull_url = "$HTTPprotocol$LOGserver_name$LOGserver_port$LOGrequest_uri";
+
+$LOGhostname = php_uname('n');
+if (strlen($LOGhostname)<1) {$LOGhostname='X';}
+if (strlen($LOGserver_name)<1) {$LOGserver_name='X';}
+
+$stmt="SELECT webserver_id FROM vicidial_webservers where webserver='$LOGserver_name' and hostname='$LOGhostname' LIMIT 1;";
+$rslt=mysql_to_mysqli($stmt, $link);
+if ($DB) {echo "$stmt\n";}
+$webserver_id_ct = mysqli_num_rows($rslt);
+if ($webserver_id_ct > 0)
+ {
+ $row=mysqli_fetch_row($rslt);
+ $webserver_id = $row[0];
+ }
+else
+ {
+ ##### insert webserver entry
+ $stmt="INSERT INTO vicidial_webservers (webserver,hostname) values('$LOGserver_name','$LOGhostname');";
+ if ($DB) {echo "$stmt\n";}
+ $rslt=mysql_to_mysqli($stmt, $link);
+ $affected_rows = mysqli_affected_rows($link);
+ $webserver_id = mysqli_insert_id($link);
+ }
+
+$AMP='&';
+$QM='?';
+$stmt="INSERT INTO vicidial_report_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$LOGip', report_name='$report_name', browser='$LOGbrowser', referer='$LOGhttp_referer', notes='$LOGserver_name:$LOGserver_port $LOGscript_name |$group[0], $query_date, $end_date, $shift, $file_download, $report_display_type|', url='".$LOGfull_url."?DB=".$DB."&file_download=".$file_download."&query_date=".$query_date."&end_date=".$end_date."&shift=".$shift."&report_display_type=".$report_display_type."$groupQS', webserver='$webserver_id';";
+if ($DB) {echo "|$stmt|\n";}
+$rslt=mysql_to_mysqli($stmt, $link);
+$report_log_id = mysqli_insert_id($link);
+##### END log visit to the vicidial_report_log table #####
+
+if ( (strlen($slave_db_server)>5) and (preg_match("/$report_name/",$reports_use_slave_db)) )
+ {
+ mysqli_close($link);
+ $use_slave_server=1;
+ $db_source = 'S';
+ require("dbconnect_mysqli.php");
+ $MAIN.="\n";
+ }
+
+$NWB = "
";
+
+$HEADER.="\n";
+$HEADER.="
";
+
+$MAIN.="\n";
+
+$MAIN.=""; + +$JS_text=" |