Update permissions handling for performance

- For pages using large number of permission like these
- Creating a permission array that is populated with permission_exists
- Then using the permission array is more efficient
This commit is contained in:
FusionPBX 2024-08-08 16:17:28 -06:00 committed by GitHub
parent 0829062cc7
commit 0044f0b69e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 159 additions and 107 deletions

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2023
Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
@ -40,6 +40,58 @@
exit;
}
//set permissions
$permission = array();
$permission['xml_cdr_view'] = permission_exists('xml_cdr_view');
$permission['xml_cdr_search_extension'] = permission_exists('xml_cdr_search_extension');
$permission['xml_cdr_delete'] = permission_exists('xml_cdr_delete');
$permission['xml_cdr_domain'] = permission_exists('xml_cdr_domain');
$permission['xml_cdr_search_call_center_queues'] = permission_exists('xml_cdr_search_call_center_queues');
$permission['xml_cdr_statistics'] = permission_exists('xml_cdr_statistics');
$permission['xml_cdr_archive'] = permission_exists('xml_cdr_archive');
$permission['xml_cdr_all'] = permission_exists('xml_cdr_all');
$permission['xml_cdr_export'] = permission_exists('xml_cdr_export');
$permission['xml_cdr_export_csv'] = permission_exists('xml_cdr_export_csv');
$permission['xml_cdr_export_pdf'] = permission_exists('xml_cdr_export_pdf');
$permission['xml_cdr_search'] = permission_exists('xml_cdr_search');
$permission['xml_cdr_search_direction'] = permission_exists('xml_cdr_search_direction');
$permission['xml_cdr_b_leg'] = permission_exists('xml_cdr_b_leg');
$permission['xml_cdr_search_status'] = permission_exists('xml_cdr_search_status');
$permission['xml_cdr_search_caller_id'] = permission_exists('xml_cdr_search_caller_id');
$permission['xml_cdr_search_start_range'] = permission_exists('xml_cdr_search_start_range');
$permission['xml_cdr_search_duration'] = permission_exists('xml_cdr_search_duration');
$permission['xml_cdr_search_caller_destination'] = permission_exists('xml_cdr_search_caller_destination');
$permission['xml_cdr_search_destination'] = permission_exists('xml_cdr_search_destination');
$permission['xml_cdr_codecs'] = permission_exists('xml_cdr_codecs');
$permission['xml_cdr_search_tta'] = permission_exists('xml_cdr_search_tta');
$permission['xml_cdr_search_hangup_cause'] = permission_exists('xml_cdr_search_hangup_cause');
$permission['xml_cdr_search_recording'] = permission_exists('xml_cdr_search_recording');
$permission['xml_cdr_search_order'] = permission_exists('xml_cdr_search_order');
$permission['xml_cdr_extension'] = permission_exists('xml_cdr_extension');
$permission['xml_cdr_caller_id_name'] = permission_exists('xml_cdr_caller_id_name');
$permission['xml_cdr_caller_id_number'] = permission_exists('xml_cdr_caller_id_number');
$permission['xml_cdr_caller_destination'] = permission_exists('xml_cdr_caller_destination');
$permission['xml_cdr_destination'] = permission_exists('xml_cdr_destination');
$permission['xml_cdr_start'] = permission_exists('xml_cdr_start');
$permission['xml_cdr_tta'] = permission_exists('xml_cdr_tta');
$permission['xml_cdr_duration'] = permission_exists('xml_cdr_duration');
$permission['xml_cdr_pdd'] = permission_exists('xml_cdr_pdd');
$permission['xml_cdr_mos'] = permission_exists('xml_cdr_mos');
$permission['xml_cdr_hangup_cause'] = permission_exists('xml_cdr_hangup_cause');
$permission['xml_cdr_custom_fields'] = permission_exists('xml_cdr_custom_fields');
$permission['xml_cdr_search_advanced'] = permission_exists('xml_cdr_search_advanced');
$permission['xml_cdr_direction'] = permission_exists('xml_cdr_direction');
$permission['xml_cdr_recording'] = permission_exists('xml_cdr_recording');
$permission['xml_cdr_recording_play'] = permission_exists('xml_cdr_recording_play');
$permission['xml_cdr_recording_download'] = permission_exists('xml_cdr_recording_download');
$permission['xml_cdr_account_code'] = permission_exists('xml_cdr_account_code');
$permission['xml_cdr_status'] = permission_exists('xml_cdr_status');
$permission['xml_cdr_details'] = permission_exists('xml_cdr_details');
$permission['xml_cdr_lose_race'] = permission_exists('xml_cdr_lose_race');
$permission['xml_cdr_cc_agent_leg'] = permission_exists('xml_cdr_cc_agent_leg');
$permission['xml_cdr_cc_side'] = permission_exists('xml_cdr_cc_side');
$permission['xml_cdr_call_center_queues'] = permission_exists('xml_cdr_call_center_queues');
//add multi-lingual support
$language = new text;
$text = $language->get();
@ -53,7 +105,7 @@
$order_by = "";
$read_codec = '';
$write_codec = '';
if(!isset($_REQUEST['show'])) {
if (!isset($_REQUEST['show'])) {
//set to show only this domain
$_REQUEST['show'] = 'domain';
}
@ -68,7 +120,7 @@
if (!$archive_request && $action != '' && count($xml_cdrs) > 0) {
switch ($action) {
case 'delete':
if (permission_exists('xml_cdr_delete')) {
if ($permission['xml_cdr_delete']) {
$obj = new xml_cdr;
$obj->delete($xml_cdrs);
}
@ -84,10 +136,10 @@
$token = $object->create($_SERVER['PHP_SELF']);
//get the extensions
if (permission_exists('xml_cdr_search_extension')) {
if ($permission['xml_cdr_search_extension']) {
$sql = "select extension_uuid, extension, number_alias from v_extensions ";
$sql .= "where domain_uuid = :domain_uuid ";
if (!permission_exists('xml_cdr_domain') && is_array($extension_uuids) && @sizeof($extension_uuids != 0)) {
if (!$permission['xml_cdr_domain'] && is_array($extension_uuids) && @sizeof($extension_uuids != 0)) {
$sql .= "and extension_uuid in ('".implode("','",$extension_uuids)."') "; //only show the user their extensions
}
$sql .= "order by extension asc, number_alias asc ";
@ -97,7 +149,7 @@
}
//get the call center queues
if (permission_exists('xml_cdr_search_call_center_queues')) {
if ($permission['xml_cdr_search_call_center_queues']) {
$sql = "select call_center_queue_uuid, queue_name, queue_extension from v_call_center_queues ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "order by queue_extension asc ";
@ -157,10 +209,10 @@
echo "</div>\n";
echo " <div class='actions'>\n";
if (!$archive_request) {
if (permission_exists('xml_cdr_statistics')) {
if ($permission['xml_cdr_statistics']) {
echo button::create(['type'=>'button','label'=>$text['button-statistics'],'icon'=>'chart-area','link'=>'xml_cdr_statistics.php']);
}
if (permission_exists('xml_cdr_archive')) {
if ($permission['xml_cdr_archive']) {
echo button::create(['type'=>'button','label'=>$text['button-archive'],'icon'=>'archive','link'=>'xml_cdr_archive.php'.($_REQUEST['show'] == 'all' ? '?show=all' : null)]);
}
}
@ -201,7 +253,7 @@
echo " <input type='hidden' name='leg' value='".escape($leg ?? '')."'>\n";
echo " <input type='hidden' name='tta_min' value='".escape($tta_min ?? '')."'>\n";
echo " <input type='hidden' name='tta_max' value='".escape($tta_max ?? '')."'>\n";
if (permission_exists('xml_cdr_all') && $_REQUEST['show'] == 'all') {
if ($permission['xml_cdr_all'] && $_REQUEST['show'] == 'all') {
echo " <input type='hidden' name='show' value='all'>\n";
}
if (isset($_SESSION['cdr']['field']) && is_array($_SESSION['cdr']['field'])) {
@ -225,22 +277,22 @@
echo button::create(['type'=>'button','label'=>$text['button-missed'],'icon'=>'phone-slash','link'=>'?status=missed']);
}
if (permission_exists('xml_cdr_export')) {
if ($permission['xml_cdr_export']) {
echo button::create(['type'=>'button','label'=>$text['button-export'],'icon'=>$_SESSION['theme']['button_icon_export'],'onclick'=>"toggle_select('export_format'); this.blur();"]);
echo "<select class='formfld' style='display: none; width: auto;' name='export_format' id='export_format' onchange=\"display_message('".$text['message-preparing_download']."'); toggle_select('export_format'); document.getElementById('frm_export').submit();\">";
echo " <option value='' disabled='disabled' selected='selected'>".$text['label-format']."</option>";
if (permission_exists('xml_cdr_export_csv')) {
if ($permission['xml_cdr_export_csv']) {
echo " <option value='csv'>CSV</option>";
}
if (permission_exists('xml_cdr_export_pdf')) {
if ($permission['xml_cdr_export_pdf']) {
echo " <option value='pdf'>PDF</option>";
}
echo " </select>";
}
if (!$archive_request && permission_exists('xml_cdr_delete')) {
if (!$archive_request && $permission['xml_cdr_delete']) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
}
if (permission_exists('xml_cdr_all') && $_REQUEST['show'] !== 'all') {
if ($permission['xml_cdr_all'] && $_REQUEST['show'] !== 'all') {
echo button::create(['type'=>'button','label'=>$text['button-show_all'],'icon'=>$_SESSION['theme']['button_icon_all'],'link'=>'?show=all']);
}
if ($paging_controls_mini != '') {
@ -251,7 +303,7 @@
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
if (!$archive_request && permission_exists('xml_cdr_delete')) {
if (!$archive_request && $permission['xml_cdr_delete']) {
echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
}
@ -259,12 +311,12 @@
echo "<br /><br />\n";
//basic search of call detail records
if (permission_exists('xml_cdr_search')) {
if ($permission['xml_cdr_search']) {
echo "<form name='frm' id='frm' method='get'>\n";
echo "<div class='form_grid'>\n";
if (permission_exists('xml_cdr_search_direction')) {
if ($permission['xml_cdr_search_direction']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-direction']."\n";
@ -276,7 +328,7 @@
echo " <option value='outbound' ".(($direction == "outbound") ? "selected='selected'" : null).">".$text['label-outbound']."</option>\n";
echo " <option value='local' ".(($direction == "local") ? "selected='selected'" : null).">".$text['label-local']."</option>\n";
echo " </select>\n";
if (permission_exists('xml_cdr_b_leg')){
if ($permission['xml_cdr_b_leg']){
echo " <select name='leg' class='formfld'>\n";
echo " <option value=''></option>\n";
echo " <option value='a' ".(!empty($_REQUEST["leg"]) && $leg == 'a' ? "selected='selected'" : null).">a-leg</option>\n";
@ -286,7 +338,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_status')) {
if ($permission['xml_cdr_search_status']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-status']."\n";
@ -305,7 +357,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_extension')) {
if ($permission['xml_cdr_search_extension']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-extension']."\n";
@ -324,7 +376,7 @@
echo " </div>\n";
unset($sql, $parameters, $extensions, $row, $selected);
}
if (permission_exists('xml_cdr_search_caller_id')) {
if ($permission['xml_cdr_search_caller_id']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-caller_id']."\n";
@ -335,7 +387,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_start_range')) {
if ($permission['xml_cdr_search_start_range']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-start_range']."\n";
@ -346,7 +398,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_duration')) {
if ($permission['xml_cdr_search_duration']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-duration']." (".$text['label-seconds'].")\n";
@ -357,7 +409,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_caller_destination')) {
if ($permission['xml_cdr_search_caller_destination']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-caller_destination']."\n";
@ -367,7 +419,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_destination')) {
if ($permission['xml_cdr_search_destination']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-destination']."\n";
@ -377,7 +429,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_codecs')) {
if ($permission['xml_cdr_codecs']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-codecs']."\n";
@ -388,7 +440,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_tta')) {
if ($permission['xml_cdr_search_tta']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-tta']." (".$text['label-seconds'].")\n";
@ -400,7 +452,7 @@
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_hangup_cause')) {
if ($permission['xml_cdr_search_hangup_cause']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-hangup_cause']."\n";
@ -450,7 +502,7 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_recording')) {
if ($permission['xml_cdr_search_recording']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-recording']."\n";
@ -464,50 +516,50 @@
echo " </div>\n";
echo " </div>\n";
}
if (permission_exists('xml_cdr_search_order')) {
if ($permission['xml_cdr_search_order']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-order']."\n";
echo " </div>\n";
echo " <div class='field no-wrap'>\n";
echo " <select name='order_by' class='formfld'>\n";
if (permission_exists('xml_cdr_extension')) {
if ($permission['xml_cdr_extension']) {
echo " <option value='extension' ".($order_by == 'extension' ? "selected='selected'" : null).">".$text['label-extension']."</option>\n";
}
if (permission_exists('xml_cdr_all')) {
if ($permission['xml_cdr_all']) {
echo " <option value='domain_name' ".($order_by == 'domain_name' ? "selected='selected'" : null).">".$text['label-domain']."</option>\n";
}
if (permission_exists('xml_cdr_caller_id_name')) {
if ($permission['xml_cdr_caller_id_name']) {
echo " <option value='caller_id_name' ".($order_by == 'caller_id_name' ? "selected='selected'" : null).">".$text['label-caller_id_name']."</option>\n";
}
if (permission_exists('xml_cdr_caller_id_number')) {
if ($permission['xml_cdr_caller_id_number']) {
echo " <option value='caller_id_number' ".($order_by == 'caller_id_number' ? "selected='selected'" : null).">".$text['label-caller_id_number']."</option>\n";
}
if (permission_exists('xml_cdr_caller_destination')) {
if ($permission['xml_cdr_caller_destination']) {
echo " <option value='caller_destination' ".($order_by == 'caller_destination' ? "selected='selected'" : null).">".$text['label-caller_destination']."</option>\n";
}
if (permission_exists('xml_cdr_destination')) {
if ($permission['xml_cdr_destination']) {
echo " <option value='destination_number' ".($order_by == 'destination_number' ? "selected='selected'" : null).">".$text['label-destination']."</option>\n";
}
if (permission_exists('xml_cdr_start')) {
if ($permission['xml_cdr_start']) {
echo " <option value='start_stamp' ".($order_by == 'start_stamp' || $order_by == '' ? "selected='selected'" : null).">".$text['label-start']."</option>\n";
}
if (permission_exists('xml_cdr_tta')) {
if ($permission['xml_cdr_tta']) {
echo " <option value='tta' ".($order_by == 'tta' ? "selected='selected'" : null).">".$text['label-tta']."</option>\n";
}
if (permission_exists('xml_cdr_duration')) {
if ($permission['xml_cdr_duration']) {
echo " <option value='duration' ".($order_by == 'duration' ? "selected='selected'" : null).">".$text['label-duration']."</option>\n";
}
if (permission_exists('xml_cdr_pdd')) {
if ($permission['xml_cdr_pdd']) {
echo " <option value='pdd_ms' ".($order_by == 'pdd_ms' ? "selected='selected'" : null).">".$text['label-pdd']."</option>\n";
}
if (permission_exists('xml_cdr_mos')) {
if ($permission['xml_cdr_mos']) {
echo " <option value='rtp_audio_in_mos' ".($order_by == 'rtp_audio_in_mos' ? "selected='selected'" : null).">".$text['label-mos']."</option>\n";
}
if (permission_exists('xml_cdr_hangup_cause')) {
if ($permission['xml_cdr_hangup_cause']) {
echo " <option value='hangup_cause' ".($order_by == 'desc' ? "selected='selected'" : null).">".$text['label-hangup_cause']."</option>\n";
}
if (permission_exists('xml_cdr_custom_fields')) {
if ($permission['xml_cdr_custom_fields']) {
if (!empty($_SESSION['cdr']['field']) && is_array($_SESSION['cdr']['field'])) {
echo " <option value='' disabled='disabled'></option>\n";
echo " <optgroup label=\"".$text['label-custom_cdr_fields']."\">\n";
@ -531,7 +583,7 @@
echo " </div>\n";
echo " </div>\n";
if (permission_exists('xml_cdr_search_call_center_queues')) {
if ($permission['xml_cdr_search_call_center_queues']) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-call_center_queue']."\n";
@ -556,10 +608,10 @@
button::$collapse = false;
echo "<div style='float: right; padding-top: 15px; margin-left: 20px; white-space: nowrap;'>";
if (permission_exists('xml_cdr_all') && $_REQUEST['show'] == 'all') {
if ($permission['xml_cdr_all'] && $_REQUEST['show'] == 'all') {
echo "<input type='hidden' name='show' value='all'>\n";
}
if (!$archive_request && permission_exists('xml_cdr_search_advanced')) {
if (!$archive_request && $permission['xml_cdr_search_advanced']) {
echo button::create(['type'=>'button','label'=>$text['button-advanced_search'],'icon'=>'tools','link'=>"xml_cdr_search.php".($_REQUEST['show'] == 'all' ? '?show=all' : null),'style'=>'margin-right: 15px;']);
}
echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','link'=>($archive_request ? 'xml_cdr_archive.php' : 'xml_cdr.php')]);
@ -581,7 +633,7 @@
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
$col_count = 0;
if (!$archive_request && permission_exists('xml_cdr_delete')) {
if (!$archive_request && $permission['xml_cdr_delete']) {
echo " <th class='checkbox'>\n";
echo " <input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".(empty($result) ? "style='visibility: hidden;'" : null).">\n";
echo " </th>\n";
@ -589,43 +641,43 @@
}
//column headings
if (permission_exists('xml_cdr_direction')) {
if ($permission['xml_cdr_direction']) {
echo "<th class='shrink'>&nbsp;</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_extension')) {
if ($permission['xml_cdr_extension']) {
echo "<th class='shrink'>".$text['label-extension']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_all') && $_REQUEST['show'] == "all") {
if ($permission['xml_cdr_all'] && $_REQUEST['show'] == "all") {
echo "<th>".$text['label-domain']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_caller_id_name')) {
if ($permission['xml_cdr_caller_id_name']) {
echo "<th class='hide-md-dn' style='min-width: 90px;'>".$text['label-caller_id_name']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_caller_id_number')) {
if ($permission['xml_cdr_caller_id_number']) {
echo "<th>".$text['label-caller_id_number']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_caller_destination')) {
if ($permission['xml_cdr_caller_destination']) {
echo "<th class='no-wrap hide-md-dn'>".$text['label-caller_destination']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_destination')) {
if ($permission['xml_cdr_destination']) {
echo "<th class='shrink'>".$text['label-destination']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_recording') && (permission_exists('xml_cdr_recording_play') || permission_exists('xml_cdr_recording_download'))) {
if ($permission['xml_cdr_recording'] && ($permission['xml_cdr_recording_play'] || $permission['xml_cdr_recording_download'])) {
echo "<th class='center'>".$text['label-recording']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_account_code')) {
if ($permission['xml_cdr_account_code']) {
echo "<th class='left'>".$text['label-accountcode']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_custom_fields')) {
if ($permission['xml_cdr_custom_fields']) {
if (isset($_SESSION['cdr']['field']) && is_array($_SESSION['cdr']['field']) && @sizeof($_SESSION['cdr']['field'])) {
foreach ($_SESSION['cdr']['field'] as $field) {
$array = explode(",", $field);
@ -639,40 +691,40 @@
}
}
}
if (permission_exists('xml_cdr_start')) {
if ($permission['xml_cdr_start']) {
echo "<th class='center shrink'>".$text['label-date']."</th>\n";
echo "<th class='center shrink hide-md-dn'>".$text['label-time']."</th>\n";
$col_count += 2;
}
if (permission_exists('xml_cdr_codecs')) {
if ($permission['xml_cdr_codecs']) {
echo "<th class='center shrink'>".$text['label-codecs']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_tta')) {
if ($permission['xml_cdr_tta']) {
echo "<th class='right hide-md-dn' title=\"".$text['description-tta']."\">".$text['label-tta']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_pdd')) {
if ($permission['xml_cdr_pdd']) {
echo "<th class='right hide-md-dn' title=\"".$text['description-pdd']."\">".$text['label-pdd']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_mos')) {
if ($permission['xml_cdr_mos']) {
echo "<th class='center hide-md-dn' title=\"".$text['description-mos']."\">".$text['label-mos']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_duration')) {
if ($permission['xml_cdr_duration']) {
echo "<th class='center hide-sm-dn'>".$text['label-duration']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_status')) {
if ($permission['xml_cdr_status']) {
echo "<th class='hide-sm-dn shrink'>".$text['label-status']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_hangup_cause')) {
if ($permission['xml_cdr_hangup_cause']) {
echo "<th class='hide-sm-dn shrink'>".$text['label-hangup_cause']."</th>\n";
$col_count++;
}
if (permission_exists('xml_cdr_details')) {
if ($permission['xml_cdr_details']) {
echo "<td class='action-button'>&nbsp;</td>\n";
}
echo "</tr>\n";
@ -772,7 +824,7 @@
$duration = $row['duration'] ?? 0;
//determine recording properties
if (!empty($row['record_path']) && !empty($row['record_name']) && permission_exists('xml_cdr_recording') && (permission_exists('xml_cdr_recording_play') || permission_exists('xml_cdr_recording_download'))) {
if (!empty($row['record_path']) && !empty($row['record_name']) && $permission['xml_cdr_recording'] && ($permission['xml_cdr_recording_play'] || $permission['xml_cdr_recording_download'])) {
$record_path = $row['record_path'];
$record_name = $row['record_name'];
//$record_name = strtolower(pathinfo($tmp_name, PATHINFO_BASENAME));
@ -788,15 +840,15 @@
$content = '';
//recording playback
if (permission_exists('xml_cdr_recording_play')) {
if ($permission['xml_cdr_recording_play']) {
$content .= "<tr class='list-row' id='recording_progress_bar_".$row['xml_cdr_uuid']."' style='display: none;' onclick=\"recording_play('".escape($row['xml_cdr_uuid'])."')\"><td id='playback_progress_bar_background_".escape($row['xml_cdr_uuid'])."' class='playback_progress_bar_background' colspan='".$col_count."'><span class='playback_progress_bar' id='recording_progress_".$row['xml_cdr_uuid']."'></span></td></tr>\n";
$content .= "<tr class='list-row' style='display: none;'><td></td></tr>\n"; // dummy row to maintain alternating background color
}
if (permission_exists('xml_cdr_details')) {
if ($permission['xml_cdr_details']) {
$list_row_url = "xml_cdr_details.php?id=".urlencode($row['xml_cdr_uuid']).($_REQUEST['show'] ? "&show=all" : null);
}
$content .= "<tr class='list-row' href='".$list_row_url."'>\n";
if (!$archive_request && permission_exists('xml_cdr_delete')) {
if (!$archive_request && $permission['xml_cdr_delete']) {
$content .= " <td class='checkbox middle'>\n";
$content .= " <input type='checkbox' name='xml_cdrs[$x][checked]' id='checkbox_".$x."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
$content .= " <input type='hidden' name='xml_cdrs[$x][uuid]' value='".escape($row['xml_cdr_uuid'])."' />\n";
@ -804,7 +856,7 @@
}
//determine call result and appropriate icon
if (permission_exists('xml_cdr_direction')) {
if ($permission['xml_cdr_direction']) {
$content .= "<td class='middle'>\n";
if ($theme_cdr_images_exist) {
if (!empty($row['direction'])) {
@ -823,19 +875,19 @@
$content .= "</td>\n";
}
//extension
if (permission_exists('xml_cdr_extension')) {
if ($permission['xml_cdr_extension']) {
$content .= " <td class='middle' nowrap='nowrap'>".$row['extension']." ".escape($row['extension_name'])."</td>\n";
}
//domain name
if (permission_exists('xml_cdr_all') && $_REQUEST['show'] == "all") {
if ($permission['xml_cdr_all'] && $_REQUEST['show'] == "all") {
$content .= " <td class='middle'>".$row['domain_name']."</td>\n";
}
//caller id name
if (permission_exists('xml_cdr_caller_id_name')) {
if ($permission['xml_cdr_caller_id_name']) {
$content .= " <td class='middle overflow hide-md-dn' title=\"".escape($row['caller_id_name'])."\">".escape($row['caller_id_name'])."</td>\n";
}
//source
if (permission_exists('xml_cdr_caller_id_number')) {
if ($permission['xml_cdr_caller_id_number']) {
$content .= " <td class='middle no-link no-wrap'>";
$content .= " <a href=\"javascript:void(0)\" onclick=\"send_cmd('".PROJECT_PATH."/app/click_to_call/click_to_call.php?src_cid_name=".urlencode(escape($row['caller_id_name']))."&src_cid_number=".urlencode(escape($row['caller_id_number']))."&dest_cid_name=".urlencode($outbound_caller_id_name)."&dest_cid_number=".urlencode($outbound_caller_id_number)."&src=".urlencode($user_extension)."&dest=".urlencode(escape($row['caller_id_number']))."&rec=false&ringback=us-ring&auto_answer=true');\">\n";
if (is_numeric($row['caller_id_number'])) {
@ -848,7 +900,7 @@
$content .= " </td>\n";
}
//caller destination
if (permission_exists('xml_cdr_caller_destination')) {
if ($permission['xml_cdr_caller_destination']) {
$content .= " <td class='middle no-link no-wrap hide-md-dn'>";
$content .= " <a href=\"javascript:void(0)\" onclick=\"send_cmd('".PROJECT_PATH."/app/click_to_call/click_to_call.php?src_cid_name=".urlencode(escape($row['caller_id_name']))."&src_cid_number=".urlencode(escape($row['caller_id_number']))."&dest_cid_name=".urlencode($outbound_caller_id_name)."&dest_cid_number=".urlencode($outbound_caller_id_number)."&src=".urlencode($user_extension)."&dest=".urlencode(escape($row['caller_destination']))."&rec=false&ringback=us-ring&auto_answer=true');\">\n";
if (is_numeric($row['caller_destination'])) {
@ -861,7 +913,7 @@
$content .= " </td>\n";
}
//destination
if (permission_exists('xml_cdr_destination')) {
if ($permission['xml_cdr_destination']) {
$content .= " <td class='middle no-link no-wrap'>";
$content .= " <a href=\"javascript:void(0)\" onclick=\"send_cmd('".PROJECT_PATH."/app/click_to_call/click_to_call.php?src_cid_name=".urlencode(escape($row['destination_number']))."&src_cid_number=".urlencode(escape($row['destination_number']))."&dest_cid_name=".urlencode($outbound_caller_id_name)."&dest_cid_number=".urlencode($outbound_caller_id_number)."&src=".urlencode($user_extension)."&dest=".urlencode(escape($row['destination_number']))."&rec=false&ringback=us-ring&auto_answer=true');\">\n";
if (is_numeric($row['destination_number'])) {
@ -874,14 +926,14 @@
$content .= " </td>\n";
}
//recording
if (permission_exists('xml_cdr_recording') && (permission_exists('xml_cdr_recording_play') || permission_exists('xml_cdr_recording_download'))) {
if ($permission['xml_cdr_recording'] && ($permission['xml_cdr_recording_play'] || $permission['xml_cdr_recording_download'])) {
if (!empty($record_path) || !empty($record_name)) {
$content .= " <td class='middle button center no-link no-wrap'>";
if (permission_exists('xml_cdr_recording_play')) {
if ($permission['xml_cdr_recording_play']) {
$content .= "<audio id='recording_audio_".escape($row['xml_cdr_uuid'])."' style='display: none;' preload='none' ontimeupdate=\"update_progress('".escape($row['xml_cdr_uuid'])."')\" onended=\"recording_reset('".escape($row['xml_cdr_uuid'])."');\" src=\"download.php?id=".escape($row['xml_cdr_uuid'])."&t=record\" type='".escape($record_type)."'></audio>";
$content .= button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$_SESSION['theme']['button_icon_play'],'id'=>'recording_button_'.escape($row['xml_cdr_uuid']),'onclick'=>"recording_play('".escape($row['xml_cdr_uuid'])."')"]);
}
if (permission_exists('xml_cdr_recording_download')) {
if ($permission['xml_cdr_recording_download']) {
$content .= button::create(['type'=>'button','title'=>$text['label-download'],'icon'=>$_SESSION['theme']['button_icon_download'],'link'=>"download.php?id=".urlencode($row['xml_cdr_uuid'])."&t=bin"]);
}
$content .= "</td>\n";
@ -891,13 +943,13 @@
}
}
//account code
if (permission_exists('xml_cdr_account_code')) {
if ($permission['xml_cdr_account_code']) {
$content .= " <td class='middle no-link no-wrap'>";
$content .= $row['accountcode'];
$content .= " </td>\n";
}
//custom cdr fields
if (permission_exists('xml_cdr_custom_fields')) {
if ($permission['xml_cdr_custom_fields']) {
if (!empty($_SESSION['cdr']['field']) && is_array($_SESSION['cdr']['field'])) {
foreach ($_SESSION['cdr']['field'] as $field) {
$array = explode(",", $field);
@ -909,24 +961,24 @@
}
}
//start
if (permission_exists('xml_cdr_start')) {
if ($permission['xml_cdr_start']) {
$content .= " <td class='middle right no-wrap'>".$row['start_date_formatted']."</td>\n";
$content .= " <td class='middle right no-wrap hide-md-dn'>".$row['start_time_formatted']."</td>\n";
}
//codec
if (permission_exists('xml_cdr_codecs')) {
if ($permission['xml_cdr_codecs']) {
$content .= " <td class='middle right no-wrap'>".($row['read_codec'] ?? '').' / '.($row['write_codec'] ?? '')."</td>\n";
}
//tta (time to answer)
if (permission_exists('xml_cdr_tta')) {
if ($permission['xml_cdr_tta']) {
$content .= " <td class='middle right hide-md-dn'>".(!empty($row['tta']) && $row['tta'] >= 0 ? $row['tta']."s" : "&nbsp;")."</td>\n";
}
//pdd (post dial delay)
if (permission_exists("xml_cdr_pdd")) {
if ($permission['xml_cdr_pdd']) {
$content .= " <td class='middle right hide-md-dn'>".number_format(escape($row['pdd_ms'])/1000,2)."s</td>\n";
}
//mos (mean opinion score)
if (permission_exists("xml_cdr_mos")) {
if ($permission['xml_cdr_mos']) {
if(!empty($row['rtp_audio_in_mos']) && is_numeric($row['rtp_audio_in_mos'])) {
$title = " title='".$text['label-mos_score-'.round($row['rtp_audio_in_mos'])]."'";
$value = $row['rtp_audio_in_mos'];
@ -934,15 +986,15 @@
$content .= " <td class='middle center hide-md-dn' ".($title ?? '').">".($value ?? '')."</td>\n";
}
//duration
if (permission_exists('xml_cdr_duration')) {
if ($permission['xml_cdr_duration']) {
$content .= " <td class='middle center hide-sm-dn'>".gmdate("G:i:s", $duration)."</td>\n";
}
//call result/status
if (permission_exists("xml_cdr_status")) {
if ($permission['xml_cdr_status']) {
$content .= " <td class='middle no-wrap hide-sm-dn'><a href='".$list_row_url."'>".escape($text['label-'.$status] ?? '')."</a></td>\n";
}
//hangup cause
if (permission_exists('xml_cdr_hangup_cause')) {
if ($permission['xml_cdr_hangup_cause']) {
$content .= " <td class='middle no-wrap hide-sm-dn'><a href='".$list_row_url."'>".escape($hangup_cause)."</a></td>\n";
}
$content .= "</tr>\n";
@ -950,7 +1002,7 @@
if ($row['leg'] == 'a') {
echo $content;
}
else if ($row['leg'] == 'b' && permission_exists('xml_cdr_b_leg')) {
else if ($row['leg'] == 'b' && $permission['xml_cdr_b_leg']) {
echo $content;
}
unset($content);

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2023
Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
@ -31,7 +31,7 @@
require_once "resources/paging.php";
//check permissions
if (permission_exists('xml_cdr_view')) {
if ($permission['xml_cdr_view']) {
//access granted
}
else {
@ -116,7 +116,7 @@
}
//check to see if permission does not exist
if (!permission_exists('xml_cdr_b_leg')) {
if (!$permission['xml_cdr_b_leg']) {
$leg = 'a';
}
@ -139,7 +139,7 @@
}
//set the assigned extensions
if (!permission_exists('xml_cdr_domain') && isset($_SESSION['user']['extension']) && is_array($_SESSION['user']['extension'])) {
if (!$permission['xml_cdr_domain'] && isset($_SESSION['user']['extension']) && is_array($_SESSION['user']['extension'])) {
foreach ($_SESSION['user']['extension'] as $row) {
if (is_uuid($row['extension_uuid'])) {
$extension_uuids[] = $row['extension_uuid'];
@ -195,7 +195,7 @@
}
}
}
if ($_GET['show'] == 'all' && permission_exists('xml_cdr_all')) {
if ($_GET['show'] == 'all' && $permission['xml_cdr_all']) {
$param .= "&show=all";
}
if (!empty($order_by)) {
@ -298,33 +298,33 @@
$sql .= $field.", \n";
}
}
if (permission_exists('xml_cdr_account_code')) {
if ($permission['xml_cdr_account_code']) {
$sql .= "c.accountcode, \n";
}
$sql .= "c.answer_stamp, \n";
$sql .= "c.status, \n";
$sql .= "c.sip_hangup_disposition, \n";
if (permission_exists("xml_cdr_pdd")) {
if ($permission['xml_cdr_pdd']) {
$sql .= "c.pdd_ms, \n";
}
if (permission_exists("xml_cdr_mos")) {
if ($permission['xml_cdr_mos']) {
$sql .= "c.rtp_audio_in_mos, \n";
}
$sql .= "(c.answer_epoch - c.start_epoch) as tta ";
if (!empty($_REQUEST['show']) && $_REQUEST['show'] == "all" && permission_exists('xml_cdr_all')) {
if (!empty($_REQUEST['show']) && $_REQUEST['show'] == "all" && $permission['xml_cdr_all']) {
$sql .= ", c.domain_name \n";
}
$sql .= "from v_xml_cdr as c \n";
$sql .= "left join v_extensions as e on e.extension_uuid = c.extension_uuid \n";
$sql .= "inner join v_domains as d on d.domain_uuid = c.domain_uuid \n";
if (!empty($_REQUEST['show']) && $_REQUEST['show'] == "all" && permission_exists('xml_cdr_all')) {
if (!empty($_REQUEST['show']) && $_REQUEST['show'] == "all" && $permission['xml_cdr_all']) {
$sql .= "where true \n";
}
else {
$sql .= "where c.domain_uuid = :domain_uuid \n";
$parameters['domain_uuid'] = $domain_uuid;
}
if (!permission_exists('xml_cdr_domain')) { //only show the user their calls
if (!$permission['xml_cdr_domain']) { //only show the user their calls
if (isset($extension_uuids) && is_array($extension_uuids) && @sizeof($extension_uuids)) {
$sql .= "and (c.extension_uuid = '".implode("' or c.extension_uuid = '", $extension_uuids)."') \n";
}
@ -484,7 +484,7 @@
}
//exclude ring group legs that were not answered
if (!permission_exists('xml_cdr_lose_race')) {
if (!$permission['xml_cdr_lose_race']) {
$sql .= "and hangup_cause != 'LOSE_RACE' \n";
}
if (!empty($status)) {
@ -499,7 +499,7 @@
$sql .= "and bleg_uuid = :bleg_uuid \n";
$parameters['bleg_uuid'] = $bleg_uuid;
}
if (permission_exists('xml_cdr_account_code') && !empty($accountcode)) {
if ($permission['xml_cdr_account_code'] && !empty($accountcode)) {
$sql .= "and c.accountcode = :accountcode \n";
$parameters['accountcode'] = $accountcode;
}
@ -545,16 +545,16 @@
}
}
//show agent originated legs only to those with the permission
if (!permission_exists('xml_cdr_cc_agent_leg')) {
if (!$permission['xml_cdr_cc_agent_leg']) {
$sql .= "and (cc_side is null or cc_side != 'agent') \n";
}
//call center queue search for member or agent
if (!empty($cc_side) && permission_exists('xml_cdr_cc_side')) {
if (!empty($cc_side) && $permission['xml_cdr_cc_side']) {
$sql .= "and cc_side = :cc_side \n";
$parameters['cc_side'] = $cc_side;
}
//show specific call center queue
if (!empty($call_center_queue_uuid) && permission_exists('xml_cdr_call_center_queues')) {
if (!empty($call_center_queue_uuid) && $permission['xml_cdr_call_center_queues']) {
$sql .= "and call_center_queue_uuid = :call_center_queue_uuid \n";
$parameters['call_center_queue_uuid'] = $call_center_queue_uuid;
}