@ -23,82 +23,89 @@ import gplx.xowa.addons.wikis.ctgs.dbs.*; import gplx.xowa.addons.wikis.ctgs.htm
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 , 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 ) )
return ;
// get page
// get ttl, page, ns_id
Xoa_ttl ttl = wiki . Ttl_parse ( ttl_bry ) ;
int ns_id = ttl . Ns ( ) . Id ( ) ;
Xoae_page wpg = Xoae_page . New_edit ( wiki , ttl ) ;
wpg . Db ( ) . Page ( ) . Id_ ( page_id ) ;
// delete old categories
Delete ( wiki , ns_id , page_id ) ;
// insert new categories
// get page_tbl
Xow_db_mgr db_mgr = wiki . Data__core_mgr ( ) ;
Xowd_page_tbl page_tbl = db_mgr . Db__core ( ) . Tbl__page ( ) ;
Xow_db_file core_db = db_mgr . Db__core ( ) ;
Xowd_page_tbl page_tbl = core_db . Tbl__page ( ) ;
// get cat_core_tbl
Xowd_cat_core_tbl cat_core_tbl = Xodb_cat_db_ . Get_cat_core_or_fail ( db_mgr ) ;
// get cat_link_tbl
Xodb_cat_link_tbl cat_link_tbl = new Xodb_cat_link_tbl ( cat_core_tbl . Conn ( ) ) ;
Xowd_page_itm tmp_page = new Xowd_page_itm ( ) ;
db_mgr . Tbl__page ( ) . Select_by_id ( tmp_page , page_id ) ;
// get last cat_link_tbl; note that
// * cat_link tbls are organized by page
// * all old cat_links have been deleted
// * new catlinks will go into last db
Xow_db_file last_cat_link_db = db_mgr . Dbs__get_for_create ( Xow_db_file_ . Tid__cat_link , ns_id ) ;
Xodb_cat_link_tbl last_cat_link_tbl = new Xodb_cat_link_tbl ( last_cat_link_db . Conn ( ) ) ;
// delete old categories
Delete ( wiki , ns_id , page_id ) ;
// get last text tbl for new categories; EX: [[Category:New]] will create entry in page_tb with text_db_id set to last_text_db
Xow_db_file last_text_db = db_mgr . Dbs__get_for_create ( Xow_db_file_ . Tid__text , ns_id ) ;
Xowd_text_tbl last_text_tbl = new Xowd_text_tbl ( last_text_db . Conn ( ) , db_mgr . Props ( ) . Schema_is_1 ( ) , db_mgr . Props ( ) . Zip_tid_text ( ) ) ;
// get some variables
// get some variables for creating cat_link rows
int timestamp = ( int ) Datetime_now . Get ( ) . Timestamp_unix ( ) ;
Xoctg_collation_mgr collation_mgr = wiki . Ctg__catpage_mgr ( ) . Collation_mgr ( ) ;
Xow _db_file core_db = db_mgr . Db__core ( ) ;
Xow d_page_itm tmp_page = new Xowd_page_itm ( ) ;
// cat_core:update; for each category, add one to count_page, count_file, or count_subcs
int ctg_ttls_len = ctg_ttls . length ;
cat_link_tbl . Insert_bgn ( ) ;
for ( int i = 0 ; i < ctg_ttls_len ; i + + ) {
// get cat_core itm for sub_cat
Xoa_ttl sub_ttl = ctg_ttls [ i ] ;
boolean exists = page_tbl . Select_by_ttl ( tmp_page , sub_ttl ) ;
// loop over each category listed on page
for ( Xoa_ttl ctg_ttl : ctg_ttls ) {
// get page_tbl data for sub_cat
boolean exists = page_tbl . Select_by_ttl ( tmp_page , ctg_ttl ) ;
int ctg_id = tmp_page . Id ( ) ;
// create category if it doesn't exist
int sub_id = tmp_page . Id ( ) ;
if ( ! exists ) {
sub_id = Xopg_db_mgr . Create
( core_db . Tbl__page ( ) , core_db . Tbl__text ( ) , core_db . Tbl__ns ( ) , core_db . Tbl__cfg ( )
, gplx . xowa . wikis . nss . Xow_ns_ . Tid__category , sub_ttl . Page_db ( ) , Bry_ . Empty , - 1 ) ;
// create [[Category]] page
ctg_id = Xopg_db_mgr . Create
( page_tbl , last_text_tbl , last_text_db . Id ( ) , core_db . Tbl__ns ( ) , core_db . Tbl__cfg ( )
, gplx . xowa . wikis . nss . Xow_ns_ . Tid__category , ctg_ttl . Page_db ( ) , Bry_ . Empty
, last_cat_link_db . Id ( ) ) ; // NOTE: new categories go into last cat_link_db
// create cat_core row
cat_core_tbl . Insert_bgn ( ) ;
cat_core_tbl . Insert_cmd_by_batch ( sub_id , 0 , 0 , 0 , Bool_ . N_byte , - 1 ) ;
cat_core_tbl . Insert_cmd_by_batch ( ctg _id, 0 , 0 , 0 , Bool_ . N_byte , - 1 ) ;
cat_core_tbl . Insert_end ( ) ;
}
Xowd_category_itm sub_core_itm = cat_core_tbl . Select ( sub_id ) ;
// get cat_core_itm
Xowd_category_itm cat_core_itm = cat_core_tbl . Select ( ctg_id ) ;
// adjust it and save it
sub _core_itm. Adjust ( ns_id , 1 ) ;
cat_core_tbl . Update ( sub _core_itm) ;
cat _core_itm. Adjust ( ns_id , 1 ) ;
cat_core_tbl . Update ( cat _core_itm) ;
// cat_link:add
cat_link_tbl. Insert_cmd_by_batch ( page_id , sub _id, Xoa_ctg_mgr . To_tid_by_ns ( ns_id ) , timestamp , collation_mgr . Get_sortkey ( wpg . Ttl ( ) . Page_db ( ) ) , wpg . Ttl ( ) . Page_db ( ) ) ;
// add to cat_link tbl
last_cat_link_tbl. Insert_ ( page_id , ctg _id, Xoa_ctg_mgr . To_tid_by_ns ( ns_id ) , timestamp , collation_mgr . Get_sortkey ( wpg . Ttl ( ) . Page_db ( ) ) , wpg . Ttl ( ) . Page_db ( ) ) ;
}
cat_link_tbl . Insert_end ( ) ;
// update page.cat_db_id
page_tbl . Update__cat_db_id ( page_id , core _db. Id ( ) ) ;
page_tbl . Update__cat_db_id ( page_id , last_cat_link _db. Id ( ) ) ;
}
public static void Delete ( Xowe_wiki wiki , int ns_id , int page_id ) {
Xow_db_mgr db_mgr = wiki . Data__core_mgr ( ) ;
boolean ns_id_is_category = ns_id = = Xow_ns_ . Tid__category ;
// get cat_core_tbl
Xowd_cat_core_tbl cat_core_tbl = Xodb_cat_db_ . Get_cat_core_or_fail ( wiki. Data__core_mgr ( ) ) ;
Xowd_cat_core_tbl cat_core_tbl = Xodb_cat_db_ . Get_cat_core_or_fail ( db_mgr ) ;
// get cat_link_tbls
Xo db_cat_link_tbl[ ] cat_link_tbls = Xodb_cat_link_tbl . Get_catlink_tbls ( wiki . Data__core_mgr ( ) ) ;
Xo w_db_file[ ] cat_link_dbs = db_mgr . Dbs__get_ary ( Xow_db_file_ . Tid__cat_link , ns_id ) ;
// loop cat_link tbls to find linked categories
for ( Xodb_cat_link_tbl cat_link_tbl : cat_link_tbls ) {
for ( Xow_db_file cat_link_db : cat_link_dbs ) {
Xodb_cat_link_tbl cat_link_tbl = new Xodb_cat_link_tbl ( cat_link_db . Conn ( ) ) ;
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
@ -119,15 +126,20 @@ public class Xoctg_edit_mgr {
if ( ns_id_is_category ) {
cat_core_tbl . Delete ( page_id ) ;
}
// set cat_db_id to -1
db_mgr . Tbl__page ( ) . Update__cat_db_id ( page_id , - 1 ) ;
}
public static void Update_page_id ( Xow_db_mgr db_mgr , int ns_id , int old_id , int new_id ) {
boolean ns_id_is_category = ns_id = = Xow_ns_ . Tid__category ;
// get cat_link_tbls
Xo db_cat_link_tbl[ ] cat_link_tbls = Xodb_cat_link_tbl . Get_catlink_tbls ( db_mgr ) ;
Xo w_db_file[ ] cat_link_dbs = db_mgr . Dbs__get_ary ( Xow_db_file_ . Tid__cat_link , ns_id ) ;
// loop cat_link tbls to find linked categories
for ( Xodb_cat_link_tbl cat_link_tbl : cat_link_tbls ) {
for ( Xow_db_file cat_link_db : cat_link_dbs ) {
Xodb_cat_link_tbl cat_link_tbl = new Xodb_cat_link_tbl ( cat_link_db . Conn ( ) ) ;
// delete cat_links
cat_link_tbl . Update_page_id_for_pages ( old_id , new_id ) ;
if ( ns_id_is_category )