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">&nbsp;</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