2019-10-20 03:14:34 +02:00
< ? php
/**
* call block class
*/
class call_block {
/**
2019-10-22 01:03:59 +02:00
* declare private variables
*/
private $app_name ;
private $app_uuid ;
private $permission_prefix ;
private $list_page ;
private $table ;
private $uuid_prefix ;
2019-10-29 17:11:18 +01:00
private $toggle_field ;
private $toggle_values ;
2024-07-25 21:24:40 +02:00
private $database ;
2019-10-22 01:03:59 +02:00
2020-01-12 03:06:34 +01:00
/**
* declare public variables
*/
2020-11-18 01:39:49 +01:00
public $call_block_direction ;
2020-01-12 03:06:34 +01:00
public $extension_uuid ;
public $call_block_app ;
public $call_block_data ;
2019-10-22 01:03:59 +02:00
/**
* called when the object is created
2019-10-20 03:14:34 +02:00
*/
public function __construct () {
2024-07-25 21:24:40 +02:00
//initialize the database
$this -> database = new database ;
2019-10-22 01:03:59 +02:00
//assign private variables
$this -> app_name = 'call_block' ;
$this -> app_uuid = '9ed63276-e085-4897-839c-4f2e36d92d6c' ;
2019-10-22 01:13:21 +02:00
$this -> permission_prefix = 'call_block_' ;
2019-10-22 01:03:59 +02:00
$this -> list_page = 'call_block.php' ;
$this -> table = 'call_block' ;
$this -> uuid_prefix = 'call_block_' ;
2019-10-29 17:11:18 +01:00
$this -> toggle_field = 'call_block_enabled' ;
$this -> toggle_values = [ 'true' , 'false' ];
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
}
/**
2019-10-22 01:03:59 +02:00
* delete records
2019-10-20 03:14:34 +02:00
*/
2019-10-22 01:03:59 +02:00
public function delete ( $records ) {
2019-10-22 01:13:21 +02:00
if ( permission_exists ( $this -> permission_prefix . 'delete' )) {
2019-10-20 03:14:34 +02:00
//add multi-lingual support
$language = new text ;
$text = $language -> get ();
//validate the token
$token = new token ;
if ( ! $token -> validate ( $_SERVER [ 'PHP_SELF' ])) {
message :: add ( $text [ 'message-invalid_token' ], 'negative' );
2019-10-22 01:03:59 +02:00
header ( 'Location: ' . $this -> list_page );
2019-10-20 03:14:34 +02:00
exit ;
}
2019-10-22 01:03:59 +02:00
//delete multiple records
if ( is_array ( $records ) && @ sizeof ( $records ) != 0 ) {
2019-12-01 04:51:33 +01:00
//filter out unchecked, build where clause for below
2019-10-22 01:03:59 +02:00
foreach ( $records as $x => $record ) {
2023-06-02 01:22:59 +02:00
if ( ! empty ( $record [ 'checked' ]) && $record [ 'checked' ] == 'true' && is_uuid ( $record [ 'uuid' ])) {
2019-12-01 04:51:33 +01:00
$uuids [] = " ' " . $record [ 'uuid' ] . " ' " ;
2019-10-20 03:14:34 +02:00
}
}
2019-10-22 01:03:59 +02:00
2019-12-01 04:51:33 +01:00
//get necessary call block details
if ( is_array ( $uuids ) && @ sizeof ( $uuids ) != 0 ) {
$sql = " select " . $this -> uuid_prefix . " uuid as uuid, call_block_number from v_ " . $this -> table . " " ;
2023-10-18 00:35:29 +02:00
$sql .= " where ( " ;
$sql .= " domain_uuid = :domain_uuid " ;
if ( permission_exists ( 'call_block_domain' )) {
$sql .= " or domain_uuid is null " ;
}
$sql .= " ) " ;
2019-12-01 04:51:33 +01:00
$sql .= " and " . $this -> uuid_prefix . " uuid in ( " . implode ( ', ' , $uuids ) . " ) " ;
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
2024-07-25 21:24:40 +02:00
$rows = $this -> database -> select ( $sql , $parameters , 'all' );
2019-12-01 04:51:33 +01:00
if ( is_array ( $rows ) && @ sizeof ( $rows ) != 0 ) {
foreach ( $rows as $row ) {
$call_block_numbers [ $row [ 'uuid' ]] = $row [ 'call_block_number' ];
}
}
unset ( $sql , $parameters , $rows , $row );
}
//build the delete array
$x = 0 ;
foreach ( $call_block_numbers as $call_block_uuid => $call_block_number ) {
$array [ $this -> table ][ $x ][ $this -> uuid_prefix . 'uuid' ] = $call_block_uuid ;
2023-10-18 00:35:29 +02:00
if ( ! permission_exists ( 'call_block_domain' )) {
$array [ $this -> table ][ $x ][ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
}
2019-12-01 04:51:33 +01:00
$x ++ ;
}
2019-10-20 03:14:34 +02:00
//delete the checked rows
if ( is_array ( $array ) && @ sizeof ( $array ) != 0 ) {
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
//execute delete
2024-07-25 21:24:40 +02:00
$this -> database -> app_name = $this -> app_name ;
$this -> database -> app_uuid = $this -> app_uuid ;
$this -> database -> delete ( $array );
2019-10-20 03:14:34 +02:00
unset ( $array );
2019-10-22 01:03:59 +02:00
2019-12-01 04:51:33 +01:00
//clear the cache
$cache = new cache ;
foreach ( $call_block_numbers as $call_block_number ) {
$cache -> delete ( " app:call_block: " . $_SESSION [ 'domain_name' ] . " : " . $call_block_number );
}
2019-10-20 03:14:34 +02:00
//set message
message :: add ( $text [ 'message-delete' ]);
}
2019-10-22 01:03:59 +02:00
unset ( $records );
2019-10-20 03:14:34 +02:00
}
}
}
/**
2019-10-22 01:03:59 +02:00
* toggle records
2019-10-20 03:14:34 +02:00
*/
2019-10-22 01:03:59 +02:00
public function toggle ( $records ) {
2019-10-22 01:13:21 +02:00
if ( permission_exists ( $this -> permission_prefix . 'edit' )) {
2019-10-20 03:14:34 +02:00
//add multi-lingual support
$language = new text ;
$text = $language -> get ();
//validate the token
$token = new token ;
if ( ! $token -> validate ( $_SERVER [ 'PHP_SELF' ])) {
message :: add ( $text [ 'message-invalid_token' ], 'negative' );
2019-10-22 01:03:59 +02:00
header ( 'Location: ' . $this -> list_page );
2019-10-20 03:14:34 +02:00
exit ;
}
2019-10-22 01:03:59 +02:00
//toggle the checked records
if ( is_array ( $records ) && @ sizeof ( $records ) != 0 ) {
2019-10-29 17:11:18 +01:00
//get current toggle state
2019-12-01 04:51:33 +01:00
foreach ( $records as $x => $record ) {
2023-06-02 01:22:59 +02:00
if ( ! empty ( $record [ 'checked' ]) && $record [ 'checked' ] == 'true' && is_uuid ( $record [ 'uuid' ])) {
2019-11-30 23:18:48 +01:00
$uuids [] = " ' " . $record [ 'uuid' ] . " ' " ;
2019-10-20 03:14:34 +02:00
}
}
2019-11-30 23:18:48 +01:00
if ( is_array ( $uuids ) && @ sizeof ( $uuids ) != 0 ) {
2019-12-01 04:51:33 +01:00
$sql = " select " . $this -> uuid_prefix . " uuid as uuid, " . $this -> toggle_field . " as toggle, call_block_number from v_ " . $this -> table . " " ;
2019-10-20 03:14:34 +02:00
$sql .= " where (domain_uuid = :domain_uuid or domain_uuid is null) " ;
2019-11-30 23:18:48 +01:00
$sql .= " and " . $this -> uuid_prefix . " uuid in ( " . implode ( ', ' , $uuids ) . " ) " ;
2019-10-20 03:14:34 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
2024-07-25 21:24:40 +02:00
$rows = $this -> database -> select ( $sql , $parameters , 'all' );
2019-10-20 03:14:34 +02:00
if ( is_array ( $rows ) && @ sizeof ( $rows ) != 0 ) {
foreach ( $rows as $row ) {
2019-10-29 17:11:18 +01:00
$states [ $row [ 'uuid' ]] = $row [ 'toggle' ];
2019-12-01 04:51:33 +01:00
$call_block_numbers [] = $row [ 'call_block_number' ];
2019-10-20 03:14:34 +02:00
}
}
unset ( $sql , $parameters , $rows , $row );
}
//build update array
$x = 0 ;
2019-12-01 04:51:33 +01:00
foreach ( $states as $uuid => $state ) {
2019-10-22 01:03:59 +02:00
$array [ $this -> table ][ $x ][ $this -> uuid_prefix . 'uuid' ] = $uuid ;
2019-10-29 17:11:18 +01:00
$array [ $this -> table ][ $x ][ $this -> toggle_field ] = $state == $this -> toggle_values [ 0 ] ? $this -> toggle_values [ 1 ] : $this -> toggle_values [ 0 ];
2019-10-20 03:14:34 +02:00
$x ++ ;
}
//save the changes
if ( is_array ( $array ) && @ sizeof ( $array ) != 0 ) {
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
//save the array
2024-07-25 21:24:40 +02:00
$this -> database -> app_name = $this -> app_name ;
$this -> database -> app_uuid = $this -> app_uuid ;
$this -> database -> save ( $array );
2019-10-20 03:14:34 +02:00
unset ( $array );
2019-10-22 01:03:59 +02:00
2019-12-01 04:51:33 +01:00
//clear the cache
$cache = new cache ;
foreach ( $call_block_numbers as $call_block_number ) {
$cache -> delete ( " app:call_block: " . $_SESSION [ 'domain_name' ] . " : " . $call_block_number );
}
2019-10-20 03:14:34 +02:00
//set message
message :: add ( $text [ 'message-toggle' ]);
}
2019-10-22 01:03:59 +02:00
unset ( $records , $states );
2019-10-20 03:14:34 +02:00
}
}
}
/**
2019-10-22 01:03:59 +02:00
* copy records
2019-10-20 03:14:34 +02:00
*/
2019-10-22 01:03:59 +02:00
public function copy ( $records ) {
2019-10-22 01:13:21 +02:00
if ( permission_exists ( $this -> permission_prefix . 'add' )) {
2019-10-20 03:14:34 +02:00
//add multi-lingual support
$language = new text ;
$text = $language -> get ();
//validate the token
$token = new token ;
if ( ! $token -> validate ( $_SERVER [ 'PHP_SELF' ])) {
message :: add ( $text [ 'message-invalid_token' ], 'negative' );
2019-10-22 01:03:59 +02:00
header ( 'Location: ' . $this -> list_page );
2019-10-20 03:14:34 +02:00
exit ;
}
2019-10-22 01:03:59 +02:00
//copy the checked records
if ( is_array ( $records ) && @ sizeof ( $records ) != 0 ) {
2019-10-20 03:14:34 +02:00
2019-10-22 01:03:59 +02:00
//get checked records
2019-12-01 04:51:33 +01:00
foreach ( $records as $x => $record ) {
2023-06-02 01:22:59 +02:00
if ( ! empty ( $record [ 'checked' ]) && $record [ 'checked' ] == 'true' && is_uuid ( $record [ 'uuid' ])) {
2019-11-30 23:18:48 +01:00
$uuids [] = " ' " . $record [ 'uuid' ] . " ' " ;
2019-10-20 03:14:34 +02:00
}
}
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
//create insert array from existing data
2019-11-30 23:18:48 +01:00
if ( is_array ( $uuids ) && @ sizeof ( $uuids ) != 0 ) {
2019-10-22 01:03:59 +02:00
$sql = " select * from v_ " . $this -> table . " " ;
2019-10-20 03:14:34 +02:00
$sql .= " where (domain_uuid = :domain_uuid or domain_uuid is null) " ;
2019-11-30 23:18:48 +01:00
$sql .= " and " . $this -> uuid_prefix . " uuid in ( " . implode ( ', ' , $uuids ) . " ) " ;
2019-10-20 03:14:34 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
2024-07-25 21:24:40 +02:00
$rows = $this -> database -> select ( $sql , $parameters , 'all' );
2019-10-20 03:14:34 +02:00
if ( is_array ( $rows ) && @ sizeof ( $rows ) != 0 ) {
foreach ( $rows as $x => $row ) {
2019-10-26 03:40:28 +02:00
//copy data
$array [ $this -> table ][ $x ] = $row ;
//overwrite
$array [ $this -> table ][ $x ][ $this -> uuid_prefix . 'uuid' ] = uuid ();
$array [ $this -> table ][ $x ][ 'call_block_description' ] = trim ( $row [ 'call_block_description' ] . ' (' . $text [ 'label-copy' ] . ')' );
2019-10-20 03:14:34 +02:00
}
}
unset ( $sql , $parameters , $rows , $row );
}
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
//save the changes and set the message
if ( is_array ( $array ) && @ sizeof ( $array ) != 0 ) {
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
//save the array
2024-07-25 21:24:40 +02:00
$this -> database -> app_name = $this -> app_name ;
$this -> database -> app_uuid = $this -> app_uuid ;
$this -> database -> save ( $array );
2019-10-20 03:14:34 +02:00
unset ( $array );
//set message
message :: add ( $text [ 'message-copy' ]);
2019-10-22 01:03:59 +02:00
2019-10-20 03:14:34 +02:00
}
2019-10-22 01:03:59 +02:00
unset ( $records );
2019-10-20 03:14:34 +02:00
}
}
}
2020-01-12 03:06:34 +01:00
/**
* add records
*/
public function add ( $records ) {
if ( permission_exists ( $this -> permission_prefix . 'add' )) {
//add multi-lingual support
$language = new text ;
$text = $language -> get ();
//validate the token
$token = new token ;
if ( ! $token -> validate ( $_SERVER [ 'PHP_SELF' ])) {
message :: add ( $text [ 'message-invalid_token' ], 'negative' );
header ( 'Location: ' . $this -> list_page );
exit ;
}
//add the checked records
if ( is_array ( $records ) && @ sizeof ( $records ) != 0 ) {
//filter checked records
foreach ( $records as $x => $record ) {
2023-06-02 01:22:59 +02:00
if ( ! empty ( $record [ 'checked' ]) && $record [ 'checked' ] == 'true' && is_uuid ( $record [ 'uuid' ])) {
2020-01-12 03:06:34 +01:00
$uuids [] = " ' " . $record [ 'uuid' ] . " ' " ;
}
}
2024-07-25 21:24:40 +02:00
//get the caller id info from call detail records
2020-01-12 03:06:34 +01:00
if ( is_array ( $uuids ) && @ sizeof ( $uuids ) != 0 ) {
2020-11-18 01:39:49 +01:00
$sql = " select caller_id_name, caller_id_number, caller_destination from v_xml_cdr " ;
2020-01-12 03:06:34 +01:00
$sql .= " where xml_cdr_uuid in ( " . implode ( ', ' , $uuids ) . " ) " ;
2024-07-25 21:24:40 +02:00
$rows = $this -> database -> select ( $sql , $parameters ? ? null , 'all' );
unset ( $sql , $parameters );
}
//get the caller id info from call detail records
if ( isset ( $_SESSION [ 'domain_uuid' ]) && is_uuid ( $_SESSION [ 'domain_uuid' ])) {
//get the destination country code
$sql = " select distinct(destination_prefix), " ;
$sql .= " (select count(destination_prefix) from v_destinations where domain_uuid = :domain_uuid and destination_prefix = d.destination_prefix) as count " ;
$sql .= " from v_destinations as d " ;
$sql .= " where domain_uuid = :domain_uuid " ;
$sql .= " and destination_prefix <> '' " ;
2024-07-26 22:33:50 +02:00
$sql .= " and destination_enabled = 'true' " ;
2024-07-25 21:24:40 +02:00
$sql .= " order by count desc limit 1; " ;
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$destination_country_code = $this -> database -> select ( $sql , $parameters ? ? null , 'column' );
unset ( $sql , $parameters );
2024-07-26 04:49:56 +02:00
2024-07-25 21:24:40 +02:00
//use the the destination country code to set the country code
if ( ! empty ( $destination_country_code )) {
$destination_country_code = trim ( $destination_country_code , " + " );
$country_code = $destination_country_code ;
}
}
2024-07-26 22:33:50 +02:00
//get the users that are assigned to the extension
if ( ! permission_exists ( 'call_block_extension' )) {
$sql = " select extension_uuid from v_extension_users " ;
$sql .= " where user_uuid = :user_uuid " ;
$parameters [ 'user_uuid' ] = $_SESSION [ 'user_uuid' ];
$user_extensions = $this -> database -> select ( $sql , $parameters ? ? null , 'all' );
unset ( $sql , $parameters );
}
2024-07-25 21:24:40 +02:00
//get the country code from default settings
if ( ! empty ( $_SESSION [ 'domain' ][ 'country_code' ][ 'numeric' ])) {
$country_code = $_SESSION [ 'domain' ][ 'country_code' ][ 'numeric' ];
2020-01-12 03:06:34 +01:00
}
//loop through records
if ( is_array ( $rows ) && @ sizeof ( $rows ) != 0 ) {
foreach ( $rows as $x => $row ) {
2024-07-26 22:33:50 +02:00
//remove e.164 and country code
if ( substr ( $row [ " caller_id_number " ], 0 , 1 ) == " + " ) {
//format e.164
$call_block_number = str_replace ( " + " . trim ( $country_code ), " " , trim ( $row [ " caller_id_number " ]));
}
elseif ( ! empty ( $row [ " caller_id_number " ])) {
//remove the country code if its the first in the string
$call_block_number = ltrim ( trim ( $row [ " caller_id_number " ]), $country_code ? ? '' );
}
else {
$call_block_number = '' ;
}
2020-01-12 03:06:34 +01:00
//build insert array
2024-07-19 01:13:22 +02:00
if ( permission_exists ( 'call_block_extension' )) {
2020-01-12 03:06:34 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_uuid' ] = uuid ();
$array [ 'call_block' ][ $x ][ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
2020-11-18 01:39:49 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_direction' ] = $this -> call_block_direction ;
2020-01-12 03:06:34 +01:00
if ( is_uuid ( $this -> extension_uuid )) {
$array [ 'call_block' ][ $x ][ 'extension_uuid' ] = $this -> extension_uuid ;
}
2020-11-18 01:39:49 +01:00
if ( $this -> call_block_direction == 'inbound' ) {
2023-04-03 21:17:42 +02:00
$array [ 'call_block' ][ $x ][ 'call_block_name' ] = '' ;
2024-07-26 04:49:56 +02:00
$array [ 'call_block' ][ $x ][ 'call_block_country_code' ] = trim ( $country_code ? ? '' );
2022-02-25 01:55:46 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_number' ] = $call_block_number ;
$array [ 'call_block' ][ $x ][ 'call_block_description' ] = trim ( $row [ " caller_id_name " ]);
2020-11-18 01:39:49 +01:00
}
if ( $this -> call_block_direction == 'outbound' ) {
$array [ 'call_block' ][ $x ][ 'call_block_number' ] = trim ( $row [ " caller_destination " ]);
}
2020-01-12 03:06:34 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_count' ] = 0 ;
$array [ 'call_block' ][ $x ][ 'call_block_app' ] = $this -> call_block_app ;
$array [ 'call_block' ][ $x ][ 'call_block_data' ] = $this -> call_block_data ;
$array [ 'call_block' ][ $x ][ 'call_block_enabled' ] = 'true' ;
$array [ 'call_block' ][ $x ][ 'date_added' ] = time ();
$x ++ ;
}
else {
2024-07-26 04:49:56 +02:00
if ( is_array ( $user_extensions )) {
foreach ( $user_extensions as $field ) {
2020-01-12 03:06:34 +01:00
if ( is_uuid ( $field [ 'extension_uuid' ])) {
$array [ 'call_block' ][ $x ][ 'call_block_uuid' ] = uuid ();
$array [ 'call_block' ][ $x ][ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
2020-11-18 01:39:49 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_direction' ] = $this -> call_block_direction ;
2020-01-12 03:06:34 +01:00
$array [ 'call_block' ][ $x ][ 'extension_uuid' ] = $field [ 'extension_uuid' ];
2020-11-18 01:39:49 +01:00
if ( $this -> call_block_direction == 'inbound' ) {
2023-04-03 21:17:42 +02:00
$array [ 'call_block' ][ $x ][ 'call_block_name' ] = '' ;
2024-07-26 04:49:56 +02:00
$array [ 'call_block' ][ $x ][ 'call_block_country_code' ] = trim ( $country_code ? ? '' );
2022-02-25 01:55:46 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_number' ] = $call_block_number ;
$array [ 'call_block' ][ $x ][ 'call_block_description' ] = trim ( $row [ " caller_id_name " ]);
2020-11-18 01:39:49 +01:00
}
if ( $this -> call_block_direction == 'outbound' ) {
$array [ 'call_block' ][ $x ][ 'call_block_number' ] = trim ( $row [ " caller_destination " ]);
}
2020-01-12 03:06:34 +01:00
$array [ 'call_block' ][ $x ][ 'call_block_count' ] = 0 ;
$array [ 'call_block' ][ $x ][ 'call_block_app' ] = $this -> call_block_app ;
$array [ 'call_block' ][ $x ][ 'call_block_data' ] = $this -> call_block_data ;
$array [ 'call_block' ][ $x ][ 'call_block_enabled' ] = 'true' ;
$array [ 'call_block' ][ $x ][ 'date_added' ] = time ();
$x ++ ;
}
}
}
}
}
}
//add records
if ( is_array ( $array ) && @ sizeof ( $array ) != 0 ) {
//ensure call block is enabled in the dialplan (build update array)
$sql = " select dialplan_uuid from v_dialplans " ;
$sql .= " where domain_uuid = :domain_uuid " ;
$sql .= " and app_uuid = ' " . $this -> app_uuid . " ' " ;
$sql .= " and dialplan_enabled <> 'true' " ;
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
2024-07-25 21:24:40 +02:00
$rows = $this -> database -> select ( $sql , $parameters );
2020-01-12 03:06:34 +01:00
if ( is_array ( $rows ) && @ sizeof ( $rows ) != 0 ) {
foreach ( $rows as $x => $row ) {
$array [ 'dialplans' ][ $x ][ 'dialplan_uuid' ] = $row [ 'dialplan_uuid' ];
$array [ 'dialplans' ][ $x ][ 'dialplan_enabled' ] = 'true' ;
}
}
unset ( $rows , $parameters );
//grant temporary permissions
2024-11-29 21:57:01 +01:00
$p = permissions :: new ();
2020-01-12 03:06:34 +01:00
$p -> add ( 'dialplan_edit' , 'temp' );
//save the array
2024-07-25 21:24:40 +02:00
$this -> database -> app_name = $this -> app_name ;
$this -> database -> app_uuid = $this -> app_uuid ;
$this -> database -> save ( $array );
$response = $this -> database -> message ;
2020-01-12 03:06:34 +01:00
unset ( $array );
//revoke temporary permissions
$p -> delete ( 'dialplan_edit' , 'temp' );
//set message
message :: add ( $text [ 'message-add' ]);
}
}
}
} //method
} //class