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.

This commit is contained in:
Mark Crane
2013-11-24 00:15:02 +00:00
parent 4bd5b6a018
commit a812951dc1
2 changed files with 49 additions and 153 deletions

View File

@@ -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();

View File

@@ -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."<br />\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