############################################################################### # AdvancedTabs.pm # # $Date: 26.7.26 $ # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBB 2.6.14 # # Packaged: July 26, 2026 # # Distributed by: http://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 strict; # use warnings; no warnings qw(uninitialized once redefine); use CGI::Carp qw(fatalsToBrowser); our $VERSION = '2.6.14'; $advancedtabspmver = 'YaBB 2.6.14 $Revision: 2601 $'; if ( $action eq 'detailedversion' ) { return 1; } sub AddNewTab { GetTexttab(); $edittabs = qq~~; foreach (@AdvancedTabs) { $_ =~ /^([^\|]+)/xsm; if ( $texttab{$1} ) { $edittabs .= qq~~; } } $yyaddtab = qq~
~ . $brd_advanced_tabs; $yyaddtab =~ s/{yabb tabtext}/$tabmenu_txt{'tabtext'}/sm; $yyaddtab =~ s/{yabb taburl}/$tabmenu_txt{'taburl'}/sm; $yyaddtab =~ s/{yabb tabwin}/$tabmenu_txt{'tabwin'}/sm; $yyaddtab =~ s/{yabb tabview}/$tabmenu_txt{'tabview'}/sm; $yyaddtab =~ s/{yabb viewall}/$tabmenu_txt{'viewall'}/sm; $yyaddtab =~ s/{yabb viewmem}/$tabmenu_txt{'viewmem'}/sm; $yyaddtab =~ s/{yabb viewgm}/$tabmenu_txt{'viewgm'}/sm; $yyaddtab =~ s/{yabb viewadm}/$tabmenu_txt{'viewadm'}/sm; $yyaddtab =~ s/{yabb tabinsert}/$tabmenu_txt{'tabinsert'}/sm; $yyaddtab =~ s/{yabb addtab}/$tabmenu_txt{'addtab'}/sm; $yyaddtab =~ s/{yabb edittabs}/$edittabs/sm; return $yyaddtab; } sub AddNewTab2 { if ($iamadmin) { my $tabtext = $FORM{'tabtext'}; my $taburl = $FORM{'taburl'}; $taburl =~ s/\x22/\%22/gxsm; my $tabwin = $FORM{'tabwin'} ? 1 : 0; my $tabview = $FORM{'showto'}; my $tabafter = $FORM{'addafter'}; my $tmpusernamereq = 0; #Carsten's fix - nice and neat/';# if ( $taburl !~ /[ht|f]tp[s]{0,1}:\/\//xsm ) { $taburl = qq~http://$taburl~; } if ( $taburl =~ /$boardurl\/$yyexec\.$yyaext/ixsm && $taburl =~ /action\=(.*?)(\;|\Z)/ixsm ) { $taburl = 1; $tabaction = $1; $tmpisaction = 1; } elsif ($taburl =~ /$boardurl\/AdminIndex\.$yyaext/ixsm && $taburl =~ /action\=(.*?)(\;|\Z)/ixsm ) { $taburl = 2; $tabaction = $1; $tmpisaction = 1; } else { $tabaction = lc $tabtext; $tabaction =~ s/ /\_/gsm; $tmpisaction = 0; } $tabaction =~ s/\W/_/gxsm; map { if ( $_ =~ /^$tabaction\|?/xsm ) { fatal_error( 'tabext', $tabaction ); } } @AdvancedTabs; if ( $taburl == 1 || $taburl == 2 ) { if ( $FORM{'taburl'} =~ m/username\=/ixsm ) { $tmpusernamereq = 1; } $exttaburl = $FORM{'taburl'}; $exttaburl =~ s/(.*?)\?(.*?)/$2/gxsm; $exttaburl =~ s/action\=(.*?)(\;|\Z)//ixsm; $exttaburl =~ s/username\=(.*?)(\;|\Z)//ixsm; } else { $exttaburl = q{}; } ToHTML($tabtext); opendir DIR, $langdir; my @languages = readdir DIR; closedir DIR; foreach my $lngdir (@languages) { next if $lngdir eq q{.} || $lngdir eq q{..} || !-d "$langdir/$lngdir"; undef %tabtxt; if ( fopen( TABTXT, "$langdir/$lngdir/tabtext.txt" ) ) { %tabtxt = map { /(.*)\t(.*)/xsm } ; fclose(TABTXT); } $tabtxt{$tabaction} = $tabtext; fopen( TABTXT, ">$langdir/$lngdir/tabtext.txt" ) or fatal_error( 'file_not_open', "$langdir/$lngdir/tabtext.txt", 1 ); print {TABTXT} map { "$_\t$tabtxt{$_}\n" } keys %tabtxt or croak "$croak{'print'} TABTXT"; fclose(TABTXT); } my @new_tabs_order; if ( $tabafter eq 'thefront' ) { push @new_tabs_order, qq~$tabaction|$taburl|$tmpisaction|$tmpusernamereq|$tabview|$tabwin|$exttaburl~; } foreach (@AdvancedTabs) { push @new_tabs_order, $_; if (/^$tabafter\|?/xsm) { push @new_tabs_order, qq~$tabaction|$taburl|$tmpisaction|$tmpusernamereq|$tabview|$tabwin|$exttaburl~; } } @AdvancedTabs = @new_tabs_order; require Admin::NewSettings; SaveSettingsTo('Settings.pm'); } $yySetLocation = $scripturl; redirectexit(); return; } sub EditTab { get_micon(); GetTexttab(); $tabsave = $micon{'tabsave'}; $tabdel = $micon{'tabdel'}; %edittab= (); my @tablist = qw(home help search ml eventcal birthdaylist admin revalidatesession login register guestpm mycenter logout); ## Mod hook tablist ## ## End Mod hook tablist ## for (@tablist) { $edittab{$_} = qq~$tabfill$texttab{$_}$tabfill~; } my $selsize = 0; my $isexttabs = 0; for my $i ( 0 .. $#AdvancedTabs ) { if ( $AdvancedTabs[$i] =~ /\|/xsm ) { my ( $tab_key, $tmptab_url, $isaction, $username_req, $tab_access, $dummy ) = split /\|/xsm, $AdvancedTabs[$i], 6; my $enc_key = $tab_key; $enc_key =~ s/\&/%26/gxsm; $isexttabs++; if ( !$tab_access || ( $tab_access < 2 && !$iamguest ) || ( $tab_access < 3 && $iamgmod ) || $iamadmin ) { if ( $tmptab_url == 1 ) { $tab_url = qq~$scripturl~; } elsif ( $tmptab_url == 2 ) { $tab_url = qq~$boardurl/AdminIndex.$yyaext~; } else { $tab_url = qq~$tmptab_url~; } if ($isaction) { $tab_url .= qq~?action=$tab_key~; } if ($username_req) { $tab_url .= qq~;username=$useraccount{$username}~; } $inputlength = length $tabtxt{$tab_key}; $edittab{$tab_key} = qq~
~; $edittab{$tab_key} .= qq~~; $edittab{$tab_key} .= qq~~; $edittab{$tab_key} .= qq~ $tabdel~; $edittab{$tab_key} .= q~
~; $edittabs .= qq~~; $edittabmenu .= qq~
  • $edittab{$tab_key}
  • ~; $selsize++; } } elsif ( $edittab{ $AdvancedTabs[$i] } ) { $edittabs .= qq~~; $edittabmenu .= qq~
  • $edittab{ $AdvancedTabs[$i] }
  • ~; $selsize++; } } if ( $selsize > 11 ) { $selsize = 11; } $yyaddtab = $brd_advanced_tabs_edit; $yyaddtab =~ s/{yabb edittabmenu}/$edittabmenu/sm; $yyaddtab =~ s/{yabb reordertab}/$tabmenu_txt{'reordertab'}/sm; $yyaddtab =~ s/{yabb selsize}/$selsize/sm; $yyaddtab =~ s/{yabb edittabs}/$edittabs/sm; $yyaddtab =~ s/{yabb edittabs}/$edittabs/sm; $yyaddtab =~ s/{yabb tableft}/$tabmenu_txt{'tableft'}/sm; $yyaddtab =~ s/{yabb tabright}/$tabmenu_txt{'tabright'}/sm; $yyaddtab =~ s/{yabb edittext1}/$tabmenu_txt{'edittext1'}/sm; $yyaddtab =~ s/{yabb tabsave}/$tabsave/sm; $yyaddtab =~ s/{yabb edittext2}/$tabmenu_txt{'edittext2'}/sm; $yyaddtab =~ s/{yabb tabdel}/$tabdel/sm; $yyaddtab =~ s/{yabb edittext3}/$tabmenu_txt{'edittext3'}/sm; $yyaddtab =~ s/{yabb reordertext}/$tabmenu_txt{'reordertext'}/sm; undef %edittab; return; } sub EditTab2 { if ($iamadmin) { $tosave = $INFO{'savetab'}; $tosave =~ s/%26/&/gxsm; $tosavetxt = $FORM{$tosave}; ToHTML($tosavetxt); $tab_lang = $language ? $language : $lang; fopen( TABTXT, "$langdir/$tab_lang/tabtext.txt" ) or fatal_error( 'file_not_open', "$langdir/$tab_lang/tabtext.txt" ); %tabtxt = map { /(.*)\t(.*)/xsm } ; fclose(TABTXT); $tabtxt{$tosave} = $tosavetxt; fopen( TABTXT, ">$langdir/$tab_lang/tabtext.txt" ) or fatal_error( 'file_not_open', "$langdir/$tab_lang/tabtext.txt" ); print {TABTXT} map { "$_\t$tabtxt{$_}\n" } keys %tabtxt or croak "$croak{'print'} TABTXT"; fclose(TABTXT); } $yySetLocation = $scripturl; redirectexit(); return; } sub ReorderTab { my $moveitem = $FORM{'ordertabs'}; if ($iamadmin) { if ($moveitem) { if ( $FORM{'moveleft'} ) { for my $i ( 0 .. $#AdvancedTabs ) { if ( $AdvancedTabs[$i] =~ /^$moveitem\|?/xsm && $i > 0 ) { my $j = $i - 1; my $x = $AdvancedTabs[$i]; $AdvancedTabs[$i] = $AdvancedTabs[$j]; $AdvancedTabs[$j] = $x; last; } } } elsif ( $FORM{'moveright'} ) { for my $i ( 0 .. $#AdvancedTabs ) { if ( $AdvancedTabs[$i] =~ /^$moveitem\|?/xsm && $i < $#AdvancedTabs ) { my $j = $i + 1; my $x = $AdvancedTabs[$i]; $AdvancedTabs[$i] = $AdvancedTabs[$j]; $AdvancedTabs[$j] = $x; last; } } } } require Admin::NewSettings; SaveSettingsTo('Settings.pm'); } $yySetLocation = qq~$scripturl?action=edittab;thetab=$moveitem~; redirectexit(); return; } sub DeleteTab { if ($iamadmin) { my $todelete = $INFO{'deltab'}; $todelete =~ s/%26/&/gxsm; opendir DIR, $langdir; @languages = readdir DIR; closedir DIR; foreach my $lngdir (@languages) { if ( $lngdir eq q{.} || $lngdir eq q{..} || !-d "$langdir/$lngdir" || !-e "$langdir/$lngdir/tabtext.txt" ) { next; } fopen( TABTXT, "$langdir/$lngdir/tabtext.txt" ) or fatal_error( 'file_not_open', "$langdir/$lngdir/tabtext.txt" ); %tabtxt = map { /(.*)\t(.*)/xsm } ; fclose(TABTXT); delete $tabtxt{$todelete}; if ( !%tabtxt ) { unlink "$langdir/$lngdir/tabtext.txt"; } else { fopen( TABTXT, ">$langdir/$lngdir/tabtext.txt" ); print {TABTXT} map { "$_\t$tabtxt{$_}\n" } keys %tabtxt or croak "$croak{'print'} TABTXT"; fclose(TABTXT); } } my @new_tabs_order; foreach (@AdvancedTabs) { if ( $_ !~ /^$todelete\|?/xsm ) { push @new_tabs_order, $_; } } @AdvancedTabs = @new_tabs_order; require Admin::NewSettings; SaveSettingsTo('Settings.pm'); } $yySetLocation = $scripturl; redirectexit(); return; } sub GetTexttab { $texttab{'home'} = $img_txt{'103'}; $texttab{'help'} = $img_txt{'119'}; $texttab{'search'} = $img_txt{'182'}; $texttab{'ml'} = $img_txt{'331'}; $texttab{'eventcal'} = $img_txt{'eventcal'}; $texttab{'birthdaylist'} = $img_txt{'birthdaylist'}; $texttab{'admin'} = $img_txt{'2'}; $texttab{'revalidatesession'} = $img_txt{'34a'}; $texttab{'login'} = $img_txt{'34'}; $texttab{'register'} = $img_txt{'97'}; $texttab{'guestpm'} = $img_txt{'pmadmin'}; $texttab{'mycenter'} = $img_txt{'mycenter'}; $texttab{'logout'} = $img_txt{'108'}; ## Mod Hook GetTextTab ## ## End Mod Hook GetTextTab ## if ( !$tab_lang ) { GetTabtxt(); } foreach ( keys %tabtxt ) { $texttab{$_} = $tabtxt{$_}; } return; } 1;