User_wiki: Add dirty implementation for creating user wiki

v3.3.4
gnosygnu 8 years ago
parent 2abefa1ab9
commit 2c023c2c54

@ -45,6 +45,7 @@ public class Db_stmt_arg_list {
case Dbmeta_fld_tid.Tid__float: stmt.Crt_float (key, Float_.cast(val)); break;
case Dbmeta_fld_tid.Tid__double: stmt.Crt_double (key, Double_.cast(val)); break;
case Dbmeta_fld_tid.Tid__str: stmt.Crt_str (key, String_.cast(val)); break;
case Dbmeta_fld_tid.Tid__text: stmt.Crt_text (key, String_.cast(val)); break;
case Dbmeta_fld_tid.Tid__bry: stmt.Crt_bry (key, Bry_.cast(val)); break;
default: throw Err_.new_unhandled_default(tid);
}
@ -58,6 +59,7 @@ public class Db_stmt_arg_list {
case Dbmeta_fld_tid.Tid__float: stmt.Val_float (key, Float_.cast(val)); break;
case Dbmeta_fld_tid.Tid__double: stmt.Val_double (key, Double_.cast(val)); break;
case Dbmeta_fld_tid.Tid__str: stmt.Val_str (key, String_.cast(val)); break;
case Dbmeta_fld_tid.Tid__text: stmt.Val_text (key, String_.cast(val)); break;
case Dbmeta_fld_tid.Tid__bry: stmt.Val_bry (key, Bry_.cast(val)); break;
default: throw Err_.new_unhandled_default(tid);
}

