############################################################################### # BookmarkSettings.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'; $settings_bookmarkspmver = 'YaBBForum 3.2'; if ( $action eq 'detailedversion' ) { return 1; } LoadLanguage('Bookmarks'); sub Bookmarks { is_admin_or_gmod(); if ($en_bookmarks) { $chk_bookmarks = q~ checked="checked"~; } get_forum_master(); *get_subboards = sub { my @x = @_; $indent += 2; foreach my $board (@x) { my $dash; if ( $indent > 2 ) { $dash = q{-}; } ( $boardname, $boardperms, $boardview ) = split /\|/xsm, $board{"$board"}; if ( ${ $uid . $board }{'rbin'} == 1 || $boardname =~ m/http:\/\//xsm ) { next; } ToChars($boardname); $sel_board = q{}; foreach ( split /\,\ /sm, $bm_boards ) { if ( $_ eq $board ) { $sel_board = q~ selected="selected"~; } } $board_list .= qq~~ . ( ' ' x $indent ) . ( $dash x ( $indent / 2 ) ) . qq~$boardname\n~; if ( $subboard{$board} ) { get_subboards( split /\|/xsm, $subboard{$board} ); } } $indent -= 2; }; foreach my $catid (@categoryorder) { @bdlist = split /,/xsm, $cat{$catid}; ( $catname, undef, undef, undef ) = split /\|/xsm, $catinfo{"$catid"}; ToChars($catname); $board_list .= qq~$catname\n~; foreach my $board (@bdlist) { ( $boardname, undef, undef ) = split /\|/xsm, $board{"$board"}; if ( ${ $uid . $board }{'ann'} == 1 || ${ $uid . $board }{'rbin'} == 1 || $boardname =~ m/http:\/\//xsm ) { next; } ToChars($boardname); $sel_board = q{}; } my $indent = -2; get_subboards(@bdlist); } fopen( BMARKS, "<$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 ); @bookmarks = ; fclose(BMARKS); chomp @bookmarks; $total_bookmarks = @bookmarks || 0; if (@bookmarks) { $show_bookmarks = qq~ $bookmark_txt{'01'} $bookmark_txt{'02'} $bookmark_txt{'03'} $admin_txt{'edit'} $admin_txt{'delete'} ~; foreach my $bookmark ( sort { $a <=> $b } @bookmarks ) { ( $bm_order, $bm_title, $bm_image, $bm_url, $bm_id ) = split /\|/xsm, $bookmark; $show_bookmarks .= qq~ $bm_title $bm_order ~; } } else { $show_bookmarks = qq~ $bookmark_txt{'08'} ~; } $yymain .= qq~ $admin_img{'prefimg'} $bookmark_txt{'09'} $bookmark_txt{'10'} $bookmark_txt{'22'}: $bookmark_txt{'11'} $board_list $admin_img{'prefimg'} $admin_txt{'10'} $admin_img{'prefimg'} $bookmark_txt{'12'} ($total_bookmarks) $show_bookmarks $admin_img{'prefimg'} $bookmark_txt{'13'} $bookmark_txt{'02'}:$bookmark_txt{'18'} $bookmark_txt{'01'}:$bookmark_txt{'19'} $bookmark_txt{'14'}:$bookmark_txt{'20'} $bookmark_txt{'03'}:$bookmark_txt{'21'} $admin_img{'prefimg'} $admin_txt{'10'} ~; $yytitle = $admintxt{'bookmarks1'}; $action_area = 'bookmarks'; AdminTemplate(); exit; } sub Bookmarks2 { is_admin_or_gmod(); $en_bookmarks = $FORM{'en_bookmarks'} || '0'; $bm_subcut = $FORM{'bm_subcut'} || '50'; $bm_boards = $FORM{'bm_boards'}; require Admin::NewSettings; SaveSettingsTo('Settings.pm'); if ( $action eq 'bookmarks2' ) { $yySetLocation = qq~$adminurl?action=bookmarks~; redirectexit(); } return; } sub AddBookmark { is_admin_or_gmod(); $bm_order = $FORM{'bm_order'}; $bm_title = $FORM{'bm_title'}; $bm_image = $FORM{'bm_image'}; $bm_url = $FORM{'bm_url'}; if ( $bm_title eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'02'}" ); } if ( $bm_image eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'01'}" ); } if ( $bm_url eq q{} ) { fatal_error( 'no_value', "$bookmark_txt{'14'}" ); } if ( $bm_order eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'03'}" ); } $bm_image = UploadFile('bm_image', 'Bookmarks', 'png jpg jpeg gif', '250', '0'); fopen( BMARKS, ">>$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 ); print {BMARKS} "$bm_order|$bm_title|$bm_image|$bm_url|$date\n" or croak "$croak{'print'} BookMark"; fclose(BMARKS); if ( $action eq 'bookmarks_add' ) { $yySetLocation = qq~$adminurl?action=bookmarks~; redirectexit(); } return; } sub DeleteBookmark { is_admin_or_gmod(); fopen( BMARKS, "<$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 ); @bookmarks = ; fclose(BMARKS); fopen( BMARKS, ">$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 ); print {BMARKS} grep { !/$FORM{'bookmark_id'}/xsm } @bookmarks or croak "$croak{'print'} BookMark"; fclose(BMARKS); foreach my $bookmark (@bookmarks) { chomp $bookmark; if ( $bookmark =~ /$FORM{'bookmark_id'}/xsm ) { $bm_delete = $bookmark; last; } } ( undef, undef, $bm_image, undef, undef ) = split /\|/xsm, $bm_delete; unlink "$htmldir/Bookmarks/$bm_image"; if ( $action eq 'bookmarks_delete' ) { $yySetLocation = qq~$adminurl?action=bookmarks~; redirectexit(); } return; } sub EditBookmark { is_admin_or_gmod(); $id = $FORM{'bookmark_id'}; my $bm_edit = {}; fopen( BMARKS, "<$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/Bookmarks.txt", 1 ); @bookmarks = ; fclose(BMARKS); foreach my $bookmark (@bookmarks) { chomp $bookmark; if ( $bookmark =~ /$id/xsm ) { $bm_edit = $bookmark; last; } } ( $bm_order, $bm_title, $bm_image, $bm_url, $bm_id ) = split /\|/xsm, $bm_edit; $yymain .= qq~ $admin_img{'prefimg'} $bookmark_txt{'16'} $bookmark_txt{'02'}:$bookmark_txt{'18'} $bookmark_txt{'01'}:$bookmark_txt{'19'} X $admin_txt{'current_img'}: $bm_image $bookmark_txt{'14'}:$bookmark_txt{'20'} $bookmark_txt{'03'}:$bookmark_txt{'21'} $admin_img{'prefimg'} $admin_txt{'10'} ~; $yytitle = $admintxt{'bookmarks1'}; AdminTemplate(); exit; } sub EditBookmark2 { is_admin_or_gmod(); $bm_order = $FORM{'bm_order'}; $bm_title = $FORM{'bm_title'}; $bm_image = $FORM{'bm_image'}; $bm_url = $FORM{'bm_url'}; $bm_id = $FORM{'bm_id'}; $bm_cur_image = $FORM{'bm_cur_image'}; if ( $bm_title eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'02'}" ); } if ( $bm_url eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'14'}" ); } if ( $bm_order eq q{} ) { fatal_error( 'invalid_value', "$bookmark_txt{'03'}" ); } if ( $bm_image ne q{} ) { $bm_image = UploadFile('bm_image', 'Bookmarks', 'png jpg jpeg gif', '250', '0'); unlink "$htmldir/Bookmarks/$bm_cur_image"; } else { $bm_image = $bm_cur_image; } fopen( BMARKS, "<$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/bookmarks.txt", 1 ); @bookmarks = ; fclose(BMARKS); @bookmark = grep { !/$bm_id/xsm } @bookmarks; push @bookmark, "$bm_order|$bm_title|$bm_image|$bm_url|$bm_id"; $bookmark = join q{}, @bookmark; fopen( BMARKS, ">$vardir/Bookmarks.txt" ) || fatal_error( 'cannot_open', "$vardir/bookmarks.txt", 1 ); print {BMARKS} "$bookmark\n" or croak "$croak{'print'} BookMark"; fclose(BMARKS); if ( $action eq 'bookmarks_edit2' ) { $yySetLocation = qq~$adminurl?action=bookmarks~; redirectexit(); } return; } 1;