Advertisement
Guest User

Untitled

a guest
Jun 30th, 2013
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. DROP PROCEDURE IF EXISTS buildNavMenuItem;
  2.  
  3. DELIMITER //
  4. CREATE PROCEDURE buildNavMenuItem(
  5. IN menulabel VARCHAR(255) CHARACTER SET utf8,
  6. IN domainID INT,
  7. IN grandParentID INT )
  8. BEGIN
  9. DECLARE done TINYINT DEFAULT 0;
  10. DECLARE submenuLabel varchar(255) CHARACTER SET utf8;
  11. DECLARE menuID INT;
  12. DECLARE cur_menu CURSOR FOR
  13. SELECT child.label COLLATE 'utf8_unicode_ci', child.id FROM civicrm_navigation child LEFT JOIN
  14. civicrm_navigation parent ON child.parent_id = parent.id AND child.domain_id = parent.domain_id
  15. WHERE parent.label = menuLabel COLLATE 'utf8_unicode_ci' AND child.domain_id = 1
  16. AND parent.id = grandParentID
  17. AND child.id IS NOT NULL;
  18.  
  19. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  20. # SELECT CONCAT( "SELECT child.label COLLATE 'utf8_unicode_ci', child.id FROM civicrm_navigation child LEFT JOIN civicrm_navigation parent ON #child.parent_id = parent.id AND child.domain_id = parent.domain_id WHERE parent.label = ", menuLabel, " COLLATE 'utf8_unicode_ci' AND #child.domain_id = 1 AND parent.id = " , grandParentID );
  21. SELECT id FROM civicrm_navigation WHERE domain_id = domainID AND label = menulabel COLLATE 'utf8_unicode_ci' LIMIT 1
  22. INTO @parentID;
  23. INSERT INTO civicrm_navigation (domain_id, label, name, url, `permission`, permission_operator, is_active,
  24. has_separator, weight, parent_id)
  25.  
  26. SELECT domainID as domain_id, n1.label, n1.name, n1.url,n1.`permission`, n1.permission_operator, n1.is_active,
  27. n1.has_separator, n1.weight, @parentID as parent_id
  28. FROM civicrm_navigation n2
  29. RIGHT JOIN (
  30.  
  31. SELECT n.* FROM civicrm_navigation n
  32. INNER JOIN civicrm_navigation p ON p.id = n.parent_id
  33. WHERE p.name = menulabel COLLATE 'utf8_unicode_ci'
  34. AND n.domain_id = 1
  35. ) as n1 ON n1.label = n2.label AND n2.domain_id = domainID
  36. WHERE n2.id IS NULL;
  37.  
  38. OPEN cur_menu;
  39. read_loop: LOOP
  40. FETCH cur_menu INTO submenuLabel, menuID;
  41. IF done THEN
  42. LEAVE read_loop;
  43. END IF;
  44.  
  45. call buildNavMenuItem(submenuLabel COLLATE 'utf8_unicode_ci', domainID, menuID);
  46. END LOOP;
  47.  
  48. CLOSE cur_menu;
  49.  
  50. END//
  51.  
  52. DELIMITER ;
  53.  
  54. DROP PROCEDURE IF EXISTS buildNavigation;
  55.  
  56. DELIMITER //
  57.  
  58. CREATE PROCEDURE buildNavigation()
  59. BEGIN
  60. DECLARE domainID INT;
  61. DECLARE menuID INT;
  62. DECLARE max_domain INT;
  63. DECLARE max_menu varchar(255) CHARACTER SET utf8;
  64. DECLARE menuLabel varchar(255) CHARACTER SET utf8;
  65. DECLARE done TINYINT DEFAULT 0;
  66. DECLARE cur_domain CURSOR FOR
  67. SELECT id FROM civicrm_domain WHERE id <> 1;
  68. DECLARE cur_menu CURSOR FOR
  69. SELECT label COLLATE 'utf8_unicode_ci', id FROM civicrm_navigation WHERE parent_id IS NULL AND label <> 'Data' AND domain_id = 1;
  70. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  71. SELECT max(id) FROM civicrm_domain INTO max_domain;
  72. SELECT max(label) COLLATE 'utf8_unicode_ci' FROM civicrm_navigation WHERE parent_id IS NULL AND label <> 'Data' INTO max_menu;
  73.  
  74. SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
  75. OPEN cur_domain;
  76. REPEAT
  77. FETCH cur_domain INTO domainID;
  78. OPEN cur_menu;
  79. REPEAT
  80. FETCH cur_menu INTO menuLabel, menuID;
  81. call buildNavMenuItem(menuLabel COLLATE 'utf8_unicode_ci', domainID, menuID);
  82. UNTIL done = TRUE
  83. END REPEAT;
  84. CLOSE cur_menu;
  85. SET done = FALSE;
  86. UNTIL domainID = max_domain
  87. END REPEAT;
  88. CLOSE cur_domain;
  89. END//
  90. DELIMITER ;
  91.  
  92. SET max_sp_recursion_depth = 15 ;
  93. call buildNavigation();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement