mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Cfg: Add support for lists
This commit is contained in:
parent
0c3dbd4b4d
commit
d7636457bd
@ -17,8 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*;
|
||||
import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.*;
|
||||
import gplx.xowa.addons.apps.cfgs.types.*;
|
||||
public class Xocfg_mgr {
|
||||
private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr();
|
||||
public Xocfg_type_mgr Type_mgr() {return type_mgr;} private final Xocfg_type_mgr type_mgr = new Xocfg_type_mgr();
|
||||
public void Init_by_app(Xoa_app app) {
|
||||
cache_mgr.Init_by_app // SECTION_EDIT
|
||||
( gplx.xowa.addons.apps.cfgs.dbs.Xocfg_db_app.New_conn(app)
|
||||
|
@ -17,10 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*;
|
||||
public class Xocfg_itm_row {
|
||||
public Xocfg_itm_row(int id, int scope_id, int db_type, int gui_type, String gui_args, String key, String dflt) {
|
||||
public Xocfg_itm_row(int id, int scope_id, String data_type, int gui_type, String gui_args, String key, String dflt) {
|
||||
this.id = id;
|
||||
this.scope_id = scope_id;
|
||||
this.db_type = db_type;
|
||||
this.data_type = data_type;
|
||||
this.gui_type = gui_type;
|
||||
this.gui_args = gui_args;
|
||||
this.key = key;
|
||||
@ -28,7 +28,7 @@ public class Xocfg_itm_row {
|
||||
}
|
||||
public int Id() {return id;} private final int id;
|
||||
public int Scope_id() {return scope_id;} private final int scope_id;
|
||||
public int Db_type() {return db_type;} private final int db_type;
|
||||
public String Data_type() {return data_type;} private final String data_type;
|
||||
public int Gui_type() {return gui_type;} private final int gui_type;
|
||||
public String Gui_args() {return gui_args;} private final String gui_args;
|
||||
public String Key() {return key;} private final String key;
|
||||
|
@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.dbs.*; import gplx.dbs.utls.*;
|
||||
public class Xocfg_itm_tbl implements Db_tbl {
|
||||
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_db_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt;
|
||||
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_data_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt;
|
||||
private final Db_conn conn;
|
||||
public Xocfg_itm_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
@ -27,7 +27,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
|
||||
this.fld__itm_id = flds.Add_int_pkey("itm_id"); // EX: '2'
|
||||
this.fld__itm_key = flds.Add_str("itm_key", 255); // EX: 'cfg_1'
|
||||
this.fld__itm_scope_id = flds.Add_int("itm_scope_id"); // EX: '1'; ENUM: Xoitm_scope_tid
|
||||
this.fld__itm_db_type = flds.Add_int("itm_db_type"); // EX: '1'; ENUM: Type_adp_
|
||||
this.fld__itm_data_type = flds.Add_str("itm_data_type", 255); // EX: '1'; ENUM: Type_adp_
|
||||
this.fld__itm_gui_type = flds.Add_int("itm_gui_type"); // EX: '1'; ENUM: Xoitm_gui_tid
|
||||
this.fld__itm_gui_args = flds.Add_str("itm_gui_args", 255); // EX: '1,40' (numeric); '255' (textbox); 'enum_name' (combo); etc..
|
||||
this.fld__itm_dflt = flds.Add_str("itm_dflt", 4096); // EX: 'abc'
|
||||
@ -38,7 +38,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
|
||||
conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, fld__itm_key, fld__itm_key)));
|
||||
}
|
||||
public void Upsert(int itm_id, int scope_id, int db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) {
|
||||
public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) {
|
||||
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, itm_dflt);
|
||||
}
|
||||
public Xocfg_itm_row Select_by_key_or_null(String key) {
|
||||
@ -50,7 +50,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
|
||||
return new Xocfg_itm_row
|
||||
( rdr.Read_int(fld__itm_id)
|
||||
, rdr.Read_int(fld__itm_scope_id)
|
||||
, rdr.Read_int(fld__itm_db_type)
|
||||
, rdr.Read_str(fld__itm_data_type)
|
||||
, rdr.Read_int(fld__itm_gui_type)
|
||||
, rdr.Read_str(fld__itm_gui_args)
|
||||
, rdr.Read_str(fld__itm_key)
|
||||
|
@ -47,6 +47,8 @@ public class Xoitm_gui_tid { // SERIALIZED
|
||||
return Xoitm_gui_tid.Str__checkbox;
|
||||
else if (String_.Eq(db_type, "memo"))
|
||||
return Xoitm_gui_tid.Str__memo;
|
||||
else if (String_.Has_at_bgn(db_type, "list:"))
|
||||
return Xoitm_gui_tid.Str__select;
|
||||
else
|
||||
return Xoitm_gui_tid.Str__textbox;
|
||||
}
|
||||
|
@ -19,32 +19,22 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp
|
||||
import gplx.langs.mustaches.*;
|
||||
import gplx.core.gfobjs.*;
|
||||
public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm {
|
||||
public Xoedit_grp(int id, int sort, String key) {
|
||||
private String lang, name, help;
|
||||
public Xoedit_grp(int id, String key, int sort) {
|
||||
this.id = id;
|
||||
this.sort = sort;
|
||||
this.key = key;
|
||||
this.sort = sort;
|
||||
}
|
||||
public int Id() {return id;} private final int id;
|
||||
public int Sort() {return sort;} private final int sort;
|
||||
|
||||
public String Key() {return key;} private String key;
|
||||
|
||||
public String Lang() {return lang;} private String lang;
|
||||
public String Name() {return name;} private String name;
|
||||
public String Help() {return help;} private String help;
|
||||
|
||||
public int Id() {return id;} private final int id;
|
||||
public String Key() {return key;} private final String key;
|
||||
public int Sort() {return sort;} private final int sort;
|
||||
public Xoedit_itm[] Itms() {return itms;} private Xoedit_itm[] itms = new Xoedit_itm[0];
|
||||
public void Itms_(Xoedit_itm[] v) {this.itms = v;}
|
||||
public void Load_by_i18n(String lang, String name, String help) {
|
||||
this.lang = lang;
|
||||
this.name = name;
|
||||
this.help = help;
|
||||
}
|
||||
|
||||
public void Grps__add(Xoedit_grp grp) {
|
||||
}
|
||||
public void Itms_(Xoedit_itm[] v) {
|
||||
this.itms = v;
|
||||
}
|
||||
public Gfobj_nde To_nde() {
|
||||
Gfobj_nde rv = Gfobj_nde.New();
|
||||
rv.Add_int("id", id);
|
||||
|
@ -18,34 +18,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
|
||||
import gplx.langs.mustaches.*;
|
||||
import gplx.core.gfobjs.*; import gplx.langs.jsons.*;
|
||||
import gplx.xowa.addons.apps.cfgs.types.*;
|
||||
public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
|
||||
public Xoedit_itm(int id, int sort, String key) {
|
||||
private int gui_type;
|
||||
private boolean edited;
|
||||
private String data_type, gui_args, dflt, lang, name, help, ctx, val, date;
|
||||
private Xocfg_type_mgr type_mgr;
|
||||
public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) {
|
||||
this.type_mgr = type_mgr;
|
||||
this.id = id;
|
||||
this.sort = sort;
|
||||
this.key = key;
|
||||
this.sort = sort;
|
||||
}
|
||||
public int Id() {return id;} private final int id;
|
||||
public int Sort() {return sort;} private final int sort;
|
||||
|
||||
public int Scope_id() {return scope_id;} private int scope_id;
|
||||
public int Gui_type() {return gui_type;} private int gui_type;
|
||||
public String Gui_args() {return gui_args;} private String gui_args;
|
||||
public String Key() {return key;} private String key;
|
||||
public String Dflt() {return dflt;} private String dflt;
|
||||
public boolean Edited() {return edited;} private boolean edited;
|
||||
|
||||
public String Lang() {return lang;} private String lang;
|
||||
public String Name() {return name;} private String name;
|
||||
public String Help() {return help;} private String help;
|
||||
|
||||
public String Ctx() {return ctx;} private String ctx;
|
||||
public String Val() {return val;} private String val;
|
||||
public String Date() {return date;} private String date;
|
||||
public void Load_by_meta(String key, int scope_id, int gui_type, String gui_args, String dflt) {
|
||||
this.scope_id = scope_id;
|
||||
public int Id() {return id;} private final int id;
|
||||
public String Key() {return key;} private final String key;
|
||||
public int Sort() {return sort;} private final int sort;
|
||||
public void Load_by_meta(int scope_id, String data_type, int gui_type, String gui_args, String dflt) {
|
||||
this.data_type = data_type;
|
||||
this.gui_type = gui_type;
|
||||
this.gui_args = gui_args;
|
||||
this.key = key;
|
||||
this.dflt = dflt;
|
||||
}
|
||||
public void Load_by_i18n(String lang, String name, String help) {
|
||||
@ -77,12 +68,12 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
|
||||
rv.Add_str("val", val);
|
||||
rv.Add_str("date", date);
|
||||
Bry_bfr bfr = Bry_bfr_.New();
|
||||
To_html(bfr);
|
||||
To_html(bfr, type_mgr);
|
||||
rv.Add_str("html", bfr.To_str_and_clear());
|
||||
return rv;
|
||||
}
|
||||
private void To_html(Bry_bfr bfr) {
|
||||
new Xoedit_itm_html().Build_html(bfr, key, name, gui_type, gui_args, val);
|
||||
private void To_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr) {
|
||||
new Xoedit_itm_html().Build_html(bfr, type_mgr, key, name, data_type, gui_type, gui_args, val);
|
||||
}
|
||||
public boolean Mustache__write(String k, Mustache_bfr bfr) {
|
||||
if (String_.Eq(k, "id")) bfr.Add_int(id);
|
||||
@ -94,7 +85,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
|
||||
else if (String_.Eq(k, "ctx")) bfr.Add_str_u8(ctx);
|
||||
else if (String_.Eq(k, "val")) bfr.Add_str_u8(val);
|
||||
else if (String_.Eq(k, "date")) bfr.Add_str_u8(date);
|
||||
else if (String_.Eq(k, "html")) To_html(bfr.Bfr());
|
||||
else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr);
|
||||
return true;
|
||||
}
|
||||
public static String Ctx__app = "app";
|
||||
|
@ -17,8 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
|
||||
import gplx.xowa.addons.apps.cfgs.enums.*;
|
||||
import gplx.xowa.addons.apps.cfgs.types.*;
|
||||
public class Xoedit_itm_html {
|
||||
public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) {
|
||||
public void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, int gui_type, String gui_args, String data) {
|
||||
switch (gui_type) {
|
||||
case Xoitm_gui_tid.Tid__checkbox:
|
||||
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"checkbox\" accesskey=\"d\" class=\"xocfg_checkbox\"{1}></input>", key, String_.Eq(data, "y") ? " checked=\"checked\"" : "");
|
||||
@ -33,15 +34,21 @@ public class Xoedit_itm_html {
|
||||
bfr.Add_str_u8_fmt("<textarea id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_memo\">{1}</textarea>", key, data);
|
||||
break;
|
||||
case Xoitm_gui_tid.Tid__select:
|
||||
bfr.Add_str_u8_fmt("<select id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_select\" size=\"3\">", key);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", i, i, i == 2 ? " selected=\"selected\"" : "");
|
||||
Keyval[] kvs_ary = type_mgr.Lists__get(data_type);
|
||||
int len = kvs_ary.length;
|
||||
bfr.Add_str_u8_fmt("<select id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_select\" size=\"{1}\">", key, len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
Keyval kv = kvs_ary[i];
|
||||
String kv_val = kv.Val_to_str_or_null();
|
||||
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", kv.Key(), kv_val, String_.Eq(data, kv_val) ? " selected=\"selected\"" : "");
|
||||
}
|
||||
bfr.Add_str_u8_fmt("</select>");
|
||||
break;
|
||||
case Xoitm_gui_tid.Tid__fs_file:
|
||||
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_fs_file\" value=\"{1}\"></input>", key, data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,13 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
|
||||
import gplx.dbs.*;
|
||||
import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*;
|
||||
import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*;
|
||||
import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; import gplx.xowa.addons.apps.cfgs.types.*;
|
||||
public class Xocfg_edit_loader {
|
||||
private final Xocfg_db_app db_app;
|
||||
private final Xocfg_db_usr db_usr;
|
||||
public Xocfg_edit_loader(Xocfg_db_app db_app, Xocfg_db_usr db_usr) {
|
||||
private final Xocfg_type_mgr type_mgr;
|
||||
public Xocfg_edit_loader(Xocfg_db_app db_app, Xocfg_db_usr db_usr, Xocfg_type_mgr type_mgr) {
|
||||
this.db_app = db_app;
|
||||
this.db_usr = db_usr;
|
||||
this.type_mgr = type_mgr;
|
||||
}
|
||||
public Xoedit_root Load_root(String grp_key, String ctx, String lang) {
|
||||
// create lists
|
||||
@ -35,7 +37,7 @@ public class Xocfg_edit_loader {
|
||||
// get root_itm
|
||||
Xocfg_grp_row grp_meta = db_app.Tbl__grp().Select_by_key_or_null(grp_key);
|
||||
if (grp_meta == null) throw Err_.new_wo_type("cfg:grp not found", "grp", grp_key);
|
||||
Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), 0, grp_meta.Key());
|
||||
Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), grp_meta.Key(), 0);
|
||||
grp_temp.Add(grp_meta.Id(), owner);
|
||||
grp_list.Add(owner);
|
||||
|
||||
@ -83,11 +85,11 @@ public class Xocfg_edit_loader {
|
||||
sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||
( "SELECT m.map_trg"
|
||||
, ", m.map_sort"
|
||||
, ", n.nde_name"
|
||||
, ", t.grp_key"
|
||||
, ", t.nde_name"
|
||||
, ", g.grp_key"
|
||||
, "FROM cfg_map m"
|
||||
, " LEFT JOIN cfg_grp t ON m.map_trg = t.grp_id"
|
||||
, " LEFT JOIN cfg_txt n ON m.map_trg = n.nde_id"
|
||||
, " LEFT JOIN cfg_grp g ON m.map_trg = g.grp_id"
|
||||
, " LEFT JOIN cfg_txt t ON m.map_trg = t.nde_id"
|
||||
, "WHERE m.map_src = {0}"
|
||||
, "ORDER BY m.map_sort"
|
||||
), owner_id
|
||||
@ -124,14 +126,13 @@ public class Xocfg_edit_loader {
|
||||
String grp_key = rdr.Read_str("key");
|
||||
// nde is grp
|
||||
if (rdr.Read_str("itm_dflt") == null) {
|
||||
Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key);
|
||||
owner.Grps__add(gui_grp);
|
||||
Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), grp_key, rdr.Read_int("map_sort"));
|
||||
grp_list.Add(gui_grp);
|
||||
grp_temp.Add(gui_grp.Id(), gui_grp);
|
||||
}
|
||||
// nde is itm
|
||||
else {
|
||||
Xoedit_itm gui_itm = new Xoedit_itm(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key);
|
||||
Xoedit_itm gui_itm = new Xoedit_itm(type_mgr, rdr.Read_int("map_trg"), grp_key, rdr.Read_int("map_sort"));
|
||||
itms_list.Add(gui_itm);
|
||||
itm_list.Add(gui_itm);
|
||||
}
|
||||
@ -142,21 +143,22 @@ public class Xocfg_edit_loader {
|
||||
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list);
|
||||
while (iter.Move_next()) {
|
||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||
( "SELECT t.itm_id"
|
||||
, ", t.itm_key"
|
||||
, ", t.itm_scope_id"
|
||||
, ", t.itm_gui_type"
|
||||
, ", t.itm_gui_args"
|
||||
, ", t.itm_dflt"
|
||||
, "FROM cfg_itm t"
|
||||
, "WHERE t.itm_key IN ({0})"
|
||||
( "SELECT i.itm_id"
|
||||
, ", i.itm_key"
|
||||
, ", i.itm_scope_id"
|
||||
, ", i.itm_data_type"
|
||||
, ", i.itm_gui_type"
|
||||
, ", i.itm_gui_args"
|
||||
, ", i.itm_dflt"
|
||||
, "FROM cfg_itm i"
|
||||
, "WHERE i.itm_key IN ({0})"
|
||||
), iter.To_sql_in_key()
|
||||
);
|
||||
|
||||
Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto();
|
||||
while (rdr.Move_next()) {
|
||||
Xoedit_itm gui_itm = (Xoedit_itm)itm_list.Get_by_or_fail(rdr.Read_str("itm_key"));
|
||||
gui_itm.Load_by_meta(rdr.Read_str("itm_key"), rdr.Read_int("itm_scope_id"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_dflt"));
|
||||
Xoedit_itm edit_itm = (Xoedit_itm)itm_list.Get_by_or_fail(rdr.Read_str("itm_key"));
|
||||
edit_itm.Load_by_meta(rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_dflt"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -171,13 +173,13 @@ public class Xocfg_edit_loader {
|
||||
while (cur_iter.Move_next()) {
|
||||
// get all data by ids and ctx
|
||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||
( "SELECT d.itm_key"
|
||||
, ", d.itm_ctx"
|
||||
, ", d.itm_val"
|
||||
, ", d.itm_date"
|
||||
, "FROM cfg_val d"
|
||||
, "WHERE d.itm_key IN ({0})"
|
||||
, "AND d.itm_ctx = '{1}'"
|
||||
( "SELECT v.itm_key"
|
||||
, ", v.itm_ctx"
|
||||
, ", v.itm_val"
|
||||
, ", v.itm_date"
|
||||
, "FROM cfg_val v"
|
||||
, "WHERE v.itm_key IN ({0})"
|
||||
, "AND v.itm_ctx = '{1}'"
|
||||
), cur_iter.To_sql_in_key(), ctxs[i]
|
||||
);
|
||||
|
||||
@ -210,13 +212,13 @@ public class Xocfg_edit_loader {
|
||||
while (cur_iter.Move_next()) {
|
||||
// get all i18n for itms and lang
|
||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||
( "SELECT h.nde_id"
|
||||
, ", h.nde_name"
|
||||
, ", h.nde_help"
|
||||
, ", h.nde_lang"
|
||||
, "FROM cfg_txt h"
|
||||
, "WHERE h.nde_id IN ({0})"
|
||||
, "AND h.nde_lang = '{1}'"
|
||||
( "SELECT t.nde_id"
|
||||
, ", t.nde_name"
|
||||
, ", t.nde_help"
|
||||
, ", t.nde_lang"
|
||||
, "FROM cfg_txt t"
|
||||
, "WHERE t.nde_id IN ({0})"
|
||||
, "AND t.nde_lang = '{1}'"
|
||||
), cur_iter.To_sql_in()
|
||||
, langs[i]
|
||||
);
|
||||
@ -234,6 +236,6 @@ public class Xocfg_edit_loader {
|
||||
}
|
||||
public static Xocfg_edit_loader New(Xoa_app app) {
|
||||
Xocfg_db_app db_app = Xocfg_db_app.New(app);
|
||||
return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn()));
|
||||
return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn()), app.Cfg().Type_mgr());
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ class Xocfg_maint_html extends Xow_special_wtr__base {
|
||||
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "cfg", "maint");}
|
||||
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xo.cfg_maint.mustache.html");}
|
||||
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
|
||||
return new Xoedit_grp(0, 1, "test");
|
||||
return new Xoedit_grp(0, "test", 1);
|
||||
}
|
||||
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
|
||||
Xopg_tag_mgr head_tags = page_data.Head_tags();
|
||||
|
@ -43,7 +43,7 @@ class Xocfg_maint_parser {
|
||||
return new Xocfg_maint_grp(key, owner, name, help);
|
||||
}
|
||||
else if (String_.Eq(nde_type, "itm")) {
|
||||
String scope = Get_atr_as_str_or_fail(hash, "scope_");
|
||||
String scope = Get_atr_as_str_or(hash, "scope_", ""); if (String_.Eq(scope, "")) scope = "wiki";
|
||||
String db_type = Get_atr_as_str_or_fail(hash, "db_type_");
|
||||
String dflt = Get_atr_as_str_or_fail(hash, "dflt_");
|
||||
String gui_type = Get_atr_as_str_or(hash, "gui_type_", null);
|
||||
|
@ -34,6 +34,7 @@ public class Xocfg_maint_svc {
|
||||
|
||||
// exec
|
||||
Xocfg_db_app db_app = Xocfg_db_app.New(app);
|
||||
db_app.Conn().Txn_bgn("xo__cfg_maint__upsert");
|
||||
for (Xocfg_maint_nde nde : ndes) {
|
||||
if (nde.Type_is_grp()) {
|
||||
Xocfg_maint_svc.Create_grp(db_app, nde.Key(), nde.Owner(), nde.Name(), nde.Help());
|
||||
@ -44,6 +45,7 @@ public class Xocfg_maint_svc {
|
||||
Xocfg_maint_svc.Create_itm(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args());
|
||||
}
|
||||
}
|
||||
db_app.Conn().Txn_end();
|
||||
}
|
||||
public static void Create_grp(Xocfg_db_app db_app, String key, String owner, String name, String help) {
|
||||
// insert grp_meta
|
||||
@ -63,9 +65,8 @@ public class Xocfg_maint_svc {
|
||||
int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner);
|
||||
int itm_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id");
|
||||
int scope_id = Xoitm_scope_tid.To_int(scope);
|
||||
int db_type_id = Xoitm_db_tid.To_int(db_type);
|
||||
int gui_type_id = Xoitm_gui_tid.To_tid(gui_type);
|
||||
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type_id, gui_type_id, gui_args, key, dflt);
|
||||
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt);
|
||||
|
||||
// insert grp_map
|
||||
int itm_sort = db_app.Tbl__map().Select_next_sort(grp_id);
|
||||
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.apps.cfgs.types; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
|
||||
public class Xocfg_type_mgr {
|
||||
private final Ordered_hash list_hash = Ordered_hash_.New();
|
||||
public Xocfg_type_mgr() {
|
||||
this.Lists__add("list:Xo_load_html_type", Keyval_.new_("mem"), Keyval_.new_("url"));
|
||||
}
|
||||
public void Lists__add(String key, Keyval... itms) {
|
||||
list_hash.Add(key, itms);
|
||||
}
|
||||
public Keyval[] Lists__get(String key) {
|
||||
return (Keyval[])list_hash.Get_by_or_fail(key);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user