2016-04-26 03:30:23 +02:00
< ? php
/*
FusionPBX
Version : MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 ( the " License " ); you may not use this file except in compliance with
the License . You may obtain a copy of the License at
http :// www . mozilla . org / MPL /
Software distributed under the License is distributed on an " AS IS " basis ,
WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
for the specific language governing rights and limitations under the
License .
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane < markjcrane @ fusionpbx . com >
2022-05-05 18:16:33 +02:00
Portions created by the Initial Developer are Copyright ( C ) 2018 - 2022
2016-04-26 03:30:23 +02:00
the Initial Developer . All Rights Reserved .
Contributor ( s ) :
Mark J Crane < markjcrane @ fusionpbx . com >
*/
2018-03-31 19:09:20 +02:00
if ( $domains_processed == 1 ) {
2023-11-29 21:57:43 +01:00
//add the domain_name as the context
$sql = " UPDATE v_call_center_queues as c " ;
$sql .= " SET queue_context = ( " ;
$sql .= " SELECT domain_name FROM v_domains as d " ;
$sql .= " WHERE d.domain_uuid = c.domain_uuid " ;
$sql .= " ) " ;
$sql .= " WHERE queue_context is null; " ;
$database -> execute ( $sql );
unset ( $sql );
2018-03-31 19:09:20 +02:00
//list the missing call center queue and agent uuids
$sql = " select t.call_center_tier_uuid, t.call_center_queue_uuid, t.call_center_agent_uuid, t.queue_name, t.agent_name, d.domain_name, " ;
$sql .= " (select call_center_queue_uuid from v_call_center_queues where replace(queue_name, ' ', '-') = t.queue_name and domain_uuid = t.domain_uuid) as queue_uuid, " ;
$sql .= " (select call_center_agent_uuid from v_call_center_agents where agent_name = t.agent_name and domain_uuid = t.domain_uuid) as agent_uuid " ;
$sql .= " from v_call_center_tiers as t, v_domains as d " ;
$sql .= " where t.domain_uuid = d.domain_uuid " ;
$sql .= " and (t.call_center_queue_uuid is null or t.call_center_agent_uuid is null) " ;
2019-07-29 17:26:52 +02:00
$tiers = $database -> select ( $sql , null , 'all' );
2023-05-17 18:07:49 +02:00
if ( ! empty ( $tiers )) {
2024-08-22 20:41:10 +02:00
foreach ( $tiers as $index => $row ) {
2019-07-29 17:26:52 +02:00
if ( $row [ 'call_center_queue_uuid' ] == null && $row [ 'queue_uuid' ] != null ) {
$array [ 'call_center_tiers' ][ $index ][ 'call_center_queue_uuid' ] = $row [ 'queue_uuid' ];
}
if ( $row [ 'call_center_agent_uuid' ] == null && $row [ 'agent_uuid' ] != null ) {
$array [ 'call_center_tiers' ][ $index ][ 'call_center_agent_uuid' ] = $row [ 'agent_uuid' ];
}
2023-07-06 19:42:43 +02:00
if ( ! empty ( $array [ 'call_center_tiers' ][ $index ])) {
2019-07-29 17:26:52 +02:00
$array [ 'call_center_tiers' ][ $index ][ 'call_center_tier_uuid' ] = $row [ 'call_center_tier_uuid' ];
}
2018-03-31 19:09:20 +02:00
}
2023-07-06 19:42:43 +02:00
if ( ! empty ( $array )) {
2024-11-29 21:57:01 +01:00
$p = permissions :: new ();
2019-07-29 17:26:52 +02:00
$p -> add ( 'call_center_tier_edit' , 'temp' );
$database -> app_name = 'call_centers' ;
$database -> app_uuid = '95788e50-9500-079e-2807-fd530b0ea370' ;
2021-12-24 20:42:16 +01:00
$database -> save ( $array , false );
2019-07-29 17:26:52 +02:00
$response = $database -> message ;
unset ( $array );
$p -> delete ( 'call_center_tier_edit' , 'temp' );
2018-03-31 19:09:20 +02:00
}
}
2019-07-29 17:26:52 +02:00
unset ( $sql );
2018-03-31 19:09:20 +02:00
2021-04-28 06:42:09 +02:00
//update all callcenter dialplans to have the @domain in the queue name
2023-06-08 07:42:52 +02:00
/*
2022-09-22 18:40:16 +02:00
$sql = " select q.domain_uuid, d.domain_name, q.call_center_queue_uuid, q.dialplan_uuid, dp.dialplan_xml, " ;
2021-04-28 06:42:09 +02:00
$sql .= " q.queue_name, q.queue_extension, q.queue_timeout_action, q.queue_cid_prefix, q.queue_cc_exit_keys, " ;
$sql .= " q.queue_description, q.queue_time_base_score_sec, q.queue_greeting " ;
2022-09-22 18:40:16 +02:00
$sql .= " from v_call_center_queues as q, v_dialplans as dp, v_domains as d " ;
2021-04-28 06:42:09 +02:00
$sql .= " where q.domain_uuid = d.domain_uuid " ;
2022-09-22 18:40:16 +02:00
$sql .= " and (q.dialplan_uuid = dp.dialplan_uuid or q.dialplan_uuid is null) " ;
2021-04-28 06:42:09 +02:00
$call_center_queues = $database -> select ( $sql , null , 'all' );
$id = 0 ;
2023-05-17 18:07:49 +02:00
if ( ! empty ( $call_center_queues )) {
2021-04-28 06:42:09 +02:00
foreach ( $call_center_queues as $row ) {
//get the application and data
2023-05-08 15:23:07 +02:00
$action_array = explode ( " : " , $row [ 'queue_timeout_action' ] ? ? '' );
2021-04-28 06:42:09 +02:00
$queue_timeout_app = $action_array [ 0 ];
unset ( $action_array [ 0 ]);
$queue_timeout_data = implode ( $action_array );
//add the recording path if needed
if ( $row [ 'queue_greeting' ] != '' ) {
2025-03-14 23:19:49 +01:00
if ( file_exists ( $settings -> get ( 'switch' , 'recordings' ) . '/' . $row [ 'domain_name' ] . '/' . $row [ 'queue_greeting' ])) {
$queue_greeting_path = $settings -> get ( 'switch' , 'recordings' ) . '/' . $row [ 'domain_name' ] . '/' . $row [ 'queue_greeting' ];
2021-04-28 06:42:09 +02:00
}
else {
$queue_greeting_path = trim ( $row [ 'queue_greeting' ]);
}
}
//build the xml dialplan
2023-03-30 20:46:36 +02:00
$dialplan_xml = " <extension name= \" " . xml :: sanitize ( $row [ " queue_name " ]) . " \" continue= \" \" uuid= \" " . xml :: sanitize ( $row [ " dialplan_uuid " ]) . " \" > \n " ;
2021-04-28 06:42:09 +02:00
$dialplan_xml .= " <condition field= \" destination_number \" expression= \" ^([^#]+#)(.*) \$ \" break= \" never \" > \n " ;
$dialplan_xml .= " <action application= \" set \" data= \" caller_id_name= \$ 2 \" /> \n " ;
$dialplan_xml .= " </condition> \n " ;
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <condition field= \" destination_number \" expression= \" ^(callcenter \ +)? " . xml :: sanitize ( $row [ " queue_extension " ]) . " $\ " > \n " ;
2021-04-28 06:42:09 +02:00
$dialplan_xml .= " <action application= \" answer \" data= \" \" /> \n " ;
2023-05-17 18:07:49 +02:00
if ( ! empty ( $row [ 'call_center_queue_uuid' ]) && is_uuid ( $row [ 'call_center_queue_uuid' ])) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" call_center_queue_uuid= " . xml :: sanitize ( $row [ 'call_center_queue_uuid' ]) . " \" /> \n " ;
2021-05-07 07:23:07 +02:00
}
2022-05-05 18:16:33 +02:00
if ( is_numeric ( $row [ 'queue_extension' ])) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" queue_extension= " . xml :: sanitize ( $row [ 'queue_extension' ]) . " \" /> \n " ;
2021-05-07 07:23:07 +02:00
}
2022-09-30 16:39:09 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" cc_export_vars= \$ { cc_export_vars},call_center_queue_uuid,sip_h_Alert-Info \" /> \n " ;
2021-04-28 06:42:09 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" hangup_after_bridge=true \" /> \n " ;
if ( $row [ 'queue_time_base_score_sec' ] != '' ) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" cc_base_score= " . xml :: sanitize ( $row [ 'queue_time_base_score_sec' ]) . " \" /> \n " ;
2021-04-28 06:42:09 +02:00
}
2023-05-17 18:07:49 +02:00
if ( ! empty ( $row [ 'queue_greeting' ])) {
2022-05-05 18:16:33 +02:00
$greeting_array = explode ( ':' , $row [ 'queue_greeting' ]);
2021-04-28 06:42:09 +02:00
if ( count ( $greeting_array ) == 1 ) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" playback \" data= \" " . xml :: sanitize ( $queue_greeting_path ) . " \" /> \n " ;
2021-04-28 06:42:09 +02:00
}
else {
if ( $greeting_array [ 0 ] == 'say' || $greeting_array [ 0 ] == 'tone_stream' || $greeting_array [ 0 ] == 'phrase' ) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" " . xml :: sanitize ( $greeting_array [ 0 ]) . " \" data= \" " . xml :: sanitize ( $greeting_array [ 1 ]) . " \" /> \n " ;
2021-04-28 06:42:09 +02:00
}
}
}
2023-05-05 18:46:37 +02:00
if ( ! empty ( $row [ 'queue_cid_prefix' ])) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" effective_caller_id_name= " . xml :: sanitize ( $row [ 'queue_cid_prefix' ]) . " # \$ { caller_id_name} \" /> \n " ;
2021-04-28 06:42:09 +02:00
}
2023-05-05 18:46:37 +02:00
if ( ! empty ( $row [ 'queue_cc_exit_keys' ])) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" set \" data= \" cc_exit_keys= " . xml :: sanitize ( $row [ 'queue_cc_exit_keys' ]) . " \" /> \n " ;
2021-04-28 06:42:09 +02:00
}
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" callcenter \" data= \" " . xml :: sanitize ( $row [ 'queue_extension' ]) . " @ " . xml :: sanitize ( $row [ 'domain_name' ]) . " \" /> \n " ;
2021-04-28 06:42:09 +02:00
//if ($destination->valid($queue_timeout_app.':'.$queue_timeout_data)) {
2023-03-30 20:46:36 +02:00
$dialplan_xml .= " <action application= \" " . xml :: sanitize ( $queue_timeout_app ) . " \" data= \" " . xml :: sanitize ( $queue_timeout_data ) . " \" /> \n " ;
2021-04-28 06:42:09 +02:00
//}
$dialplan_xml .= " </condition> \n " ;
2022-09-22 18:40:16 +02:00
$dialplan_xml .= " </extension> " ;
2021-04-28 06:42:09 +02:00
//build the dialplan array
2022-09-22 18:40:16 +02:00
if ( md5 ( $row [ " dialplan_xml " ]) != md5 ( $dialplan_xml )) {
$array [ 'dialplans' ][ $id ][ " domain_uuid " ] = $row [ " domain_uuid " ];
$array [ 'dialplans' ][ $id ][ " dialplan_uuid " ] = $row [ " dialplan_uuid " ];
$array [ 'dialplans' ][ $id ][ " dialplan_name " ] = $row [ " queue_name " ];
$array [ 'dialplans' ][ $id ][ " dialplan_number " ] = $row [ " queue_extension " ];
$array [ 'dialplans' ][ $id ][ " dialplan_context " ] = $row [ 'domain_name' ];
$array [ 'dialplans' ][ $id ][ " dialplan_continue " ] = " false " ;
$array [ 'dialplans' ][ $id ][ " dialplan_xml " ] = $dialplan_xml ;
$array [ 'dialplans' ][ $id ][ " dialplan_order " ] = " 230 " ;
$array [ 'dialplans' ][ $id ][ " dialplan_enabled " ] = " true " ;
$array [ 'dialplans' ][ $id ][ " dialplan_description " ] = $row [ " queue_description " ];
$array [ 'dialplans' ][ $id ][ " app_uuid " ] = " 95788e50-9500-079e-2807-fd530b0ea370 " ;
}
2021-04-28 06:42:09 +02:00
//increment the array id
$id ++ ;
}
}
unset ( $prep_statement );
2021-12-24 20:42:16 +01:00
2023-06-08 07:42:52 +02:00
//save the array to the database
2023-05-17 18:07:49 +02:00
if ( ! empty ( $array )) {
2021-04-28 06:42:09 +02:00
//add the dialplan permission
2024-11-29 21:57:01 +01:00
$p = permissions :: new ();
2021-04-28 06:42:09 +02:00
$p -> add ( " dialplan_add " , " temp " );
$p -> add ( " dialplan_edit " , " temp " );
//save to the data
$database -> app_name = 'call_centers' ;
$database -> app_uuid = '95788e50-9500-079e-2807-fd530b0ea370' ;
2021-12-24 20:42:16 +01:00
$database -> save ( $array , false );
2021-04-28 06:42:09 +02:00
$message = $database -> message ;
//remove the temporary permission
$p -> delete ( " dialplan_add " , " temp " );
$p -> delete ( " dialplan_edit " , " temp " );
}
2023-06-08 07:42:52 +02:00
*/
2021-04-23 23:48:43 +02:00
2018-03-31 19:09:20 +02:00
}
2021-05-10 23:50:34 +02:00
?>