1############################################################################### 2# ManageCats.pm # 3# $Date: 12.02.14 $ # 4############################################################################### 5# YaBB: Yet another Bulletin Board # 6# Open-Source Community Software for Webmasters # 7# Version: YaBB 2.6.11 # 8# Packaged: December 2, 2014 # 9# Distributed by: http://www.yabbforum.com # 10# =========================================================================== # 11# Copyright (c) 2000-2014 YaBB (www.yabbforum.com) - All Rights Reserved. # 12# Software by: The YaBB Development Team # 13# with assistance from the YaBB community. # 14############################################################################### 15use CGI::Carp qw(fatalsToBrowser); 16our $VERSION = '2.6.11'; 17 18$managecatspmver = 'YaBB 2.6.11 $Revision: 1611 $'; 19if ( $action eq 'detailedversion' ) { return 1; } 20 21sub DoCats { 22 is_admin_or_gmod(); 23 my $i = 0; 24 while ( $_ = each %FORM ) { 25 if ( $FORM{$_} && /^yitem_(.+)$/xsm ) { 26 $editcats[$i] = $1; 27 $i++; 28 } 29 } 30 31 if ( $FORM{'baction'} eq 'edit' ) { AddCats(@editcats); } 32 elsif ( $FORM{'baction'} eq 'delme' ) { 33 get_forum_master(); 34 foreach my $catid (@editcats) { 35 ##Check if category has any boards, and if it does remove them. 36 if ( $cat{$catid} ne q{} ) { 37 require Admin::ManageBoards; 38 DeleteBoards( split /,/xsm, $cat{$catid} ); 39 } 40 41 delete $cat{"$catid"}; 42 delete $catinfo{"$catid"}; 43 44 my $x = 0; 45 foreach my $categoryid (@categoryorder) { 46 if ( $catid eq $categoryid ) { 47 splice @categoryorder, $x, 1; 48 last; 49 } 50 $x++; 51 } 52 53 $yymain .= 54 qq~$admin_txt{'830'} <i>$catid</i> $admin_txt{'831'}<br />~; 55 } 56 Write_ForumMaster(); 57 } 58 $yytitle = "$admin_txt{'3'}"; 59 $action_area = 'managecats'; 60 AdminTemplate(); 61 return; 62} 63 64sub AddCats { 65 my @editcats = @_; 66 is_admin_or_gmod(); 67 68 if ( $INFO{'action'} eq 'catscreen' ) { $FORM{'amount'} = @editcats; } 69 get_forum_master(); 70 71 $yymain .= qq~ 72<form action="$adminurl?action=addcat2" method="post" enctype="multipart/form-data" accept-charset="$yymycharset"> 73<div class="bordercolor rightboxdiv"> 74 <table class="border-space pad-cell" style="margin-bottom: .5em;"> 75 <tr> 76 <td class="titlebg"> 77 $admin_img{'cat_img'} 78 <b>$admin_txt{'3'}</b> 79 </td> 80 </tr><tr> 81 <td class="windowbg2"> 82 <div class="pad-more">$admin_txt{'43'}</div> 83 </td> 84 </tr> 85 </table> 86</div> 87~; 88 require Admin::ManageBoards; 89 90 # Start Looping through and repeating the board adding wherever needed 91 for my $i ( 0 .. ( $FORM{'amount'} - 1 ) ) { 92 if ( ( !$editcats[$i] && $INFO{'action'} eq 'catscreen' ) 93 || ( $editcats[$i] eq q{} && $INFO{'action'} eq 'catscreen' ) ) 94 { 95 next; 96 } 97 if ( $INFO{'action'} eq 'catscreen' ) { 98 $id = $editcats[$i]; 99 foreach my $catid (@categoryorder) { 100 if ( $id ne $catid ) { next; } 101 @bdlist = split /,/xsm, $cat{$catid}; 102 ( $curcatname, $catperms, $catallowcol, $catimage, $catrss ) = 103 split /\|/xsm, $catinfo{"$catid"}; 104 ToChars($curcatname); 105 $cattext = $curcatname; 106 if ( $catallowcol eq q{} || $catallowcol eq '1' ) { 107 $allowChecked = 'checked="checked"'; 108 } 109 else { $allowChecked = q{}; } 110 ### RSS on Board Index Start ### 111 if ( $catrss == 1 ) { $catrssch = ' checked="checked"'; } 112 else { $catrssch = q{}; } 113 ### RSS on Board Index End ### 114 } 115 } 116 else { 117 my $cat_num = $i + 1; 118 $cattext = "$admin_txt{'44'} $cat_num:"; 119 } 120 my $catimage_value = q{}; 121 if ( $catimage ) { 122 $catimage_value = qq~<div class="small bold">$admin_txt{'current_img'}: <a href="$yyhtml_root/Templates/Forum/default/$catimage" target="_blank">$catimage</a><br /><input type="checkbox" name="del_catimage$i" id="del_catimage$i" value="1" /> <label for="del_catimage$i">$admin_txt{'64b5'}</label></div>~; 123 } 124 $catperms = DrawPerms( $catperms, 0 ); 125 $yymain .= qq~ 126<div class="bordercolor rightboxdiv"> 127 <table class="border-space pad-cell" style="margin-bottom: .5em;"> 128 <tr> 129 <td class="titlebg" colspan="4"><b>$cattext</b></td> 130 </tr><tr> 131 <td class="windowbg" colspan="2"> </td> 132 <td class="windowbg center"><label for="catperms$i"><b>$admin_txt{'45'}</b></label></td> 133 <td class="windowbg center"><label for="allowcol$i"><b>$exptxt{'6'}</b></label></td> 134 </tr><tr>~; 135 if ( $INFO{'action'} eq 'catscreen' ) { 136 $yymain .= qq~ 137 <td class="windowbg"><b>$admin_txt{'61a'}</b></td> 138 <td class="windowbg2"> 139 <div class="pad-more"><input type="hidden" name="theid$i" id="theid$i" value="$id" />$id~; 140 } 141 else { 142 $yymain .= qq~ 143 <td class="windowbg"><label for="theid$i"><b>$admin_txt{'61a'}</b><br />$admin_txt{'61b'}</label></td> 144 <td class="windowbg2"> 145 <div class="pad-more"><input type="text" name="theid$i" id="theid$i" value="$id" />~; 146 } 147 $yymain .= qq~ 148 </div> 149 </td> 150 <td class="windowbg2 center" rowspan="4"><select multiple="multiple" name="catperms$i" id="catperms$i" size="5">$catperms</select><br /><label for="catperms$i"><span class="small">$admin_txt{'14'}</span></label></td> 151 <td class="windowbg2 center" rowspan="4"><input type="checkbox" $allowChecked name="allowcol$i" id="allowcol$i" /></td> 152 </tr><tr> 153 <td class="windowbg"><label for="name$i"><b>$admin_txt{'68'}:</b></label></td> 154 <td class="windowbg2"> 155 <div class="pad-more"><input type="text" name="name$i" id="name$i" value="$curcatname" size="40" /></div> 156 </td> 157 </tr><tr> 158 <td class="windowbg"><label for="catimage$i"><b>$admin_txt{'64b2'}:</b><br /><span class="small">$admin_txt{'64b3'}</span></label></td> 159 <td class="windowbg2"> 160 <div class="pad-more"> 161 <input type="file" name="catimage$i" id="catimage$i" size="35" /> 162 <input type="hidden" name="cur_catimage$i" value="$catimage" /> <span class="cursor small bold" title="$admin_txt{'remove_file'}" onclick="document.getElementById('catimage$i').value='';">X</span>~ . ($catimage ? qq~<br /><img src="$imagesdir/$catimage" alt="" />~ : q{}) . qq~$catimage_value 163 </div> 164 </td> 165 </tr><tr> 166 <td class="windowbg"><label for="catrss$i"><b>$admin_txt{'brdrss1'}:</b></label></td> 167 <td class="windowbg2"> 168 <div class="pad-more"><input type="checkbox" name="catrss$i" id="catrss$i"$catrssch /> <label for="catrss$i"><span class="small">$admin_txt{'brdrss2'}</span></label></div> 169 </td> 170 </tr> 171 </table> 172</div>~; 173 } 174 $yymain .= qq~<div class="bordercolor rightboxdiv"> 175 <table class="border-space pad-cell"> 176 <tr> 177 <th class="titlebg">$admin_img{'prefimg'} $admin_txt{'10'}</th> 178 </tr><tr> 179 <td class="catbg center"> 180 <input type="hidden" name="amount" value="$FORM{"amount"}" /> 181 <input type="hidden" name="screenornot" value="$INFO{'action'}" /> 182 <input type="submit" value="$admin_txt{'10'}" class="button" /> 183 </td> 184 </tr> 185 </table> 186</div> 187</form>~; 188 189 $yytitle = "$admin_txt{'3'}"; 190 $action_area = 'managecats'; 191 AdminTemplate(); 192 return; 193} 194 195sub AddCats2 { 196 is_admin_or_gmod(); 197 get_forum_master(); 198 199 for my $i ( 0 .. ( $FORM{'amount'} - 1 ) ) { 200 if ( $FORM{"catimage$i"} ne q{} ) { 201 $FORM{"catimage$i"} = UploadFile("catimage$i", 'Templates/Forum/default', 'png jpg jpeg gif', '250', '0'); 202 if ( $FORM{"cur_catimage$i"} ne q{} ) { 203 unlink "$htmldir/Templates/Forum/default/$FORM{\"cur_catimage$i\"}"; 204 } 205 } 206 else { 207 $FORM{"catimage$i"} = $FORM{"cur_catimage$i"}; 208 } 209 210 if ( $FORM{"cur_catimage$i"} ne q{} && $FORM{"del_catimage$i"} ) { 211 unlink "$htmldir/Templates/Forum/default/$FORM{\"cur_catimage$i\"}"; 212 $FORM{"catimage$i"} = q{}; 213 } 214 if ( $FORM{"theid$i"} eq q{} ) { next; } 215 $id = $FORM{"theid$i"}; 216 if ( $id !~ /^[0-9A-Za-z#%+-\.@^_]+$/xsm ) { 217 fatal_error( 'invalid_character', 218 "$admin_txt{'44'} $admin_txt{'241'}" ); 219 } 220 if ( $FORM{'screenornot'} ne 'catscreen' ) { 221 if ( $catinfo{"$id"} ) { fatal_error('cat_defined'); } 222 else { $cat{"$id"} = q{}; } 223 push @categoryorder, $id; 224 } 225 if ( !$FORM{"name$i"} ) { $FORM{"name$i"} = $id; } 226 227 $cname = $FORM{"name$i"}; 228 FromChars($cname); 229 ToHTML($cname); 230 231 if ( $FORM{"allowcol$i"} eq 'on' ) { $FORM{"allowcol$i"} = 1; } 232 else { $FORM{"allowcol$i"} = 0; } 233 234 if ( $FORM{"catrss$i"} eq 'on' ) { $FORM{"catrss$i"} = 1; } 235 else { $FORM{"catrss$i"} = 0; } 236 237 $catinfo{"$id"} = qq~$cname|$FORM{"catperms$i"}|$FORM{"allowcol$i"}|$FORM{"catimage$i"}|$FORM{"catrss$i"}~; 238 239 $yymain .= qq~$admin_txt{'830'} <i>$id</i> $admin_txt{'48'}<br />~; 240 } 241 Write_ForumMaster(); 242 243 $action_area = 'managecats'; 244 AdminTemplate(); 245 return; 246} 247 248sub ReorderCats { 249 is_admin_or_gmod(); 250 get_forum_master(); 251 if ( @categoryorder > 1 ) { 252 $catcnt = @categoryorder; 253 $catnum = $catcnt; 254 if ( $catcnt < 4 ) { $catcnt = 4; } 255 $categorylist = 256qq~<select name="selectcats" id="selectcats" size="$catcnt" style="width: 190px;">~; 257 foreach my $category (@categoryorder) { 258 chomp $category; 259 ( $categoryname, undef ) = split /\|/xsm, $catinfo{$category}, 2; 260 ToChars($categoryname); 261 if ( $category eq $INFO{'thecat'} ) { 262 $categorylist .= 263qq~<option value="$category" selected="selected">$categoryname</option>~; 264 } 265 else { 266 $categorylist .= 267 qq~<option value="$category">$categoryname</option>~; 268 } 269 } 270 $categorylist .= q~</select>~; 271 } 272 $yymain .= qq~ 273<br /><br /> 274<form action="$adminurl?action=reordercats2" method="post" accept-charset="$yymycharset"> 275 <table class="bordercolor border-space pad-cell" style="width:525px"> 276 <tr> 277 <td class="titlebg">$admin_img{'board'} <b>$admin_txt{'829'}</b></td> 278 </tr><tr> 279 <td class="windowbg">~; 280 281 if ( $catnum > 1 ) { 282 $yymain .= qq~ 283 <div style="float: left; width: 280px; text-align: left; margin-bottom: 4px;" class="small"><label for="selectcats">$admin_txt{'738'}</label></div> 284 <div style="float: left; width: 230px; text-align: center; margin-bottom: 4px;">$categorylist</div> 285 <div style="float: left; width: 280px; text-align: left; margin-bottom: 4px;" class="small">$admin_txt{'738a'}</div> 286 <div style="float: left; width: 230px; text-align: center; margin-bottom: 4px;"> 287 <input type="submit" value="$admin_txt{'739a'}" name="moveup" style="font-size: 11px; width: 95px;" class="button" /> 288 <input type="submit" value="$admin_txt{'739b'}" name="movedown" style="font-size: 11px; width: 95px;" class="button" /> 289 </div>~; 290 } 291 else { 292 $yymain .= qq~ 293 <div class="small" style="text-align: center; margin-bottom: 4px;">$admin_txt{'738b'}</div>~; 294 } 295 $yymain .= q~ 296 </td> 297 </tr> 298 </table> 299</form> 300~; 301 $yytitle = "$admin_txt{'829'}"; 302 $action_area = 'managecats'; 303 AdminTemplate(); 304 return; 305} 306 307sub ReorderCats2 { 308 is_admin_or_gmod(); 309 my $moveitem = $FORM{'selectcats'}; 310 get_forum_master(); 311 if ($moveitem) { 312 if ( $FORM{'moveup'} ) { 313 for my $i ( 0 .. ( @categoryorder - 1 ) ) { 314 if ( $categoryorder[$i] eq $moveitem && $i > 0 ) { 315 $j = $i - 1; 316 $categoryorder[$i] = $categoryorder[$j]; 317 $categoryorder[$j] = $moveitem; 318 last; 319 } 320 } 321 } 322 elsif ( $FORM{'movedown'} ) { 323 for my $i ( 0 .. ( @categoryorder - 1 ) ) { 324 if ( $categoryorder[$i] eq $moveitem && $i < $#categoryorder ) { 325 $j = $i + 1; 326 $categoryorder[$i] = $categoryorder[$j]; 327 $categoryorder[$j] = $moveitem; 328 last; 329 } 330 } 331 } 332 Write_ForumMaster(); 333 } 334 $yySetLocation = qq~$adminurl?action=reordercats;thecat=$moveitem~; 335 redirectexit(); 336 return; 337} 338 3391; 340