diff --git a/app/voicemails/resources/classes/voicemail.php b/app/voicemails/resources/classes/voicemail.php index 05158fb54d..32847e1366 100644 --- a/app/voicemails/resources/classes/voicemail.php +++ b/app/voicemails/resources/classes/voicemail.php @@ -326,14 +326,14 @@ $array[$this->table][$x]['voicemail_uuid'] = $voicemail_uuid; $array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid']; $array['voicemail_options'][$x]['voicemail_uuid'] = $voicemail_uuid; - $array['voicemail_options'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];; + $array['voicemail_options'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; $array['voicemail_messages'][$x]['voicemail_uuid'] = $voicemail_uuid; - $array['voicemail_messages'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];; + $array['voicemail_messages'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; $array['voicemail_destinations'][$x]['voicemail_uuid'] = $voicemail_uuid; - $array['voicemail_destinations'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];; + $array['voicemail_destinations'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; if (is_numeric($voicemail_id)) { $array['voicemail_greetings'][$x]['voicemail_id'] = $voicemail_id; - $array['voicemail_greetings'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];; + $array['voicemail_greetings'][$x]['domain_uuid'] = $_SESSION['domain_uuid']; } $x++; } @@ -372,6 +372,108 @@ } } + public function voicemail_options_delete($records) { + //assign private variables + $this->permission_prefix = 'voicemail_option_'; + $this->list_page = 'voicemail_edit.php?id='.$this->voicemail_uuid; + $this->table = 'voicemail_options'; + $this->uuid_prefix = 'voicemail_option_'; + + if (permission_exists($this->permission_prefix.'delete')) { + + //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; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + + //filter out unchecked sip profiles + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + //build the delete array + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; + $array[$this->table][$x]['voicemail_uuid'] = $this->voicemail_uuid; + $array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid']; + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + } + unset($records); + } + } + } + + public function voicemail_destinations_delete($records) { + //assign private variables + $this->list_page = 'voicemail_edit.php?id='.$this->voicemail_uuid; + $this->table = 'voicemail_destinations'; + $this->uuid_prefix = 'voicemail_destination_'; + + if (permission_exists('voicemail_forward')) { + + //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; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + + //filter out unchecked sip profiles + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + //build the delete array + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; + $array[$this->table][$x]['voicemail_uuid'] = $this->voicemail_uuid; + $array[$this->table][$x]['domain_uuid'] = $_SESSION['domain_uuid']; + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + //grant temporary permissions + $p = new permissions; + $p->add('voicemail_destination_delete', 'temp'); + + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //revoke temporary permissions + $p->delete('voicemail_destination_delete', 'temp'); + } + unset($records); + } + } + } + public function voicemail_toggle($records) { if (permission_exists($this->permission_prefix.'edit')) { diff --git a/app/voicemails/voicemail_edit.php b/app/voicemails/voicemail_edit.php index ad06d528ed..5f08a1ede9 100644 --- a/app/voicemails/voicemail_edit.php +++ b/app/voicemails/voicemail_edit.php @@ -58,6 +58,25 @@ $referer_path = $_REQUEST["referer_path"]; $referer_query = $_REQUEST["referer_query"]; if (count($_POST)>0) { + + //process the http post data by submitted action + if ($_POST['action'] != '' && is_uuid($_POST['voicemail_uuid'])) { + $array[0]['checked'] = 'true'; + $array[0]['uuid'] = $_POST['voicemail_uuid']; + + switch ($_POST['action']) { + case 'delete': + if (permission_exists('voicemail_delete')) { + $obj = new voicemail; + $obj->voicemail_delete($array); + } + break; + } + + header('Location: voicemails.php'); + exit; + } + //set the variables from the HTTP values $voicemail_id = $_POST["voicemail_id"]; $voicemail_password = $_POST["voicemail_password"]; @@ -69,62 +88,16 @@ $voicemail_transcription_enabled = $_POST["voicemail_transcription_enabled"]; $voicemail_file = $_POST["voicemail_file"]; $voicemail_local_after_email = $_POST["voicemail_local_after_email"]; + $voicemail_destination = $_POST["voicemail_destination"]; $voicemail_enabled = $_POST["voicemail_enabled"]; $voicemail_description = $_POST["voicemail_description"]; $voicemail_tutorial = $_POST["voicemail_tutorial"]; + $voicemail_options_delete = $_POST["voicemail_options_delete"]; + $voicemail_destinations_delete = $_POST["voicemail_destinations_delete"]; //remove the space $voicemail_mail_to = str_replace(" ", "", $voicemail_mail_to); } -//unassign the voicemail id copy from the voicemail id - if ($_GET["a"] == "delete" && is_uuid($voicemail_uuid) && is_uuid($_REQUEST["voicemail_destination_uuid"])) { - //set the variables - $voicemail_destination_uuid = $_REQUEST["voicemail_destination_uuid"]; - //build delete array - $array['voicemail_destinations'][0]['voicemail_destination_uuid'] = $voicemail_destination_uuid; - $array['voicemail_destinations'][0]['voicemail_uuid'] = $voicemail_uuid; - //grant temporary permissions - $p = new permissions; - $p->add('voicemail_destination_delete', 'temp'); - //execute delete - $database = new database; - $database->app_name = 'voicemails'; - $database->app_uuid = 'b523c2d2-64cd-46f1-9520-ca4b4098e044'; - $database->delete($array); - unset($array); - //revoke temporary permissions - $p->delete('voicemail_destination_delete', 'temp'); - //set message - message::add($text['message-delete']); - //redirect the browser - header("Location: voicemail_edit.php?id=".$voicemail_uuid); - exit; - } - -//assign the voicemail id copy to the voicemail id - if (permission_exists('voicemail_forward') && is_uuid($voicemail_uuid) && is_uuid($_REQUEST["voicemail_uuid_copy"])) { - //set the variables - $voicemail_uuid_copy = $_REQUEST["voicemail_uuid_copy"]; - //build insert array - $array['voicemail_destinations'][0]['domain_uuid'] = $domain_uuid; - $array['voicemail_destinations'][0]['voicemail_destination_uuid'] = uuid(); - $array['voicemail_destinations'][0]['voicemail_uuid'] = $voicemail_uuid; - $array['voicemail_destinations'][0]['voicemail_uuid_copy'] = $voicemail_uuid_copy; - //grant temporary permissions - $p = new permissions; - $p->add('voicemail_destination_add', 'temp'); - //execute insert - $database = new database; - $database->app_name = 'voicemails'; - $database->app_uuid = 'b523c2d2-64cd-46f1-9520-ca4b4098e044'; - $database->save($array); - unset($array); - //revoke temporary permissions - $p->delete('voicemail_destination_add', 'temp'); - //set message - message::add($text['message-add']); - } - //process the data if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { @@ -180,18 +153,16 @@ } $array['voicemails'][0]['voicemail_enabled'] = $voicemail_enabled; $array['voicemails'][0]['voicemail_description'] = $voicemail_description; - $database = new database; - $database->app_name = 'voicemails'; - $database->app_uuid = 'b523c2d2-64cd-46f1-9520-ca4b4098e044'; - $database->save($array); - unset($array); + + //create permissions object + $p = new permissions; //add voicemail options if (permission_exists('voicemail_option_add') && sizeof($voicemail_options) > 0) { - foreach ($voicemail_options as $index => $voicemail_option) { - if ($voicemail_option['voicemail_option_digits'] == '' || $voicemail_option['voicemail_option_param'] == '') { unset($voicemail_options[$index]); } + foreach ($voicemail_options as $x => $voicemail_option) { + if ($voicemail_option['voicemail_option_digits'] == '' || $voicemail_option['voicemail_option_param'] == '') { unset($voicemail_options[$x]); } } - foreach ($voicemail_options as $index => $voicemail_option) { + foreach ($voicemail_options as $x => $voicemail_option) { if (is_numeric($voicemail_option["voicemail_option_param"])) { //if numeric then add tranfer $1 XML domain_name $voicemail_option['voicemail_option_action'] = "menu-exec-app"; @@ -205,33 +176,71 @@ } //build insert array - $voicemail_option_uuid = uuid(); - $array['voicemail_options'][$index]['voicemail_option_uuid'] = $voicemail_option_uuid; - $array['voicemail_options'][$index]['voicemail_uuid'] = $voicemail_uuid; - $array['voicemail_options'][$index]['domain_uuid'] = $domain_uuid; - $array['voicemail_options'][$index]['voicemail_option_digits'] = $voicemail_option['voicemail_option_digits']; - $array['voicemail_options'][$index]['voicemail_option_action'] = $voicemail_option['voicemail_option_action']; + $array['voicemail_options'][$x]['voicemail_option_uuid'] = uuid(); + $array['voicemail_options'][$x]['voicemail_uuid'] = $voicemail_uuid; + $array['voicemail_options'][$x]['domain_uuid'] = $domain_uuid; + $array['voicemail_options'][$x]['voicemail_option_digits'] = $voicemail_option['voicemail_option_digits']; + $array['voicemail_options'][$x]['voicemail_option_action'] = $voicemail_option['voicemail_option_action']; if ($destination->valid(preg_replace('/\s/', ':', $voicemail_option['voicemail_option_param'], 1))) { - $array['voicemail_options'][$index]['voicemail_option_param'] = $voicemail_option['voicemail_option_param']; + $array['voicemail_options'][$x]['voicemail_option_param'] = $voicemail_option['voicemail_option_param']; } - $array['voicemail_options'][$index]['voicemail_option_order'] = $voicemail_option['voicemail_option_order']; - $array['voicemail_options'][$index]['voicemail_option_description'] = $voicemail_option['voicemail_option_description']; + $array['voicemail_options'][$x]['voicemail_option_order'] = $voicemail_option['voicemail_option_order']; + $array['voicemail_options'][$x]['voicemail_option_description'] = $voicemail_option['voicemail_option_description']; } - if (is_array($array) && @sizeof($array) != 0) { - //grant temporary permissions - $p = new permissions; + if (is_array($array['voicemail_options']) && @sizeof($array['voicemail_options']) != 0) { + //grant temporary permission $p->add('voicemail_option_add', 'temp'); - //execute inserts - $database = new database; - $database->app_name = 'voicemails'; - $database->app_uuid = 'b523c2d2-64cd-46f1-9520-ca4b4098e044'; - $database->save($array); - unset($array); - //revoke temporary permissions - $p->delete('voicemail_option_add', 'temp'); } } + //add voicemail destination + if (permission_exists('voicemail_forward') && is_uuid($voicemail_destination)) { + $array['voicemail_destinations'][0]['domain_uuid'] = $domain_uuid; + $array['voicemail_destinations'][0]['voicemail_destination_uuid'] = uuid(); + $array['voicemail_destinations'][0]['voicemail_uuid'] = $voicemail_uuid; + $array['voicemail_destinations'][0]['voicemail_uuid_copy'] = $voicemail_destination; + + if (is_array($array['voicemail_destinations']) && @sizeof($array['voicemail_destinations']) != 0) { + //grant temporary permission + $p->add('voicemail_destination_add', 'temp'); + } + } + + //execute insert/update + $database = new database; + $database->app_name = 'voicemails'; + $database->app_uuid = 'b523c2d2-64cd-46f1-9520-ca4b4098e044'; + $database->save($array); + unset($array); + + //revoke any temporary permissions granted + $p->delete('voicemail_option_add', 'temp'); + $p->delete('voicemail_destination_add', 'temp'); + + //remove checked voicemail options + if ( + $action == 'update' + && permission_exists('voicemail_option_delete') + && is_array($voicemail_options_delete) + && @sizeof($voicemail_options_delete) != 0 + ) { + $obj = new voicemail; + $obj->voicemail_uuid = $voicemail_uuid; + $obj->voicemail_options_delete($voicemail_options_delete); + } + + //remove checked voicemail destinations + if ( + $action == 'update' + && permission_exists('voicemail_forward') + && is_array($voicemail_destinations_delete) + && @sizeof($voicemail_destinations_delete) != 0 + ) { + $obj = new voicemail; + $obj->voicemail_uuid = $voicemail_uuid; + $obj->voicemail_destinations_delete($voicemail_destinations_delete); + } + //set message if ($action == "add" && permission_exists('voicemail_add')) { message::add($text['message-add']); @@ -302,6 +311,81 @@ $greetings = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); +//get the voicemail options + if ($action == 'update' && is_uuid($voicemail_uuid)) { + $sql = "select * from v_voicemail_options "; + $sql .= "where domain_uuid = :domain_uuid "; + $sql .= "and voicemail_uuid = :voicemail_uuid "; + $sql .= "order by voicemail_option_digits, voicemail_option_order asc "; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['voicemail_uuid'] = $voicemail_uuid; + $database = new database; + $voicemail_options = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters); + + $show_option_delete = false; + if (is_array($voicemail_options) && @sizeof($voicemail_options) != 0) { + foreach ($voicemail_options as $x => $field) { + $voicemail_option_param = $field['voicemail_option_param']; + if (strlen(trim($voicemail_option_param)) == 0) { + $voicemail_option_param = $field['voicemail_option_action']; + } + $voicemail_option_param = str_replace("menu-", "", $voicemail_option_param); + $voicemail_option_param = str_replace("XML", "", $voicemail_option_param); + $voicemail_option_param = str_replace("transfer", "", $voicemail_option_param); + $voicemail_option_param = str_replace("bridge", "", $voicemail_option_param); + $voicemail_option_param = str_replace($_SESSION['domain_name'], "", $voicemail_option_param); + $voicemail_option_param = str_replace("\${domain_name}", "", $voicemail_option_param); + $voicemail_option_param = str_replace("\${domain}", "", $voicemail_option_param); + $voicemail_option_param = ucfirst(trim($voicemail_option_param)); + $voicemail_options[$x]['voicemail_option_param'] = $voicemail_option_param; + unset($voicemail_option_param); + } + $show_option_delete = true; + } + } + +//get the assigned voicemail destinations + if ($action == 'update' && is_uuid($voicemail_uuid)) { + $sql = "select v.voicemail_id, d.voicemail_destination_uuid, d.voicemail_uuid_copy "; + $sql .= "from v_voicemails as v, v_voicemail_destinations as d "; + $sql .= "where d.voicemail_uuid_copy = v.voicemail_uuid and "; + $sql .= "v.domain_uuid = :domain_uuid and "; + $sql .= "v.voicemail_enabled = 'true' and "; + $sql .= "d.voicemail_uuid = :voicemail_uuid "; + $sql .= "order by v.voicemail_id asc"; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + $parameters['voicemail_uuid'] = $voicemail_uuid; + $database = new database; + $voicemail_destinations_assigned = $database->select($sql, $parameters, 'all'); + if (is_array($voicemail_destinations_assigned) && @sizeof($voicemail_destinations_assigned) != 0) { + foreach ($voicemail_destinations_assigned as $field) { + $voicemail_destinations[] = "'".$field['voicemail_uuid_copy']."'"; + } + } + unset($sql, $parameters); + } + +//get the available voicemail destinations + $sql = "select v.voicemail_id, v.voicemail_uuid "; + $sql .= "from v_voicemails as v "; + $sql .= "where v.domain_uuid = :domain_uuid and "; + $sql .= "v.voicemail_enabled = 'true' "; + if (is_uuid($voicemail_uuid)) { + $sql .= "and v.voicemail_uuid <> :voicemail_uuid "; + } + if (is_array($voicemail_destinations) && @sizeof($voicemail_destinations) != 0) { + $sql .= "and v.voicemail_uuid not in (".implode(',', $voicemail_destinations).") "; + } + $sql .= "order by v.voicemail_id asc"; + $parameters['domain_uuid'] = $_SESSION['domain_uuid']; + if (is_uuid($voicemail_uuid)) { + $parameters['voicemail_uuid'] = $voicemail_uuid; + } + $database = new database; + $voicemail_destinations_available = $database->select($sql, $parameters, 'all'); + unset($sql, $parameters, $voicemail_destinations); + //create token $object = new token; $token = $object->create($_SERVER['PHP_SELF']); @@ -354,12 +438,16 @@ //show the content echo "