void dumpclass(int gid) { boardheader_t *bptr; int bid; bptr = getbcache(gid); if (bptr->firstchild[0] == 0 || bptr->childcount <= 0) load_uidofgid(gid, 0); printf("$db{'class.%d'} = $serializer->serialize([", gid); for( bid = bptr->firstchild[0] ; bid > 0 ; bid = bptr->next[0] ) { bptr = getbcache(bid); if( (bptr->brdattr & (BRD_HIDE | BRD_TOP)) || (bptr->level && !(bptr->brdattr & BRD_POSTMASK) && (bptr->level & ~(PERM_BASIC|PERM_CHAT|PERM_PAGE|PERM_POST|PERM_LOGINOK))) ) continue; printf("%5d,\t", bid); parent[bid] = gid; } printf("]);\n"); bptr = getbcache(gid); for( bid = bptr->firstchild[0] ; bid > 0 ; bid = bptr->next[0] ) { bptr = getbcache(bid); if( (bptr->brdattr & (BRD_HIDE | BRD_TOP)) || (bptr->level && !(bptr->brdattr & BRD_POSTMASK) && (bptr->level & ~(PERM_BASIC|PERM_CHAT|PERM_PAGE|PERM_POST|PERM_LOGINOK))) ) continue; if( bptr->brdattr & BRD_GROUPBOARD ) dumpclass(bid); } }
void buildclass(int bid, int level) { boardheader_t *bptr; if( level == 20 ){ /* for safty */ printf("is there something wrong? class level: %d\n", level); return; } bptr = &bcache[bid]; if (bptr->firstchild[0] == NULL || bptr->childcount <= 0) load_uidofgid(bid + 1, 1); /* 因為這邊 bid從 0開始, 所以再 +1 回來 */ if (bptr->firstchild[1] == NULL || bptr->childcount <= 0) load_uidofgid(bid + 1, 1); /* 因為這邊 bid從 0開始, 所以再 +1 回來 */ for (bptr = bptr->firstchild[0]; bptr != NULL ; bptr = bptr->next[0]) { if( bptr->brdattr & BRD_GROUPBOARD ) buildclass(bptr - bcache, level + 1); } }