############################################################################### # ManageCats.pm # # $Date: 01 Sep 2026 $ # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBBForum 3.2 # # Packaged: 01 Sep 2026 # # Distributed by: https://yabbforum.nz # # =========================================================================== # # Copyright (c) 2000-2026 YaBB (yabbforum.nz) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # ############################################################################### use CGI::Carp qw(fatalsToBrowser); our $VERSION = '3.2'; $managecatspmver = 'YaBBForum 3.2'; if ( $action eq 'detailedversion' ) { return 1; } sub DoCats { is_admin_or_gmod(); my $i = 0; while ( $_ = each %FORM ) { if ( $FORM{$_} && /^yitem_(.+)$/xsm ) { $editcats[$i] = $1; $i++; } } if ( $FORM{'baction'} eq 'edit' ) { AddCats(@editcats); } elsif ( $FORM{'baction'} eq 'delme' ) { get_forum_master(); foreach my $catid (@editcats) { ##Check if category has any boards, and if it does remove them. if ( $cat{$catid} ne q{} ) { require Admin::ManageBoards; DeleteBoards( split /,/xsm, $cat{$catid} ); } delete $cat{"$catid"}; delete $catinfo{"$catid"}; my $x = 0; foreach my $categoryid (@categoryorder) { if ( $catid eq $categoryid ) { splice @categoryorder, $x, 1; last; } $x++; } $yymain .= qq~$admin_txt{'830'} $catid $admin_txt{'831'}
~; } Write_ForumMaster(); } $yytitle = "$admin_txt{'3'}"; $action_area = 'managecats'; AdminTemplate(); return; } sub AddCats { my @editcats = @_; is_admin_or_gmod(); if ( $INFO{'action'} eq 'catscreen' ) { $FORM{'amount'} = @editcats; } get_forum_master(); $yymain .= qq~
$admin_img{'cat_img'} $admin_txt{'3'}
$admin_txt{'43'}
~; require Admin::ManageBoards; # Start Looping through and repeating the board adding wherever needed for my $i ( 0 .. ( $FORM{'amount'} - 1 ) ) { if ( ( !$editcats[$i] && $INFO{'action'} eq 'catscreen' ) || ( $editcats[$i] eq q{} && $INFO{'action'} eq 'catscreen' ) ) { next; } if ( $INFO{'action'} eq 'catscreen' ) { $id = $editcats[$i]; foreach my $catid (@categoryorder) { if ( $id ne $catid ) { next; } @bdlist = split /,/xsm, $cat{$catid}; ( $curcatname, $catperms, $catallowcol, $catimage, $catrss ) = split /\|/xsm, $catinfo{"$catid"}; ToChars($curcatname); $cattext = $curcatname; if ( $catallowcol eq q{} || $catallowcol eq '1' ) { $allowChecked = 'checked="checked"'; } else { $allowChecked = q{}; } ### RSS on Board Index Start ### if ( $catrss == 1 ) { $catrssch = ' checked="checked"'; } else { $catrssch = q{}; } ### RSS on Board Index End ### } } else { my $cat_num = $i + 1; $cattext = "$admin_txt{'44'} $cat_num:"; } my $catimage_value = q{}; if ( $catimage ) { $catimage_value = qq~
$admin_txt{'current_img'}: $catimage
~; } $catperms = DrawPerms( $catperms, 0 ); $yymain .= qq~
~; if ( $INFO{'action'} eq 'catscreen' ) { $yymain .= qq~
$cattext
 
$admin_txt{'61a'}
$id~; } else { $yymain .= qq~
~; } $yymain .= qq~

