1###############################################################################
2# BookmarkSettings.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-2010 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$settings_bookmarkspmver = 'YaBB 2.6.11 $Revision: 1611 $';
19if ( $action eq 'detailedversion' ) { return 1; }
20
21LoadLanguage('Bookmarks');
22
23sub Bookmarks {
24
25    is_admin_or_gmod();
26
27    if ($en_bookmarks) { $chk_bookmarks = q~ checked="checked"~; }
28    get_forum_master();
29
30 *get_subboards = sub {
31        my @x = @_;
32        $indent += 2;
33        foreach my $board (@x) {
34            my $dash;
35            if ( $indent > 2 ) { $dash = q{-}; }
36
37            ( $boardname, $boardperms, $boardview ) =
38              split /\|/xsm, $board{"$board"};
39            if ( ${ $uid . $board }{'rbin'} == 1
40                || $boardname =~ m/http:\/\//xsm )
41            {
42                next;
43            }
44            ToChars($boardname);
45            $sel_board = q{};
46            foreach ( split /\,\ /sm, $bm_boards ) {
47                if ( $_ eq $board ) { $sel_board = q~ selected="selected"~; }
48            }
49            $board_list .=
50                qq~<option value="$board"$sel_board>~
51              . ( '&nbsp;' x $indent )
52              . ( $dash x ( $indent / 2 ) )
53              . qq~$boardname</option>\n~;
54            if ( $subboard{$board} ) {
55                get_subboards( split /\|/xsm, $subboard{$board} );
56            }
57        }
58        $indent -= 2;
59    };
60
61    foreach my $catid (@categoryorder) {
62        @bdlist = split /,/xsm, $cat{$catid};
63        ( $catname, undef, undef, undef ) = split /\|/xsm, $catinfo{"$catid"};
64        ToChars($catname);
65        $board_list .= qq~<option disabled="disabled">$catname</option>\n~;
66        foreach my $board (@bdlist) {
67            ( $boardname, undef, undef ) = split /\|/xsm, $board{"$board"};
68            if (   ${ $uid . $board }{'ann'} == 1
69                || ${ $uid . $board }{'rbin'} == 1
70                || $boardname =~ m/http:\/\//xsm )
71            {
72                next;
73            }
74            ToChars($boardname);
75            $sel_board = q{};
76        }
77        my $indent = -2;
78        get_subboards(@bdlist);
79    }
80
81    fopen( BMARKS, "<$vardir/Bookmarks.txt" )
82      || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 );
83    @bookmarks = <BMARKS>;
84    fclose(BMARKS);
85    chomp @bookmarks;
86
87    $total_bookmarks = @bookmarks || 0;
88
89    if (@bookmarks) {
90        $show_bookmarks = qq~
91    <tr class="catbg" style="font-weight: bold; font-size: 11px; text-align: center;">
92        <td>$bookmark_txt{'01'}</td>
93        <td>$bookmark_txt{'02'}</td>
94        <td>$bookmark_txt{'03'}</td>
95        <td>$admin_txt{'edit'}</td>
96        <td>$admin_txt{'delete'}</td>
97    </tr>~;
98        foreach my $bookmark ( sort { $a <=> $b } @bookmarks ) {
99            ( $bm_order, $bm_title, $bm_image, $bm_url, $bm_id ) =
100              split /\|/xsm, $bookmark;
101            $show_bookmarks .= qq~<tr class="windowbg2">
102        <td><img src="$yyhtml_root/Bookmarks/$bm_image" alt="$bm_title" title="$bm_title" /></td>
103        <td>$bm_title</td>
104        <td>$bm_order</td>
105        <td>
106        <form action="$adminurl?action=bookmarks_edit" method="post">
107            <input type="hidden" name="bookmark_id" value="$bm_id" />
108            <input class="button" type="submit" value="$admin_txt{'edit'}" />
109        </form>
110        </td>
111        <td>
112        <form action="$adminurl?action=bookmarks_delete" method="post">
113            <input type="hidden" name="bookmark_id" value="$bm_id" />
114            <input class="button" type="submit" value="$admin_txt{'delete'}" onclick="return confirm('$bookmark_txt{'05'}');"/>
115        </form>
116        </td>
117    </tr>~;
118        }
119    }
120    else {
121        $show_bookmarks = qq~
122    <tr class="windowbg">
123        <td>$bookmark_txt{'08'}</td>
124    </tr>~;
125    }
126
127    $yymain .= qq~
128<form action="$adminurl?action=bookmarks2" method="post">
129<div class="bordercolor rightboxdiv">
130    <table class="border-space pad-cell" style="margin-bottom: .5em;">
131        <colgroup>
132            <col style="width:50%" />
133            <col style="width:50%" />
134        </colgroup>
135        <tr>
136            <th class="titlebg" colspan="2">$admin_img{'prefimg'} $bookmark_txt{'09'}</th>
137        </tr><tr class="windowbg2 vtop">
138            <td><label for="en_bookmarks">$bookmark_txt{'10'}</label></td>
139            <td><input type="checkbox" name="en_bookmarks" id="en_bookmarks" value="1"$chk_bookmarks /></td>
140        </tr><tr class="windowbg2 vtop">
141            <td><label for="bm_subcut">$bookmark_txt{'22'}:</label></td>
142            <td><input type="text" name="bm_subcut" id="bm_subcut" size="3" value="$bm_subcut" /></td>
143        </tr><tr class="windowbg2 vtop">
144            <td><label for="bm_boards">$bookmark_txt{'11'}</label></td>
145            <td>
146                <select multiple="multiple" name="bm_boards" id="bm_boards" size="8">
147                $board_list
148                </select>
149            </td>
150        </tr>
151    </table>
152</div>
153<div class="bordercolor rightboxdiv">
154    <table class="border-space pad-cell" style="margin-bottom: .5em;">
155        <tr>
156            <th class="titlebg" style="text-align: left; vertical-align: middle;" colspan="2">$admin_img{'prefimg'} $admin_txt{'10'}</th>
157        </tr><tr>
158            <td class="catbg" style="text-align: center; vertical-align: middle;" colspan="2"><input class="button" type="submit" value="$admin_txt{'10'}" /></td>
159        </tr>
160    </table>
161</div>
162</form>
163<div class="bordercolor  rightboxdiv">
164    <table class="border-space pad-cell" style="margin-bottom: .5em;">
165        <colgroup>
166            <col style="width:10%" />
167            <col style="width:auto" />
168            <col style="width:10%" />
169            <col style="width:7%" span="2" />
170        </colgroup>
171        <tr>
172            <th class="titlebg" colspan="5">$admin_img{'prefimg'} $bookmark_txt{'12'} ($total_bookmarks)</th>
173        </tr>
174        $show_bookmarks
175    </table>
176</div>
177<form action="$adminurl?action=bookmarks_add" method="post" enctype="multipart/form-data">
178<div class="bordercolor  rightboxdiv">
179    <table class="border-space pad-cell" style="margin-bottom: .5em;">
180        <colgroup>
181            <col style="width:50%" />
182            <col style="width:50%" />
183        </colgroup>
184        <tr>
185            <th class="titlebg" colspan="2">$admin_img{'prefimg'} $bookmark_txt{'13'}</th>
186        </tr><tr class="windowbg2 vtop">
187            <td><label for="bm_title"><span style="font-weight: bold;">$bookmark_txt{'02'}:</span><br /><span class="small">$bookmark_txt{'18'}</span></label></td>
188            <td><input type="text" name="bm_title" id="bm_title" size="35" /></td>
189        </tr><tr class="windowbg2 vtop">
190            <td><label for="bm_image"><span style="font-weight: bold;">$bookmark_txt{'01'}:</span><br /><span class="small">$bookmark_txt{'19'}</span></label></td>
191            <td><input type="file" name="bm_image" id="bm_image" size="35" /></td>
192        </tr><tr class="windowbg2 vtop">
193            <td><label for="bm_url"><span style="font-weight: bold;">$bookmark_txt{'14'}:</span><br /><span class="small">$bookmark_txt{'20'}</span></label></td>
194            <td><input type="text" name="bm_url" id="bm_url" size="70" /></td>
195        </tr><tr class="windowbg2 vtop">
196            <td><label for="bm_order"><span style="font-weight: bold;">$bookmark_txt{'03'}:</span><br /><span class="small">$bookmark_txt{'21'}</span></label></td>
197            <td><input type="text" name="bm_order" id="bm_order" size="3" /></td>
198        </tr>
199    </table>
200</div>
201<div class="bordercolor rightboxdiv">
202    <table class="border-space pad-cell">
203        <tr>
204            <th class="titlebg" colspan="2">$admin_img{'prefimg'} $admin_txt{'10'}</th>
205        </tr><tr>
206            <td class="catbg center" colspan="2"><input class="button" type="submit" value="$bookmark_txt{'15'}" /></td>
207        </tr>
208    </table>
209</div>
210</form>~;
211
212    $yytitle     = $admintxt{'bookmarks1'};
213    $action_area = 'bookmarks';
214    AdminTemplate();
215    exit;
216}
217
218sub Bookmarks2 {
219
220    is_admin_or_gmod();
221
222    $en_bookmarks = $FORM{'en_bookmarks'} || '0';
223    $bm_subcut    = $FORM{'bm_subcut'}    || '50';
224    $bm_boards    = $FORM{'bm_boards'};
225
226    require Admin::NewSettings;
227    SaveSettingsTo('Settings.pm');
228
229    if ( $action eq 'bookmarks2' ) {
230        $yySetLocation = qq~$adminurl?action=bookmarks~;
231        redirectexit();
232    }
233    return;
234}
235
236sub AddBookmark {
237
238    is_admin_or_gmod();
239
240    $bm_order = $FORM{'bm_order'};
241    $bm_title = $FORM{'bm_title'};
242    $bm_image = $FORM{'bm_image'};
243    $bm_url   = $FORM{'bm_url'};
244
245    if ( $bm_title eq q{} ) {
246        fatal_error( 'invalid_value', "$bookmark_txt{'02'}" );
247    }
248    if ( $bm_image eq q{} ) {
249        fatal_error( 'invalid_value', "$bookmark_txt{'01'}" );
250    }
251    if ( $bm_url eq q{} ) { fatal_error( 'no_value', "$bookmark_txt{'14'}" ); }
252    if ( $bm_order eq q{} ) {
253        fatal_error( 'invalid_value', "$bookmark_txt{'03'}" );
254    }
255
256    $bm_image = UploadFile('bm_image', 'Bookmarks', 'png jpg jpeg gif', '250', '0');
257
258    fopen( BMARKS, ">>$vardir/Bookmarks.txt" )
259      || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 );
260    print {BMARKS} "$bm_order|$bm_title|$bm_image|$bm_url|$date\n"
261      or croak "$croak{'print'} BookMark";
262    fclose(BMARKS);
263
264    if ( $action eq 'bookmarks_add' ) {
265        $yySetLocation = qq~$adminurl?action=bookmarks~;
266        redirectexit();
267    }
268    return;
269}
270
271sub DeleteBookmark {
272
273    is_admin_or_gmod();
274
275    fopen( BMARKS, "<$vardir/Bookmarks.txt" )
276      || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 );
277    @bookmarks = <BMARKS>;
278    fclose(BMARKS);
279
280    fopen( BMARKS, ">$vardir/Bookmarks.txt" )
281      || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 );
282    print {BMARKS} grep { !/$FORM{'bookmark_id'}/xsm } @bookmarks
283      or croak "$croak{'print'} BookMark";
284    fclose(BMARKS);
285
286    foreach my $bookmark (@bookmarks) {
287        chomp $bookmark;
288        if ( $bookmark =~ /$FORM{'bookmark_id'}/xsm ) {
289            $bm_delete = $bookmark;
290            last;
291        }
292    }
293    ( undef, undef, $bm_image, undef, undef ) = split /\|/xsm,
294      $bm_delete;
295
296    unlink "$htmldir/Bookmarks/$bm_image";
297
298    if ( $action eq 'bookmarks_delete' ) {
299        $yySetLocation = qq~$adminurl?action=bookmarks~;
300        redirectexit();
301    }
302    return;
303}
304
305sub EditBookmark {
306
307    is_admin_or_gmod();
308
309    $id = $FORM{'bookmark_id'};
310    my $bm_edit = {};
311
312    fopen( BMARKS, "<$vardir/Bookmarks.txt" )
313      || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 );
314    @bookmarks = <BMARKS>;
315    fclose(BMARKS);
316
317    foreach my $bookmark (@bookmarks) {
318        chomp $bookmark;
319        if ( $bookmark =~ /$id/xsm ) {
320            $bm_edit = $bookmark;
321            last;
322        }
323    }
324    ( $bm_order, $bm_title, $bm_image, $bm_url, $bm_id ) = split /\|/xsm,
325      $bm_edit;
326
327    $yymain .= qq~
328<form action="$adminurl?action=bookmarks_edit2" method="post" enctype="multipart/form-data">
329<div class="bordercolor rightboxdiv">
330    <table class="border-space pad-cell" style="margin-bottom: .5em;">
331        <colgroup>
332            <col style="width:50%" />
333            <col style="width:50%" />
334        </colgroup>
335        <tr>
336            <th class="titlebg"colspan="2">$admin_img{'prefimg'} $bookmark_txt{'16'}</th>
337        </tr><tr class="windowbg2 vtop">
338            <td><label for="bm_title"><span style="font-weight: bold;">$bookmark_txt{'02'}:</span><br /><span class="small">$bookmark_txt{'18'}</span></label></td>
339            <td><input type="text" name="bm_title" id="bm_title" size="35" value="$bm_title" /></td>
340        </tr><tr class="windowbg2 vtop">
341            <td><label for="bm_image"><span style="font-weight: bold;">$bookmark_txt{'01'}:</span><br /><span class="small">$bookmark_txt{'19'}</span></label></td>
342            <td>
343                <input type="file" name="bm_image" id="bm_image" size="35" />
344                <input type="hidden" name="bm_cur_image" value="$bm_image" /> <span class="cursor small bold" title="$admin_txt{'remove_file'}" onclick="document.getElementById('bm_image').value='';">X</span>
345                <div class="small bold">$admin_txt{'current_img'}: <a href="$yyhtml_root/Bookmarks/$bm_image" target="_blank">$bm_image</a></div>
346            </td>
347        </tr><tr class="windowbg2 vtop">
348            <td><label for="bm_url"><span style="font-weight: bold;">$bookmark_txt{'14'}:</span><br /><span class="small">$bookmark_txt{'20'}</span></label></td>
349            <td><input type="text" name="bm_url" id="bm_url" size="70" value="$bm_url" /></td>
350        </tr><tr class="windowbg2 vtop">
351            <td><label for="bm_order"><span style="font-weight: bold;">$bookmark_txt{'03'}:</span><br /><span class="small">$bookmark_txt{'21'}</span></label></td>
352            <td><input type="text" name="bm_order" id="bm_order" size="3" value="$bm_order" /><input type="hidden" name="bm_id" value="$bm_id" /></td>
353        </tr>
354    </table>
355</div>
356<div class="bordercolor rightboxdiv">
357    <table class="border-space pad-cell">
358        <tr>
359            <th class="titlebg" colspan="2">$admin_img{'prefimg'} $admin_txt{'10'}</th>
360        </tr><tr>
361            <td class="catbg center" colspan="2"><input class="button" type="submit" value="$admin_txt{'10'}" />&nbsp;<input type="button" class="button" value="$bookmark_txt{'17'}" onclick="location.href='$adminurl?action=bookmarks';" /></td>
362        </tr>
363    </table>
364</div>
365</form>~;
366
367    $yytitle = $admintxt{'bookmarks1'};
368    AdminTemplate();
369    exit;
370}
371
372sub EditBookmark2 {
373
374    is_admin_or_gmod();
375
376    $bm_order = $FORM{'bm_order'};
377    $bm_title = $FORM{'bm_title'};
378    $bm_image = $FORM{'bm_image'};
379    $bm_url   = $FORM{'bm_url'};
380    $bm_id    = $FORM{'bm_id'};
381    $bm_cur_image = $FORM{'bm_cur_image'};
382
383    if ( $bm_title eq q{} ) {
384        fatal_error( 'invalid_value', "$bookmark_txt{'02'}" );
385    }
386    if ( $bm_url eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'14'}" ); }
387    if ( $bm_order eq q{} ) {
388        fatal_error( 'invalid_value', "$bookmark_txt{'03'}" );
389    }
390
391    if ( $bm_image ne q{} ) {
392        $bm_image = UploadFile('bm_image', 'Bookmarks', 'png jpg jpeg gif', '250', '0');
393        unlink "$htmldir/Bookmarks/$bm_cur_image";
394    }
395    else {
396        $bm_image = $bm_cur_image;
397    }
398
399    fopen( BMARKS, "<$vardir/Bookmarks.txt" )
400      || fatal_error( 'cannot_open', "$vardir/bookmarks.txt", 1 );
401    @bookmarks = <BMARKS>;
402    fclose(BMARKS);
403
404    @bookmark = grep { !/$bm_id/xsm } @bookmarks;
405    push @bookmark, "$bm_order|$bm_title|$bm_image|$bm_url|$bm_id";
406    $bookmark = join q{}, @bookmark;
407
408    fopen( BMARKS, ">$vardir/Bookmarks.txt" )
409      || fatal_error( 'cannot_open', "$vardir/bookmarks.txt", 1 );
410    print {BMARKS} "$bookmark\n" or croak "$croak{'print'} BookMark";
411    fclose(BMARKS);
412
413    if ( $action eq 'bookmarks_edit2' ) {
414        $yySetLocation = qq~$adminurl?action=bookmarks~;
415        redirectexit();
416    }
417    return;
418}
419
4201;
421