mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Personal_wikis: Add working implementation of wiki import
This commit is contained in:
parent
00ab87b1b5
commit
632fad62ae
@ -26,9 +26,10 @@ public class Db_cfg_hash {
|
|||||||
return rv == null ? Db_cfg_itm.Empty : rv;
|
return rv == null ? Db_cfg_itm.Empty : rv;
|
||||||
}
|
}
|
||||||
public void Set(String key, String val) {hash.Del(key); Add(key, val);}
|
public void Set(String key, String val) {hash.Del(key); Add(key, val);}
|
||||||
|
public void Add(Db_cfg_itm itm) {hash.Add(itm.Key(), itm);}
|
||||||
public void Add(String key, String val) {
|
public void Add(String key, String val) {
|
||||||
if (hash.Has(key)) throw Err_.new_wo_type("itm exists", "grp", grp, "key", key);
|
if (hash.Has(key)) throw Err_.new_wo_type("itm exists", "grp", grp, "key", key);
|
||||||
Db_cfg_itm itm = new Db_cfg_itm(grp, key, val);
|
Db_cfg_itm itm = new Db_cfg_itm(grp, key, val);
|
||||||
hash.Add(key, itm);
|
Add(itm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ public class Xocfg_type_mgr {
|
|||||||
this.Lists__add("list:xowa.app.startup.window.mode", "previous", "maximized", "absolute", "relative", "default");
|
this.Lists__add("list:xowa.app.startup.window.mode", "previous", "maximized", "absolute", "relative", "default");
|
||||||
this.Lists__add("list:xowa.app.startup.pages.type", "blank", "xowa", "previous", "custom");
|
this.Lists__add("list:xowa.app.startup.pages.type", "blank", "xowa", "previous", "custom");
|
||||||
this.Lists__add("list:xowa.gui.html_box.page_load_mode", "mem", "url");
|
this.Lists__add("list:xowa.gui.html_box.page_load_mode", "mem", "url");
|
||||||
this.Lists__add("list:xowa.gui.html_box.adj_type", "none", "relative", "absolute");
|
|
||||||
this.Lists__add("list:xowa.html.portal.missing_class", Keyval_.new_("", "Show as blue link"), Keyval_.new_("new", "Show as red link"), Keyval_.new_("xowa_display_none", "Hide"));
|
this.Lists__add("list:xowa.html.portal.missing_class", Keyval_.new_("", "Show as blue link"), Keyval_.new_("new", "Show as red link"), Keyval_.new_("xowa_display_none", "Hide"));
|
||||||
this.Lists__add("list:xowa.html.tidy.engine", "tidy", "jtidy");
|
this.Lists__add("list:xowa.html.tidy.engine", "tidy", "jtidy");
|
||||||
this.Lists__add("list:xowa.bldr.db.zip_mode", Keyval_.new_("raw", "text"), Keyval_.new_("gzip"), Keyval_.new_("bzip2"), Keyval_.new_("xz"));
|
this.Lists__add("list:xowa.bldr.db.zip_mode", Keyval_.new_("raw", "text"), Keyval_.new_("gzip"), Keyval_.new_("bzip2"), Keyval_.new_("xz"));
|
||||||
|
@ -31,6 +31,7 @@ public class Xowdir_addon implements Xoax_addon_itm, Xoax_addon_itm__special, Xo
|
|||||||
public Bridge_cmd_itm[] Json_cmds() {
|
public Bridge_cmd_itm[] Json_cmds() {
|
||||||
return new Bridge_cmd_itm[]
|
return new Bridge_cmd_itm[]
|
||||||
{ Xowdir_item_bridge.Prototype
|
{ Xowdir_item_bridge.Prototype
|
||||||
|
, Xowdir_list_bridge.Prototype
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
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.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*;
|
||||||
|
import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.sys.*;
|
||||||
|
import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*;
|
||||||
|
import gplx.langs.jsons.*;
|
||||||
|
public class Xowdir_db_utl {
|
||||||
|
private static final String Grp__personal = "xowa.personal_wikis", Key__personal__wiki_json = "xowa.personal_wikis.wiki_json";
|
||||||
|
public static void Wiki_json__upsert(Xowe_wiki wiki, String wiki_json) {
|
||||||
|
wiki.Data__core_mgr().Db__core().Tbl__cfg().Upsert_str(Grp__personal, Key__personal__wiki_json, wiki_json);
|
||||||
|
}
|
||||||
|
public static void Wiki_json__verify(Xoae_app app, byte[] domain_bry, Io_url core_db_url, Db_conn core_db_conn) {
|
||||||
|
String domain_str = String_.new_u8(domain_bry);
|
||||||
|
boolean dirty = false;
|
||||||
|
|
||||||
|
// get wiki_json from core_db.xowa_cfg
|
||||||
|
Db_cfg_tbl core_cfg_tbl = new Db_cfg_tbl(core_db_conn, Xowd_cfg_tbl_.Tbl_name);
|
||||||
|
String wiki_cfg_str = core_cfg_tbl.Select_str_or(Grp__personal, Key__personal__wiki_json, null);
|
||||||
|
|
||||||
|
// not in core_db; check user_db.user_wiki
|
||||||
|
Xowdir_wiki_json wiki_json_itm = null;
|
||||||
|
if (wiki_cfg_str == null) {
|
||||||
|
Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json not found in core_db; url=~{0}", core_db_url);
|
||||||
|
dirty = true;
|
||||||
|
Xowdir_db_mgr user_db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn());
|
||||||
|
Xowdir_wiki_itm user_wiki_row = user_db_mgr.Tbl__wiki().Select_by_key_or_null(domain_str);
|
||||||
|
if (user_wiki_row != null) {
|
||||||
|
wiki_json_itm = user_wiki_row.Json();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wiki_json_itm = Xowdir_wiki_json.New_by_json(new Json_parser(), wiki_cfg_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
// not in core_db or user_db; infer
|
||||||
|
if (wiki_json_itm == null) {
|
||||||
|
Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json not found in core_db or user_db; url=~{0}", core_db_url);
|
||||||
|
dirty = true;
|
||||||
|
wiki_json_itm = Wiki_json__infer(core_db_url, core_cfg_tbl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check domain exists
|
||||||
|
if (String_.Eq(wiki_json_itm.Domain(), String_.Empty)) {
|
||||||
|
Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json does not have domain; url=~{0}", core_db_url);
|
||||||
|
dirty = true;
|
||||||
|
wiki_json_itm.Domain_(core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__domain, core_db_url.NameOnly()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// something changed; save it
|
||||||
|
if (dirty) {
|
||||||
|
Xowdir_db_mgr user_db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn());
|
||||||
|
Xowdir_wiki_itm user_wiki_row = user_db_mgr.Tbl__wiki().Select_by_key_or_null(domain_str);
|
||||||
|
|
||||||
|
String wiki_json_str = wiki_json_itm.To_str(new gplx.langs.jsons.Json_wtr());
|
||||||
|
core_cfg_tbl.Update_str(Grp__personal, Key__personal__wiki_json, wiki_json_str);
|
||||||
|
user_db_mgr.Tbl__wiki().Upsert(user_wiki_row.Id(), user_wiki_row.Domain(), user_wiki_row.Url(), wiki_json_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static Xowdir_wiki_json Wiki_json__get_or_create(Io_url core_db_url, Db_conn core_db_conn) {
|
||||||
|
Xowdir_wiki_json rv = null;
|
||||||
|
|
||||||
|
Db_cfg_tbl core_cfg_tbl = new Db_cfg_tbl(core_db_conn, Xowd_cfg_tbl_.Tbl_name);
|
||||||
|
String wiki_cfg_str = core_cfg_tbl.Select_str_or(Grp__personal, Key__personal__wiki_json, null);
|
||||||
|
|
||||||
|
if (wiki_cfg_str == null) {
|
||||||
|
rv = Wiki_json__infer(core_db_url, core_cfg_tbl);
|
||||||
|
core_cfg_tbl.Insert_str(Grp__personal, Key__personal__wiki_json, rv.To_str(new gplx.langs.jsons.Json_wtr()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rv = Xowdir_wiki_json.New_by_json(new gplx.langs.jsons.Json_parser(), wiki_cfg_str);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
private static Xowdir_wiki_json Wiki_json__infer(Io_url core_db_url, Db_cfg_tbl core_cfg_tbl) {
|
||||||
|
String domain = core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__domain, core_db_url.NameOnly());
|
||||||
|
String main_page = core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, Xoa_page_.Main_page_str);
|
||||||
|
return new Xowdir_wiki_json(domain, domain, main_page);
|
||||||
|
}
|
||||||
|
public static int Wiki_id__next(Xoa_app app) {
|
||||||
|
Db_sys_mgr sys_mgr = new Db_sys_mgr(app.User().User_db_mgr().Conn());
|
||||||
|
return sys_mgr.Autonum_next("user.wikis.id");
|
||||||
|
}
|
||||||
|
}
|
@ -18,16 +18,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*;
|
package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*;
|
||||||
import gplx.langs.jsons.*;
|
import gplx.langs.jsons.*;
|
||||||
public class Xowdir_wiki_json {
|
public class Xowdir_wiki_json {
|
||||||
public Xowdir_wiki_json(String name, String mainpage) {
|
public Xowdir_wiki_json(String domain, String name, String mainpage) {
|
||||||
|
this.domain = domain;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.mainpage = mainpage;
|
this.mainpage = mainpage;
|
||||||
}
|
}
|
||||||
|
public String Domain() {return domain;} private String domain; public void Domain_(String v) {domain = v;}
|
||||||
public String Name() {return name;} private String name; public void Name_(String v) {name = v;}
|
public String Name() {return name;} private String name; public void Name_(String v) {name = v;}
|
||||||
public String Mainpage() {return mainpage;} private String mainpage; public void Mainpage_(String v) {mainpage = v;}
|
public String Mainpage() {return mainpage;} private String mainpage; public void Mainpage_(String v) {mainpage = v;}
|
||||||
public String To_str(Json_wtr wtr) {
|
public String To_str(Json_wtr wtr) {
|
||||||
wtr.Doc_nde_bgn();
|
wtr.Doc_nde_bgn();
|
||||||
|
|
||||||
wtr.Nde_bgn("core");
|
wtr.Nde_bgn("core");
|
||||||
|
wtr.Kv_str("domain", domain);
|
||||||
wtr.Kv_str("name", name);
|
wtr.Kv_str("name", name);
|
||||||
wtr.Kv_str("mainpage", mainpage);
|
wtr.Kv_str("mainpage", mainpage);
|
||||||
wtr.Nde_end();
|
wtr.Nde_end();
|
||||||
@ -38,11 +41,12 @@ public class Xowdir_wiki_json {
|
|||||||
|
|
||||||
public static Xowdir_wiki_json New_by_json(Json_parser json_parser, String json) {
|
public static Xowdir_wiki_json New_by_json(Json_parser json_parser, String json) {
|
||||||
Json_doc jdoc = json_parser.Parse(json);
|
Json_doc jdoc = json_parser.Parse(json);
|
||||||
|
String domain = jdoc.Get_val_as_str_or(Bry_.Ary("core", "domain"), "");
|
||||||
String name = jdoc.Get_val_as_str_or(Bry_.Ary("core", "name"), "");
|
String name = jdoc.Get_val_as_str_or(Bry_.Ary("core", "name"), "");
|
||||||
String mainpage = jdoc.Get_val_as_str_or(Bry_.Ary("core", "mainpage"), "");
|
String mainpage = jdoc.Get_val_as_str_or(Bry_.Ary("core", "mainpage"), "");
|
||||||
return new Xowdir_wiki_json(name, mainpage);
|
return new Xowdir_wiki_json(domain, name, mainpage);
|
||||||
}
|
}
|
||||||
public static Xowdir_wiki_json New_dflt() {
|
public static Xowdir_wiki_json New_empty() {
|
||||||
return new Xowdir_wiki_json("", "Main_Page");
|
return new Xowdir_wiki_json("", "", "Main_Page");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ class Xowdir_item_html extends Xow_special_wtr__base {
|
|||||||
Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(conn);
|
Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(conn);
|
||||||
Xowdir_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(domain);
|
Xowdir_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(domain);
|
||||||
if (itm == null)
|
if (itm == null)
|
||||||
itm = new Xowdir_wiki_itm(-1, "", Io_url_.Empty, Xowdir_wiki_json.New_dflt());
|
itm = new Xowdir_wiki_itm(-1, "", Io_url_.Empty, Xowdir_wiki_json.New_empty());
|
||||||
return Xowdir_item_doc.New(itm);
|
return Xowdir_item_doc.New(itm);
|
||||||
}
|
}
|
||||||
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
|
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
|
||||||
|
@ -33,8 +33,7 @@ class Xowdir_item_mgr {
|
|||||||
// get next id if none provided
|
// get next id if none provided
|
||||||
if (id == -1) {
|
if (id == -1) {
|
||||||
itm_is_new = true;
|
itm_is_new = true;
|
||||||
Db_sys_mgr sys_mgr = new Db_sys_mgr(app.User().User_db_mgr().Conn());
|
id = Xowdir_db_utl.Wiki_id__next(app);
|
||||||
id = sys_mgr.Autonum_next("user.wikis.id");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn());
|
Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn());
|
||||||
@ -51,10 +50,12 @@ class Xowdir_item_mgr {
|
|||||||
|
|
||||||
// upsert into user_db.wiki_list
|
// upsert into user_db.wiki_list
|
||||||
Io_url fil_url = dir_url.GenSubFil(domain + ".xowa");
|
Io_url fil_url = dir_url.GenSubFil(domain + ".xowa");
|
||||||
Xowdir_wiki_json json = Xowdir_wiki_json.New_dflt();
|
Xowdir_wiki_json json = Xowdir_wiki_json.New_empty();
|
||||||
|
json.Domain_(domain);
|
||||||
json.Name_(name);
|
json.Name_(name);
|
||||||
json.Mainpage_(mainpage_name);
|
json.Mainpage_(mainpage_name);
|
||||||
db_mgr.Tbl__wiki().Upsert(id, domain, fil_url, json.To_str(json_wtr));
|
String wiki_json = json.To_str(json_wtr);
|
||||||
|
db_mgr.Tbl__wiki().Upsert(id, domain, fil_url, wiki_json);
|
||||||
|
|
||||||
if (itm_is_new) {
|
if (itm_is_new) {
|
||||||
// create the actual wiki
|
// create the actual wiki
|
||||||
@ -62,7 +63,10 @@ class Xowdir_item_mgr {
|
|||||||
Xow_db_mkr.Create_wiki(new Xodb_wiki_data(domain, fil_url), Bry_.new_u8(mainpage_name), mainpage_text);
|
Xow_db_mkr.Create_wiki(new Xodb_wiki_data(domain, fil_url), Bry_.new_u8(mainpage_name), mainpage_text);
|
||||||
|
|
||||||
// load it
|
// load it
|
||||||
Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), dir_url);
|
Xowe_wiki wiki = Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), dir_url);
|
||||||
|
|
||||||
|
// upsert json into cfg for import
|
||||||
|
Xowdir_db_utl.Wiki_json__upsert(wiki, wiki_json);
|
||||||
|
|
||||||
// navigate to it
|
// navigate to it
|
||||||
app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/" + domain + "/wiki/" + mainpage_name);
|
app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/" + domain + "/wiki/" + mainpage_name);
|
||||||
|
@ -18,10 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*;
|
package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*;
|
||||||
import gplx.dbs.*; import gplx.dbs.cfgs.*;
|
import gplx.dbs.*; import gplx.dbs.cfgs.*;
|
||||||
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.addons.wikis.ctgs.dbs.*;
|
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.addons.wikis.ctgs.dbs.*;
|
||||||
|
import gplx.xowa.addons.wikis.directorys.dbs.*;
|
||||||
public class Xow_wiki_factory {
|
public class Xow_wiki_factory {
|
||||||
public static Xowe_wiki Load_personal(Xoae_app app, byte[] domain, Io_url dir_url) {
|
public static Xowe_wiki Load_personal(Xoae_app app, byte[] domain, Io_url dir_url) {
|
||||||
// upgrade db
|
// upgrade wiki directly at db
|
||||||
Upgrade_db(domain, dir_url);
|
Upgrade_wiki(app, domain, dir_url);
|
||||||
|
|
||||||
// create the wiki
|
// create the wiki
|
||||||
Xowe_wiki rv = new Xowe_wiki
|
Xowe_wiki rv = new Xowe_wiki
|
||||||
@ -48,7 +49,7 @@ public class Xow_wiki_factory {
|
|||||||
rv.Msg_mgr().Get_or_make(Bry_.new_a7("wikimedia-copyright")).Atrs_set(Bry_.Empty, false, false);
|
rv.Msg_mgr().Get_or_make(Bry_.new_a7("wikimedia-copyright")).Atrs_set(Bry_.Empty, false, false);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
private static void Upgrade_db(byte[] domain, Io_url dir_url) {
|
private static void Upgrade_wiki(Xoae_app app, byte[] domain, Io_url dir_url) {
|
||||||
// get conn
|
// get conn
|
||||||
Io_url core_db_url = gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(dir_url, String_.new_u8(domain));
|
Io_url core_db_url = gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(dir_url, String_.new_u8(domain));
|
||||||
if (core_db_url == null) {
|
if (core_db_url == null) {
|
||||||
@ -78,8 +79,7 @@ public class Xow_wiki_factory {
|
|||||||
Gfo_usr_dlg_.Instance.Warn_many("", "", "xo.personal:page.page_cat_db_id upgrade failed; err=~{0}", Err_.Message_gplx_log(e));
|
Gfo_usr_dlg_.Instance.Warn_many("", "", "xo.personal:page.page_cat_db_id upgrade failed; err=~{0}", Err_.Message_gplx_log(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
// cfg: add some settings
|
// verify json
|
||||||
// Db_cfg_tbl cfg_tbl = Xowd_cfg_tbl_.Get_or_fail(core_db_conn);
|
Xowdir_db_utl.Wiki_json__verify(app, domain, core_db_url, core_db_conn);
|
||||||
// Db_cfg_hash cfg_hash = cfg_tbl.Select_as_hash("xowa.wiki.settings");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
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.wikis.directorys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*;
|
||||||
|
import gplx.langs.jsons.*;
|
||||||
|
import gplx.xowa.addons.wikis.directorys.dbs.*;
|
||||||
|
import gplx.xowa.htmls.bridges.*;
|
||||||
|
public class Xowdir_list_bridge implements Bridge_cmd_itm {
|
||||||
|
private Xowdir_list_svc svc;
|
||||||
|
public void Init_by_app(Xoa_app app) {
|
||||||
|
this.svc = new Xowdir_list_svc(app);
|
||||||
|
}
|
||||||
|
public String Exec(Json_nde data) {
|
||||||
|
byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit);
|
||||||
|
Json_nde args = data.Get_kv(Bridge_cmd_mgr.Msg__args).Val_as_nde();
|
||||||
|
switch (proc_id) {
|
||||||
|
case Proc__import_wiki: svc.Import_wiki(args); break;
|
||||||
|
default: throw Err_.new_unhandled_default(proc_id);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final byte Proc__import_wiki = 0;
|
||||||
|
private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs()
|
||||||
|
.Add_str_byte("import_wiki" , Proc__import_wiki)
|
||||||
|
;
|
||||||
|
|
||||||
|
public byte[] Key() {return BRIDGE_KEY;} public static final byte[] BRIDGE_KEY = Bry_.new_a7("wiki.directory.list");
|
||||||
|
public static final Xowdir_list_bridge Prototype = new Xowdir_list_bridge(); Xowdir_list_bridge() {}
|
||||||
|
}
|
@ -33,6 +33,8 @@ class Xowdir_list_html extends Xow_special_wtr__base {
|
|||||||
Xopg_tag_wtr_.Add__xohelp (head_tags, app.Fsys_mgr().Http_root());
|
Xopg_tag_wtr_.Add__xohelp (head_tags, app.Fsys_mgr().Http_root());
|
||||||
Xopg_tag_wtr_.Add__xolog (head_tags, app.Fsys_mgr().Http_root());
|
Xopg_tag_wtr_.Add__xolog (head_tags, app.Fsys_mgr().Http_root());
|
||||||
Xopg_tag_wtr_.Add__xoajax (head_tags, app.Fsys_mgr().Http_root(), app);
|
Xopg_tag_wtr_.Add__xoajax (head_tags, app.Fsys_mgr().Http_root(), app);
|
||||||
|
Xopg_tag_wtr_.Add__jquery (head_tags, app.Fsys_mgr().Http_root());
|
||||||
|
Xopg_tag_wtr_.Add__xonotify (head_tags, app.Fsys_mgr().Http_root());
|
||||||
|
|
||||||
head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xowdir_list.css")));
|
head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xowdir_list.css")));
|
||||||
head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xowdir_list.js")));
|
head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xowdir_list.js")));
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
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.wikis.directorys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*;
|
||||||
|
import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.sys.*;
|
||||||
|
import gplx.langs.jsons.*;
|
||||||
|
import gplx.xowa.addons.wikis.directorys.dbs.*;
|
||||||
|
class Xowdir_list_svc {
|
||||||
|
private final Xoa_app app;
|
||||||
|
private gplx.xowa.guis.cbks.Xog_cbk_trg cbk_trg = gplx.xowa.guis.cbks.Xog_cbk_trg.New(Xowdir_list_special.Prototype.Special__meta().Ttl_bry());
|
||||||
|
public Xowdir_list_svc(Xoa_app app) {
|
||||||
|
this.app = app;
|
||||||
|
}
|
||||||
|
public void Import_wiki(Json_nde args) {Import_wiki(args.Get_as_str("url"));}
|
||||||
|
public void Import_wiki(String url) {
|
||||||
|
// verify it is sqlite
|
||||||
|
Io_url core_db_url = Io_url_.new_fil_(url);
|
||||||
|
Db_conn core_db_conn = Db_conn_bldr.Instance.Get_or_noop(core_db_url);
|
||||||
|
if (core_db_conn == Db_conn_.Noop) {
|
||||||
|
app.Gui__cbk_mgr().Send_notify(cbk_trg, "file is not a .xowa file: file=" + url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify it is a core_db
|
||||||
|
if (!core_db_conn.Meta_tbl_exists(gplx.xowa.wikis.data.tbls.Xowd_xowa_db_tbl.TBL_NAME)) {
|
||||||
|
app.Gui__cbk_mgr().Send_notify(cbk_trg, "file is not a .xowa file or missing xowa_db table: file=" + url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get wiki_json from core_db.cfg
|
||||||
|
Xowdir_wiki_json wiki_json = Xowdir_db_utl.Wiki_json__get_or_create(core_db_url, core_db_conn);
|
||||||
|
String domain = wiki_json.Domain();
|
||||||
|
String mainpage = wiki_json.Mainpage();
|
||||||
|
|
||||||
|
// if same domain exists; return
|
||||||
|
Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn());
|
||||||
|
if (db_mgr.Tbl__wiki().Select_by_key_or_null(domain) != null) {
|
||||||
|
app.Gui__cbk_mgr().Send_notify(cbk_trg, "wiki with same name already exists; domain=" + domain);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add it to user_wiki
|
||||||
|
int id = Xowdir_db_utl.Wiki_id__next(app);
|
||||||
|
db_mgr.Tbl__wiki().Upsert(id, domain, core_db_url, wiki_json.To_str(new Json_wtr()));
|
||||||
|
|
||||||
|
// add it to personal wikis
|
||||||
|
gplx.xowa.addons.wikis.directorys.specials.items.bldrs.Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), core_db_url.OwnerDir());
|
||||||
|
|
||||||
|
// navigate to it
|
||||||
|
app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/" + domain + "/wiki/" + mainpage);
|
||||||
|
}
|
||||||
|
}
|
@ -27,5 +27,6 @@ public class Xow_cfg_consts {
|
|||||||
, Key__init__main_page = "props.main_page"
|
, Key__init__main_page = "props.main_page"
|
||||||
, Key__init__bldr_version = "props.bldr_version"
|
, Key__init__bldr_version = "props.bldr_version"
|
||||||
, Key__init__modified_latest = "props.modified_latest"
|
, Key__init__modified_latest = "props.modified_latest"
|
||||||
|
, Key__init__domain = "props.domain"
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user