diff --git a/html/admin/sql/patch/upgrade118.sql b/html/admin/sql/patch/upgrade118.sql new file mode 100644 index 000000000..37d2c4062 --- /dev/null +++ b/html/admin/sql/patch/upgrade118.sql @@ -0,0 +1,167 @@ +begin + + +alter table profile_menu add pm_id_dep bigint ; +comment on column profile_menu.pm_id_dep is 'parent of this menu item'; + + +CREATE OR REPLACE VIEW v_menu_dependency AS + WITH t_menu AS ( + SELECT pm.pm_id, mr.me_menu, pm.me_code, pm.me_code_dep, pm.p_type_display, mr.me_file, mr.me_javascript, mr.me_description, mr.me_description_etendue, p.p_id + FROM profile_menu pm + JOIN profile p ON p.p_id = pm.p_id + JOIN menu_ref mr USING (me_code) + ) + SELECT DISTINCT (COALESCE(v3.me_code || '/'::text, ''::text) || COALESCE(v2.me_code, ''::text)) || + CASE + WHEN v2.me_code IS NULL THEN COALESCE(v1.me_code, ''::text) + WHEN v2.me_code IS NOT NULL THEN COALESCE('/'::text || v1.me_code, ''::text) + ELSE NULL::text + END AS code, v1.pm_id, v1.me_code, v1.me_description, v1.me_description_etendue, v1.me_file, '> '::text || v1.me_menu AS v1menu, + CASE + WHEN v2.pm_id IS NOT NULL THEN v2.pm_id + WHEN v3.pm_id IS NOT NULL THEN v3.pm_id + ELSE NULL::integer + END AS higher_dep, + CASE + WHEN COALESCE(v3.me_menu, ''::text) <> ''::text THEN ' > '::text || v2.me_menu + ELSE v2.me_menu + END AS v2menu, v3.me_menu AS v3menu, v3.p_type_display, COALESCE(v1.me_javascript, COALESCE(v2.me_javascript, v3.me_javascript)) AS javascript, v1.p_id, v2.p_id AS v2pid, v3.p_id AS v3pid + FROM t_menu v1 + LEFT JOIN t_menu v2 ON v1.me_code_dep = v2.me_code + LEFT JOIN t_menu v3 ON v2.me_code_dep = v3.me_code + WHERE COALESCE(v2.p_id, v1.p_id) = v1.p_id AND COALESCE(v3.p_id, v1.p_id) = v1.p_id AND v1.p_type_display <> 'P'::text + ORDER BY v1.pm_id; + +CREATE OR REPLACE FUNCTION modify_menu_system(n_profile numeric) + RETURNS void AS +$BODY$ +declare +r_duplicate profile_menu%ROWTYPE; +str_duplicate text; +n_lowest_id numeric; -- lowest pm_id : update the dependency in profile_menu +n_highest_id numeric; -- highest pm_id insert into profile_menu + +begin + +for str_duplicate in + select me_code + from profile_menu + where + p_id=n_profile and + p_type_display <> 'P' and + pm_id_dep is null + group by me_code + having count(*) > 1 +loop + raise info 'str_duplicate %',str_duplicate; + for r_duplicate in select * + from profile_menu + where + p_id=n_profile and + me_code_dep=str_duplicate + loop + raise info 'r_duplicate %',r_duplicate; + -- get the lowest + select a.pm_id into n_lowest_id from profile_menu a join profile_menu b on (a.me_code=b.me_code and a.p_id = b.p_id) + where + a.me_code=str_duplicate + and a.p_id=n_profile + and a.pm_id < b.pm_id; + raise info 'lowest is %',n_lowest_id; + -- get the highest + select a.pm_id into n_highest_id from profile_menu a join profile_menu b on (a.me_code=b.me_code and a.p_id = b.p_id) + where + a.me_code=str_duplicate + and a.p_id=n_profile + and a.pm_id > b.pm_id; + raise info 'highest is %',n_highest_id; + + -- update the first one + update profile_menu set pm_id_dep = n_lowest_id where pm_id=r_duplicate.pm_id; + -- insert a new one + insert into profile_menu (me_code, + me_code_dep, + p_id, + p_order, + p_type_display, + pm_default, + pm_id_dep) + values (r_duplicate.me_code, + r_duplicate.me_code_dep, + r_duplicate.p_id, + r_duplicate.p_order, + r_duplicate.p_type_display, + r_duplicate.pm_default, + n_highest_id); + + end loop; + +end loop; +end; +$BODY$ +language plpgsql; + +select modify_menu_system(1); +select modify_menu_system(2); + +update profile_menu set pm_id_dep=(select higher_dep from v_menu_dependency as a where + a.pm_id= profile_menu.pm_id) where pm_id_dep is null and p_id=1; + +update profile_menu set pm_id_dep=(select higher_dep from v_menu_dependency as a where + a.pm_id= profile_menu.pm_id) where pm_id_dep is null and p_id=2; +CREATE OR REPLACE VIEW v_menu_profile AS + WITH t_menu AS ( + SELECT pm.pm_id,pm.pm_id_dep, pm.me_code, pm.me_code_dep, pm.p_type_display,pm.p_id + FROM profile_menu pm + JOIN profile p ON p.p_id = pm.p_id + ) + SELECT DISTINCT + (COALESCE(v3.me_code || '/'::text, ''::text) || COALESCE(v2.me_code, ''::text)) || + CASE + WHEN v2.me_code IS NULL THEN COALESCE(v1.me_code, ''::text) + WHEN v2.me_code IS NOT NULL THEN COALESCE('/'::text || v1.me_code, ''::text) + ELSE NULL::text + END AS code, + v3.p_type_display, + coalesce(v3.pm_id,0) as pm_id_v3, + coalesce(v2.pm_id,0) as pm_id_v2, + v1.pm_id as pm_id_v1 + ,v1.p_id + FROM t_menu v1 + LEFT JOIN t_menu v2 ON v1.pm_id_dep = v2.pm_id + LEFT JOIN t_menu v3 ON v2.pm_id_dep= v3.pm_id + WHERE v1.p_type_display <> 'P'::text +; +COMMENT ON VIEW v_menu_profile IS 'Give the profile and the menu + dependencies'; + +CREATE OR REPLACE VIEW v_menu_description AS + WITH t_menu AS ( + SELECT pm.pm_id,pm.pm_id_dep,pm.p_id,mr.me_menu, pm.me_code, pm.me_code_dep, pm.p_type_display, pu.user_name, mr.me_file, mr.me_javascript, mr.me_description, mr.me_description_etendue + FROM profile_menu pm + JOIN profile_user pu ON pu.p_id = pm.p_id + JOIN profile p ON p.p_id = pm.p_id + JOIN menu_ref mr USING (me_code) + ) + SELECT DISTINCT (COALESCE(v3.me_code || '/'::text, ''::text) || COALESCE(v2.me_code, ''::text)) || + CASE + WHEN v2.me_code IS NULL THEN COALESCE(v1.me_code, ''::text) + WHEN v2.me_code IS NOT NULL THEN COALESCE('/'::text || v1.me_code, ''::text) + ELSE NULL::text + END AS code, v1.me_code, v1.me_description, v1.me_description_etendue, v1.me_file, v1.user_name, '> '::text || v1.me_menu AS v1menu, + CASE + WHEN COALESCE(v3.me_menu, ''::text) <> ''::text THEN ' > '::text || v2.me_menu + ELSE v2.me_menu + END AS v2menu, v3.me_menu AS v3menu, v3.p_type_display, COALESCE(v1.me_javascript, COALESCE(v2.me_javascript, v3.me_javascript)) AS javascript, + v1.pm_id,v1.pm_id_dep,v1.p_id + FROM t_menu v1 + LEFT JOIN t_menu v2 ON v1.me_code_dep = v2.me_code + LEFT JOIN t_menu v3 ON v2.me_code_dep = v3.me_code + WHERE v1.p_type_display <> 'P'::text AND (COALESCE(v1.me_file, ''::text) <> ''::text OR COALESCE(v1.me_javascript, ''::text) <> ''::text); + +COMMENT ON VIEW v_menu_description IS 'Description des menus'; + + +update version set val=118; + +commit; diff --git a/include/config_file.php b/include/config_file.php index 5e59d93c7..2a897fe34 100644 --- a/include/config_file.php +++ b/include/config_file.php @@ -172,8 +172,6 @@ function config_file_create($p_array,$from_setup=1,$p_os=1) fputs($hFile,"\r\n"); fputs($hFile,' // very special configuration'); fputs($hFile,"\r\n"); - fputs($hFile, 'define ("dbname","'.$cdbname.'");'); - fputs($hFile,"\r\n"); fputs($hFile, '// define ("NOALYSS_HOME","")'); fputs($hFile,"\r\n"); fputs($hFile, '// define ("NOALYSS_PLUGIN","")'); diff --git a/include/constant.php b/include/constant.php index bcef3a774..aa3388ed7 100644 --- a/include/constant.php +++ b/include/constant.php @@ -98,7 +98,7 @@ if ( !defined("SITE_UPDATE_PLUGIN")) define ("SITE_UPDATE_PLUGIN",'http://www.noalyss.eu/plugin_last_version.txt'); -define ("DBVERSION",118); +define ("DBVERSION",119); define ("MONO_DATABASE",25); define ("DBVERSIONREPO",16); define ('NOTFOUND','--not found--');