mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Personal_wikis: Add page delete; refactor category updates
This commit is contained in:
parent
b37b5ceddd
commit
12c78cf89f
@ -69,7 +69,7 @@ public class Xoax_addon_mgr {
|
||||
, new gplx.xowa.addons.bldrs.centrals .Xobc_task_addon()
|
||||
, new gplx.xowa.addons.apps.helps.logs .Xolog_addon()
|
||||
, new gplx.xowa.addons.wikis.pages.syncs .Xosync_addon()
|
||||
, new gplx.xowa.addons.wikis.directorys .Xowdir_addon()
|
||||
, new gplx.xowa.addons.wikis.directorys .Xowdir_addon()
|
||||
, new gplx.xowa.addons.apps.cfgs .Xoa_cfg_addon()
|
||||
, new gplx.xowa.addons.apps.updates .Xoa_update_addon()
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
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.ctgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.ctgs.*;
|
||||
public class Xodb_cat_link_row {
|
||||
public Xodb_cat_link_row(int page_id, int cat_id, byte type_id, long timestamp_unix, byte[] sortkey, byte[] sortkey_prefix) {
|
||||
this.page_id = page_id;
|
||||
this.cat_id = cat_id;
|
||||
this.type_id = type_id;
|
||||
this.timestamp_unix = timestamp_unix;
|
||||
this.sortkey = sortkey;
|
||||
this.sortkey_prefix = sortkey_prefix;
|
||||
}
|
||||
public int Page_id() {return page_id;} private final int page_id;
|
||||
public int Cat_id() {return cat_id;} private final int cat_id;
|
||||
public byte Type_id() {return type_id;} private final byte type_id;
|
||||
public long Timestamp_unix() {return timestamp_unix;} private final long timestamp_unix;
|
||||
public byte[] Sortkey() {return sortkey;} private final byte[] sortkey;
|
||||
public byte[] Sortkey_prefix() {return sortkey_prefix;} private final byte[] sortkey_prefix;
|
||||
}
|
@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.ctgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.ctgs.*;
|
||||
import gplx.dbs.*;
|
||||
import gplx.xowa.wikis.data.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.*;
|
||||
public class Xodb_cat_link_tbl implements Db_tbl {
|
||||
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
@ -50,6 +51,26 @@ public class Xodb_cat_link_tbl implements Db_tbl {
|
||||
.Val_bry_as_str(fld__sortkey_prefix , sortkey_prefix)
|
||||
.Exec_insert();
|
||||
}
|
||||
public Xodb_cat_link_row[] Select_by_page_id(int page_id) {
|
||||
List_adp list = List_adp_.New();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__from).Crt_int(fld__from, page_id).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
Xodb_cat_link_row row = new Xodb_cat_link_row
|
||||
( rdr.Read_int(fld__from)
|
||||
, rdr.Read_int(fld__to_id)
|
||||
, rdr.Read_byte(fld__type_id)
|
||||
, rdr.Read_long(fld__timestamp_unix)
|
||||
, rdr.Read_bry(fld__sortkey)
|
||||
, rdr.Read_bry_by_str(fld__sortkey_prefix)
|
||||
);
|
||||
list.Add(row);
|
||||
}
|
||||
} finally {
|
||||
rdr.Rls();
|
||||
}
|
||||
return (Xodb_cat_link_row[])list.To_ary_and_clear(Xodb_cat_link_row.class);
|
||||
}
|
||||
public void Delete_by_page_id(int page_id) {
|
||||
conn.Stmt_delete(tbl_name, fld__from)
|
||||
.Crt_int(fld__from, page_id)
|
||||
@ -59,6 +80,33 @@ public class Xodb_cat_link_tbl implements Db_tbl {
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
}
|
||||
public static final String TBL_NAME = "cat_link", FLD__cl_sortkey_prefix = "cl_sortkey_prefix";
|
||||
public static Xodb_cat_link_tbl[] Get_catlink_tbls(Xow_db_mgr db_mgr) {
|
||||
List_adp rv = List_adp_.New();
|
||||
|
||||
boolean layout_is_lot = db_mgr.Props().Layout_text().Tid_is_lot();
|
||||
|
||||
// loop all dbs
|
||||
int len = db_mgr.Dbs__len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xow_db_file link_db = db_mgr.Dbs__get_at(i);
|
||||
switch (link_db.Tid()) {
|
||||
// if core, add if all or few; skip if lot
|
||||
case Xow_db_file_.Tid__core:
|
||||
if (layout_is_lot)
|
||||
continue;
|
||||
break;
|
||||
// if cat_link, add
|
||||
case Xow_db_file_.Tid__cat_link:
|
||||
break;
|
||||
// else, skip
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
rv.Add(new Xodb_cat_link_tbl(link_db.Conn()));
|
||||
}
|
||||
|
||||
return (Xodb_cat_link_tbl[])rv.To_ary_and_clear(Xodb_cat_link_tbl.class);
|
||||
}
|
||||
}
|
||||
/*
|
||||
NOTE_1: categorylinks row size: 34 + 20 + 12 + (cat_sortkey.length * 2)
|
||||
|
@ -22,7 +22,7 @@ import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.x
|
||||
import gplx.xowa.addons.wikis.ctgs.dbs.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.langs.*;
|
||||
import gplx.xowa.addons.wikis.directorys.specials.items.bldrs.*;
|
||||
public class Xoctg_edit_mgr {
|
||||
public static void Update(Xowe_wiki wiki, byte[] ttl_bry, int page_id, byte[] old_text, byte[] new_text) {
|
||||
public static void Update(Xowe_wiki wiki, byte[] ttl_bry, int page_id, Xoa_ttl[] ctg_ttls) {
|
||||
// only apply to home or other wiki
|
||||
if (!( wiki.Domain_tid() == Xow_domain_tid_.Tid__other
|
||||
|| wiki.Domain_tid() == Xow_domain_tid_.Tid__home))
|
||||
@ -46,32 +46,8 @@ public class Xoctg_edit_mgr {
|
||||
Xowd_page_itm tmp_page = new Xowd_page_itm();
|
||||
db_mgr.Tbl__page().Select_by_id(tmp_page, page_id);
|
||||
|
||||
// parse old page
|
||||
wiki.Parser_mgr().Ctx().Clear_all();
|
||||
wpg.Db().Text().Text_bry_(old_text);
|
||||
wiki.Parser_mgr().Parse(wpg, true);
|
||||
wiki.Html_mgr().Page_wtr_mgr().Gen(wpg, Xopg_page_.Tid_read); // need to write html to fill Wtxt().Ctgs
|
||||
|
||||
// cat_core:update; for each category, subtract one from count_page, count_file, or count_subcs
|
||||
int cat_len = wpg.Wtxt().Ctgs__len();
|
||||
for (int i = 0; i < cat_len; i++) {
|
||||
// get cat_core itm for sub_cat
|
||||
Xoa_ttl sub_ttl = wpg.Wtxt().Ctgs__get_at(i);
|
||||
page_tbl.Select_by_ttl(tmp_page, sub_ttl);
|
||||
Xowd_category_itm sub_core_itm = cat_core_tbl.Select(tmp_page.Id());
|
||||
|
||||
// subtract one and save it
|
||||
sub_core_itm.Adjust(ns_id, -1);
|
||||
cat_core_tbl.Update(sub_core_itm);
|
||||
}
|
||||
// cat_link:delete
|
||||
cat_link_tbl.Delete_by_page_id(page_id);
|
||||
|
||||
// parse new page
|
||||
wiki.Parser_mgr().Ctx().Clear_all();
|
||||
wpg.Db().Text().Text_bry_(new_text);
|
||||
wiki.Parser_mgr().Parse(wpg, true);
|
||||
wiki.Html_mgr().Page_wtr_mgr().Gen(wpg, Xopg_page_.Tid_read); // need to write html to fill Wtxt().Ctgs
|
||||
// delete old categories
|
||||
Delete(wiki, page_id);
|
||||
|
||||
// get some variables
|
||||
int timestamp = (int)Datetime_now.Get().Timestamp_unix();
|
||||
@ -79,11 +55,11 @@ public class Xoctg_edit_mgr {
|
||||
Xow_db_file core_db = db_mgr.Db__core();
|
||||
|
||||
// cat_core:update; for each category, add one to count_page, count_file, or count_subcs
|
||||
cat_len = wpg.Wtxt().Ctgs__len();
|
||||
int ctg_ttls_len = ctg_ttls.length;
|
||||
cat_link_tbl.Insert_bgn();
|
||||
for (int i = 0; i < cat_len; i++) {
|
||||
for (int i = 0; i < ctg_ttls_len; i++) {
|
||||
// get cat_core itm for sub_cat
|
||||
Xoa_ttl sub_ttl = wpg.Wtxt().Ctgs__get_at(i);
|
||||
Xoa_ttl sub_ttl = ctg_ttls[i];
|
||||
boolean exists = page_tbl.Select_by_ttl(tmp_page, sub_ttl);
|
||||
|
||||
// create category if it doesn't exist
|
||||
@ -111,4 +87,34 @@ public class Xoctg_edit_mgr {
|
||||
// update page.cat_db_id
|
||||
page_tbl.Update__cat_db_id(page_id, core_db.Id());
|
||||
}
|
||||
public static void Delete(Xowe_wiki wiki, int page_id) {
|
||||
// get page_tbl
|
||||
Xowd_page_tbl page_tbl = wiki.Data__core_mgr().Db__core().Tbl__page();
|
||||
Xowd_page_itm tmp_page = new Xowd_page_itm();
|
||||
page_tbl.Select_by_id(tmp_page, page_id);
|
||||
int ns_id = tmp_page.Ns_id();
|
||||
|
||||
// get cat_core_tbl
|
||||
Xowd_cat_core_tbl cat_core_tbl = Xodb_cat_db_.Get_cat_core_or_fail(wiki.Data__core_mgr());
|
||||
|
||||
// get cat_link_tbls
|
||||
Xodb_cat_link_tbl[] cat_link_tbls = Xodb_cat_link_tbl.Get_catlink_tbls(wiki.Data__core_mgr());
|
||||
|
||||
// loop cat_link tbls to find linked categories
|
||||
for (Xodb_cat_link_tbl cat_link_tbl : cat_link_tbls) {
|
||||
Xodb_cat_link_row[] cat_link_rows = cat_link_tbl.Select_by_page_id(page_id);
|
||||
// loop linked categories
|
||||
for (Xodb_cat_link_row cat_link_row : cat_link_rows) {
|
||||
// get cat_core_itm
|
||||
Xowd_category_itm sub_core_itm = cat_core_tbl.Select(cat_link_row.Cat_id());
|
||||
|
||||
// subtract one and save it
|
||||
sub_core_itm.Adjust(ns_id, -1);
|
||||
cat_core_tbl.Update(sub_core_itm);
|
||||
}
|
||||
|
||||
// delete cat_links
|
||||
cat_link_tbl.Delete_by_page_id(page_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,9 +17,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.*;
|
||||
import gplx.dbs.*; import gplx.dbs.cfgs.*;
|
||||
import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.wikis.data.site_stats.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.addons.wikis.directorys.dbs.*;
|
||||
import gplx.xowa.addons.wikis.directorys.specials.items.bldrs.*;
|
||||
import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.dbs.*;
|
||||
public class Xopg_db_mgr {
|
||||
public static int Create
|
||||
( Xowd_page_tbl page_tbl, Xowd_text_tbl text_tbl, Xowd_site_ns_tbl ns_tbl, Db_cfg_tbl cfg_tbl
|
||||
@ -48,4 +50,46 @@ public class Xopg_db_mgr {
|
||||
}
|
||||
return page_id;
|
||||
}
|
||||
public static void Delete(Xowe_wiki wiki, Xoa_ttl page_ttl) {
|
||||
// init vars
|
||||
Xow_db_mgr db_mgr = wiki.Data__core_mgr();
|
||||
Xow_db_file core_db = db_mgr.Db__core();
|
||||
Xowd_page_itm tmp = new Xowd_page_itm();
|
||||
|
||||
// get meta
|
||||
core_db.Tbl__page().Select_by_ttl(tmp, page_ttl);
|
||||
int page_id = tmp.Id();
|
||||
int ns_id = tmp.Ns_id();
|
||||
|
||||
// adjust site_stats
|
||||
int page_is_file = ns_id == Xow_ns_.Tid__file ? 1 : 0;
|
||||
Xowd_site_stats_mgr site_stats_row = new Xowd_site_stats_mgr(wiki);
|
||||
core_db.Tbl__site_stats().Select(site_stats_row);
|
||||
core_db.Tbl__site_stats().Update(site_stats_row.Num_articles() - 1, site_stats_row.Num_pages() - 1, site_stats_row.Num_files() - page_is_file);
|
||||
|
||||
// adjust site_ns
|
||||
int ns_count = core_db.Tbl__ns().Select_ns_count(ns_id);
|
||||
core_db.Tbl__ns().Update_ns_count(ns_id, ns_count - 1);
|
||||
|
||||
// text_db
|
||||
Xow_db_file text_db = db_mgr.Dbs__get_by_id_or_null(tmp.Text_db_id());
|
||||
if (text_db != null) {
|
||||
text_db.Tbl__text().Delete(page_id);
|
||||
}
|
||||
|
||||
// html_db
|
||||
Xow_db_file html_db = db_mgr.Dbs__get_by_id_or_null(tmp.Html_db_id());
|
||||
if (html_db != null) {
|
||||
html_db.Tbl__html().Delete(page_id);
|
||||
}
|
||||
|
||||
// cat_core, cat_link
|
||||
gplx.xowa.addons.wikis.ctgs.edits.Xoctg_edit_mgr.Delete(wiki, page_id);
|
||||
|
||||
// search_link
|
||||
Srch_search_addon.Get(wiki).Delete_links(ns_id, page_id);
|
||||
|
||||
// delete from page
|
||||
core_db.Tbl__page().Delete(page_id);
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ public class Rndm_addon implements Xoax_addon_itm, Xoax_addon_itm__bldr, Xoax_ad
|
||||
return new Xow_special_page[]
|
||||
{ Rndm_root_special.Prototype
|
||||
, Rndm_page_special.Prototype
|
||||
, new gplx.xowa.specials.deletes .Xodel_page_special()
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,14 @@ public class Srch_search_addon implements Xoax_addon_itm, Srch_search_addon_api
|
||||
|
||||
public void Search(Srch_search_qry qry, Srch_rslt_cbk cbk) {search_mgr.Search(qry, cbk);}
|
||||
public void Clear_rslts_cache() {search_mgr.Clear_rslts_cache();}
|
||||
public void Delete_links(int ns_id, int page_id) {
|
||||
int search_link_db_id = db_mgr.Tbl__link__get_idx(ns_id);
|
||||
Srch_link_tbl search_link_tbl = db_mgr.Tbl__link__get_at(search_link_db_id);
|
||||
if (search_link_tbl.conn.Meta_tbl_exists("search_link")) { // NOTE: personal_wikis may not have search_link; exit early else delete will fail; DATE:2017-02-15
|
||||
search_link_tbl.Delete(page_id);
|
||||
}
|
||||
this.Clear_rslts_cache();
|
||||
}
|
||||
|
||||
public static final int Score_max = 1000000;
|
||||
public static final byte Wildcard__star = Byte_ascii.Star;
|
||||
|
@ -40,6 +40,12 @@ public class Srch_link_tbl {
|
||||
public void Fill_for_insert(Db_stmt stmt, Srch_link_row row) {
|
||||
stmt.Val_int(fld_word_id, row.Word_id).Val_int(fld_page_id, row.Page_id).Val_int(fld_link_score, row.Link_score);
|
||||
}
|
||||
public void Delete(int page_id) {
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.search_link: delete started: page_id=~{0}", page_id);
|
||||
Db_stmt stmt = conn.Stmt_delete(tbl_name, fld_page_id);
|
||||
stmt.Clear().Crt_int(fld_page_id, page_id).Exec_delete();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.search_link: delete done");
|
||||
}
|
||||
|
||||
public static final Srch_link_tbl[] Ary_empty = new Srch_link_tbl[0];
|
||||
public static final String Fld_link_score = "link_score";
|
||||
|
@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.guis.bnds; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
|
||||
import gplx.gfui.*; import gplx.gfui.draws.*; import gplx.gfui.ipts.*; import gplx.gfui.kits.core.*; import gplx.gfui.envs.*; import gplx.gfui.controls.windows.*; import gplx.gfui.controls.elems.*; import gplx.gfui.controls.standards.*;
|
||||
import gplx.gfui.layouts.swts.*;
|
||||
import gplx.xowa.guis.cbks.*;
|
||||
public class Xog_bnd_win implements Gfo_invk {
|
||||
private GfuiWin win;
|
||||
|
@ -22,8 +22,9 @@ import gplx.xowa.parsers.*; import gplx.xowa.parsers.tmpls.*;
|
||||
public class Xog_tab_itm_edit_mgr {
|
||||
public static void Save(Xog_tab_itm tab, boolean quick_save) {
|
||||
if (tab.View_mode() != Xopg_page_.Tid_edit) return; // exit if not edit; handles ctrl+s being pressed in read/html modes
|
||||
|
||||
// get text and save directly to text_db
|
||||
Xoae_page page = tab.Page(); Xowe_wiki wiki = tab.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win();
|
||||
byte[] old_text = page.Db().Text().Text_bry();
|
||||
byte[] new_text = Get_new_text(tab, page.Db().Text().Text_bry());
|
||||
int page_id = page.Db().Page().Id();
|
||||
if (page.Edit_mode() == Xoa_page_.Edit_mode_create) {
|
||||
@ -37,17 +38,20 @@ public class Xog_tab_itm_edit_mgr {
|
||||
Invalidate(wiki);
|
||||
page.Db().Text().Text_bry_(new_text);
|
||||
|
||||
try {
|
||||
gplx.xowa.addons.wikis.ctgs.edits.Xoctg_edit_mgr.Update(wiki, page.Ttl().Page_db(), page_id, old_text, new_text);
|
||||
} catch (Exception e) {
|
||||
Gfo_usr_dlg_.Instance.Warn_many("", "", "failed to update categories; err=~{0}", Err_.Message_gplx_log(e));
|
||||
}
|
||||
|
||||
// refresh html
|
||||
wiki.Parser_mgr().Parse(page, true);
|
||||
if (wiki.Html__hdump_enabled()) wiki.Html__hdump_mgr().Save_mgr().Save(page); // must go after wiki.Parse
|
||||
|
||||
win_itm.Usr_dlg().Prog_one("", "", "saved page ~{0}", String_.new_u8(page.Ttl().Full_txt_raw())); // NOTE: show message after Parse, b/c Parse will flash "Loading page"; DATE:2014-05-17
|
||||
if (!quick_save) { // full_save; save page and go to read mode
|
||||
// update categories
|
||||
try {
|
||||
wiki.Html_mgr().Page_wtr_mgr().Gen(page, Xopg_page_.Tid_read); // NOTE: need to write html to fill Wtxt().Ctgs
|
||||
gplx.xowa.addons.wikis.ctgs.edits.Xoctg_edit_mgr.Update(wiki, page.Ttl().Page_db(), page_id, page.Wtxt().Ctgs__to_ary());
|
||||
} catch (Exception e) {
|
||||
Gfo_usr_dlg_.Instance.Warn_many("", "", "failed to update categories; err=~{0}", Err_.Message_gplx_log(e));
|
||||
}
|
||||
|
||||
page.Html_data().Edit_preview_(Bry_.Empty);
|
||||
Xoae_page stack_page = tab.History_mgr().Cur_page(wiki); // NOTE: must be to CurPage() else changes will be lost when going Bwd,Fwd
|
||||
stack_page.Db().Text().Text_bry_(page.Db().Text().Text_bry()); // NOTE: overwrite with "saved" changes
|
||||
|
@ -216,9 +216,7 @@ public class Xog_win_itm implements Gfo_invk, Gfo_evt_itm {
|
||||
}
|
||||
public void Page__refresh() {
|
||||
Xog_tab_itm tab = tab_mgr.Active_tab(); Xoae_page page = tab.Page(); Xog_html_itm html_itm = tab.Html_itm();
|
||||
if (page.Ttl().Ns().Id_is_special()) {
|
||||
page = page.Wikie().Page_mgr().Load_page(page.Url(), page.Ttl(), tab); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save
|
||||
}
|
||||
page = page.Wikie().Page_mgr().Load_page(page.Url(), page.Ttl(), tab); // NOTE: refresh should always reload and regen page; DATE:2017-02-15
|
||||
page.Html_data().Bmk_pos_(html_itm.Html_box().Html_js_eval_proc_as_str(Xog_js_procs.Win__vpos_get));
|
||||
html_itm.Show(page);
|
||||
if (page.Url().Anch_str() == null)
|
||||
|
@ -19,7 +19,7 @@ package gplx.xowa.htmls.core.dbs; import gplx.*; import gplx.xowa.*; import gplx
|
||||
import gplx.dbs.*; import gplx.core.brys.*;
|
||||
public class Xowd_html_tbl implements Db_tbl {
|
||||
private final String fld_page_id, fld_head_flag, fld_body_flag, fld_display_ttl, fld_content_sub, fld_sidebar_div, fld_body;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete, stmt_update;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_update;
|
||||
private final Int_flag_bldr body_flag_bldr = Make_body_flag_bldr();
|
||||
public Xowd_html_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
@ -68,8 +68,10 @@ public class Xowd_html_tbl implements Db_tbl {
|
||||
Insert(page_id, head_flag, zip_tid, hzip_tid, display_ttl, content_sub, sidebar_div, body);
|
||||
}
|
||||
public void Delete(int page_id) {
|
||||
if (stmt_delete == null) stmt_delete = conn.Stmt_delete(tbl_name, fld_page_id);
|
||||
stmt_delete.Clear().Crt_int(fld_page_id, page_id).Exec_delete();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.html: delete started: db=~{0} page_id=~{1}", conn.Conn_info().Raw(), page_id);
|
||||
Db_stmt stmt = conn.Stmt_delete(tbl_name, fld_page_id);
|
||||
stmt.Clear().Crt_int(fld_page_id, page_id).Exec_delete();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.html: delete done");
|
||||
}
|
||||
public boolean Select_by_page(Xoh_page hpg) {
|
||||
if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, flds, fld_page_id);
|
||||
@ -107,7 +109,6 @@ public class Xowd_html_tbl implements Db_tbl {
|
||||
}
|
||||
public void Rls() {
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
stmt_delete = Db_stmt_.Rls(stmt_delete);
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_update = Db_stmt_.Rls(stmt_update);
|
||||
}
|
||||
|
@ -0,0 +1,39 @@
|
||||
/*
|
||||
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.specials.deletes; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*;
|
||||
import gplx.xowa.specials.*; import gplx.xowa.wikis.nss.*;
|
||||
import gplx.core.net.qargs.*;
|
||||
public class Xodel_page_special implements Xow_special_page {
|
||||
public void Special__gen(Xow_wiki wikii, Xoa_page pagei, Xoa_url url, Xoa_ttl ttl) {
|
||||
Xowe_wiki wiki = (Xowe_wiki)wikii; Xoae_page page = (Xoae_page)pagei;
|
||||
|
||||
Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary());
|
||||
byte[] page_title_bry = url_args.Read_bry_or_fail("delete");
|
||||
Xoa_ttl page_title = wiki.Ttl_parse(page_title_bry);
|
||||
|
||||
gplx.xowa.addons.wikis.directorys.specials.items.bldrs.Xopg_db_mgr.Delete(wiki, page_title);
|
||||
|
||||
wiki.Data_mgr().Redirect(page, wiki.Props().Main_page());
|
||||
}
|
||||
|
||||
public static final String SPECIAL_KEY = "XowaPageDelete";
|
||||
public static final byte[] Display_ttl = Bry_.new_a7("Delete Page");
|
||||
public Xow_special_meta Special__meta() {return new Xow_special_meta(Xow_special_meta_.Src__mw, SPECIAL_KEY);}
|
||||
public static final Xow_special_page Prototype = new Xodel_page_special();
|
||||
public Xow_special_page Special__clone() {return this;}
|
||||
}
|
@ -32,11 +32,13 @@ public class Xowd_site_stats_tbl implements Db_tbl {
|
||||
conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));
|
||||
conn.Stmt_insert(tbl_name, flds).Val_int(fld_row_id, Site_stats_row_id).Val_long(fld_good_articles, 0).Val_long(fld_total_pages, 0).Val_int(fld_images, 0).Exec_insert();
|
||||
}
|
||||
public void Update(int num_articles, int num_pages, int num_files) {
|
||||
public void Update(long num_articles, long num_pages, int num_files) {
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.site_stats: update started: num_articles=~{0} num_pages=~{1} num_files=~{2}", num_articles, num_pages, num_files);
|
||||
Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(fld_row_id), fld_good_articles, fld_total_pages, fld_images);
|
||||
stmt.Val_long(fld_good_articles, num_articles).Val_long(fld_total_pages, num_pages).Val_int(fld_images, num_files)
|
||||
.Crt_int(fld_row_id, Site_stats_row_id)
|
||||
.Exec_update();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.site_stats: update done");
|
||||
}
|
||||
public void Select(Xowd_site_stats_mgr stats) {
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld_row_id).Crt_int(fld_row_id, Site_stats_row_id).Exec_select__rls_auto();
|
||||
|
@ -365,6 +365,12 @@ public class Xowd_page_tbl implements Db_tbl {
|
||||
.Exec_update()
|
||||
;
|
||||
}
|
||||
public void Delete(int page_id) {
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.page: delete started: page_id=~{0}", page_id);
|
||||
Db_stmt stmt = conn.Stmt_delete(tbl_name, fld_id);
|
||||
stmt.Clear().Crt_int(fld_id, page_id).Exec_delete();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.page: delete done");
|
||||
}
|
||||
public void Create_idx() {
|
||||
conn.Meta_idx_create(Xoa_app_.Usr_dlg()
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "title" , fld_title, fld_ns)
|
||||
|
@ -76,11 +76,13 @@ public class Xowd_site_ns_tbl implements Db_tbl {
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
public void Update_ns_count(int ns_id, int ns_count) {
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.site_ns: update started: ns_id=~{0} ns_count=~{1}", ns_id, ns_count);
|
||||
Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(fld_id), fld_count);
|
||||
stmt.Clear()
|
||||
.Val_int(fld_count, ns_count)
|
||||
.Crt_int(fld_id, ns_id)
|
||||
.Exec_update();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.site_ns: update done");
|
||||
}
|
||||
public void Rls() {}
|
||||
|
||||
|
@ -44,6 +44,11 @@ public class Xowd_text_tbl implements Db_tbl {
|
||||
text = zip_mgr.Zip(zip_tid, text);
|
||||
stmt.Clear().Val_bry(fld_text_data, text).Crt_int(fld_page_id, page_id).Exec_update();
|
||||
}
|
||||
public void Delete(int page_id) {
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.text: delete started: db=~{0} page_id=~{1}", conn.Conn_info().Raw(), page_id);
|
||||
conn.Stmt_delete(tbl_name, fld_page_id).Crt_int(fld_page_id, page_id).Exec_delete();
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "db.text: delete done");
|
||||
}
|
||||
public byte[] Select(int page_id) {
|
||||
synchronized (thread_lock) { // LOCK:stmt-rls; DATE:2016-07-06
|
||||
if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, flds, fld_page_id);
|
||||
|
Loading…
Reference in New Issue
Block a user