X~ . ($catimage ? qq~
~ : q{}) . qq~$catimage_value
~; } $yymain .= qq~
$admin_img{'prefimg'} $admin_txt{'10'}
~; $yytitle = "$admin_txt{'3'}"; $action_area = 'managecats'; AdminTemplate(); return; } sub AddCats2 { is_admin_or_gmod(); get_forum_master(); for my $i ( 0 .. ( $FORM{'amount'} - 1 ) ) { if ( $FORM{"catimage$i"} ne q{} ) { $FORM{"catimage$i"} = UploadFile("catimage$i", 'Templates/Forum/default', 'png jpg jpeg gif', '250', '0'); if ( $FORM{"cur_catimage$i"} ne q{} ) { unlink "$htmldir/Templates/Forum/default/$FORM{\"cur_catimage$i\"}"; } } else { $FORM{"catimage$i"} = $FORM{"cur_catimage$i"}; } if ( $FORM{"cur_catimage$i"} ne q{} && $FORM{"del_catimage$i"} ) { unlink "$htmldir/Templates/Forum/default/$FORM{\"cur_catimage$i\"}"; $FORM{"catimage$i"} = q{}; } if ( $FORM{"theid$i"} eq q{} ) { next; } $id = $FORM{"theid$i"}; if ( $id !~ /^[0-9A-Za-z#%+-\.@^_]+$/xsm ) { fatal_error( 'invalid_character', "$admin_txt{'44'} $admin_txt{'241'}" ); } if ( $FORM{'screenornot'} ne 'catscreen' ) { if ( $catinfo{"$id"} ) { fatal_error('cat_defined'); } else { $cat{"$id"} = q{}; } push @categoryorder, $id; } if ( !$FORM{"name$i"} ) { $FORM{"name$i"} = $id; } $cname = $FORM{"name$i"}; FromChars($cname); ToHTML($cname); if ( $FORM{"allowcol$i"} eq 'on' ) { $FORM{"allowcol$i"} = 1; } else { $FORM{"allowcol$i"} = 0; } if ( $FORM{"catrss$i"} eq 'on' ) { $FORM{"catrss$i"} = 1; } else { $FORM{"catrss$i"} = 0; } $catinfo{"$id"} = qq~$cname|$FORM{"catperms$i"}|$FORM{"allowcol$i"}|$FORM{"catimage$i"}|$FORM{"catrss$i"}~; $yymain .= qq~$admin_txt{'830'} $id $admin_txt{'48'}
~; } Write_ForumMaster(); $action_area = 'managecats'; AdminTemplate(); return; } sub ReorderCats { is_admin_or_gmod(); get_forum_master(); if ( @categoryorder > 1 ) { $catcnt = @categoryorder; $catnum = $catcnt; if ( $catcnt < 4 ) { $catcnt = 4; } $categorylist = qq~~; } $yymain .= qq~

$admin_img{'board'} $admin_txt{'829'}
~; if ( $catnum > 1 ) { $yymain .= qq~
$categorylist
$admin_txt{'738a'}
~; } else { $yymain .= qq~
$admin_txt{'738b'}
~; } $yymain .= q~
~; $yytitle = "$admin_txt{'829'}"; $action_area = 'managecats'; AdminTemplate(); return; } sub ReorderCats2 { is_admin_or_gmod(); my $moveitem = $FORM{'selectcats'}; get_forum_master(); if ($moveitem) { if ( $FORM{'moveup'} ) { for my $i ( 0 .. ( @categoryorder - 1 ) ) { if ( $categoryorder[$i] eq $moveitem && $i > 0 ) { $j = $i - 1; $categoryorder[$i] = $categoryorder[$j]; $categoryorder[$j] = $moveitem; last; } } } elsif ( $FORM{'movedown'} ) { for my $i ( 0 .. ( @categoryorder - 1 ) ) { if ( $categoryorder[$i] eq $moveitem && $i < $#categoryorder ) { $j = $i + 1; $categoryorder[$i] = $categoryorder[$j]; $categoryorder[$j] = $moveitem; last; } } } Write_ForumMaster(); } $yySetLocation = qq~$adminurl?action=reordercats;thecat=$moveitem~; redirectexit(); return; } 1;