diff --git a/controller/hk_rows_import.anubis b/controller/hk_rows_import.anubis
index 3479be2..682754b 100644
--- a/controller/hk_rows_import.anubis
+++ b/controller/hk_rows_import.anubis
@@ -111,20 +111,55 @@ define (Int, List(List(String)))
else
if cvs_line_reader(unique) is
{
- end_of_input then (offset, so_far)
+ end_of_input then println("END OF INPUT "+offset);(offset, so_far)
error(e) then
//TODO report that error in importation report
println("error ["+e+"]\n"); (offset, so_far),
ok(_offset, all_values) then
+ println("extracted line : \""+join("\", ", all_values)+"\"");
+
//if line_data is (line, all_values) then
extract_lines(cvs_line_reader, max_count - 1, columns, _offset, [all_values . so_far])
}
.
+
+define Result(String, One)
+ update_data_to_table
+ (
+ SQLite3Stmt update_data_stmt,
+ List(String) columns,
+ List(String) values
+ )=
+ if sqlite3_reset(update_data_stmt) is
+ {
+ error(err) then println(db_error(err, "Error reseting update data statement")); error("DB Error"),
+ ok then
+ //println("update reset ok");
+ if sqlite3_bind(update_data_stmt, map2_select(bind_column_value, columns, values)) is
+ {
+ error(err) then println(db_error(err, "Error binding update data statement"));error("DB Error"),
+ ok then
+ //println("update bind ok");
+ if sqlite3_step(update_data_stmt) is
+ {
+ error(err) then
+ println(db_error(err, "Error executing update data statement"));
+ error("DB Error"),
+ no_more_row then
+ ok(unique),
+ row(_) then
+ ok(unique)
+ }
+ }
+ }.
+
define Result(String, One)
- insert_data_to_table
+ insert_or_update_data_to_table
(
SQLite3Stmt insert_data_stmt,
+ SQLite3Stmt update_data_stmt,
+ Bool update, //if true make update on constraint violation
List(String) columns,
List(String) values
)=
@@ -138,9 +173,20 @@ define Result(String, One)
ok then
if sqlite3_step(insert_data_stmt) is
{
- error(err) then println(db_error(err, "Error executing insert data statement")); error("DB Error"),
- no_more_row then ok(unique),
+ error(err) then
+ //println(db_error(err, "Error executing insert data statement"));
+ forget(sqlite3_reset(insert_data_stmt));
+
+ if err.code = 19 & update then
+ update_data_to_table(update_data_stmt, columns, values)
+ else
+ error("DB Error"),
+ no_more_row then ok(unique)
+ //println("insert no more row");
+ //update_data_to_table(update_data_stmt, columns, values),
row(_) then ok(unique)
+ //println("insert row");
+ //update_data_to_table(update_data_stmt, columns, values)
}
}
}.
@@ -148,28 +194,33 @@ define Result(String, One)
define Maybe(One)
store_data
(
- SQLite3Stmt insert_data_stmt,
- SQLite3Stmt update_data_stmt,
+// SQLite3Stmt insert_data_stmt,
+// SQLite3Stmt update_data_stmt,
+// Bool update,
+ List(String) -> Result(String, One) import_line_values,
// SQLite3Stmt select_contact_id_opt_out_stmt,
// SQLite3Stmt select_stmt,
// SQLite3Stmt insert_list_contact_stmt,
// SQLite3Stmt count_stmt,
- List(String) columns, //list of column's name
+
+// List(String) columns, //list of column's name
List(List(String)) rows //list of list of real data to store
) =
if rows is
{
- [] then success(unique),
+ [] then
+ println("store data row empty");
+ success(unique),
[row . t] then
- if insert_data_to_table(insert_data_stmt, columns, row) is
+ if import_line_values(row) is //insert_or_update_data_to_table(insert_data_stmt, update_data_stmt, update, columns, row) is
{
error(msg) then
println("data can't be added "+msg);
//TODO as Julien's idea, copy error line in new csv file
- store_data(insert_data_stmt, update_data_stmt, columns, t),
+ store_data(import_line_values, t),
ok(_) then
- store_data(insert_data_stmt, update_data_stmt, columns, t)
+ store_data(import_line_values, t)
}
}
.
@@ -179,9 +230,9 @@ define CSV_Import_Status
(
SQLite3DataBase db,
// Int import_id, */
- SQLite3Stmt insert_data_stmt,
- SQLite3Stmt update_data_stmt,
-
+// SQLite3Stmt insert_data_stmt,
+// SQLite3Stmt update_data_stmt,
+ List(String) -> Result(String, One) import_line_values,
One -> ReadCsvResult csv_line_reader,
//One -> Int progression,
UTime start_time,
@@ -201,22 +252,25 @@ define CSV_Import_Status
//get 500 lines from cvs
since extract_lines(csv_line_reader, 500, columns, _offset, []) is (offset, so_far),
with extract_length = length(so_far),
- println("Extracted lines : "+extract_length);
+ //println("extraction: offset "+offset+" #lines "+extract_length);
if extract_length = 0 then
csv_finished
else
if db_do_transaction(
db,
- (One _) |-> store_data(insert_data_stmt, update_data_stmt, columns, so_far),
+ (One _) |-> store_data(import_line_values, so_far),
success((SQLite3Error err) |-> println(db_error(err,"import_csv_to_db"))),
//success((SQLite3Error err) |-> logError("DB", db_error(err,"import_csv_to_db"))),
60000, // max 60s
100 // retry every 100 ms
) is
{
- error(_) then csv_db_error,
- ok(_) then main_loop(db, insert_data_stmt, update_data_stmt, csv_line_reader, new_time, columns, line_num + extract_length, offset, offset_base)
+ error(_) then
+ println("main loop db_do_transaction csv_db_error");
+ csv_db_error,
+ ok(_) then
+ main_loop(db, import_line_values, csv_line_reader, new_time, columns, line_num + extract_length, offset, offset_base)
}
.
@@ -228,17 +282,17 @@ define CSV_Import_Status
// Import_Task import_task,
One -> ReadCsvResult csv_line_reader,
//(One) -> Int progression,
+ String import_type,
List(String) columns, //columns selected for importation in same order from CSV file
+ String column_key,
UTime start_time,
Int offset_base
)=
//since import_task is import_task(import_task_id, list_id, filename, file_size, csv_db_columns, separator, charset, amount_time, offset, current_line, lines_count, status, status_details, update_contact, opt_out_import),
with current_line = (Int)0,
with offset = (Int)0,
-// if get_domain_id_from_mailing(db, list_id) is
-// {
-// failure then logError(debug_log, "domain_id not found in import_csv_to_mailing_list"); csv_error,
-// success(domain_id) then
+ with key = if column_key = "" then "id" else column_key,
+
with filter_columns = map_select((String s) |-> if s = "" then failure else success(s), columns),
sql_columns = join(", ", filter_columns),
sql_values = join(", ", map((String s) |-> ":"+s, filter_columns)),
@@ -246,25 +300,36 @@ define CSV_Import_Status
if sqlite3_prepare(db, "INSERT INTO "+table_name+" ("+sql_columns+") VALUES ("+sql_values+");") is
{
- error(err) then //logError(debug_log, db_error(err, "preparing insert contact statement for import_csv_to_mailing_list"));
+ error(err) then //logError(debug_log, db_error(err, "preparing insert contact statement for import _csv_to_mailing_list"));
println(db_error(err, "preparing insert data statement for import_csv_to_mailing_list"));
csv_db_error,
ok(insert_data_stmt) then
-
- if sqlite3_prepare(db, "UPDATE "+table_name+" SET " + sql_update_values + " WHERE id=:id;") is
+// with update_query = "UPDATE "+table_name+" SET " + sql_update_values + " WHERE changes()=0 AND "+key+"=:"+key+";",
+ with update_query = "UPDATE "+table_name+" SET " + sql_update_values + " WHERE "+key+"=:"+key+";",
+ println(" update query : "+update_query);
+ if sqlite3_prepare(db, update_query) is
{
error(err) then //logError(debug_log, db_error(err, "preparing update contact statement for import_csv_to_mailing_list"));
println(db_error(err, "preparing update data statement for import_csv_to_db_transaction"));
csv_db_error,
ok(update_data_stmt) then
/* run the main loop */
- main_loop(db, /*import_task_id, */ insert_data_stmt, update_data_stmt, csv_line_reader, start_time, columns, current_line, offset, offset_base)
+ with import_line_values =
+ if import_type = "insert_or_update" then
+ (List(String) row) |-> insert_or_update_data_to_table(insert_data_stmt, update_data_stmt, true, columns, row)
+ else if import_type = "insert" then
+ (List(String) row) |-> insert_or_update_data_to_table(insert_data_stmt, update_data_stmt, false, columns, row)
+ else if import_type = "update" then
+ (List(String) row) |-> update_data_to_table(update_data_stmt, columns, row)
+ else
+ (List(String) row) |-> insert_or_update_data_to_table(insert_data_stmt, update_data_stmt, true, columns, row),
+
+ main_loop(db, import_line_values, csv_line_reader, start_time, columns, current_line, offset, offset_base)
}
}
// }
.
-
public define Result(String, String)
hkc_import_execute
(
@@ -282,7 +347,9 @@ public define Result(String, String)
with separator = get_String(lwa, "csv_sep", ";"),
with csv_db_columns = get_columns_list(lwa),
with columns = get_db_columns(csv_db_columns, []),
+ column_key = get_String(lwa, "column_key", ""),
table_name = get_String(lwa, "table_name", ""),
+ import_type = get_String(lwa, "import_type", "insert_or_update"),
with start_time = unow,
offset_base = (Int)0,
skip_first_line = get_Bool(lwa, "hk_remove_csv_header", true),
@@ -306,9 +373,8 @@ public define Result(String, String)
forget(csv_line_reader(unique))
else
unique);
- with status = import_csv_to_db_transaction(db, table_name, csv_line_reader, columns, start_time, offset_base),
+ with status = import_csv_to_db_transaction(db, table_name, csv_line_reader, import_type, columns, column_key, start_time, offset_base),
ok("imported")
-
}
}
.
diff --git a/view/types/hk_form_entry.anubis b/view/types/hk_form_entry.anubis
index d0bef73..ece70b9 100644
--- a/view/types/hk_form_entry.anubis
+++ b/view/types/hk_form_entry.anubis
@@ -24,7 +24,7 @@ public type HK_Form_Entry: //legacy VT_Edit
information (String s_name, String c_name, String v_name, Int width, HK_Help_Text help), //s_name = show_name for translation, v_name = string to show
text (String s_name, String c_name, String value, HK_Help_Text help), //s_name = show_name for translation, c_name = table column name
password (String s_name, String c_name, HK_Help_Text help), //s_name = show_name for translation, c_name = table column name
- foreign_text(String s_name, String c_name, DB_id selected, HK_Form_Selector selector, HK_Help_Text help),
+ foreign_text(String s_name, String c_name, DB_id selected, String f_table_name, HK_Form_Selector selector, HK_Help_Text help),
foreign_text_search(String s_name, String c_name, DB_id selected, String f_table_name, List(String) search_fields, HK_Help_Text help),
choices_text(String s_name, String c_name, String selected, HK_Form_Selector selector, HK_Help_Text help),
text_area (String s_name, String c_name, String value, HK_Text_Field_Attr area_att, HK_Help_Text help), //s_name = show_name for translate, c_name = table column name
@@ -41,7 +41,7 @@ public type HK_Form_Entry: //legacy VT_Edit
.
public define HK_Form_Entry text (String s_name, String c_name, String value) = text (s_name, c_name, value, no_help_text).
-public define HK_Form_Entry foreign_text(String s_name, String c_name, DB_id selected, HK_Form_Selector selector) = foreign_text(s_name, c_name, selected, selector, no_help_text).
+public define HK_Form_Entry foreign_text(String s_name, String c_name, DB_id selected, String foreign_table_name, HK_Form_Selector selector) = foreign_text(s_name, c_name, selected, foreign_table_name, selector, no_help_text).
public define HK_Form_Entry text_area (String s_name, String c_name, String value) = text_area (s_name, c_name, value, none, no_help_text).
public define HK_Form_Entry boolean (String s_name, String c_name, Bool value) = boolean (s_name, c_name, value, no_help_text).
public define HK_Form_Entry integer (String s_name, String c_name, Int value) = integer (s_name, c_name, value, no_help_text).
diff --git a/view/types/hk_view.anubis b/view/types/hk_view.anubis
index 639ffaf..05eff65 100644
--- a/view/types/hk_view.anubis
+++ b/view/types/hk_view.anubis
@@ -91,16 +91,17 @@ public type VT_view_row_header:
public type VT_view_row:
vt_view_row(Int db_id, List(VT_view_entry) list).
+/*
public type VT_View_DB_Calls:
vt_view_db_calls(
- (SQLite3DataBase db, String clause) -> Int get_count,
- (SQLite3DataBase db, HK_Referer referer, String clause, String order_by) -> JsonMember get_rows_json
+ (SQLite3DataBase db, String clause) -> Int get_count,
+ (SQLite3DataBase db, HK_Referer referer, String clause, String order_by) -> JsonValue get_rows_json
// (SQLite3DataBase db, String clause) -> List(VT_view_row) get_rows
)
-.
+. */
public type VT_view:
- vt_view(String table_name, String view_name, VT_view_model view_model, VT_view_row_header header, VT_View_DB_Calls db_calls).
+ vt_view(String table_name, String view_name, VT_view_model view_model, VT_view_row_header header).
public type HK_Form_action:
diff --git a/view/view_apps_renderer.anubis b/view/view_apps_renderer.anubis
index 3100b9e..4c83ad4 100644
--- a/view/view_apps_renderer.anubis
+++ b/view/view_apps_renderer.anubis
@@ -35,19 +35,19 @@ define List(HTML_Row(HTML_Off_Form))
cell(
sequence([
partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id("edit_table_dlg_ajax"), "'table_name="+table_name+"'"))], "", [])),
- text(_T("ADD")),
+ actioner(link([core_attrs([event(onclick, jq_dialog_open(dialog_id("edit_table_dlg_ajax"), "'table_name="+table_name+"'"))])],_T("ADD")), no_action, [])
])
),
cell(
sequence([
partial(img_button(icn16_view_list, hkc_list_view, [("table_name",table_name)])),
- text(_T("LIST"))
+ actioner(link(_T("LIST")), hkc_list_view, [("table_name",table_name)])
])
),
cell(
sequence([
partial(img_button("icons/16x16/table_import.png", hkc_import_dropzone, [("table_name",table_name)])),
- text(_T("CSV_IMPORT"))
+ actioner(link(_T("CSV_IMPORT")), hkc_import_dropzone, [("table_name",table_name)])
])
),
cell(text(_T("RECORDS_COUNT")+" ")),
diff --git a/view/view_rows_import.anubis b/view/view_rows_import.anubis
index dc06c78..80825d7 100644
--- a/view/view_rows_import.anubis
+++ b/view/view_rows_import.anubis
@@ -10,10 +10,12 @@ read locale/L3.anubis
read locale/L3LanguageInfo.anubis //date and time formating
read system/data_io.anubis
read tools/line_reader.anubis
+read tools/basis.anubis
read calexium_lib/database/csv_tools.anubis
read calexium_lib/web/CXM_making_a_web_site.anubis
read calexium_lib/web/CXM_jquery.anubis
+read calexium_lib/web/CXM_form.anubis
read calexium_lib/web/jQuery/CXM_jquery_button.anubis
read calexium_lib/web/widgets/css_helper.anubis
read calexium_lib/web/widgets/icons_set.anubis
@@ -36,6 +38,18 @@ public define List((List(CoreAttrs), WebArgValue, String))
+public define List((List(CoreAttrs), WebArgValue, String))
+ csv_import_type_combo
+ (
+ (String) -> String _T
+ )
+ =
+ (List((List(CoreAttrs), WebArgValue, String)))[
+ ([],wav("insert_or_update"), _T("INSERT_OR_UPDATE")),
+ ([],wav("insert"), _T("INSERT")),
+ ([],wav("update"), _T("UPDATE")),
+ ].
+
public define HTML_Partial_Content
import_zone
(
@@ -140,7 +154,7 @@ define List(HTML_Row(HTML_In_Form))
text(_T("IGNORED_COLUMN")),
hidden(html_Id("hk_"+hidden_name+"_input"), wan(""), wav(hidden_name))
])),
- cell([class("icon ")],image([class("dnd-dst-btn")],"/icons/16x16/delete_cross.png",""))
+ cell(image([class("dnd-dst-btn")],"/icons/16x16/delete_cross.png",""))
])
. so_far], index+1, _T)
}.
@@ -173,6 +187,7 @@ public define HTML_Partial_Content
(String) -> String _T,
)=
partial_content([css(css_file("css/cxm/cxm_dnd.css")),
+ css(css_file("css/changelists.css")),
js(js_file("js/cxm/cxm_dnd.js")),
js(js_file("js/data_import.js"))
],
@@ -188,6 +203,8 @@ public define HTML_Partial_Content
row([], [cell(empty), cell(text(_T("DELIMITER"))), cell(selector_c([], no_label, html_Id("import_delimiter"), wan("csv_sep"), 1, csv_delimiter_combo(_T), init(separator)),)]),
row([], [cell(empty), cell(text(_T("FILE_ENCODING"))), cell(text("choose encoding"))]),
row([], [cell(empty), cell(text(_T("REMOVE_CSV_HEADER"))), cell(check_box([], no_label, html_Id(""), wan("hk_remove_csv_header"), wav("1"), true))]),
+ row([], [cell(empty), cell(text(_T("IMPORT_TYPE"))), cell(selector_c([], no_label, html_Id("import_type"), wan("import_type"), 1, csv_import_type_combo(_T), init(separator)),)]),
+
// row([], [cell(empty), cell(text(_T("OPT_OUT"))), cell(check_box([], no_label, html_Id(""), wan("import_opt_out"), wav("1"), false))])] //end of row
]),
br,
@@ -202,10 +219,7 @@ public define HTML_Partial_Content
div_empty([class("clear")])
])),
- //partial(jquery_button(jquery_img_button(icn16_cross, _T("CANCEL"), "", jQuery_actioner(same, jqlink, "go_edit_mailing_list&list_id="+list_id.id), left))),
- //partial(jquery_button(jquery_img_button(icn16_check, _T("IMPORT"), "", jQuery_actioner(same, jqform, "import_csv_form"), left)))
-
- ])), //end of sequence in form
+ ])), //end of sequence in form
// )])
partial(jquery_button(jquery_img_button(icn16_cross, _T("CANCEL"), "", jQuery_actioner(same, jqlink(cancel_action)), left))),
partial(img_submit_button(_T("IMPORT"), "import_csv_form"))
diff --git a/view/view_table_manager_types.anubis b/view/view_table_manager_types.anubis
index 33aa348..caae499 100644
--- a/view/view_table_manager_types.anubis
+++ b/view/view_table_manager_types.anubis
@@ -12,6 +12,10 @@ transmit hayamiki_lib/view/types/hk_filter.anubis
transmit calexium_lib/web/CXM_common.anubis
read hayamiki_lib/types/hayamiki.anubis
+
+read calexium_lib/web/CXM_common.anubis
+read calexium_lib/database/db_types.anubis
+
public type VTM_edit:
vtm_edit(String table_name, (SQLite3DataBase db, HK_Form_action action, String edit_view_name) -> HK_Form get_edit).
@@ -40,8 +44,8 @@ public type HK_Table_controller:
(SQLite3DataBase db, List(Web_arg) lwa) -> Maybe(One) write_from_fields,
//Read
(SQLite3DataBase db, String clause) -> Int get_count,
- (SQLite3DataBase db, HK_Referer referer, String clause, String order_by) -> JsonMember get_rows_json,
-
+ (SQLite3DataBase db, List(String) columns, DB_id) -> JsonValue get_one_json,
+ (SQLite3DataBase db, List(String) columns, HK_Referer referer, String clause, String order_by) -> JsonValue get_rows_json,
//Update
//Delete
(SQLite3DataBase db, List(Int) l_int) -> Maybe(One) delete
diff --git a/view/view_table_renderer.anubis b/view/view_table_renderer.anubis
index 8f4d516..1fc5e0b 100644
--- a/view/view_table_renderer.anubis
+++ b/view/view_table_renderer.anubis
@@ -18,6 +18,7 @@ read system/string.anubis
read locale/L3.anubis
read tools/basis.anubis
read tools/list.anubis
+read tools/printable_tree.anubis
read data_base/sqlite.anubis
read system_colors/rgb.anubis
read system/convert.anubis
@@ -97,12 +98,17 @@ public define HK_Filter
get_filter_from_name
(
VTM_view vtm_v, //virtual table manager view
- String view_name, //
- String filter_name
+ String view_name, //view name where belonging the filters
+ String filter_name //the filter name to get
)=
with all_view_name = vtm_v.get_all_view_name(unique),
with filters = get_view_filters(view_name, all_view_name),
-
+
+ //we don't have any filter name to search for, hence we get the first entry
+ if filter_name = "" then
+ force_nth(0, filters, hk_filter("", ""))
+ else
+ //else try to get the filter according to his name
get_filter_from_name(filters, filter_name)
.
@@ -287,9 +293,8 @@ define String
autoResizing: { compact: true, resetWidthOrg: true },
autoresizeOnLoad: true,
autowidth:true,
- /*idPrefix: '_g_"+uid+"_',*/
- pager: '#"+uid+"_pager',
- pager: true,
+ viewrecords: true,
+ /*pager: true,*/
toppager: true,
/*shrinkToFit:false,*/
@@ -400,7 +405,7 @@ url:'?aws_controller=hk_c&aws_action=grid_view&table_name="+rows.table_name+"&vi
return $(cellObject.html()).css(\"backgroundColor\").substring(1);
}
function formatPhone(cellValue, options, rowObject) {
- var phoneInput = '
' + cellValue + '';
+ var phoneInput = '
' + cellValue + '';
return phoneInput;
}
function unformatPhone(cellValue, options, cellObject) {
@@ -409,7 +414,7 @@ url:'?aws_controller=hk_c&aws_action=grid_view&table_name="+rows.table_name+"&vi
return ret;
}
function formatEmail(cellValue, options, rowObject) {
- var phoneInput = '
' + cellValue + '';
+ var phoneInput = '
' + cellValue + '';
return phoneInput;
}
function unformatEmail(cellValue, options, cellObject) {
@@ -422,7 +427,7 @@ url:'?aws_controller=hk_c&aws_action=grid_view&table_name="+rows.table_name+"&vi
div([],
sequence([
table([core_attrs([id(uid+"_grid")])],[]),
- div_empty([id(uid+"_pager")])
+ //DR 20170528 div_empty([id(uid+"_pager")])
])
)
)
@@ -623,10 +628,26 @@ public define List(CXM_Form_Field)
password_entries
],
- 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, table_referer, fk_clause), success(init(to_String(value))), mandatory), help_line(help, _T)],
- foreign_text_search(s_name, c_name, select, table_name, fields, help) then
- [raw_in_form(literal(""))]
+ foreign_text(s_name, c_name, value, foreign_table_name, select, help) then
+ with uid = generate_random_string(20)+"_",
+
+ [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, table_referer, fk_clause), success(init(to_String(value))), mandatory), help_line(help, _T),
+
+ partial(jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&sub_dialog=true&table_name="+foreign_table_name)))),
+ partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+foreign_table_name+"_dlg_ajax")))], "", [])),
+ ],
+ foreign_text_search(s_name, c_name, select, foreign_table_name, fields, help) then
+ with uid = generate_random_string(20)+"_",
+ [
+ raw_in_form(sequence([
+ literal(to_String(format_label(label(_T(s_name), no_help), html_Id("")))+
+ ""),
+ partial(jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&sub_dialog=true&table_name="+foreign_table_name)))),
+ partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+foreign_table_name+"_dlg_ajax")))], "", [])),
+ ])
+ ),
+ 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, no_referer, ""), success(init(value)), mandatory), help_line(help, _T)],
text_area(s_name, c_name, value, txt_editor, help) then
@@ -649,9 +670,9 @@ 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)],
phone( s_name, c_name, value, help) then
- [input([class("hk_input_phone")], label(_T(s_name), no_help), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
+ [phone_input([event(onclick, "hk_phone_call(this)")], [class("hk_input_phone")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
email( s_name, c_name, value, help) then
- [input([class("hk_input_email")], label(_T(s_name), no_help), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
+ [email_input([event(onclick, "hk_send_email(this)")], [class("hk_input_email")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
},
edit_form_lines(db, fk_clause, table_referer, _T, t, new_entry, reverse(line)+so_far)
}.
@@ -710,6 +731,26 @@ define List(String)
_lines)
.
+define String
+ ajax_combo_init_parameter
+ (
+ String f_table, //db table name
+ String c_name, //column name in the table
+ List(String) s_fields //search fields
+ )=
+"$('#acb_"+c_name+"').ajaxComboBox( '?aws_controller=hk_c&aws_action=combo_search',
+ {
+ lang: 'fr',
+ per_page: 15,
+ db_table: '"+f_table+"',
+ button_img: 'ajax-combobox/btn.png',
+ field: '"+force_nth(0, s_fields, "name")+"',
+ search_field: '"+join(", ", s_fields)+"',
+ hidden_name: '"+c_name+"',
+ show_string: '"+join(", ", s_fields)+"',
+ and_or: 'OR'
+ });"
+.
define List(String)
_get_combo_header
@@ -724,15 +765,8 @@ define List(String)
if cell is
{
hk_form_table_cell(_, form_entry) then
- if form_entry is foreign_text(s_name, c_name, value, select, help) then
- with result =
-"$('#acb_"+c_name+"').ajaxComboBox( '?aws_controller=hkc&aws_action=combo_action',
- {
- lang: 'fr',
- db_table: '"+table_name+"',
- button_img: 'ajax-combobox/btn.png'
- });",
- [result]
+ if form_entry is foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
+ [ajax_combo_init_parameter(f_table, c_name, s_fields)]
else
[],
hk_form_table_cell_table(_, t_lines) then
@@ -755,6 +789,7 @@ define List(HTML_Head_Tag)
else
[]
.
+
define List(HTML_Head_Tag)
get_combo_header
(
@@ -770,6 +805,38 @@ define List(HTML_Head_Tag)
else
[]
.
+
+define List(String)
+ _get_combo_header
+ (
+ String table_name,
+ List(HK_Form_Entry) _entries
+ )=
+ map_append((HK_Form_Entry entry)
+ |->
+ if entry is foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
+ [ajax_combo_init_parameter(f_table, c_name, s_fields)]
+ else
+ []
+ ,
+ _entries)
+.
+
+define List(HTML_Head_Tag)
+ get_combo_header
+ (
+ String table_name,
+ List(HK_Form_Entry) _lines
+ )=
+ with result = _get_combo_header(table_name, _lines),
+ if length(result) > 0 then
+ [js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
+ css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
+ js_inline(jquery_ready(join("",result)))
+ ]
+ else
+ []
+ .
public define HTML_Partial_Content
renderer_edit_list_form
@@ -793,6 +860,8 @@ public define HTML_Partial_Content
//true if need to create row or false for updating
with create = if get_String(lwa, "id","none") = "none" then true else false,
with id = get_String(lwa, "id","none"),
+ with sub_dialog = get_String(lwa, "sub_dialog", "false"),
+
with button_name = if create then _T("CREATE") else _T("UPDATE"),
with button_name_and_new = if create then _T("CREATE_AND_EDIT_NEW") else _T("UPDATE_AND_EDIT_NEW"),
@@ -807,13 +876,14 @@ public define HTML_Partial_Content
$('#my-awesome-dropzone').dropzone(); ")),
]+
jq_datetimepicker_init(lang) +
- get_editor_header(list_entries), //add editor header if need. Like init ck_editor
+ get_editor_header(list_entries)+ //add editor header if need. Like init ck_editor
+ get_combo_header(table_name, list_entries),
sequence([
cxm_form( table_name, lwa,
[ 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)]),
- submit(hkc_cancel, failure, _T("CANCEL"))
+ submit(if create then hkc_save_row else hkc_update_row, failure, button_name, [("table_name", table_name), ("sub_dialog", sub_dialog)]),
+ submit(if create then hkc_save_row_and_new else hkc_update_row_and_new, failure, button_name_and_new, [("table_name", table_name), ("sub_dialog", sub_dialog)]),
+ submit(hkc_cancel, failure, _T("CANCEL"), [("sub_dialog", sub_dialog)])
]),
hr
]+edit_form_lines(db, "", table_referer, _T, list_entries, create, [])
@@ -834,9 +904,9 @@ public define HTML_Partial_Content
,list_tabs))+
[ hr,
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)]),
- submit(hkc_cancel, failure, _T("CANCEL"))
+ submit(if create then hkc_save_row else hkc_update_row, failure, button_name, [("table_name", table_name), ("sub_dialog", sub_dialog)]),
+ submit(if create then hkc_save_row_and_new else hkc_update_row_and_new, failure, button_name_and_new, [("table_name", table_name), ("sub_dialog", sub_dialog)]),
+ submit(hkc_cancel, failure, _T("CANCEL"), [("sub_dialog", sub_dialog)])
])
]
),
@@ -887,11 +957,12 @@ public define List(CXM_Form_Field)
password_entries
],
- foreign_text(s_name, c_name, value, select, help) then
+ foreign_text(s_name, c_name, value, foreign_table_name, select, help) then
[selector_c([],no_label, html_Id(""), wan(c_name), 1, select.get(db, table_referer, fk_clause), 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, table_referer, fk_clause), success(init(to_String(value))), mandatory), help_line(help, _T)],
- foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
- [raw_in_form(literal(""))],
+
+ foreign_text_search(s_name, c_name, select, foreign_table_name, s_fields, help) then
+ [raw_in_form(literal(""))]
+// [raw_in_form(literal(""))],
choices_text(s_name, c_name, value, select, help) then
[selector_c([],no_label, html_Id(""), wan(c_name), 1, select.get(db, no_referer, ""), success(init(value)), mandatory), help_line(help, _T)],
@@ -915,9 +986,9 @@ public define List(CXM_Form_Field)
color( s_name, c_name, value, help) then
[input([class("jscolor")], no_label, wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
phone( s_name, c_name, value, help) then
- [input([class("hk_input_phone")], no_label, wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
+ [phone_input([event(onclick, "hk_phone_call(this)"), class("phone_click")], [class("hk_input_phone")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
email( s_name, c_name, value, help) then
- [input([class("hk_input_email")], no_label, wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
+ [email_input([event(onclick, "hk_send_email(this)"), class("email_click")], [class("hk_input_email")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)],
}.
--
libgit2 0.21.4