@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.dbs.utls; import gplx.*; import gplx.dbs.*;
import gplx.dbs.stmts.*;
public class Db_tbl__crud_ {
public static void Upsert(Db_conn conn, String tbl_name, Dbmeta_fld_list flds, String[] crt_cols, Object... objs) {
public static boolean Upsert(Db_conn conn, String tbl_name, Dbmeta_fld_list flds, String[] crt_cols, Object... objs) {
// init
int crt_cols_len = crt_cols.length;
String[] val_cols = Find_excepts(flds, crt_cols);
@ -38,6 +38,7 @@ public class Db_tbl__crud_ {
Add_arg(update_stmt, flds, val_cols, objs, Bool_.N, crt_cols_len);
update_stmt.Exec_update();
update_stmt.Rls();
return false;
}
// insert
else {
@ -46,6 +47,7 @@ public class Db_tbl__crud_ {
Add_arg(insert_stmt, flds, val_cols, objs, Bool_.N, crt_cols_len);
insert_stmt.Exec_insert();
insert_stmt.Rls();
return true;
}
}
private static String[] Find_excepts(Dbmeta_fld_list flds, String[] cols) {

@ -38,7 +38,7 @@ public class Fsdb_db_mgr__v2_bldr {
return new Fsdb_db_mgr__v2(layout, wiki_dir, main_core_file, user_core_file);
}
private static Fsdb_db_file Load_core_file(Io_url url) {return new Fsdb_db_file(url, Db_conn_bldr.Instance.Get(url));}
private static Fsdb_db_file Make_core_file_main(Xow_wiki wiki, Io_url main_core_url, String main_core_name, Xow_db_layout layout) {
public static Fsdb_db_file Make_core_file_main(Xow_wiki wiki, Io_url main_core_url, String main_core_name, Xow_db_layout layout) {
Db_conn conn = layout.Tid_is_all() ? Db_conn_bldr.Instance.Get(main_core_url) : Db_conn_bldr.Instance.New(main_core_url); // if all, use existing (assumes same file name); else, create new
conn.Txn_bgn("fsdb__core_file");
Fsdb_db_file rv = Make_core_file(main_core_url, conn, schema_is_1, Fsm_mnt_mgr.Mnt_idx_main);

@ -16,8 +16,21 @@ 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; import gplx.*;
import gplx.xowa.wikis.*;
import gplx.dbs.*;
import gplx.core.ios.streams.*;
import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.nss.*;
import gplx.xowa.bldrs.infos.*;
import gplx.xowa.langs.*;
public class Xow_wiki_ {
public static void Create(Xoa_app app, Xow_ns_mgr ns_mgr, String domain, Io_url core_url) {
Xowd_core_db_props props = new Xowd_core_db_props( 1, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Io_stream_tid_.Tid__raw, Io_stream_tid_.Tid__raw, Bool_.N, Bool_.N);
Xow_db_file core_db = Xow_db_file__core_.Make_core_db(props, Xob_info_session.new_(app.User().Key(), domain, domain), core_url, domain);
core_db.Tbl__text().Create_tbl();
core_db.Tbl__site_stats().Update(0, 0, 0); // save page stats
core_db.Tbl__ns().Insert(ns_mgr); // save ns
core_db.Tbl__cfg().Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, "Main_Page");
core_db.Tbl__cfg().Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__modified_latest, Datetime_now.Get().XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time));
}
public static void Create_sql_backend(Xow_wiki wiki, gplx.xowa.wikis.data.Xowd_core_db_props core_db_props, gplx.xowa.bldrs.infos.Xob_info_session session) {
if (wiki.Type_is_edit()) {
Xowe_wiki wikie = (Xowe_wiki)wiki;

@ -16,7 +16,7 @@ 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.users.wikis.regys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*;
import gplx.dbs.*;
import gplx.dbs.*; import gplx.dbs.utls.*;
public class Xou_wiki_tbl implements Db_tbl {
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
private final String fld__wiki_id, fld__wiki_type, fld__wiki_domain, fld__wiki_name, fld__wiki_data_date, fld__wiki_core_url, fld__wiki_data;
@ -28,8 +28,8 @@ public class Xou_wiki_tbl implements Db_tbl {
this.fld__wiki_type = flds.Add_int("wiki_type"); // enum: 0=user; 1=wmf; 2=wikia;
this.fld__wiki_domain = flds.Add_str("wiki_domain", 255); // EX: "en.wikipedia.org"
this.fld__wiki_name = flds.Add_str("wiki_name", 255); // EX: "English Wikipedia"
this.fld__wiki_data_date = flds.Add_str("wiki_data_date", 16); // EX: "20161001"
this.fld__wiki_core_url = flds.Add_str("wiki_core_url", 255); // EX: "/xowa/wiki/en.wikipedia.org/en.wikipedia.org-core.xowa"
this.fld__wiki_data_date = flds.Add_str("wiki_data_date", 16); // EX: "20161001"
this.fld__wiki_data = flds.Add_text("wiki_data"); // EX: '{category_level="1",search_level="2", ...}'
conn.Rls_reg(this);
}
@ -45,17 +45,8 @@ public class Xou_wiki_tbl implements Db_tbl {
.Exec_insert()
;
}
public void Upsert(int id, String key, String name, String file) {
if (id == -1) {
}
else {
conn.Stmt_update_exclude(tbl_name, flds, fld__wiki_id)
.Val_int(fld__wiki_type, 0).Val_str(fld__wiki_domain, key).Val_str(fld__wiki_name, name)
.Val_str(fld__wiki_data_date, "").Val_str(fld__wiki_core_url, file).Val_str(fld__wiki_data, "")
.Crt_int(fld__wiki_id, id)
.Exec_update()
;
}
public boolean Upsert(int id, String domain, String name, String file) {
return Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__wiki_id), id, 0, domain, name, file, "", "");
}
public Xou_wiki_itm[] Select_all() {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds).Exec_select__rls_auto();

@ -24,15 +24,34 @@ public class Xouw_itm_bridge implements gplx.xowa.htmls.bridges.Bridge_cmd_itm {
this.app = app;
}
public String Exec(Json_nde data) {
Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn());
byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Msg__proc, null), Byte_ascii.Max_7_bit);
Json_nde args = data.Get_kv(Msg__args).Val_as_nde();
switch (proc_id) {
case Proc__save: db_mgr.Tbl__wiki().Upsert(args.Get_as_int("id"), args.Get_as_str("key"), args.Get_as_str("name"), args.Get_as_str("file")); break;
case Proc__save: Save(args); break;
default: throw Err_.new_unhandled_default(proc_id);
}
return "";
}
private void Save(Json_nde args) {
Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn());
int id = args.Get_as_int("id");
if (id == -1) {
id = 2;
}
String domain = args.Get_as_str("key");
String url = args.Get_as_str("file");
if (db_mgr.Tbl__wiki().Upsert(id, domain, args.Get_as_str("name"), url)) {
gplx.xowa.wikis.nss.Xow_ns_mgr ns_mgr = gplx.xowa.wikis.nss.Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.U8());
Xow_wiki_.Create(app, ns_mgr, domain, Io_url_.new_fil_(url).OwnerDir());
Xowe_wiki wiki = new Xowe_wiki((Xoae_app)app, app.Lang_mgr().Get_by_or_en(Bry_.Empty), ns_mgr, gplx.xowa.wikis.domains.Xow_domain_itm_.parse(Bry_.new_u8(domain)), Io_url_.new_fil_(url).OwnerDir());
gplx.fsdb.Fsdb_db_mgr__v2_bldr.Make_core_file_main(wiki, Io_url_.new_fil_(url), domain, gplx.xowa.wikis.data.Xow_db_layout.Itm_all);
wiki.Init_db_mgr();
wiki.Init_by_wiki__force_and_mark_inited();
wiki.Data__core_mgr().Dbs__make_by_id(1, gplx.xowa.wikis.data.Xow_db_file_.Tid__core, "", 0, ".xowa");
wiki.Data__core_mgr().Db__core().Tbl__db().Commit_all(wiki.Data__core_mgr());
wiki.Db_mgr().Save_mgr().Data_create(Xoa_ttl.Parse(wiki, Bry_.new_a7("Main_Page")), Bry_.new_a7("Main page created"));
}
}
private static final byte[] Msg__proc = Bry_.new_a7("proc"), Msg__args = Bry_.new_a7("args");
private static final byte Proc__save = 0;
private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs()

@ -19,9 +19,11 @@ package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import
import gplx.core.ios.*;
import gplx.langs.mustaches.*;
class Xouw_itm_doc implements Mustache_doc_itm {
private final boolean mode_is_new;
private final int id;
private final String domain, name, file;
public Xouw_itm_doc(int id, String domain, String name, String file) {
this.mode_is_new = id == -1;
this.id = id;
this.domain = domain;
this.name = name;
@ -36,6 +38,7 @@ class Xouw_itm_doc implements Mustache_doc_itm {
return true;
}
public Mustache_doc_itm[] Mustache__subs(String key) {
if (String_.Eq(key, "mode_is_new")) return Mustache_doc_itm_.Ary__bool(mode_is_new);
return Mustache_doc_itm_.Ary__empty;
}
public static final Xouw_itm_doc[] Ary_empty = new Xouw_itm_doc[0];

@ -43,6 +43,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr {
}
Xow_db_mgr fsys_mgr = db_mgr.Core_data_mgr();
Xow_db_file page_text_db = fsys_mgr.Db__text();
if (page_text_db == null) page_text_db = fsys_mgr.Db__core(); // HACK: needed for create new wiki DATE:2016-10-29
Xowd_text_tbl page_text_tbl = page_text_db.Tbl__text();
byte[] text_zip = page_text_tbl.Zip(text_raw);
boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text_raw, text_raw.length);

Loading…
Cancel
Save