Efficiency enhancement for upgrade and upgrade_schema by running global tasks one time rather than for each domain.

This commit is contained in:
Mark Crane
2012-08-14 21:59:45 +00:00
parent cc9fbb99a3
commit 17af99d5e5
14 changed files with 562 additions and 459 deletions
+120 -118
View File
@@ -24,129 +24,131 @@
Mark J Crane <markjcrane@fusionpbx.com>
*/
//set the database driver
$sql = "select * from v_databases ";
$sql .= "where database_driver is null ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$database_uuid = $row["database_uuid"];
$database_type = $row["database_type"];
$database_type_array = explode(":", $database_type);
if ($database_type_array[0] == "odbc") {
$database_driver = $database_type_array[1];
}
else {
$database_driver = $database_type_array[0];
}
$sql = "update v_databases set ";
$sql .= "database_driver = '$database_driver' ";
$sql .= "where database_uuid = '$database_uuid' ";
$db->exec(check_sql($sql));
unset($sql);
}
if (strlen($_SESSION['switch']['scripts']['dir']) > 0) {
//get the odbc information
$sql = "select count(*) as num_rows from v_databases ";
$sql .= "where database_driver = 'odbc' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] > 0) {
$odbc_num_rows = $row['num_rows'];
$sql = "select * from v_databases ";
$sql .= "where database_driver = 'odbc' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$dsn_name = $row["database_name"];
$dsn_username = $row["database_username"];
$dsn_password = $row["database_password"];
break; //limit to 1 row
}
unset ($prep_statement);
//proccess this only one time
if ($domains_processed == 1) {
//set the database driver
$sql = "select * from v_databases ";
$sql .= "where database_driver is null ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$database_uuid = $row["database_uuid"];
$database_type = $row["database_type"];
$database_type_array = explode(":", $database_type);
if ($database_type_array[0] == "odbc") {
$database_driver = $database_type_array[1];
}
else {
$odbc_num_rows = '0';
$database_driver = $database_type_array[0];
}
$sql = "update v_databases set ";
$sql .= "database_driver = '$database_driver' ";
$sql .= "where database_uuid = '$database_uuid' ";
$db->exec(check_sql($sql));
unset($sql);
}
//config.lua
$fout = fopen($_SESSION['switch']['scripts']['dir']."/resources/config.lua","w");
$tmp = "\n";
$tmp .= "--switch directories\n";
if (strlen($_SESSION['switch']['sounds']['dir']) > 0) {
$tmp .= " sounds_dir = \"".$_SESSION['switch']['sounds']['dir']."\";\n";
}
if (strlen($_SESSION['switch']['recordings']['dir']) > 0) {
$tmp .= " recordings_dir = \"".$_SESSION['switch']['recordings']['dir']."\";\n";
}
$tmp .= "\n";
$tmp .= "--database connection info\n";
if (strlen($db_type) > 0) {
$tmp .= " db_type = \"".$db_type."\";\n";
}
if (strlen($db_name) > 0) {
$tmp .= " db_name = \"".$db_name."\";\n";
}
if (strlen($db_path) > 0) {
$tmp .= " db_path = \"".$db_path."\";\n";
}
if (strlen($dsn_name) > 0) {
$tmp .= " dsn_name = \"".$dsn_name."\";\n";
}
if (strlen($dsn_username) > 0) {
$tmp .= " dsn_username = \"".$dsn_username."\";\n";
}
if (strlen($dsn_password) > 0) {
$tmp .= " dsn_password = \"".$dsn_password."\";\n";
}
$tmp .= "\n";
$tmp .= "--additional info\n";
$tmp .= " tmp_dir = \"".$tmp_dir."\";\n";
fwrite($fout, $tmp);
unset($tmp);
fclose($fout);
if (strlen($_SESSION['switch']['scripts']['dir']) > 0) {
//get the odbc information
$sql = "select count(*) as num_rows from v_databases ";
$sql .= "where database_driver = 'odbc' ";
if (strlen($order_by)> 0) { $sql .= "order by $order_by $order "; }
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
if ($row['num_rows'] > 0) {
$odbc_num_rows = $row['num_rows'];
//config.js
$fout = fopen($_SESSION['switch']['scripts']['dir']."/resources/config.js","w");
$tmp = "\n";
$tmp .= "//switch directories\n";
$tmp .= " var admin_pin = \"".$row["admin_pin"]."\";\n";
$tmp .= " var sounds_dir = \"".$_SESSION['switch']['sounds']['dir']."\";\n";
$tmp .= " var recordings_dir = \"".$_SESSION['switch']['recordings']['dir']."\";\n";
$tmp .= "\n";
$tmp = "//database connection info\n";
if (strlen($db_type) > 0) {
$tmp .= " var db_type = \"".$db_type."\";\n";
}
if (strlen($db_name) > 0) {
$tmp .= " var db_name = \"".$db_name."\";\n";
}
if (strlen($db_path) > 0) {
$tmp .= " var db_path = \"".$db_path."\";\n";
}
if (strlen($dsn_name) > 0) {
$tmp .= " var dsn_name = \"".$dsn_name."\";\n";
}
if (strlen($dsn_username) > 0) {
$tmp .= " var dsn_username = \"".$dsn_username."\";\n";
}
if (strlen($dsn_password) > 0) {
$tmp .= " var dsn_password = \"".$dsn_password."\";\n";
}
$tmp .= "\n";
$tmp .= "//additional info\n";
$tmp .= " var tmp_dir = \"".$tmp_dir."\";\n";
fwrite($fout, $tmp);
unset($tmp);
fclose($fout);
$sql = "select * from v_databases ";
$sql .= "where database_driver = 'odbc' ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
foreach ($result as &$row) {
$dsn_name = $row["database_name"];
$dsn_username = $row["database_username"];
$dsn_password = $row["database_password"];
break; //limit to 1 row
}
unset ($prep_statement);
}
else {
$odbc_num_rows = '0';
}
}
//config.lua
$fout = fopen($_SESSION['switch']['scripts']['dir']."/resources/config.lua","w");
$tmp = "\n";
$tmp .= "--switch directories\n";
if (strlen($_SESSION['switch']['sounds']['dir']) > 0) {
$tmp .= " sounds_dir = \"".$_SESSION['switch']['sounds']['dir']."\";\n";
}
if (strlen($_SESSION['switch']['recordings']['dir']) > 0) {
$tmp .= " recordings_dir = \"".$_SESSION['switch']['recordings']['dir']."\";\n";
}
$tmp .= "\n";
$tmp .= "--database connection info\n";
if (strlen($db_type) > 0) {
$tmp .= " db_type = \"".$db_type."\";\n";
}
if (strlen($db_name) > 0) {
$tmp .= " db_name = \"".$db_name."\";\n";
}
if (strlen($db_path) > 0) {
$tmp .= " db_path = \"".$db_path."\";\n";
}
if (strlen($dsn_name) > 0) {
$tmp .= " dsn_name = \"".$dsn_name."\";\n";
}
if (strlen($dsn_username) > 0) {
$tmp .= " dsn_username = \"".$dsn_username."\";\n";
}
if (strlen($dsn_password) > 0) {
$tmp .= " dsn_password = \"".$dsn_password."\";\n";
}
$tmp .= "\n";
$tmp .= "--additional info\n";
$tmp .= " tmp_dir = \"".$tmp_dir."\";\n";
fwrite($fout, $tmp);
unset($tmp);
fclose($fout);
//config.js
$fout = fopen($_SESSION['switch']['scripts']['dir']."/resources/config.js","w");
$tmp = "\n";
$tmp .= "//switch directories\n";
$tmp .= " var admin_pin = \"".$row["admin_pin"]."\";\n";
$tmp .= " var sounds_dir = \"".$_SESSION['switch']['sounds']['dir']."\";\n";
$tmp .= " var recordings_dir = \"".$_SESSION['switch']['recordings']['dir']."\";\n";
$tmp .= "\n";
$tmp = "//database connection info\n";
if (strlen($db_type) > 0) {
$tmp .= " var db_type = \"".$db_type."\";\n";
}
if (strlen($db_name) > 0) {
$tmp .= " var db_name = \"".$db_name."\";\n";
}
if (strlen($db_path) > 0) {
$tmp .= " var db_path = \"".$db_path."\";\n";
}
if (strlen($dsn_name) > 0) {
$tmp .= " var dsn_name = \"".$dsn_name."\";\n";
}
if (strlen($dsn_username) > 0) {
$tmp .= " var dsn_username = \"".$dsn_username."\";\n";
}
if (strlen($dsn_password) > 0) {
$tmp .= " var dsn_password = \"".$dsn_password."\";\n";
}
$tmp .= "\n";
$tmp .= "//additional info\n";
$tmp .= " var tmp_dir = \"".$tmp_dir."\";\n";
fwrite($fout, $tmp);
unset($tmp);
fclose($fout);
}
}
?>
+1
View File
@@ -163,6 +163,7 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
unset($sql);
//set the defaults
$domains_processed = 1;
require_once "app_defaults.php";
//redirect the browser
-1
View File
@@ -25,5 +25,4 @@
*/
?>
+84 -81
View File
@@ -25,94 +25,97 @@
*/
//if there are no items in the menu then add the default menu
$sql = "SELECT count(*) as count FROM v_menus ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$sub_result = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset ($prep_statement);
if ($sub_result['count'] > 0) {
if ($display_type == "text") {
echo " Menu: no change\n";
}
}
else {
//create the uuid
$menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286';
//set the defaults
$menu_name = 'default';
$menu_language = 'en';
$menu_description = '';
//add the menu
$sql = "insert into v_menus ";
$sql .= "(";
$sql .= "menu_uuid, ";
$sql .= "menu_name, ";
$sql .= "menu_language, ";
$sql .= "menu_description ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$menu_uuid."', ";
$sql .= "'$menu_name', ";
$sql .= "'$menu_language', ";
$sql .= "'$menu_description' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
//add the menu items
require_once "includes/classes/menu.php";
$menu = new menu;
$menu->db = $db;
$menu->menu_uuid = $menu_uuid;
$menu->restore();
unset($menu);
if ($domains_processed == 1) {
$sql = "SELECT count(*) as count FROM v_menus ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$sub_result = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset ($prep_statement);
if ($sub_result['count'] > 0) {
if ($display_type == "text") {
echo " Menu: added\n";
echo " Menu: no change\n";
}
}
else {
//create the uuid
$menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286';
//set the defaults
$menu_name = 'default';
$menu_language = 'en';
$menu_description = '';
//add the menu
$sql = "insert into v_menus ";
$sql .= "(";
$sql .= "menu_uuid, ";
$sql .= "menu_name, ";
$sql .= "menu_language, ";
$sql .= "menu_description ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$menu_uuid."', ";
$sql .= "'$menu_name', ";
$sql .= "'$menu_language', ";
$sql .= "'$menu_description' ";
$sql .= ")";
$db->exec(check_sql($sql));
unset($sql);
//add the menu items
require_once "includes/classes/menu.php";
$menu = new menu;
$menu->db = $db;
$menu->menu_uuid = $menu_uuid;
$menu->restore();
unset($menu);
if ($display_type == "text") {
echo " Menu: added\n";
}
}
unset($prep_statement, $sub_result);
}
unset($prep_statement, $sub_result);
//if there are no groups listed in v_menu_item_groups then add the default groups
$sql = "SELECT * FROM v_menus ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
foreach($result as $field) {
//get the menu_uuid
$menu_uuid = $field['menu_uuid'];
//check each menu to see if there are items in the menu assigned to it
$sql = "";
$sql .= "select count(*) as count from v_menu_item_groups ";
$sql .= "where menu_uuid = '$menu_uuid' ";
$prep_statement = $db->prepare($sql);
$prep_statement->execute();
$sub_result = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset ($prep_statement);
if ($sub_result['count'] == 0) {
//no menu item groups found add the defaults
foreach($apps as $app) {
foreach ($app['menu'] as $sub_row) {
foreach ($sub_row['groups'] as $group) {
//add the record
$sql = "insert into v_menu_item_groups ";
$sql .= "(";
$sql .= "menu_uuid, ";
$sql .= "menu_item_uuid, ";
$sql .= "group_name ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'$menu_uuid', ";
$sql .= "'".$sub_row['uuid']."', ";
$sql .= "'".$group."' ";
$sql .= ")";
$db->exec($sql);
unset($sql);
if ($domains_processed == 1) {
$sql = "SELECT * FROM v_menus ";
$prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$result_count = count($result);
foreach($result as $field) {
//get the menu_uuid
$menu_uuid = $field['menu_uuid'];
//check each menu to see if there are items in the menu assigned to it
$sql .= "select count(*) as count from v_menu_item_groups ";
$sql .= "where menu_uuid = '$menu_uuid' ";
$prep_statement = $db->prepare($sql);
$prep_statement->execute();
$sub_result = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset ($prep_statement);
if ($sub_result['count'] == 0) {
//no menu item groups found add the defaults
foreach($apps as $app) {
foreach ($app['menu'] as $sub_row) {
foreach ($sub_row['groups'] as $group) {
//add the record
$sql = "insert into v_menu_item_groups ";
$sql .= "(";
$sql .= "menu_uuid, ";
$sql .= "menu_item_uuid, ";
$sql .= "group_name ";
$sql .= ")";
$sql .= "values ";
$sql .= "(";
$sql .= "'$menu_uuid', ";
$sql .= "'".$sub_row['uuid']."', ";
$sql .= "'".$group."' ";
$sql .= ")";
$db->exec($sql);
unset($sql);
}
}
}
}
}
}
}
}
?>
+3 -1
View File
@@ -27,7 +27,9 @@
if (strlen($_SESSION['switch']['scripts']['dir']) > 0) {
//if the resource scripts resource directory does not exist then create it
if (!is_dir($_SESSION['switch']['scripts']['dir']."/resources")) { mkdir($_SESSION['switch']['scripts']['dir']."/resources",0755,true); }
if ($domains_processed == 1) {
if (!is_dir($_SESSION['switch']['scripts']['dir']."/resources")) { mkdir($_SESSION['switch']['scripts']['dir']."/resources",0755,true); }
}
}
?>