1############################################################################### 2# AdvancedTabs.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############################################################################### 15# use strict; 16# use warnings; 17no warnings qw(uninitialized once redefine); 18use CGI::Carp qw(fatalsToBrowser); 19our $VERSION = '2.6.11'; 20 21$advancedtabspmver = 'YaBB 2.6.11 $Revision: 1611 $'; 22if ( $action eq 'detailedversion' ) { return 1; } 23 24sub AddNewTab { 25 GetTexttab(); 26 27 $edittabs = qq~<option value="thefront">$tabmenu_txt{'tabfront'}</option>~; 28 foreach (@AdvancedTabs) { 29 $_ =~ /^([^\|]+)/xsm; 30 if ( $texttab{$1} ) { 31 $edittabs .= qq~<option value="$1">$texttab{$1}</option>~; 32 } 33 } 34 35 $yyaddtab = qq~ 36 <br /> 37 <script type="text/javascript"> 38 function submittab() { 39 if (window.submitted) return false; 40 window.submitted = true; 41 return true; 42 } 43 44 function checkTab(theForm) { 45 var isError = 0; 46 var tabError = "$tabmenu_txt{'taberr'}\\n"; 47 48 if (theForm.tabtext.value == "") { tabError += "\\n- $tabmenu_txt{'texterr'}"; if(isError == 0) isError = 1; } 49 if (theForm.taburl.value == "") { tabError += "\\n- $tabmenu_txt{'urlerr'}"; if(isError == 0) isError = 2; } 50 if(isError >= 1) { 51 alert(tabError); 52 if(isError == 1) theForm.tabtext.focus(); 53 else if(isError == 2) theForm.taburl.focus(); 54 else if(isError == 3) theForm.tabtext.focus(); 55 return false; 56 } 57 return true 58 } 59 </script>~ 60 . $brd_advanced_tabs; 61 $yyaddtab =~ s/{yabb tabtext}/$tabmenu_txt{'tabtext'}/sm; 62 $yyaddtab =~ s/{yabb taburl}/$tabmenu_txt{'taburl'}/sm; 63 $yyaddtab =~ s/{yabb tabwin}/$tabmenu_txt{'tabwin'}/sm; 64 $yyaddtab =~ s/{yabb tabview}/$tabmenu_txt{'tabview'}/sm; 65 $yyaddtab =~ s/{yabb viewall}/$tabmenu_txt{'viewall'}/sm; 66 $yyaddtab =~ s/{yabb viewmem}/$tabmenu_txt{'viewmem'}/sm; 67 $yyaddtab =~ s/{yabb viewgm}/$tabmenu_txt{'viewgm'}/sm; 68 $yyaddtab =~ s/{yabb viewadm}/$tabmenu_txt{'viewadm'}/sm; 69 $yyaddtab =~ s/{yabb tabinsert}/$tabmenu_txt{'tabinsert'}/sm; 70 $yyaddtab =~ s/{yabb addtab}/$tabmenu_txt{'addtab'}/sm; 71 $yyaddtab =~ s/{yabb edittabs}/$edittabs/sm; 72 73 return $yyaddtab; 74} 75 76sub AddNewTab2 { 77 if ($iamadmin) { 78 my $tabtext = $FORM{'tabtext'}; 79 my $taburl = $FORM{'taburl'}; 80 $taburl =~ s/"/\%22/gxsm; #"; 81 my $tabwin = $FORM{'tabwin'} ? 1 : 0; 82 my $tabview = $FORM{'showto'}; 83 my $tabafter = $FORM{'addafter'}; 84 my $tmpusernamereq = 0; 85 86 #Carsten's fix - nice and neat/';# 87 if ( $taburl !~ /[ht|f]tp[s]{0,1}:\/\//xsm ) { 88 $taburl = qq~http://$taburl~; 89 } 90 if ( $taburl =~ /$boardurl\/$yyexec\.$yyaext/ixsm 91 && $taburl =~ /action\=(.*?)(\;|\Z)/ixsm ) 92 { 93 $taburl = 1; 94 $tabaction = $1; 95 $tmpisaction = 1; 96 } 97 elsif ($taburl =~ /$boardurl\/AdminIndex\.$yyaext/ixsm 98 && $taburl =~ /action\=(.*?)(\;|\Z)/ixsm ) 99 { 100 $taburl = 2; 101 $tabaction = $1; 102 $tmpisaction = 1; 103 } 104 else { 105 $tabaction = lc $tabtext; 106 $tabaction =~ s/ /\_/gsm; 107 $tmpisaction = 0; 108 } 109 $tabaction =~ s/\W/_/gxsm; 110 map { 111 if ( $_ =~ /^$tabaction\|?/xsm ) 112 { 113 fatal_error( 'tabext', $tabaction ); 114 } 115 } @AdvancedTabs; 116 117 if ( $taburl == 1 || $taburl == 2 ) { 118 if ( $FORM{'taburl'} =~ m/username\=/ixsm ) { $tmpusernamereq = 1; } 119 $exttaburl = $FORM{'taburl'}; 120 $exttaburl =~ s/(.*?)\?(.*?)/$2/gxsm; 121 $exttaburl =~ s/action\=(.*?)(\;|\Z)//ixsm; 122 $exttaburl =~ s/username\=(.*?)(\;|\Z)//ixsm; 123 } 124 else { 125 $exttaburl = q{}; 126 } 127 128 ToHTML($tabtext); 129 130 opendir DIR, $langdir; 131 my @languages = readdir DIR; 132 closedir DIR; 133 foreach my $lngdir (@languages) { 134 next 135 if $lngdir eq q{.} || $lngdir eq q{..} || !-d "$langdir/$lngdir"; 136 undef %tabtxt; 137 if ( fopen( TABTXT, "$langdir/$lngdir/tabtext.txt" ) ) { 138 %tabtxt = map { /(.*)\t(.*)/xsm } <TABTXT>; 139 fclose(TABTXT); 140 } 141 $tabtxt{$tabaction} = $tabtext; 142 fopen( TABTXT, ">$langdir/$lngdir/tabtext.txt" ) 143 or fatal_error( 'file_not_open', "$langdir/$lngdir/tabtext.txt", 144 1 ); 145 print {TABTXT} map { "$_\t$tabtxt{$_}\n" } keys %tabtxt 146 or croak "$croak{'print'} TABTXT"; 147 fclose(TABTXT); 148 } 149 150 my @new_tabs_order; 151 if ( $tabafter eq 'thefront' ) { 152 push @new_tabs_order, 153qq~$tabaction|$taburl|$tmpisaction|$tmpusernamereq|$tabview|$tabwin|$exttaburl~; 154 } 155 foreach (@AdvancedTabs) { 156 push @new_tabs_order, $_; 157 if (/^$tabafter\|?/xsm) { 158 push @new_tabs_order, 159qq~$tabaction|$taburl|$tmpisaction|$tmpusernamereq|$tabview|$tabwin|$exttaburl~; 160 } 161 } 162 @AdvancedTabs = @new_tabs_order; 163 164 require Admin::NewSettings; 165 SaveSettingsTo('Settings.pm'); 166 } 167 168 $yySetLocation = $scripturl; 169 redirectexit(); 170 return; 171} 172 173sub EditTab { 174 get_micon(); 175 GetTexttab(); 176 $tabsave = $micon{'tabsave'}; 177 $tabdel = $micon{'tabdel'}; 178 %edittab= (); 179 my @tablist = qw(home help search ml eventcal birthdaylist admin revalidatesession login register guestpm mycenter logout); 180## Mod hook tablist ## 181## End Mod hook tablist ## 182 for (@tablist) { 183 $edittab{$_} = qq~<span class="tabstyle">$tabfill$texttab{$_}$tabfill</span>~; 184 } 185 186 my $selsize = 0; 187 my $isexttabs = 0; 188 for my $i ( 0 .. ( @AdvancedTabs - 1 ) ) { 189 if ( $AdvancedTabs[$i] =~ /\|/xsm ) { 190 my ( $tab_key, $tmptab_url, $isaction, $username_req, $tab_access, 191 $dummy ) 192 = split /\|/xsm, $AdvancedTabs[$i], 6; 193 my $enc_key = $tab_key; 194 $enc_key =~ s/\&/%26/gxsm; 195 $isexttabs++; 196 if ( !$tab_access 197 || ( $tab_access < 2 && !$iamguest ) 198 || ( $tab_access < 3 && $iamgmod ) 199 || $iamadmin ) 200 { 201 if ( $tmptab_url == 1 ) { $tab_url = qq~$scripturl~; } 202 elsif ( $tmptab_url == 2 ) { 203 $tab_url = qq~$boardurl/AdminIndex.$yyaext~; 204 } 205 else { $tab_url = qq~$tmptab_url~; } 206 if ($isaction) { $tab_url .= qq~?action=$tab_key~; } 207 if ($username_req) { 208 $tab_url .= qq~;username=$useraccount{$username}~; 209 } 210 $inputlength = length $tabtxt{$tab_key}; 211 $edittab{$tab_key} = 212qq~<form action="$scripturl?action=edittab2;savetab=$enc_key" method="post" name="$tab_key$isexttabs" style="display: inline; white-space: nowrap;" accept-charset="$yymycharset">~; 213 $edittab{$tab_key} .= 214qq~<input type="text" name="$tab_key" id="$tab_key" value="$tabtxt{$tab_key}" size="$inputlength" class="edittab" />~; 215 $edittab{$tab_key} .= 216qq~<input type="image" src="$micon_bg{'tabsave'}" alt="$tabmenu_txt{'savetab'}" title="$tabmenu_txt{'savetab'}" class="editttab_img" />~; 217 $edittab{$tab_key} .= 218qq~ <a href="$scripturl?action=deletetab;deltab=$enc_key" style="padding:0; margin:0">$tabdel</a>~; 219 $edittab{$tab_key} .= q~</form>~; 220 $edittabs .= 221 qq~<option value="$tab_key"~ 222 . ( 223 $tab_key eq $INFO{'thetab'} ? ' selected="selected"' : q{} ) 224 . qq~>$texttab{$tab_key}</option>~; 225 $edittabmenu .= qq~<li>$edittab{$tab_key}</li>~; 226 $selsize++; 227 } 228 } 229 elsif ( $edittab{ $AdvancedTabs[$i] } ) { 230 $edittabs .= qq~<option value="$AdvancedTabs[$i]"~ 231 . ( 232 $AdvancedTabs[$i] eq $INFO{'thetab'} 233 ? ' selected="selected"' 234 : q{} 235 ) . qq~>$texttab{$AdvancedTabs[$i]}</option>~; 236 $edittabmenu .= qq~<li>$edittab{ $AdvancedTabs[$i] }</li>~; 237 $selsize++; 238 } 239 } 240 if ( $selsize > 11 ) { $selsize = 11; } 241 242 $yyaddtab = $brd_advanced_tabs_edit; 243 $yyaddtab =~ s/{yabb edittabmenu}/$edittabmenu/sm; 244 $yyaddtab =~ s/{yabb reordertab}/$tabmenu_txt{'reordertab'}/sm; 245 $yyaddtab =~ s/{yabb selsize}/$selsize/sm; 246 $yyaddtab =~ s/{yabb edittabs}/$edittabs/sm; 247 $yyaddtab =~ s/{yabb edittabs}/$edittabs/sm; 248 $yyaddtab =~ s/{yabb tableft}/$tabmenu_txt{'tableft'}/sm; 249 $yyaddtab =~ s/{yabb tabright}/$tabmenu_txt{'tabright'}/sm; 250 $yyaddtab =~ s/{yabb edittext1}/$tabmenu_txt{'edittext1'}/sm; 251 $yyaddtab =~ s/{yabb tabsave}/$tabsave/sm; 252 $yyaddtab =~ s/{yabb edittext2}/$tabmenu_txt{'edittext2'}/sm; 253 $yyaddtab =~ s/{yabb tabdel}/$tabdel/sm; 254 $yyaddtab =~ s/{yabb edittext3}/$tabmenu_txt{'edittext3'}/sm; 255 $yyaddtab =~ s/{yabb reordertext}/$tabmenu_txt{'reordertext'}/sm; 256 257 undef %edittab; 258 return; 259} 260 261sub EditTab2 { 262 if ($iamadmin) { 263 $tosave = $INFO{'savetab'}; 264 $tosave =~ s/%26/&/gxsm; 265 $tosavetxt = $FORM{$tosave}; 266 ToHTML($tosavetxt); 267 $tab_lang = $language ? $language : $lang; 268 fopen( TABTXT, "$langdir/$tab_lang/tabtext.txt" ) 269 or fatal_error( 'file_not_open', "$langdir/$tab_lang/tabtext.txt" ); 270 %tabtxt = map { /(.*)\t(.*)/xsm } <TABTXT>; 271 fclose(TABTXT); 272 $tabtxt{$tosave} = $tosavetxt; 273 fopen( TABTXT, ">$langdir/$tab_lang/tabtext.txt" ) 274 or fatal_error( 'file_not_open', "$langdir/$tab_lang/tabtext.txt" ); 275 print {TABTXT} map { "$_\t$tabtxt{$_}\n" } keys %tabtxt 276 or croak "$croak{'print'} TABTXT"; 277 fclose(TABTXT); 278 } 279 280 $yySetLocation = $scripturl; 281 redirectexit(); 282 return; 283} 284 285sub ReorderTab { 286 my $moveitem = $FORM{'ordertabs'}; 287 if ($iamadmin) { 288 if ($moveitem) { 289 if ( $FORM{'moveleft'} ) { 290 for my $i ( 0 .. ( @AdvancedTabs - 1 ) ) { 291 if ( $AdvancedTabs[$i] =~ /^$moveitem\|?/xsm && $i > 0 ) { 292 my $j = $i - 1; 293 my $x = $AdvancedTabs[$i]; 294 $AdvancedTabs[$i] = $AdvancedTabs[$j]; 295 $AdvancedTabs[$j] = $x; 296 last; 297 } 298 } 299 } 300 elsif ( $FORM{'moveright'} ) { 301 for my $i ( 0 .. ( @AdvancedTabs - 1 ) ) { 302 if ( $AdvancedTabs[$i] =~ /^$moveitem\|?/xsm 303 && $i < $#AdvancedTabs ) 304 { 305 my $j = $i + 1; 306 my $x = $AdvancedTabs[$i]; 307 $AdvancedTabs[$i] = $AdvancedTabs[$j]; 308 $AdvancedTabs[$j] = $x; 309 last; 310 } 311 } 312 } 313 } 314 315 require Admin::NewSettings; 316 SaveSettingsTo('Settings.pm'); 317 } 318 319 $yySetLocation = qq~$scripturl?action=edittab;thetab=$moveitem~; 320 redirectexit(); 321 return; 322} 323 324sub DeleteTab { 325 if ($iamadmin) { 326 my $todelete = $INFO{'deltab'}; 327 $todelete =~ s/%26/&/gxsm; 328 329 opendir DIR, $langdir; 330 @languages = readdir DIR; 331 closedir DIR; 332 foreach my $lngdir (@languages) { 333 if ( $lngdir eq q{.} 334 || $lngdir eq q{..} 335 || !-d "$langdir/$lngdir" 336 || !-e "$langdir/$lngdir/tabtext.txt" ) 337 { 338 next; 339 } 340 fopen( TABTXT, "$langdir/$lngdir/tabtext.txt" ) 341 or fatal_error( 'file_not_open', "$langdir/$lngdir/tabtext.txt" ); 342 %tabtxt = map { /(.*)\t(.*)/xsm } <TABTXT>; 343 fclose(TABTXT); 344 delete $tabtxt{$todelete}; 345 if ( !%tabtxt ) { 346 unlink "$langdir/$lngdir/tabtext.txt"; 347 } 348 else { 349 fopen( TABTXT, ">$langdir/$lngdir/tabtext.txt" ); 350 print {TABTXT} map { "$_\t$tabtxt{$_}\n" } keys %tabtxt 351 or croak "$croak{'print'} TABTXT"; 352 fclose(TABTXT); 353 } 354 } 355 356 my @new_tabs_order; 357 foreach (@AdvancedTabs) { 358 if ( $_ !~ /^$todelete\|?/xsm ) { push @new_tabs_order, $_; } 359 } 360 @AdvancedTabs = @new_tabs_order; 361 require Admin::NewSettings; 362 SaveSettingsTo('Settings.pm'); 363 } 364 365 $yySetLocation = $scripturl; 366 redirectexit(); 367 return; 368} 369 370sub GetTexttab { 371 $texttab{'home'} = $img_txt{'103'}; 372 $texttab{'help'} = $img_txt{'119'}; 373 $texttab{'search'} = $img_txt{'182'}; 374 $texttab{'ml'} = $img_txt{'331'}; 375 $texttab{'eventcal'} = $img_txt{'eventcal'}; 376 $texttab{'birthdaylist'} = $img_txt{'birthdaylist'}; 377 $texttab{'admin'} = $img_txt{'2'}; 378 $texttab{'revalidatesession'} = $img_txt{'34a'}; 379 $texttab{'login'} = $img_txt{'34'}; 380 $texttab{'register'} = $img_txt{'97'}; 381 $texttab{'guestpm'} = $img_txt{'pmadmin'}; 382 $texttab{'mycenter'} = $img_txt{'mycenter'}; 383 $texttab{'logout'} = $img_txt{'108'}; 384## Mod Hook GetTextTab ## 385## End Mod Hook GetTextTab ## 386 if ( !$tab_lang ) { GetTabtxt(); } 387 foreach ( keys %tabtxt ) { $texttab{$_} = $tabtxt{$_}; } 388 return; 389} 390 3911; 392