From 32df6f40d9b032033883251bb199844a22d92a14 Mon Sep 17 00:00:00 2001 From: Mark Crane Date: Sun, 24 Nov 2013 00:15:02 +0000 Subject: [PATCH] Improve the efficiency of the Menu PHP class by removing redundant code in the restore method of the PHP class and add PDO transactions. Improve the menu language for better multi-lingual support, escape the menu item title to so it will work correctly for French and other languages. --- core/menu/menu_restore_all_default.php | 4 +- resources/classes/menu.php | 198 ++++++------------------- 2 files changed, 49 insertions(+), 153 deletions(-) diff --git a/core/menu/menu_restore_all_default.php b/core/menu/menu_restore_all_default.php index c5ae851483..2dd43b2b0a 100644 --- a/core/menu/menu_restore_all_default.php +++ b/core/menu/menu_restore_all_default.php @@ -36,14 +36,14 @@ else { //get the http value and set as a php variable $menu_uuid = check_str($_REQUEST["menu_uuid"]); - $menu_language = check_str($_REQUEST["menu_language"]); + $menu_language = check_str($_REQUEST["menu_language"]); //menu restore default require_once "resources/classes/menu.php"; $menu = new menu; $menu->db = $db; $menu->menu_uuid = $menu_uuid; - $menu->menu_language = $menu_language; + $menu->menu_language = $menu_language; $menu->delete(); $menu->restore2(); diff --git a/resources/classes/menu.php b/resources/classes/menu.php index 7411e559b2..1e7b719d82 100644 --- a/resources/classes/menu.php +++ b/resources/classes/menu.php @@ -27,6 +27,7 @@ //define the menu class class menu { public $menu_uuid; + public $menu_language; //delete items in the menu that are not protected function delete() { @@ -57,12 +58,19 @@ $x++; } + //begin the transaction + $db->beginTransaction(); + //use the app array to restore the default menu - //$db->beginTransaction(); foreach ($apps as $row) { foreach ($row['menu'] as $menu) { //set the variables - $menu_item_title = $menu['title']['en-us']; + if (strlen($menu['title'][$this->menu_language]) > 0) { + $menu_item_title = $menu['title'][$this->menu_language]; + } + else { + $menu_item_title = $menu['title']['en-us']; + } $menu_item_uuid = $menu['uuid']; $menu_item_parent_uuid = $menu['parent_uuid']; $menu_item_category = $menu['category']; @@ -73,7 +81,7 @@ //if the item uuid is not currently in the db then add it $sql = "select * from v_menu_items "; $sql .= "where menu_uuid = '".$this->menu_uuid."' "; - $sql .= "and menu_item_uuid = '$menu_item_uuid' "; + $sql .= "and menu_item_uuid = '".$menu_item_uuid."' "; $prep_statement = $db->prepare(check_sql($sql)); if ($prep_statement) { $prep_statement->execute(); @@ -84,7 +92,6 @@ $sql .= "("; $sql .= "menu_item_uuid, "; $sql .= "menu_uuid, "; - //$sql .= "menu_item_language, "; $sql .= "menu_item_title, "; $sql .= "menu_item_link, "; $sql .= "menu_item_category, "; @@ -100,8 +107,7 @@ $sql .= "("; $sql .= "'".$menu_item_uuid."', "; $sql .= "'".$this->menu_uuid."', "; - //$sql .= "'$menu_item_language', "; - $sql .= "'$menu_item_title', "; + $sql .= "'".check_str($menu_item_title)."', "; $sql .= "'$menu_item_path', "; $sql .= "'$menu_item_category', "; if (strlen($menu_item_order) > 0) { @@ -119,6 +125,7 @@ $db->exec(check_sql($sql)); } unset($sql); + //set the menu languages foreach ($menu["title"] as $menu_language => $menu_item_title) { $menu_language_uuid = uuid(); @@ -135,8 +142,8 @@ $sql .= "'".$menu_language_uuid."', "; $sql .= "'".$menu_item_uuid."', "; $sql .= "'".$this->menu_uuid."', "; - $sql .= "'$menu_language', "; - $sql .= "'$menu_item_title' "; + $sql .= "'".$menu_language."', "; + $sql .= "'".check_str($menu_item_title)."' "; $sql .= ")"; $db->exec(check_sql($sql)); unset($sql); @@ -146,139 +153,12 @@ } } - foreach($apps as $row) { - foreach ($row['permissions'] as $menu) { - //set the variables - if ($menu['groups']) { - foreach ($menu['groups'] as $group) { - //if the item uuid is not currently in the db then add it - $sql = "select * from v_group_permissions "; - $sql .= "where permission_name = '".$menu['name']."' "; - $sql .= "and domain_uuid = '".$row2['domain_uuid']."' "; - $sql .= "and group_name = '$group' "; - $prep_statement = $db->prepare(check_sql($sql)); - if ($prep_statement) { - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_ASSOC); - unset ($prep_statement); - if (count($result) == 0) { - //insert the default menu into the database - $sql = "insert into v_group_permissions "; - $sql .= "("; - $sql .= "group_permission_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "permission_name, "; - $sql .= "group_name "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'".$row2["domain_uuid"]."', "; - $sql .= "'".$menu['name']."', "; - $sql .= "'".$group."' "; - $sql .= ");"; - $db->exec(check_sql($sql)); - unset($sql); - } - } - } - } - } - } - - //use the app array to restore the default menu - //$db->beginTransaction(); - foreach ($apps as $row) { - foreach ($row['menu'] as $menu) { - //set the variables - $menu_item_title = $menu['title']['en-us']; - $menu_item_uuid = $menu['uuid']; - $menu_item_parent_uuid = $menu['parent_uuid']; - $menu_item_category = $menu['category']; - $menu_item_path = $menu['path']; - $menu_item_order = $menu['order']; - $menu_item_description = $menu['desc']; - - //if the item uuid is not currently in the db then add it - $sql = "select * from v_menu_items "; - $sql .= "where menu_uuid = '".$this->menu_uuid."' "; - $sql .= "and menu_item_uuid = '$menu_item_uuid' "; - $prep_statement = $db->prepare(check_sql($sql)); - if ($prep_statement) { - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_ASSOC); - if (count($result) == 0) { - //insert the default menu into the database - $sql = "insert into v_menu_items "; - $sql .= "("; - $sql .= "menu_item_uuid, "; - $sql .= "menu_uuid, "; - //$sql .= "menu_item_language, "; - $sql .= "menu_item_title, "; - $sql .= "menu_item_link, "; - $sql .= "menu_item_category, "; - if (strlen($menu_item_order) > 0) { - $sql .= "menu_item_order, "; - } - if (strlen($menu_item_parent_uuid) > 0) { - $sql .= "menu_item_parent_uuid, "; - } - $sql .= "menu_item_description "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".$menu_item_uuid."', "; - $sql .= "'".$this->menu_uuid."', "; - //$sql .= "'$menu_item_language', "; - $sql .= "'$menu_item_title', "; - $sql .= "'$menu_item_path', "; - $sql .= "'$menu_item_category', "; - if (strlen($menu_item_order) > 0) { - $sql .= "'$menu_item_order', "; - } - if (strlen($menu_item_parent_uuid) > 0) { - $sql .= "'$menu_item_parent_uuid', "; - } - $sql .= "'$menu_item_description' "; - $sql .= ")"; - if ($menu_item_uuid == $menu_item_parent_uuid) { - //echo $sql."
\n"; - } - else { - $db->exec(check_sql($sql)); - } - unset($sql); - //set the menu languages - foreach ($menu["title"] as $menu_language => $menu_item_title) { - $menu_language_uuid = uuid(); - $sql = "insert into v_menu_languages "; - $sql .= "("; - $sql .= "menu_language_uuid, "; - $sql .= "menu_item_uuid, "; - $sql .= "menu_uuid, "; - $sql .= "menu_language, "; - $sql .= "menu_item_title "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".$menu_language_uuid."', "; - $sql .= "'".$menu_item_uuid."', "; - $sql .= "'".$this->menu_uuid."', "; - $sql .= "'$menu_language', "; - $sql .= "'$menu_item_title' "; - $sql .= ")"; - $db->exec(check_sql($sql)); - unset($sql); - } - } - } - } - } - $sql = "delete from v_group_permissions "; + //set default group permissions + $sql = "DELETE FROM v_group_permissions "; $db->query($sql); unset($sql); - $sql2 = " Select domain_uuid from v_domains "; + $sql2 = "SELECT domain_uuid FROM v_domains "; $prep_statement2 = $db->prepare(check_sql($sql2)); $prep_statement2->execute(); $result2 = $prep_statement2->fetchAll(PDO::FETCH_ASSOC); @@ -289,11 +169,11 @@ //set the variables if ($menu['groups']) { foreach ($menu['groups'] as $group) { - //if the item uuid is not currently in the db then add it - $sql = "select * from v_group_permissions "; - $sql .= "where permission_name = '".$menu['name']."' "; - $sql .= "and domain_uuid = '".$row2['domain_uuid']."' "; - $sql .= "and group_name = '$group' "; + //assign the groups to the permissions + $sql = "SELECT * FROM v_group_permissions "; + $sql .= "WHERE permission_name = '".$menu['name']."' "; + $sql .= "AND domain_uuid = '".$row2['domain_uuid']."' "; + $sql .= "AND group_name = '$group' "; $prep_statement = $db->prepare(check_sql($sql)); if ($prep_statement) { $prep_statement->execute(); @@ -326,7 +206,7 @@ } unset($sql2, $result2); - //if there are no groups listed in v_menu_item_groups under menu_uuid then add the default groups + //if there are no groups listed in v_menu_item_groups under menu_item_uuid then add the default groups foreach($apps as $app) { foreach ($app['menu'] as $sub_row) { foreach ($sub_row['groups'] as $group) { @@ -357,6 +237,9 @@ } } } + + //commit the transaction + $db->commit(); } //end function //restore the menu @@ -364,6 +247,9 @@ //set the variables $db = $this->db; + //begin the transaction + $db->beginTransaction(); + //get the $apps array from the installed apps from the core and mod directories $config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php"); $x=0; @@ -377,7 +263,12 @@ foreach ($apps as $row) { foreach ($row['menu'] as $menu) { //set the variables - $menu_item_title = $menu['title']['en-us']; + if (strlen($menu['title'][$this->menu_language]) > 0) { + $menu_item_title = $menu['title'][$this->menu_language]; + } + else { + $menu_item_title = $menu['title']['en-us']; + } $menu_item_uuid = $menu['uuid']; $menu_item_parent_uuid = $menu['parent_uuid']; $menu_item_category = $menu['category']; @@ -399,7 +290,6 @@ $sql .= "("; $sql .= "menu_item_uuid, "; $sql .= "menu_uuid, "; - //$sql .= "menu_item_language, "; $sql .= "menu_item_title, "; $sql .= "menu_item_link, "; $sql .= "menu_item_category, "; @@ -415,8 +305,7 @@ $sql .= "("; $sql .= "'".$menu_item_uuid."', "; $sql .= "'".$this->menu_uuid."', "; - //$sql .= "'$menu_item_language', "; - $sql .= "'$menu_item_title', "; + $sql .= "'".check_str($menu_item_title)."', "; $sql .= "'$menu_item_path', "; $sql .= "'$menu_item_category', "; if (strlen($menu_item_order) > 0) { @@ -434,6 +323,7 @@ $db->exec(check_sql($sql)); } unset($sql); + //set the menu languages foreach ($menu["title"] as $menu_language => $menu_item_title) { $menu_language_uuid = uuid(); @@ -450,8 +340,8 @@ $sql .= "'".$menu_language_uuid."', "; $sql .= "'".$menu_item_uuid."', "; $sql .= "'".$this->menu_uuid."', "; - $sql .= "'$menu_language', "; - $sql .= "'$menu_item_title' "; + $sql .= "'".$menu_language."', "; + $sql .= "'".check_str($menu_item_title)."' "; $sql .= ")"; $db->exec(check_sql($sql)); unset($sql); @@ -460,6 +350,8 @@ } } } + + //set default group permissions $sql = "delete from v_group_permissions "; $db->query($sql); unset($sql); @@ -512,7 +404,7 @@ } unset($sql2, $result2); - //if there are no groups listed in v_menu_item_groups under menu_uuid then add the default groups + //set the default groups in v_menu_item_groups $sql = "delete from v_menu_item_groups "; $db->query($sql); unset($sql); @@ -520,6 +412,7 @@ foreach($apps as $app) { foreach ($app['menu'] as $sub_row) { foreach ($sub_row['groups'] as $group) { + //if there are no groups listed in v_menu_item_groups under menu_uuid then add the default groups $sql = "select count(*) as count from v_menu_item_groups "; $sql .= "where menu_item_uuid = '".$sub_row['uuid']."' "; $sql .= "and group_name = '$group' "; @@ -547,6 +440,9 @@ } } } + + //commit the transaction + $db->commit(); } //end function //create the menu