From 187c20bf60effefc66d412cf4465f322e00bfa3f Mon Sep 17 00:00:00 2001 From: totoro Date: Sun, 2 Apr 2017 04:38:29 +0200 Subject: [PATCH] start to manage fk when creating edit table from (+) in list view. This means that the dialog filter the selector with that referer --- types/hayamiki.anubis | 9 +++++++++ view/view_table_renderer.anubis | 53 +++++++++++++++++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/types/hayamiki.anubis b/types/hayamiki.anubis index 2b0cdd6..7ca6b49 100644 --- a/types/hayamiki.anubis +++ b/types/hayamiki.anubis @@ -10,3 +10,12 @@ transmit hayamiki_lib/model/fields.anubis transmit hayamiki_lib/model/database.anubis transmit hayamiki_lib/model/columns.anubis + +public type HK_Referer: + hk_referer( + String referer_table, + String referer_row_id, + String fk_table, + String fk_column + ) +. diff --git a/view/view_table_renderer.anubis b/view/view_table_renderer.anubis index e5cb2b6..f547443 100644 --- a/view/view_table_renderer.anubis +++ b/view/view_table_renderer.anubis @@ -37,6 +37,10 @@ read calexium_lib/web/widgets/button.anubis read calexium_lib/web/CXM_urllib.anubis define HTML_Off_Form +/* create a selector for choosing the view name. + * The selector create an immediate action. This means when the entry is selected, the action is fired. + * If only one view exists, the selector is not created + */ table_view_selector ( (String) -> String _T, //translator function @@ -171,7 +175,7 @@ define String autowidth:true, shrinkToFit:true, rowNum:10, - cellEdit: true, + cellEdit: false, cellsubmit: 'remote', cellurl: '?aws_controller=hk_c&aws_action=update_row&table_name="+rows.table_name+"', pager: '#"+uid+"_pager', @@ -247,20 +251,23 @@ public define HTML_Partial_Content String action_name, VTM_view vtm_v, String view_name, - String clause + String f_clause, //filter for current table + String fk_clause //filter for foreign key of the table (one to many) ) = + with filter_clause = if f_clause = "" then "" else "&clause="+url_quote(f_clause), + with foreign_clause = if fk_clause = "" then "" else "&fk_clause="+url_quote(fk_clause), with current_view = vtm_v.get_view(view_name), with uid = generate_random_string(20)+"_", partial_content([ js(js_file("js/jscolor.min.js")) ]+jq_dialog_init + jq_datetimepicker_init(lang), [html_wave_box_wide(_T(to_upper(current_view.table_name)), sequence([ - partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+current_view.table_name)))), + partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+current_view.table_name+filter_clause+foreign_clause)))), div([class("inline")], sequence([ partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), table_view_selector(_T, vtm_v, view_name), ])), - partial(jqGrid_table(db, uid, current_view, _T, lang, clause)) + partial(jqGrid_table(db, uid, current_view, _T, lang, f_clause)) //partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(500), true, true, true, lang, no_extra, web_site_directory)) ]))]). @@ -274,8 +281,11 @@ public define HTML_Partial_Content String action_name, VTM_view vtm_v, String view_name, - String clause + String f_clause, //filter for current table + String fk_clause //filter for foreign key of the table (one to many) ) = + with filter_clause = if f_clause = "" then "" else "&clause="+url_quote(f_clause), + with foreign_clause = if fk_clause = "" then "" else "&fk_clause="+url_quote(fk_clause), with current_view = vtm_v.get_view(view_name), with uid = generate_random_string(20)+"_", partial_content([ js(js_file("js/jscolor.min.js")) @@ -283,10 +293,10 @@ public define HTML_Partial_Content jq_dialog_init + jq_datetimepicker_init(lang), [ - partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+current_view.table_name)))), + partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+current_view.table_name+filter_clause+foreign_clause)))), partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), //table_view_selector(_T, vtm_v, view_name), - partial(jqGrid_table(db, uid, current_view, _T, lang, clause)), + partial(jqGrid_table(db, uid, current_view, _T, lang, fk_clause)), //partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(200), true, true, true, lang, no_extra, web_site_directory)) ]). @@ -300,14 +310,15 @@ public define Maybe(HTML_Partial_Content) String table, String view_name, String action_name, - String clause, + String f_clause, + String fk_clause, VTM vtm ) = if vtm_get_view(table, vtm.view_list) is { failure then failure, success(vtm_v) then - success(view_table_page(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, clause)) + success(view_table_page(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, fk_clause)) }. public define Maybe(HTML_Partial_Content) @@ -320,14 +331,15 @@ public define Maybe(HTML_Partial_Content) String table, String view_name, String action_name, - String clause, + String f_clause, + String fk_clause, VTM vtm ) = if vtm_get_view(table, vtm.view_list) is { failure then failure, success(vtm_v) then - success(view_table(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, clause)) + success(view_table(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, fk_clause)) }. define CXM_Form_Field @@ -349,6 +361,7 @@ public define List(CXM_Form_Field) edit_form_lines ( SQLite3DataBase db, + String fk_clause, (String) -> String _T, List(VT_edit_entry) list, Bool new_entry, @@ -388,7 +401,7 @@ public define List(CXM_Form_Field) ], foreign_text(s_name, c_name, value, select, help) then - [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, ""), success(init(to_String(value))), mandatory), help_line(help, _T)], + [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, fk_clause), success(init(to_String(value))), mandatory), help_line(help, _T)], choices_text(s_name, c_name, value, select, help) then [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, ""), success(init(value)), mandatory), help_line(help, _T)], text_area(s_name, c_name, value, txt_editor, help) then @@ -411,7 +424,7 @@ public define List(CXM_Form_Field) color( s_name, c_name, value, help) then [input([class("jscolor")], label(_T(s_name), no_help), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)], }, - edit_form_lines(db, _T, t, new_entry, reverse(line)+so_far) + edit_form_lines(db, fk_clause, _T, t, new_entry, reverse(line)+so_far) }. define HTML_Head_Tag @@ -449,7 +462,9 @@ public define HTML_Partial_Content String web_site_directory, List(Web_arg) lwa, VT_edit vt_elist, - VTM vtm + VTM vtm, + String clause, + String fk_clause ) = with table_name = vt_elist.table_name, //true if need to create row or false for updating @@ -465,7 +480,7 @@ public define HTML_Partial_Content get_editor_header(vt_elist.list), //add editor header if need. Like init ck_editor sequence([ cxm_form( table_name, lwa, - edit_form_lines(db, _T, vt_elist.list, create, [])+ + edit_form_lines(db, fk_clause, _T, vt_elist.list, create, [])+ [ one_line_fields([ submit(if create then hkc_save_row else hkc_update_row, failure, button_name, [("table_name", table_name)]), submit(if create then hkc_save_row_and_new else hkc_update_row_and_new, failure, button_name_and_new, [("table_name", table_name)]), @@ -479,7 +494,7 @@ public define HTML_Partial_Content map( (HK_V_Edit_Tab tab) |-> since tab is hk_v_edit_tab(fk_table_name, fk_col_name, list_view_name), - if view_table_only(db, _T, lang, web_site_directory, fk_table_name, list_view_name, "edit", fk_col_name+" = "+id, vtm) is + if view_table_only(db, _T, lang, web_site_directory, fk_table_name, list_view_name, "edit", "", fk_col_name+" = "+id, vtm) is { failure then empty, success(p_content) then partial(p_content) @@ -499,14 +514,16 @@ public define Maybe(HTML_Partial_Content) String table, //table name String view_name, //view name to use VT_action action, //new_entry or edit an existing record - VTM vtm + VTM vtm, + String clause, + String fk_clause ) = if vtm_get_edit(table, vtm.edit_list) is { failure then failure, success(vtm_e) then since vtm_e is vtm_edit(_, get_edit), - success(edit_table_page(db, _T, lang, web_site_directory, lwa, get_edit(db, action, view_name), vtm)) + success(edit_table_page(db, _T, lang, web_site_directory, lwa, get_edit(db, action, view_name), vtm, clause, fk_clause)) }. -- libgit2 0.21.4