From 50a1ed145cb23d0cd8e4960c71d3402e7166d991 Mon Sep 17 00:00:00 2001 From: FusionPBX Date: Mon, 23 Sep 2024 18:17:44 -0600 Subject: [PATCH] Fix voicemail greeting for base64 - Use the settings class - Re-use the database object - Update the indentation --- app/voicemail_greetings/app_defaults.php | 241 ++++++++++++----------- 1 file changed, 126 insertions(+), 115 deletions(-) diff --git a/app/voicemail_greetings/app_defaults.php b/app/voicemail_greetings/app_defaults.php index 832b2b2557..98e8c34501 100644 --- a/app/voicemail_greetings/app_defaults.php +++ b/app/voicemail_greetings/app_defaults.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2012 + Portions created by the Initial Developer are Copyright (C) 2008-2024 the Initial Developer. All Rights Reserved. Contributor(s): @@ -25,137 +25,148 @@ */ if ($domains_processed == 1) { + //if greeting filename field empty, copy greeting name field value - $sql = "update v_voicemail_greetings "; - $sql .= "set greeting_filename = greeting_name "; - $sql .= "where greeting_filename is null "; - $sql .= "or greeting_filename = '' "; - $database = new database; - $database->execute($sql); - unset($sql); + $sql = "update v_voicemail_greetings "; + $sql .= "set greeting_filename = greeting_name "; + $sql .= "where greeting_filename is null "; + $sql .= "or greeting_filename = '' "; + $database->execute($sql); + unset($sql); //populate greeting id number if empty - $sql = "select voicemail_greeting_uuid, greeting_filename "; - $sql .= "from v_voicemail_greetings "; - $sql .= "where greeting_id is null "; - $database = new database; + $sql = "select voicemail_greeting_uuid, greeting_filename "; + $sql .= "from v_voicemail_greetings "; + $sql .= "where greeting_id is null "; + $result = $database->select($sql, null, 'all'); + if (!empty($result)) { + foreach ($result as $x => $row) { + //get the values from the database + $voicemail_greeting_uuid = $row['voicemail_greeting_uuid']; + $greeting_id = preg_replace('{\D}', '', $row['greeting_filename']); + + //build update array + $array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; + $array['voicemail_greetings'][$x]['greeting_id'] = $greeting_id; + unset($voicemail_greeting_uuid, $greeting_id); + } + if (!empty($array)) { + //grant temporary permissions + $p = new permissions; + $p->add('voicemail_greeting_edit', 'temp'); + + //execute + $database->app_name = 'voicemail_greetings'; + $database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2'; + $database->save($array, false); + unset($array); + + //revoke temporary permissions + $p->delete('voicemail_greeting_edit', 'temp'); + } + } + unset($sql, $result, $row); + + //get settings + $voicemail_storage_type = $setting->get('voicemail','storage_type'); + $switch_storage = $setting->get('switch','storage'); + + //if base64, populate from existing greeting files, then remove + if (!empty($voicemail_storage_type) && $voicemail_storage_type == 'base64') { + + //get greetings without base64 in db + $sql = "select g.voicemail_greeting_uuid, g.domain_uuid, d.domain_name, g.voicemail_id, g.greeting_filename "; + $sql .= "from v_voicemail_greetings as g, v_domains as d "; + $sql .= "where (greeting_base64 is null or greeting_base64 = '') "; + $sql .= "and g.domain_uuid = d.domain_uuid "; $result = $database->select($sql, null, 'all'); if (!empty($result)) { foreach ($result as $x => $row) { + //get the values from the database $voicemail_greeting_uuid = $row['voicemail_greeting_uuid']; - $greeting_id = preg_replace('{\D}', '', $row['greeting_filename']); - //build update array - $array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; - $array['voicemail_greetings'][$x]['greeting_id'] = $greeting_id; - unset($voicemail_greeting_uuid, $greeting_id); + $greeting_domain_uuid = $row['domain_uuid']; + $greeting_domain_name = $row['domain_name']; + $voicemail_id = $row['voicemail_id']; + $greeting_filename = $row['greeting_filename']; + + //set greeting directory + $greeting_directory = $switch_storage.'/voicemail/default/'.$greeting_domain_name.'/'.$voicemail_id; + + //encode greeting file (if exists) + if (file_exists($greeting_directory.'/'.$greeting_filename)) { + //build update array + $array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; + $array['voicemail_greetings'][$x]['greeting_base64'] = base64_encode(file_get_contents($greeting_directory.'/'.$greeting_filename)); + + //remove local greeting file + //@unlink($greeting_directory.'/'.$greeting_filename); + } } if (!empty($array)) { //grant temporary permissions - $p = new permissions; - $p->add('voicemail_greeting_edit', 'temp'); + $p = new permissions; + $p->add('voicemail_greeting_edit', 'temp'); + //execute update - $database = new database; - $database->app_name = 'voicemail_greetings'; - $database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2'; - $database->save($array, false); - unset($array); + $database->app_name = 'voicemail_greetings'; + $database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2'; + $database->save($array, false); + unset($array); + //revoke temporary permissions - $p->delete('voicemail_greeting_edit', 'temp'); + $p->delete('voicemail_greeting_edit', 'temp'); } } - unset($sql, $result, $x, $row); + unset($sql, $result, $row); + } + elseif (empty($voicemail_storage_type) || $voicemail_storage_type != 'base64') { + //if not base64 then save base64 to a file on the file system + $sql = "select g.voicemail_greeting_uuid, g.domain_uuid, d.domain_name, g.voicemail_id, g.greeting_filename, g.greeting_base64 "; + $sql .= "from v_voicemail_greetings as g, v_domains as d "; + $sql .= "where greeting_base64 is not null "; + $sql .= "and g.domain_uuid = d.domain_uuid "; + $result = $database->select($sql, null, 'all'); + if (is_array($result) && @sizeof($result) != 0) { + foreach ($result as $x => $row) { + //set variables + $voicemail_greeting_uuid = $row['voicemail_greeting_uuid']; + $greeting_domain_uuid = $row['domain_uuid']; + $greeting_domain_name = $row['domain_name']; + $voicemail_id = $row['voicemail_id']; + $greeting_filename = $row['greeting_filename']; + $greeting_base64 = $row['greeting_base64']; - //if base64, populate from existing greeting files, then remove - if (!empty($_SESSION['voicemail']['storage_type']['text']) && $_SESSION['voicemail']['storage_type']['text'] == 'base64') { - //get greetings without base64 in db - $sql = "select voicemail_greeting_uuid, domain_uuid, voicemail_id, greeting_filename "; - $sql .= "from v_voicemail_greetings "; - $sql .= "where greeting_base64 is null "; - $sql .= "or greeting_base64 = '' "; - $database = new database; - $result = $database->select($sql, null, 'all'); - if (!empty($result)) { - foreach ($result as $x => $row) { - $voicemail_greeting_uuid = $row['voicemail_greeting_uuid']; - $greeting_domain_uuid = $row['domain_uuid']; - $voicemail_id = $row['voicemail_id']; - $greeting_filename = $row['greeting_filename']; - //set greeting directory - $greeting_directory = $_SESSION['switch']['storage']['dir'].'/voicemail/default/'.$_SESSION['domains'][$greeting_domain_uuid]['domain_name'].'/'.$voicemail_id; - //encode greeting file (if exists) - if (file_exists($greeting_directory.'/'.$greeting_filename)) { - //build update array - $array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; - $array['voicemail_greetings'][$x]['greeting_base64'] = base64_encode(file_get_contents($greeting_directory.'/'.$greeting_filename)); - //remove local greeting file - @unlink($greeting_directory.'/'.$greeting_filename); - } - } - if (!empty($array)) { - //grant temporary permissions - $p = new permissions; - $p->add('voicemail_greeting_edit', 'temp'); - //execute update - $database = new database; - $database->app_name = 'voicemail_greetings'; - $database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2'; - $database->save($array, false); - unset($array); - //revoke temporary permissions - $p->delete('voicemail_greeting_edit', 'temp'); - } - } - unset($sql, $result, $row); + //set greeting directory + $greeting_directory = $switch_storage.'/voicemail/default/'.$greeting_domain_name.'/'.$voicemail_id; + + //remove local file, if any + //@unlink($greeting_directory.'/'.$greeting_filename); + + //build update array + //$array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; + //$array['voicemail_greetings'][$x]['greeting_base64'] = null; + + //decode base64, save to local file + file_put_contents($greeting_directory.'/'.$greeting_filename, base64_decode($greeting_base64)); + } + if (!empty($array)) { + //grant temporary permissions + $p = new permissions; + $p->add('voicemail_greeting_edit', 'temp'); + + //execute update + $database->app_name = 'voicemail_greetings'; + $database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2'; + $database->save($array, false); + unset($array); + + //revoke temporary permissions + $p->delete('voicemail_greeting_edit', 'temp'); + } } + unset($sql, $result, $row); + } - //if not base64, decode to local files, remove base64 data from db - else if (empty($_SESSION['voicemail']['storage_type']['text']) || $_SESSION['voicemail']['storage_type']['text'] != 'base64') { - //get greetings with base64 in db - $sql = "select voicemail_greeting_uuid, domain_uuid, voicemail_id, greeting_filename, greeting_base64 "; - $sql .= "from v_voicemail_greetings "; - $sql .= "where greeting_base64 is not null "; - $database = new database; - $result = $database->select($sql, null, 'all'); - if (is_array($result) && @sizeof($result) != 0) { - foreach ($result as $x => $row) { - //set variables - $voicemail_greeting_uuid = $row['voicemail_greeting_uuid']; - $greeting_domain_uuid = $row['domain_uuid']; - $voicemail_id = $row['voicemail_id']; - $greeting_filename = $row['greeting_filename']; - $greeting_base64 = $row['greeting_base64']; - - //set greeting directory - $greeting_directory = $_SESSION['switch']['storage']['dir'].'/voicemail/default/'.$_SESSION['domains'][$greeting_domain_uuid]['domain_name'].'/'.$voicemail_id; - - //remove local file, if any - @unlink($greeting_directory.'/'.$greeting_filename); - - //build update array - $array['voicemail_greetings'][$x]['voicemail_greeting_uuid'] = $voicemail_greeting_uuid; - $array['voicemail_greetings'][$x]['greeting_base64'] = null; - - //decode base64, save to local file - file_put_contents($greeting_directory.'/'.$greeting_filename, base64_decode($greeting_base64)); - } - if (!empty($array)) { - //grant temporary permissions - $p = new permissions; - $p->add('voicemail_greeting_edit', 'temp'); - - //execute update - $database = new database; - $database->app_name = 'voicemail_greetings'; - $database->app_uuid = 'e4b4fbee-9e4d-8e46-3810-91ba663db0c2'; - $database->save($array, false); - unset($array); - - //revoke temporary permissions - $p->delete('voicemail_greeting_edit', 'temp'); - } - } - unset($sql, $result, $row); - } } ?>