Fixes for VERM issues

Small update for admin.php version/build

git-svn-id: svn://192.168.202.10@3929 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2025-07-18 22:38:10 +00:00
parent b60d63196c
commit 6959f812b3
10 changed files with 353 additions and 61 deletions
+90
View File
@@ -7,6 +7,7 @@
# 220825-1631 - First build
# 230106-1304 - Added data flushing for large page outputs
# 240801-1130 - Code updates for PHP8 compatibility
# 241001-1803 - Added agent pause code breakdown
#
# NANQUE, not an unanswered call?
@@ -314,6 +315,9 @@ while ($vicidial_user_row=mysqli_fetch_row($vicidial_user_rslt))
}
# Do round of calculations for agents logged in
# Store agent pause codes for pause code breakdown
$agent_pause_codes=array();
$agent_pause_codes_time=array();
foreach ($agent_sessions_array as $user => $sessions)
{
# Purge agents with no start_hours (this is remote agents)
@@ -357,6 +361,13 @@ foreach ($agent_sessions_array as $user => $sessions)
$agent_sessions_array["$user"]["$start_event_date"]["billable"]+=$billable_row["total_pause"];
# $campaign_sessions_array["$campaign_id"]["$start_event_date"]["billable"]+=$billable_row["total_pause"];
}
if (!in_array($sub_status, $agent_pause_codes))
{
array_push($agent_pause_codes, $sub_status);
}
$agent_pause_codes_time["$user"]["$sub_status"]+=$billable_row["total_pause"];
}
## GET CALLS, TALK AND WAIT TIME
@@ -734,6 +745,7 @@ $CSV_output["agent_pause_detail"]="\""._QXZ("Agent")."\",\""._QXZ("Sessions")."\
$grand_total_duration=0;
$grand_total_calls=0;
$max_agent_duration=0;
$last_agent_groups=array();
foreach ($agent_sessions_array as $user => $sessions)
{
$total_calls=array_sum(array_column($sessions,'calls'));
@@ -749,6 +761,11 @@ foreach ($agent_sessions_array as $user => $sessions)
$total_dispo_time=array_sum(array_column($sessions,'dispo_sec'));
$total_ALL_billable_time=($total_talk_time+$total_wait_time+$total_billable_time+$total_dispo_time);
foreach($sessions as $event_date => $session_details)
{
$last_agent_groups["$user"]=$session_details["user_group"];
}
$average_pause_time=sprintf('%02d', floor(MathZDC($total_pause_time, $total_pauses)/3600)).gmdate(":i:s", round(MathZDC($total_pause_time, $total_pauses)));
$total_sessions=count($sessions);
$avg_session=sprintf('%02d', floor(MathZDC($total_duration, $total_sessions)/3600)).gmdate(":i:s", round(MathZDC($total_duration, $total_sessions)));
@@ -799,6 +816,79 @@ $HTML_output.="</table>";
if (!$download_rpt) {echo $HTML_output; ob_flush(); flush(); $HTML_output="";}
########################################
######### AGENT PAUSE CODE BREAKDOWN ###########
# print_r($agent_sessions_array);
$HTML_output.="<BR><h2 class='rpt_header'>"._QXZ("Agent Pause Code Breakdown")." $NWB#VERM_AGENTS-pause_detail$NWE</h2>";
$HTML_output.="<hr style='height:2px;border-width:0;color:#ddd;background-color:#ddd;margin-bottom: 2em;'>";
$HTML_output.="<table width='100%' id='rpt_table'>";
$HTML_output.="<tr>\n";
$HTML_output.="<th>"._QXZ("Agent")."</th>";
$HTML_output.="<th>"._QXZ("Current User Group")."</th>";
$HTML_output.="<th>"._QXZ("Most Recent User Group")."</th>";
$HTML_output.="<th>"._QXZ("Login Time")."</th>";
$HTML_output.="<th>"._QXZ("Non-pause")."</th>";
$HTML_output.="<th>"._QXZ("Pause")."</th>";
$CSV_output["agent_pause_code_breakdown"]="\""._QXZ("Agent")."\",\""._QXZ("Current User Group")."\",\""._QXZ("Most Recent User Group")."\",\""._QXZ("Login Time")."\",\""._QXZ("Non-Pause")."\",\""._QXZ("Pause")."\"";
sort($agent_pause_codes);
for ($i=0; $i<count($agent_pause_codes); $i++)
{
$HTML_output.="<th>".$agent_pause_codes[$i]."</th>";
$CSV_output["agent_pause_code_breakdown"].=",\"".$agent_pause_codes[$i]."\"";
}
$CSV_output["agent_pause_code_breakdown"].="\n";
$HTML_output.="</tr>\n";
# sort($agent_pause_codes_time);
ksort($agent_pause_codes_time, SORT_NATURAL | SORT_FLAG_CASE);
$agent_pause_codes_time["$user"]["$sub_status"]+=$billable_row["total_pause"];
foreach ($agent_pause_codes_time as $agent => $agent_pause_breakdown)
{
$agentName=($show_full_agent_info ? "$agent - ".$fullname_info["$agent"] : $fullname_info["$agent"]);
$total_pause_time=array_sum(array_column($agent_sessions_array["$agent"],'pause_sec'));
$total_duration=array_sum(array_column($agent_sessions_array["$agent"],'duration'));
$total_pause_His=sprintf('%02d', floor($total_pause_time/3600)).gmdate(":i:s", $total_pause_time);
$total_duration_His=sprintf('%02d', floor($total_duration/3600)).gmdate(":i:s", $total_duration);
$total_nonpause_time=$total_duration-$total_pause_time;
$total_nonpause_His=sprintf('%02d', floor($total_nonpause_time/3600)).gmdate(":i:s", $total_nonpause_time);
$HTML_output.="<tr>\n";
$HTML_output.="<td>".$agentName."</td>";
$HTML_output.="<td>".$users_group_info["$agent"]."</td>";
$HTML_output.="<td>".$last_agent_groups["$agent"]."</td>";
$HTML_output.="<td>".$total_duration_His."</td>";
$HTML_output.="<td>".$total_nonpause_His."</td>";
$HTML_output.="<td>".$total_pause_His."</td>";
$CSV_output["agent_pause_code_breakdown"].="\"".$agentName."\",\"".$users_group_info["$agent"]."\",\"".$last_agent_groups["$agent"]."\",\"".$total_duration_His."\",\"".$total_nonpause_His."\",\"".$total_pause_His."\"";
for ($i=0; $i<count($agent_pause_codes); $i++)
{
$sub_status=$agent_pause_codes[$i];
$agent_pause_breakdown["$sub_status"]+=0;
$sub_status_His=sprintf('%02d', floor($agent_pause_breakdown["$sub_status"]/3600)).gmdate(":i:s", $agent_pause_breakdown["$sub_status"]);
$HTML_output.="<td>".$sub_status_His."</td>";
$CSV_output["agent_pause_code_breakdown"].=",\"".$sub_status_His."\"";
}
# }
$HTML_output.="</tr>\n";
$CSV_output["agent_pause_code_breakdown"].="\n";
}
$HTML_output.="<tr class='export_row'>\n";
$HTML_output.="<td class='export_row_cell' colspan='".(6+count($agent_pause_codes))."'>"._QXZ("Export as")."...<input type='button' class='download_button' onClick=\"DownloadReport('AGENTS', 'agent_pause_code_breakdown')\" title=\"Export as a CSV file\" value='CSV'></td>";
$HTML_output.="</tr>\n";
$HTML_output.="</table>";
if (!$download_rpt) {echo $HTML_output; ob_flush(); flush(); $HTML_output="";}
########################################
######### AGENT AVAILABILITY ###########
$HTML_output.="<BR><h2 class='rpt_header'>"._QXZ("Agent availability (for all the campaign/ingroups they are members of)")." $NWB#VERM_AGENTS-agent_availability$NWE</h2>"; # Inbound
$HTML_output.="<hr style='height:2px;border-width:0;color:#ddd;background-color:#ddd;margin-bottom: 2em;'>";
+130 -52
View File
@@ -6,6 +6,7 @@
# CHANGELOG:
# 220825-1630 - First build
# 230106-1307 - Auto download for large data output
# 241003-1236 - Added recording link
#
if (isset($_GET["page_no"])) {$page_no=$_GET["page_no"];}
@@ -97,24 +98,31 @@ if ($DB) {$HTML_output.="<B>$stmt</B>";}
$rslt=mysql_to_mysqli($stmt, $link);
$total_pages=ceil(mysqli_num_rows($rslt)/20);
$HTML_output.="<BR><h2 class='rpt_header' id='sad_anchor'>"._QXZ("Answered Call Details").": $NWB#VERM_ANSWERED_DT-details$NWE</h2>";
$HTML_output.="<hr style='height:2px;border-width:0;color:#ddd;background-color:#ddd;margin-bottom: 2em;'>";
$HTML_output.="<table width='100%' id='details_table'>";
$HTML_output.="<tr class='export_row'>";
# $HTML_output.="<td class='export_row_cell' align='left'><B><a name='page_anchor' class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=1#page_anchor' alt='First page of results'>|<</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no-1)."#page_anchor' alt='Prev page of results'><<</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='left'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '1')\" title=\"First page\" value='|<'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no-1)."')\" title=\"Prev page\" value='<<'>";
$HTML_output.="</td>";
$HTML_output.="<td class='export_row_cell' align='center' colspan='".(count($selected_columns)-2)."'>&nbsp;</td>";
# $HTML_output.="<td class='export_row_cell' align='right'><B><a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no+1)."#page_anchor' alt='Next page of results'>>></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".$total_pages."#page_anchor' alt='Last page of results'>>|</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='right'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no<$total_pages ? $page_no+1 : $total_pages)."')\" title=\"Next page\" value='>>'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($total_pages)."')\" title=\"Last page\" value='>|'>";
$HTML_output.="</td>";
$HTML_output.="</tr>";
$HTML_output.="<tr>";
$CSV_output="";
# Reduce memory usage
if ($download_rpt)
{
$CSV_output="";
}
else
{
$HTML_output.="<BR><h2 class='rpt_header' id='sad_anchor'>"._QXZ("Answered Call Details").": $NWB#VERM_ANSWERED_DT-details$NWE</h2>";
$HTML_output.="<hr style='height:2px;border-width:0;color:#ddd;background-color:#ddd;margin-bottom: 2em;'>";
$HTML_output.="<table width='100%' id='details_table'>";
$HTML_output.="<tr class='export_row'>";
# $HTML_output.="<td class='export_row_cell' align='left'><B><a name='page_anchor' class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=1#page_anchor' alt='First page of results'>|<</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no-1)."#page_anchor' alt='Prev page of results'><<</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='left'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '1')\" title=\"First page\" value='|<'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no-1)."')\" title=\"Prev page\" value='<<'>";
$HTML_output.="</td>";
$HTML_output.="<td class='export_row_cell' align='center' colspan='".(count($selected_columns)-2)."'>&nbsp;</td>";
# $HTML_output.="<td class='export_row_cell' align='right'><B><a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no+1)."#page_anchor' alt='Next page of results'>>></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".$total_pages."#page_anchor' alt='Last page of results'>>|</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='right'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no<$total_pages ? $page_no+1 : $total_pages)."')\" title=\"Next page\" value='>>'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($total_pages)."')\" title=\"Last page\" value='>|'>";
$HTML_output.="</td>";
$HTML_output.="</tr>";
$HTML_output.="<tr>";
}
if ($total_calls>$auto_download_limit)
{
@@ -125,15 +133,27 @@ foreach ($selected_columns as $display_name => $column_name)
{
if ($display_name!="uniqueid")
{
$CSV_output.="\"$display_name\",";
# $HTML_output.="<th><a class='header_link' name='call_detail_sort_".$column_name."' id='call_detail_sort_".$column_name."' href='".$PHP_SELF."?sort_answered_details=".($column_name==$sort_answered_details_preg ? "$reverse_link" : "$column_name")."&page_no=".$page_no."#call_detail_sort_".$column_name."'>".$display_name.($column_name==$sort_answered_details_preg ? " $sort_char" : "")."</a></th>";
$HTML_output.="<th><input type='button' class='sort_button' value='".$display_name.($column_name==$sort_answered_details_preg ? " $sort_char" : "")."' onClick=\"javascript:document.getElementById('sort_answered_details').value='".($column_name==$sort_answered_details_preg ? "$reverse_link" : "$column_name")."'; this.form.action+='#sad_anchor'; this.form.submit()\"></th>\n";
if ($download_rpt)
{
$CSV_output.="\"$display_name\",";
}
else
{
# $HTML_output.="<th><a class='header_link' name='call_detail_sort_".$column_name."' id='call_detail_sort_".$column_name."' href='".$PHP_SELF."?sort_answered_details=".($column_name==$sort_answered_details_preg ? "$reverse_link" : "$column_name")."&page_no=".$page_no."#call_detail_sort_".$column_name."'>".$display_name.($column_name==$sort_answered_details_preg ? " $sort_char" : "")."</a></th>";
$HTML_output.="<th><input type='button' class='sort_button' value='".$display_name.($column_name==$sort_answered_details_preg ? " $sort_char" : "")."' onClick=\"javascript:document.getElementById('sort_answered_details').value='".($column_name==$sort_answered_details_preg ? "$reverse_link" : "$column_name")."'; this.form.action+='#sad_anchor'; this.form.submit()\"></th>\n";
}
}
}
$CSV_output.="\n";
$HTML_output.="<th>&nbsp;</th>";
$HTML_output.="</tr>";
if ($download_rpt)
{
$CSV_output.="\"Link to recording\"";
$CSV_output.="\n";
}
else
{
$HTML_output.="<th>&nbsp;</th>";
$HTML_output.="</tr>";
}
$output_array=array();
$i=0;
@@ -181,9 +201,11 @@ if ($sort_index)
# print "***** $sort_index ********\n";
# array_multisort($output_array[$sort_index], SORT_ASC, SORT_STRING);
foreach ($output_array as $sorting_array) {
$sort_array_holder[] = $sorting_array["$sort_index"];
}
foreach ($output_array as $sorting_array)
{
$sort_array_holder[] = $sorting_array["$sort_index"];
}
if (preg_match('/ desc$/', $sort_answered_details))
{
array_multisort($sort_array_holder,SORT_DESC, SORT_STRING,$output_array);
@@ -210,38 +232,61 @@ foreach ($output_array as $data_row)
}
if ($key!="detail_id")
{
$HTML_output.="<td>".$value."</td>";
$CSV_output.="\"".$value."\",";
if ($download_rpt)
{
$CSV_output.="\"".trim($value)."\",";
}
else
{
$HTML_output.="<td>".$value."</td>";
}
}
else
{
$HTML_output.="<td><a onClick=\"ShowCallDetails('$value', 'ANSWERED_DT')\"><svg width='20' height='20' viewBox='0 0 20 20' data-svg='search'><circle fill='none' stroke='#000' stroke-width='1.1' cx='9' cy='9' r='7'></circle><path fill='none' stroke='#000' stroke-width='1.1' d='M14,14 L18,18 L14,14 Z'></path></svg></a></td>";
# $HTML_output.="<td><IMG SRC=\"images/glass.png\" onClick=\"ShowCallDetails('$value')\" WIDTH=20 HEIGHT=20 BORDER=0 ALT=\"HELP\" ALIGN=TOP></td>";
$asterisk_call_id=GetCallerCode($value);
$recording_array=GetRecording($value);
if (!$download_rpt)
{
$HTML_output.="<td><a onClick=\"ShowCallDetails('$value', 'ANSWERED_DT')\"><svg width='20' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' data-svg='search'><circle fill='none' stroke='#000' stroke-width='1.1' cx='9' cy='9' r='7'></circle><path fill='none' stroke='#000' stroke-width='1.1' d='M14,14 L18,18 L14,14 Z'></path></svg></a></td>";
# $HTML_output.="<td><IMG SRC=\"images/glass.png\" onClick=\"ShowCallDetails('$value')\" WIDTH=20 HEIGHT=20 BORDER=0 ALT=\"HELP\" ALIGN=TOP></td>";
}
}
}
$CSV_output.="\n";
$HTML_output.="</tr>";
if ($download_rpt)
{
$CSV_output.="\"".$recording_array[1]."\"";
$CSV_output.="\n";
}
else
{
$HTML_output.="</tr>\n";
}
}
$HTML_output.="<tr class='export_row'>";
# $HTML_output.="<td class='export_row_cell' align='left'><B><a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=1#page_anchor' alt='First page of results'>|<</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no-1)."#page_anchor' alt='Prev page of results'><<</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='left'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '1')\" title=\"First page\" value='|<'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no-1)."')\" title=\"Prev page\" value='<<'>";
$HTML_output.="</td>";
# $HTML_output.="<td class='export_row_cell' align='center' colspan='".(count($selected_columns)-2)."'>"._QXZ("Export as")."... &nbsp;&nbsp;&nbsp;&nbsp;<a href=\"".$PHP_SELF."?download_rpt=answer_details&sort_answered_details=".$sort_answered_details."\" title=\"Export as a CSV file\" class=\"uk-icon\">CSV</a>&nbsp;&nbsp;&nbsp;&nbsp;"._QXZ("Current page").": $page_no / $total_pages</td>";
$HTML_output.="<td colspan='".(count($selected_columns)-2)."' align='center' class='export_row_cell'>"._QXZ("Export as")."... &nbsp;&nbsp;&nbsp;&nbsp;<input type='button' class='download_button' onClick=\"DownloadReport('ANSWERED_DT', 'answer_details')\" title=\"Export as a CSV file\" value='CSV'>&nbsp;&nbsp;&nbsp;&nbsp;"._QXZ("Current page").": $page_no / $total_pages</td>";
# $HTML_output.="<td class='export_row_cell' align='right'><B><a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no+1)."#page_anchor' alt='Next page of results'>>></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($total_pages-1)."#page_anchor' alt='Last page of results'>>|</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='right'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no<$total_pages ? $page_no+1 : $total_pages)."')\" title=\"Next page\" value='>>'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($total_pages)."')\" title=\"Last page\" value='>|'>";
$HTML_output.="</td>";
$output_array=null; # Free up memory just in case
$HTML_output.="</tr>";
$HTML_output.="</table>";
$HTML_output.="<input type=hidden name=page_no id=page_no value='$page_no'>";
$HTML_output.="<input type='hidden' name='sort_answered_details' id='sort_answered_details' value='$sort_answered_details'>";
if (!$download_rpt)
{
$HTML_output.="<tr class='export_row'>";
# $HTML_output.="<td class='export_row_cell' align='left'><B><a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=1#page_anchor' alt='First page of results'>|<</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no-1)."#page_anchor' alt='Prev page of results'><<</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='left'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '1')\" title=\"First page\" value='|<'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no-1)."')\" title=\"Prev page\" value='<<'>";
$HTML_output.="</td>";
# $HTML_output.="<td class='export_row_cell' align='center' colspan='".(count($selected_columns)-2)."'>"._QXZ("Export as")."... &nbsp;&nbsp;&nbsp;&nbsp;<a href=\"".$PHP_SELF."?download_rpt=answer_details&sort_answered_details=".$sort_answered_details."\" title=\"Export as a CSV file\" class=\"uk-icon\">CSV</a>&nbsp;&nbsp;&nbsp;&nbsp;"._QXZ("Current page").": $page_no / $total_pages</td>";
$HTML_output.="<td colspan='".(count($selected_columns)-2)."' align='center' class='export_row_cell'>"._QXZ("Export as")."... &nbsp;&nbsp;&nbsp;&nbsp;<input type='button' class='download_button' onClick=\"DownloadReport('ANSWERED_DT', 'answer_details')\" title=\"Export as a CSV file\" value='CSV'>&nbsp;&nbsp;&nbsp;&nbsp;"._QXZ("Current page").": $page_no / $total_pages</td>";
# $HTML_output.="<td class='export_row_cell' align='right'><B><a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($page_no+1)."#page_anchor' alt='Next page of results'>>></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class='header_link' href='".$PHP_SELF."?sort_answered_details=".$sort_answered_details."&page_no=".($total_pages-1)."#page_anchor' alt='Last page of results'>>|</a></B></td>";
$HTML_output.="<td class='export_row_cell' align='right'>";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($page_no<$total_pages ? $page_no+1 : $total_pages)."')\" title=\"Next page\" value='>>'>&nbsp;&nbsp;&nbsp;&nbsp;";
$HTML_output.="<input type='button' class='download_button' onClick=\"GoToDetailsPage('ANSWERED_DT', '".($total_pages)."')\" title=\"Last page\" value='>|'>";
$HTML_output.="</td>";
$HTML_output.="</tr>";
$HTML_output.="</table>";
$HTML_output.="<input type=hidden name=page_no id=page_no value='$page_no'>";
$HTML_output.="<input type='hidden' name='sort_answered_details' id='sort_answered_details' value='$sort_answered_details'>";
}
if ($download_rpt)
{
@@ -291,7 +336,8 @@ function GetCallerCode($uniqueid)
{
global $link, $DB;
$caller_code="";
$cc_stmt="select caller_code from vicidial_log_extended where uniqueid='$uniqueid'";
preg_match('/^[0-9\.]+/', $uniqueid, $uid_values);
$cc_stmt="select caller_code from vicidial_log_extended where uniqueid='$uid_values[0]'";
$cc_rslt=mysqli_query($link, $cc_stmt);
$cc_row=mysqli_fetch_array($cc_rslt);
$caller_code=$cc_row[0];
@@ -344,4 +390,36 @@ function GetDID($uniqueid)
return $did_str;
}
function GetRecording($vicidial_id)
{
global $link, $DB, $search_archived_data, $log_recording_access;
$rec_str="";
$uid_values=explode("|", $vicidial_id);
$u=count($uid_values)-1; # Get the last value, as closer_log uses a different type of ID
$rec_stmt="select filename, location, recording_id, lead_id from recording_log where vicidial_id='$uid_values[$u]'";
$rec_rslt=mysqli_query($link, $rec_stmt);
$rec_row=mysqli_fetch_array($rec_rslt);
if ($log_recording_access<1)
{$rec_link = $rec_row["location"];}
else
{
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
{
$actual_link = "https://";
}
else
{
$actual_link = "http://";
}
$directory=dirname($_SERVER['PHP_SELF']);
$actual_link .= $_SERVER['HTTP_HOST'].$directory."/";
$rec_link = $actual_link."recording_log_redirect.php?recording_id=".$rec_row["recording_id"]."&lead_id=".$rec_row["lead_id"]."&search_archived_data=$search_archived_data";
}
return array("$rec_row[filename]", "$rec_link", "$rec_row[recording_id]", $uid_values[$u]);
}
?>
+32 -2
View File
@@ -6,6 +6,7 @@
# CHANGELOG:
# 220825-1609 - First build
# 240801-1130 - Code updates for PHP8 compatibility
# 241118-1640 - added active agent toggle function
#
@@ -629,10 +630,19 @@ function LaunchReport(time_period, agent_flag)
full_report_var_str+="&vicidial_queue_groups="+vicidial_queue_groups;
}
if (agent_flag)
var users_value=$( "input[type=text][id=users]" ).val();
if (users_value!="")
{
var users=$('#agent_filter_list [value="' + users_value + '"]').data('value');
alert(users_value);
// full_report_var_str+="&users="+users;
}
if (users)
{
full_report_var_str+="&report_types_to_display=All+reports";
full_report_var_str+="&users="+agent_flag;
full_report_var_str+="&users="+users;
}
else
{
@@ -698,6 +708,7 @@ function LaunchWallboard(wallboard_id)
<link rel="stylesheet" type="text/css" href="VERM_stylesheet.php">
<script src="jquery.min.js"></script>
<script language="JavaScript" src="help.js"></script>
<script language="JavaScript" src="VERM_custom_form_functions.php"></script>
<?php
$stmt = "select count(*) from vicidial_campaigns where active='Y' and campaign_allow_inbound='Y' $group_SQLand;";
@@ -776,6 +787,7 @@ echo "<div id='HelpDisplayDiv' class='help_info' style='display:none;'></div>";
echo "<TR>";
echo "<TD width='".($LOGuser_level==9 ? "33" : "50")."%' valign='top' class='admin_column'>";
echo "<font class='rpt_header'>"._QXZ("Agent report")."$NWB#VERM_admin-agent$NWE</font><BR>";
/*
echo " "._QXZ("Filtered for agent").":<BR><select id=\"users\" name=\"users\" class='VERM_form_field'>";
echo "<option value=''> - </option>";
$user_stmt="select user, full_name from vicidial_users $whereLOGadmin_viewable_groupsSQL order by full_name";
@@ -785,6 +797,24 @@ echo "<div id='HelpDisplayDiv' class='help_info' style='display:none;'></div>";
echo "<option value='$user_row[user]'>$user_row[full_name]</option>";
}
echo " </select>";
*/
if ($toggle_inactive_agents)
{
# echo "<input type='button' id='ToggleActiveAgents' class='actButton' value='"._QXZ("HIDE INACTIVE AGENTS")."' onClick=\"ToggleAgents(this.value, this.id, 'agent_filter_list')\"><BR>";
echo "Filter active agents only: <input type='checkbox' id='ToggleActiveAgents' value='"._QXZ("HIDE INACTIVE AGENTS")."' onClick=\"ToggleAgents(this.value, this.id, 'agent_filter_list')\"><BR>";
}
echo "<input list='agent_filter_list' type='text' name='users' id='users' class='VERM_form_field' VALUE='$users'>\n";
echo "<datalist id='agent_filter_list'>\n";
$user_stmt="select user, full_name, active from vicidial_users $whereLOGadmin_viewable_groupsSQL order by full_name";
$user_rslt=mysql_to_mysqli($user_stmt, $link);
while ($user_row=mysqli_fetch_array($user_rslt))
{
echo "<option data-value='$user_row[user]' value='$user_row[full_name] ($user_row[user])'/>\n";
}
echo "</datalist>\n";
echo "<ul>";
echo "<li><a class='report_link' onClick=\"LaunchReport('TODAY', document.getElementById('users').value)\">"._QXZ("Today")."</a></li>"; # href='VERM_main_report_page.php?report_type=AGENTS&time_period=TODAY'
+77 -1
View File
@@ -1,11 +1,13 @@
<?php
# VERM_custom_form_functions.php - Vicidial Enhanced Reporting Javascript functions
#
# Copyright (C) 2022 Matt Florell <vicidial@gmail.com>, Joe Johnson <joej@vicidial.com> LICENSE: AGPLv2
# Copyright (C) 2024 Matt Florell <vicidial@gmail.com>, Joe Johnson <joej@vicidial.com> LICENSE: AGPLv2
#
# CHANGELOG:
# 220825-1607 - First build
# 230123-1735 - Changed require files to local dbconnect/function files
# 231214-1622 - time_of_day_end variable fix
# 241118-1640 - added active agent toggle function
#
require("dbconnect_mysqli.php");
@@ -14,7 +16,81 @@ require("functions.php");
require("VERM_options.php");
header('Content-Type: application/javascript');
if ($toggle_inactive_agents)
{
$DLAllAgents="var AllAgentDatalist=\"";
$DLActiveAgents="var ActiveAgentDatalist=\"";
$AllA_array="var AllAgentArray=new Array(";
$AllUID_array="var AllUIDArray=new Array(";
$AA_array="var ActiveAgentArray=new Array(";
$AUID_array="var ActiveUIDArray=new Array(";
$user_stmt="select user, full_name, active from vicidial_users $whereLOGadmin_viewable_groupsSQL order by full_name";
$user_rslt=mysql_to_mysqli($user_stmt, $link);
while ($user_row=mysqli_fetch_array($user_rslt))
{
$AllA_array.="'$user_row[full_name] ($user_row[full_name])',";
$AllUID_array.="'$user_row[user]',";
$DLAllAgents.="<option data-value='$user_row[user]' value='$user_row[full_name] ($user_row[user])'/>";
if (preg_match('/^Y/', $user_row["active"]))
{
$AA_array.="'$user_row[full_name]',";
$AUID_array.="'$user_row[user]',";
$DLActiveAgents.="<option data-value='$user_row[user]' value='$user_row[full_name] ($user_row[user])'/>";
}
}
$AllA_array=preg_replace('/,$/', "", $AllA_array).");\n";
$AllUID_array=preg_replace('/,$/', "", $AllUID_array).");\n";
$AA_array=preg_replace('/,$/', "", $AA_array).");\n";
$AUID_array=preg_replace('/,$/', "", $AUID_array).");\n";
$DLAllAgents.="\";\n";
$DLActiveAgents.="\";\n";
echo $AllA_array;
echo $AllUID_array;
echo $AA_array;
echo $AUID_array;
echo $DLAllAgents;
echo $DLActiveAgents;
}
?>
function ToggleAgents(button_text, button_id, agent_datalist)
{
var button_str="<?php echo _QXZ("HIDE"); ?>";
var agent_field=document.getElementById(agent_datalist);
// alert(agent_field.type);
if (agent_field.type=='select-one')
{
for(i=agent_field.options.length-1; i>=0; i--)
{
agent_field.remove(i);
}
}
if(button_text.match(button_str))
{
document.getElementById(button_id).value="<?php echo _QXZ("SHOW ALL AGENTS"); ?>";
if (agent_field.type=='select-one')
{
}
else
{
document.getElementById(agent_datalist).innerHTML=ActiveAgentDatalist;
}
}
else
{
document.getElementById(button_id).value="<?php echo _QXZ("HIDE INACTIVE AGENTS"); ?>";
document.getElementById(agent_datalist).innerHTML=AllAgentDatalist;
}
}
function GoToReport(selected_report, realtime_override)
{
// alert(selected_report);
+12 -1
View File
@@ -6,6 +6,7 @@
# CHANGELOG:
# 220825-1606 - First build
# 240801-1130 - Code updates for PHP8 compatibility
# 241118-1640 - added active agent toggle function
#
$startMS = microtime();
@@ -17,6 +18,7 @@ header ("Content-type: text/html; charset=utf-8");
require("dbconnect_mysqli.php");
require("functions.php");
require("VERM_options.php");
if (isset($_GET["start_date"])) {$start_date=$_GET["start_date"];}
elseif (isset($_POST["start_date"])) {$start_date=$_POST["start_date"];}
@@ -27,6 +29,9 @@ if (isset($_GET["DB"])) {$DB=$_GET["DB"];}
if (isset($_GET["custom_report_name"])) {$custom_report_name=$_GET["custom_report_name"];}
elseif (isset($_POST["custom_report_name"])) {$custom_report_name=$_POST["custom_report_name"];}
$report_name = 'VERM Reports';
$db_source = 'M';
#############################################
##### START SYSTEM_SETTINGS LOOKUP #####
$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,enable_languages,language_method,agent_whisper_enabled,report_default_format,enable_pause_code_limits,allow_web_debug,admin_screen_colors,admin_web_directory FROM system_settings;";
@@ -974,6 +979,12 @@ Removed 5/19/22
}
echo "</datalist>\n";
echo "$NWB#VERM_custom_report_agent$NWE";
if ($toggle_inactive_agents)
{
# echo "<input type='button' id='ToggleActiveAgents' class='actButton' value='"._QXZ("HIDE INACTIVE AGENTS")."' onClick=\"ToggleAgents(this.value, this.id, 'agent_filter_list')\"><BR>";
echo "<BR>Filter active agents only: <input type='checkbox' id='ToggleActiveAgents' value='"._QXZ("HIDE INACTIVE AGENTS")."' onClick=\"ToggleAgents(this.value, this.id, 'agent_filter_list')\"><BR>";
}
?>
</td>
</tr>
@@ -1038,7 +1049,7 @@ Removed 5/19/22
$unique_statuses=array();
while ($status_row=mysqli_fetch_array($status_rslt))
{
$status_row["status_name"]=($status_names["$status_row[status]"] ? $status_names["$status_row[status]"] : $status_row["status_name"]);
$status_row["status_name"]=trim(($status_names["$status_row[status]"] ? $status_names["$status_row[status]"] : $status_row["status_name"]));
$status_string=trim("$status_row[status] - $status_row[status_name]");
if (!in_array($status_string, $unique_statuses))
{
+2 -1
View File
@@ -7,6 +7,7 @@
# 220825-1622 - First build
# 230106-1317 - Added missing QXZ, added pull of selectable statuses, human answered statues now include DISPO and SYSTEM
# 240801-1130 - Code updates for PHP8 compatibility
# 250623-1714 - Changed $report_name variable to work with slave database setting
#
if (isset($_GET["start_date"])) {$start_date=$_GET["start_date"];}
@@ -30,7 +31,7 @@ if (isset($_GET["user_groups"])) {$user_groups=$_GET["user_groups"];}
if (isset($_GET["outcomes"])) {$outcomes=$_GET["outcomes"];}
elseif (isset($_POST["outcomes"])) {$outcomes=$_POST["outcomes"];}
$report_name="VICIdial Enhanced Reporting Module";
$report_name="VERM Reports";
$start_date=preg_replace('/[^-0-9]/', '', $start_date);
$start_time=preg_replace('/[^:0-9]/', '', $start_time);
+4
View File
@@ -6,6 +6,7 @@
# CHANGELOG:
# 220825-1604 - First build
# 230106-1355 - Added auto-download limit and special status settings for outcomes report
# 241118-1640 - added active agent toggle function
#
/*
@@ -126,6 +127,9 @@ if (mysqli_num_rows($options_rslt)>0)
if ($setting_name=="show_full_agent_info" && $setting_value)
{$show_full_agent_info=$setting_value;}
if ($setting_name=="toggle_inactive_agents" && $setting_value)
{$toggle_inactive_agents=$setting_value;}
if ($setting_name=="auto_download_limit" && $setting_value)
{$auto_download_limit=$setting_value;}
+2 -1
View File
@@ -6,8 +6,9 @@
# CHANGELOG:
# 220825-1601 - First build
# 240801-1130 - Code updates for PHP8 compatibility
# 250623-1714 - Changed $report_name variable to work with slave database setting
#
$report_name="VERM reports";
$report_name="VERM Reports";
$startMS = microtime();
+2 -1
View File
@@ -5,8 +5,9 @@
#
# CHANGELOG:
# 220825-1600 - First build
# 250623-1714 - Changed $report_name variable to work with slave database setting
#
$report_name="VERM reports";
$report_name="VERM Reports";
$startMS = microtime();
+2 -2
View File
@@ -6238,13 +6238,13 @@ if ($SSscript_remove_js > 0)
# 250227-1607 - Fix for test call phone code issue (PHP8-related)
# 250326-2023 - Added agent_hide_dial_fail system_settings feature
# 250424-0715 - Fix for modify IP Lists screen permissions issue
# 240620-1001 - Added apinewlead options for system settings and lists
# 250620-1001 - Added apinewlead options for system settings and lists
#
# make sure you have added a user to the vicidial_users MySQL table with at least user_level 9 to access this page the first time
$admin_version = '2.14-939a';
$build = '240620-1001';
$build = '250620-1001';
$STARTtime = date("U");
$SQLdate = date("Y-m-d H:i:s");