1#!/usr/local/bin/perl -- 2# $Id: YaBB 2x Conversion Utility $ 3# $HeadURL: YaBB $ 4# $Source: /Convert2x.pl $ 5############################################################################### 6# Convert2x.pl # 7# $Date: 12.02.14 $ # 8############################################################################### 9# YaBB: Yet another Bulletin Board # 10# Open-Source Community Software for Webmasters # 11# Version: YaBB 2.6.11 # 12# Packaged: December 2, 2014 # 13# Distributed by: http://www.yabbforum.com # 14# =========================================================================== # 15# Copyright (c) 2000-2014 YaBB (www.yabbforum.com) - All Rights Reserved. # 16# Software by: The YaBB Development Team # 17# with assistance from the YaBB community. # 18############################################################################### 19# use strict; 20# use warnings; 21no warnings qw(uninitialized once redefine); 22use CGI::Carp qw(fatalsToBrowser); 23use English qw(-no_match_vars); 24 25our $VERSION = '2.6.11'; 26 27$convert2xplver = 'YaBB 2.6.11 $Revision: 1617 $'; 28 29if ( $ENV{'SERVER_SOFTWARE'} =~ /IIS/sm ) { 30 $yyIIS = 1; 31 if ( $PROGRAM_NAME =~ m{(.*)(\\|/)}xsm ) { 32 $yypath = $1; 33 } 34 $yypath =~ s/\\/\//gxsm; 35 chdir $yypath; 36 push @INC, $yypath; 37} 38 39$max_process_time = 20; 40$time_to_jump = time() + $max_process_time; 41 42### Requirements and Errors ### 43$script_root = $ENV{'SCRIPT_FILENAME'}; 44if ( !$script_root ) { 45 $script_root = $ENV{'PATH_TRANSLATED'}; 46 $script_root =~ s/\\/\//gxsm; 47} 48$script_root =~ s/\/Convert2x\.(pl|cgi)//igxsm; 49 50if ( -e './Paths.pm' ) { require Paths; } 51elsif ( -e './Variables/Paths.pm' ) { require './Variables/Paths.pm'; } 52 53$boardsdir = './Boards'; 54$sourcedir = './Sources'; 55$memberdir = './Members'; 56$vardir = './Variables'; 57 58$thisscript = "$ENV{'SCRIPT_NAME'}"; 59if ( -e ('YaBB.cgi') ) { $yyext = 'cgi'; } 60else { $yyext = 'pl'; } 61if ($boardurl) { $set_cgi = "$boardurl/Convert2x.$yyext"; } 62else { $set_cgi = "Convert2x.$yyext"; } 63$scripturl = "$boardurl/YaBB.$yyext"; 64 65# Make sure the module path is present 66push @INC, './Modules'; 67 68require Sources::Subs; 69require Sources::System; 70require Sources::Load; 71require Sources::DateTime; 72 73$date = time(); 74############################################# 75# Conversion starts here # 76############################################# 77$px = 'px'; 78 79if ( -e "$vardir/Setup.lock" ) { 80 if ( -e "$vardir/Convert2x.lock" ) { FoundConvert2xLock(); } 81 82 tempstarter(); 83 tabmenushow(); 84 85 if ( !$action ) { 86 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3 . $NavLink5 . $NavLink6; 87 88 $yymain = qq~ 89 <div class="bordercolor borderbox"> 90 <form action="$set_cgi?action=prepare" method="post"> 91 <table class="cs_thin pad_4px"> 92 <col style="width:5%" /> 93 <tr> 94 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 95 </tr><tr> 96 <td class="windowbg center"> 97 <img src="$imagesdir/thread.gif" alt="" /> 98 </td> 99 <td class="windowbg2 fontbigger"> 100 Make sure your YaBB 2.6.1 installation is running and that it has all the correct folder paths and URLs.<br /> 101 Proceed through the following steps to convert your YaBB 2x forum to YaBB 2.6.11.<br /><br /> 102 <b>If</b> your YaBB 2x forum is located on the same server as your YaBB 2.6.11 installation: 103 <ol> 104 <li>Insert the path to your YaBB 2x forum in the input field below</li> 105 <li>Click on the 'Continue' button</li> 106 </ol> 107 <b>Else</b> if your YaBB 2x forum is located on a different server than your YaBB 2.6.11 installation or if you do not know the path to your YaBB 2x forum: 108 <ol> 109 <li>Copy all files in the /Boards, /Members, /Messages, and /Variables folders from your YaBB 2x installation, to the corresponding Convert/Boards, Convert/Members, Convert/Messages, and Convert/Variables folders of your YaBB 2.6.1 installation, and chmod them 755.</li> 110 <li>Click on the 'Continue' button</li> 111 </ol> 112 <div style="width: 100%; text-align: center;"> 113 <b>Path to your YaBB 2x files: </b> <input type="text" name="convertdir" value="$convertdir" size="50" /> 114 </div> 115 <br /> 116 </td> 117 </tr><tr> 118 <td class="catbg center" colspan="2"> 119 <input type="submit" value="Continue" /> 120 </td> 121 </tr> 122 </table> 123 </form> 124 </div> 125 ~; 126 } 127 128 if ( $action eq 'prepare' ) { 129 UpdateCookie('delete'); 130 131 $username = 'Guest'; 132 $iamguest = '1'; 133 $iamadmin = q{}; 134 $iamgmod = q{}; 135 $password = q{}; 136 $yyim = q{}; 137 local $ENV{'HTTP_COOKIE'} = q{}; 138 $yyuname = q{}; 139 140 $convertdir = $FORM{'convertdir'}; 141 142 if ( !-d "$convertdir/Boards" ) { 143 setup_fatal_error( "Directory: $convertdir/Boards", 1 ); 144 } 145 else { $convboardsdir = "$convertdir/Boards"; } 146 147 if ( !-e "$convertdir/Members/memberlist.txt" ) { 148 setup_fatal_error( "Directory: $convertdir/Members", 1 ); 149 } 150 else { $convmemberdir = "$convertdir/Members"; } 151 152 if ( !-d "$convertdir/Messages" ) { 153 setup_fatal_error( "Directory: $convertdir/Messages", 1 ); 154 } 155 else { $convdatadir = "$convertdir/Messages"; } 156 157 if ( !-d "$convertdir/Variables" ) { 158 setup_fatal_error( "Directory: $convertdir/Variables", 1 ); 159 } 160 else { $convvardir = "$convertdir/Variables"; } 161 162 my $setfile = << "EOF"; 163\$convertdir = qq~$convertdir~; 164\$convboardsdir = qq~$convertdir/Boards~; 165\$convmemberdir = qq~$convertdir/Members~; 166\$convdatadir = qq~$convertdir/Messages~; 167\$convvardir = qq~$convertdir/Variables~; 168 1691; 170EOF 171 172 fopen( SETTING, ">$vardir/ConvSettings.txt" ) 173 or setup_fatal_error( "$maintext_23 $vardir/ConvSettings.txt: ", 1 ); 174 print {SETTING} nicely_aligned_file($setfile) 175 or croak 'cannot print SETTING'; 176 fclose(SETTING); 177 178 $yytabmenu = $NavLink1a . $NavLink2 . $NavLink3 . $NavLink5 . $NavLink6; 179 180 $yymain = qq~ 181 <div class="bordercolor borderbox"> 182 <table class="cs_thin pad_4px"> 183 <col style="width:5%" /> 184 <tr> 185 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 186 </tr><tr> 187 <td class="windowbg center"> 188 <img src="$imagesdir/thread.gif" alt="" /> 189 </td> 190 <td class="windowbg2 fontbigger"> 191 <ul> 192 <li>Members info found in: <b>$convmemberdir</b></li> 193 <li>Board and Category info found in: <b>$convboardsdir</b></li> 194 <li>Messages info found in: <b>$convdatadir</b></li> 195 </ul> 196 </td> 197 </tr><tr> 198 <td class="windowbg center"> 199 <img src="$imagesdir/info.png" alt="" /> 200 </td> 201 <td class="windowbg2 fontbigger"> 202 - Conversion can take a long time depending on the size of your forum (30 seconds to a couple hours).<br /> 203 - Your browser will be refreshed automatically every $max_process_time seconds and you will see the ongoing process in the status bar.<br /> 204 - Some internet connections refresh their IP-Address automatically every 24 hours.<br /> 205 Make sure that your IP-Address will not change during conversion, or you must restart the conversion. <br /> 206 - Your forum will be set to maintenance while converting. 207 <p id="memcontinued">Click on 'Members' in the menu to start.<br /> </p> 208 </td> 209 </tr> 210 </table> 211 </div> 212 <script type="text/javascript"> 213 function PleaseWait() { 214 document.getElementById("memcontinued").innerHTML = '<span style="color:#f33"><b>Converting - please wait!<br />If you want to stop \\'Members\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 215 } 216 </script> 217 ~; 218 } 219 elsif ( $action eq 'members' ) { 220 require qq~$vardir/ConvSettings.txt~; 221 if ( !exists $INFO{'mstart1'} ) { PrepareConv(); } 222 ConvertMembers(); 223 224 $yytabmenu = $NavLink1 . $NavLink2a . $NavLink3 . $NavLink5 . $NavLink6; 225 226 $yymain = qq~ 227 <div class="bordercolor borderbox"> 228 <table class="cs_thin pad_4px"> 229 <col style="width:5%" /> 230 <tr> 231 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 232 </tr><tr> 233 <td class="windowbg center"> 234 <img src="$imagesdir/thread.gif" alt="" /> 235 </td> 236 <td class="windowbg2"> 237 <div class="convdone">Member Conversion.</div> 238 $ConvDone 239 <div class="convnotdone">Board and Category Conversion.</div> 240 $ConvNotDone 241 <div class="convnotdone">Message Conversion.</div> 242 $ConvNotDone 243 <div class="convnotdone">Variables & Clean Up</div> 244 $ConvNotDone 245 </td> 246 </tr><tr> 247 <td class="windowbg center"> 248 <img src="$imagesdir/info.png" alt="" /> 249 </td> 250 <td class="windowbg2 fontbigger"> 251 To prevent server time-out due to the amount of members to be converted, the conversion is split into more steps.<br /> 252 <br /> 253 The time-step (\$max_process_time) is set to <i>$max_process_time seconds</i>.<br /> 254 Conversion took <i>~ 255 . int( ( $INFO{'st'} + 60 ) / 60 ) . qq~ minutes</i>. 256 <br /> 257 <br /> 258 <p id="memcontinued">Click on 'Boards & Categories' in the menu to continue.<br /> 259 If you do not do that the script will continue itself in 5 minutes.</p> 260 </td> 261 </tr> 262 </table> 263 </div> 264 <script type="text/javascript"> 265 function PleaseWait() { 266 document.getElementById("memcontinued").innerHTML = '<span style="color:#f33"><b>Converting - please wait!<br />If you want to stop \\'Boards & Categories\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 267 } 268 269 function membtick() { 270 PleaseWait(); 271 location.href="$set_cgi?action=cats;st=$INFO{'st'}"; 272 } 273 274 setTimeout("membtick()",300000); 275 </script> 276 ~; 277 } 278 279 elsif ( $action eq 'members2' ) { 280 if ( $INFO{'mstart1'} < 0 ) { 281 setup_fatal_error( 282"Member conversion (members2) 'mstart1' ($INFO{'mstart1'})) error!" 283 ); 284 } 285 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3 . $NavLink5 . $NavLink6; 286 287 my $mwidth = 288 int( ( ( $INFO{'mstart1'} ) / 2 ) / $INFO{'mtotal'} * 100 ); 289 $yymain = qq~ 290 <div class="bordercolor borderbox"> 291 <table class="cs_thin pad_4px"> 292 <col style="width:5%" /> 293 <tr> 294 <td class="tabtitle" colspan="2">YaBB 2.6.1 Converter</td> 295 </tr><tr> 296 <td class="windowbg center"> 297 <img src="$imagesdir/thread.gif" alt="" /> 298 </td> 299 <td class="windowbg2"> 300 <div class="convdone">Member Conversion.</div> 301 <div class="divouter"> 302 <div class="divvary" style="width: $mwidth$px;"> </div> 303 </div> 304 <div class="divvary2">$mwidth %</div> 305 <br /> 306 <div class="convnotdone">Board and Category Conversion.</div> 307 $ConvNotDone 308 <div class="convnotdone">Message Conversion.</div> 309 $ConvNotDone 310 <div class="convnotdone">Final Cleanup.</div> 311 $ConvNotDone 312 </td> 313 </tr><tr> 314 <td class="windowbg center"> 315 <img src="$imagesdir/info.png" alt="" /> 316 </td> 317 <td class="windowbg2 fontbigger"> 318 To prevent server time-out due to the amount of members to be converted, the conversion is split into more steps.<br /> 319 <br /> 320 The time-step (\$max_process_time) is set to <i>$max_process_time seconds</i>.<br /> 321 The last step took <i>~ 322 . ( $time_to_jump - $INFO{'starttime'} ) . q~ seconds</i>. 323 <br /> 324 Conversion has taken <i>~ 325 . int( ( $INFO{'st'} + 60 ) / 60 ) . q~ minutes</i>. 326 <br /> 327 <br /> 328 There are <b>~ 329 . int( $INFO{'mtotal'} - ( $INFO{'mstart1'} / 2 ) ) 330 . qq~/$INFO{'mtotal'}</b> Members left to be converted. 331 <br /> 332 <p id="memcontinued">If nothing happens in 5 seconds <a href="$set_cgi?action=members;st=$INFO{'st'};mstart1=$INFO{'mstart1'}" onclick="PleaseWait();">click here to continue</a>...<br />If you want to <a href="javascript:stoptick();">STOP 'Members' conversion click here</a>. Then copy the actual browser address and type it in when you want to continue the conversion.</p> 333 </td> 334 </tr> 335 </table> 336 </div> 337 <script type="text/javascript"> 338 function PleaseWait() { 339 document.getElementById("memcontinued").innerHTML = '<span style="color:#f33"><b>Converting - please wait!<br />If you want to stop \\'Members\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 340 } 341 342 function stoptick() { stop = 1; } 343 344 stop = 0; 345 function membtick() { 346 if (stop != 1) { 347 PleaseWait(); 348 location.href="$set_cgi?action=members;st=$INFO{'st'};mstart1=$INFO{'mstart1'}"; 349 } 350 } 351 352 setTimeout("membtick()",2000); 353 </script> 354 ~; 355 } 356 elsif ( $action eq 'cats' ) { 357 require qq~$vardir/ConvSettings.txt~; 358 if ( !exists $INFO{'bstart'} ) { 359 MoveBoards(); 360 } 361 362 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3a . $NavLink5 . $NavLink6; 363 364 $yymain = qq~ 365 <div class="bordercolor borderbox"> 366 <table class="cs_thin pad_4px"> 367 <col style="width:5%" /> 368 <tr> 369 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 370 </tr><tr> 371 <td class="windowbg center"> 372 <img src="$imagesdir/thread.gif" alt="" /> 373 </td> 374 <td class="windowbg2"> 375 <div class="convdone">Member Conversion.</div> 376 $ConvDone 377 <div class="convdone">Board & Category Conversion.</div> 378 $ConvDone 379 <div class="convnotdone">Message Conversion.</div> 380 $ConvNotDone 381 <div class="convnotdone">Variables & Clean Up.</div> 382 $ConvNotDone 383 </td> 384 </tr><tr> 385 <td class="windowbg center"> 386 <img src="$imagesdir/info.png" alt="" /> 387 </td> 388 <td class="windowbg2 fontbigger"> 389 All Boards and Subboards moved.<br /> 390 <br /> 391 Conversion has taken <i>~ 392 . int( ( $INFO{'st'} + 60 ) / 60 ) . qq~ minutes</i>.<br /> 393 <br /> 394 <p id="memcontinued">Click on 'Messages' in the menu to continue.<br /> 395 If you do not do that the script will continue by itself in 5 minutes.</p> 396 </td> 397 </tr> 398 </table> 399 </div> 400 401 <script type="text/javascript"> 402 function PleaseWait() { 403 document.getElementById("memcontinued").innerHTML = '<span style="color:#f00"><b>Converting - please wait!<br />If you want to stop \\'Messages\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 404 } 405 406 function membtick() { 407 PleaseWait(); 408 location.href="$set_cgi?action=messages;st=$INFO{'st'}"; 409 } 410 411 setTimeout("membtick()",300000); 412 </script> 413 ~; 414 } 415 416 elsif ( $action eq 'cats2' ) { 417 if ( ( !$INFO{'bstart'} && !$INFO{'bfstart'} ) 418 || $INFO{'bstart'} < 0 419 || $INFO{'bfstart'} < 0 ) 420 { 421 setup_fatal_error( 422"Boards conversion (cats2) 'bstart' ($INFO{'bstart'}) or 'bfstart' ($INFO{'bfstart'}) error!" 423 ); 424 } 425 426 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3a . $NavLink5 . $NavLink6; 427 428 my $bwidth = int( $INFO{'bstart'} / $INFO{'btotal'} * 100 ); 429 430 $yymain = qq~ 431 <div class="bordercolor borderbox"> 432 <table class="cs_thin pad_4px"> 433 <col style="width:5%" /> 434 <tr> 435 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 436 </tr><tr> 437 <td class="windowbg center"> 438 <img src="$imagesdir/thread.gif" alt="" /> 439 </td> 440 <td class="windowbg2"> 441 <div class="convdone">Member Conversion.</div> 442 $ConvDone 443 <div class="convdone">Board and Category Conversion.</div> 444 <div class="divouter"> 445 <div class="divvary" style="width: $bwidth$px;"> </div> 446 </div> 447 <div class="divvary2">$bwidth %</div> 448 <br /> 449 <div class="convnotdone">Message Conversion.</div> 450 $ConvNotDone 451 <div class="convnotdone">Variables & Clean Up.</div> 452 $ConvNotDone 453 </td> 454 </tr><tr> 455 <td class="windowbg center"> 456 <img src="$imagesdir/info.png" alt="" /> 457 </td> 458 <td class="windowbg2 fontbigger"> 459 To prevent server time-out due to the amount of boards to be converted, the conversion is split into more steps.<br /> 460 <br /> 461 The time-step (\$max_process_time) is set to <i>$max_process_time seconds</i>.<br /> 462 The last step took <i>~ 463 . ( $time_to_jump - $INFO{'starttime'} ) . q~ seconds</i>.<br /> 464 Conversion has taken <i>~ 465 . int( ( $INFO{'st'} + 60 ) / 60 ) . q~ minutes</i>.<br /> 466 <br /> 467 There are <b>~ 468 . ( $INFO{'btotal'} - $INFO{'bstart'} ) 469 . qq~/$INFO{'btotal'}</b> Boards left to be converted.<br /> 470 <p id="memcontinued">If nothing happens in 5 seconds <a href="$set_cgi?action=cats;st=$INFO{'st'};bstart=$INFO{'bstart'};bfstart=$INFO{'bfstart'}" onclick="PleaseWait();">click here to continue</a>...<br />If you want to <a href="javascript:stoptick();">STOP 'Boards & Categories' conversion click here</a>. Then copy the actual browser address and type it in when you are going to continue the conversion.</p> 471 </td> 472 </tr> 473 </table> 474 </div> 475 476 <script type="text/javascript"> 477 function PleaseWait() { 478 document.getElementById("memcontinued").innerHTML = '<span style="color:#f00"><b>Converting - please wait!<br />If you want to stop \\'Boards & Categories\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 479 } 480 481 function stoptick() { stop = 1; } 482 483 stop = 0; 484 function membtick() { 485 if (stop != 1) { 486 PleaseWait(); 487 location.href="$set_cgi?action=cats;st=$INFO{'st'};bstart=$INFO{'bstart'};bfstart=$INFO{'bfstart'}"; 488 } 489 } 490 491 setTimeout("membtick()",2000); 492 </script> 493 ~; 494 } 495 elsif ( $action eq 'messages' ) { 496 require qq~$vardir/ConvSettings.txt~; 497 MoveMessages(); 498 499 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3 . $NavLink5a . $NavLink6; 500 501 $yymain = qq~ 502 <div class="bordercolor borderbox"> 503 <table class="cs_thin pad_4px"> 504 <col style="width:5%" /> 505 <tr> 506 <td class="titlebg" colspan="2">YaBB 2.6.11 Converter</td> 507 </tr><tr> 508 <td class="windowbg center"> 509 <img src="$imagesdir/thread.gif" alt="" /> 510 </td> 511 <td class="windowbg2"> 512 <div class="convdone">Member Conversion.</div> 513 $ConvDone 514 <div class="convdone">Board and Category Conversion.</div> 515 $ConvDone 516 <div class="convdone">Message Conversion.</div> 517 $ConvDone 518 <div class="convnotdone">Variables & Clean Up.</div> 519 $ConvNotDone 520 </td> 521 </tr><tr> 522 <td class="windowbg center"> 523 <img src="$imagesdir/info.png" alt="" /> 524 </td> 525 <td class="windowbg2 fontbigger"> 526 <i>$INFO{'total_threads'}</i> Threads have been converted.<br /> 527 <i>$INFO{'total_mess'}</i> Messages have been converted.<br /> 528 <br /> 529 Conversion has taken <i>~ 530 . int( ( $INFO{'st'} + 60 ) / 60 ) . qq~ minutes</i>.<br /> 531 <br /> 532 <p id="memcontinued">Click on 'Clean Up' in the menu to continue.<br /> 533 If you do not do that the script will continue by itself in 5 minutes.</p> 534 </td> 535 </tr> 536 </table> 537 </div> 538 539 <script type="text/javascript"> 540 function PleaseWait() { 541 document.getElementById("memcontinued").innerHTML = '<span style="color:#f00"><b>Converting - please wait!<br />If you want to stop \\'Clean Up\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 542 } 543 544 function membtick() { 545 PleaseWait(); 546 location.href="$set_cgi?action=cleanup;st=$INFO{'st'}"; 547 } 548 549 setTimeout("membtick()",300000); 550 </script> 551 ~; 552 } 553 elsif ( $action eq 'messages2' ) { 554 if ( ( !$INFO{'count'} && !$INFO{'tcount'} ) 555 || $INFO{'count'} < 0 556 || $INFO{'tcount'} < 0 ) 557 { 558 setup_fatal_error( 559"Message conversion (messages2) 'count' ($INFO{'count'}) or 'tcount' ($INFO{'tcount'}) error!", 560 1 561 ); 562 } 563 564 my $bwidth = int( $INFO{'count'} / $INFO{'totboard'} * 100 ); 565 my $mwidth = 566 $INFO{'totmess'} 567 ? int( $INFO{'tcount'} / $INFO{'totmess'} * 100 ) 568 : 0; 569 570 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3 . $NavLink5 . $NavLink6; 571 572 $yymain = qq~ 573 <div class="bordercolor borderbox"> 574 <table class="cs_thin pad_4px"> 575 <col style="width:5%" /> 576 <tr> 577 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 578 </tr><tr> 579 <td class="windowbg center"> 580 <img src="$imagesdir/thread.gif" alt="" /> 581 </td> 582 <td class="windowbg2"> 583 <div class="convdone">Member Conversion.</div> 584 $ConvDone 585 <div class="convdone">Board and Category Conversion.</div> 586 $ConvDone 587 <div class="convdone">Message Conversion.</div> 588 <div class="divouter"> 589 <div class="divvary" style="width: $bwidth$px;"> </div> 590 </div> 591 <div class="divvary2">$bwidth %</div><br /> 592 <div class="convnotdone">Variables & Clean Up.</div> 593 $ConvNotDone 594 </td> 595 </tr><tr> 596 <td class="windowbg center"> 597 <img src="$imagesdir/info.png" alt="" /> 598 </td> 599 <td class="windowbg2 fontbigger"> 600 To prevent server time-out due to the amount of messages to be converted, the conversion is split into more steps.<br /> 601 <br /> 602 The time-step (\$max_process_time) is set to <i>$max_process_time seconds</i>.<br /> 603 The last step took <i>~ 604 . ( $time_to_jump - $INFO{'starttime'} ) . q~ seconds</i>.<br /> 605 Conversion has taken <i>~ 606 . int( ( $INFO{'st'} + 60 ) / 60 ) . qq~ minutes</i>.<br /> 607 <br /> 608 <i>$INFO{'total_threads'}</i> Threads have been converted.<br /> 609 <i>$INFO{'total_mess'}</i> Messages have been converted.<br /> 610 There are <b>~ 611 . ( $INFO{'totboard'} - $INFO{'count'} ) 612 . qq~/$INFO{'totboard'}</b> Boards left with Messages to be converted.<br /> 613 <div style="float: left;">There are <b>~ 614 . ( $INFO{'totmess'} - $INFO{'tcount'} ) 615 . qq~/$INFO{'totmess'}</b> Threads left to be converted. </div> 616 <div class="divouter"> 617 <div class="divvary" style="width: $mwidth$px;"> </div> 618 </div> 619 <div class="divvary2">$mwidth %</div> 620 <br /> 621 <p id="memcontinued">If nothing happens in 5 seconds <a href="$set_cgi?action=messages;st=$INFO{'st'};totboard=$INFO{'totboard'};count=$INFO{'count'};tcount=$INFO{'tcount'};total_mess=$INFO{'total_mess'};total_threads=$INFO{'total_threads'}" onclick="PleaseWait();">click here to continue</a>...<br />If you want to <a href="javascript:stoptick();">STOP 'Messages' conversion click here</a>. Then copy the actual browser address and type it in when you are going to continue the conversion.</p> 622 </td> 623 </tr> 624 </table> 625 </div> 626 627 <script type="text/javascript"> 628 function PleaseWait() { 629 document.getElementById("memcontinued").innerHTML = '<span style="color:#f00"><b>Converting - please wait!<br />If you want to stop \\'Messages\\' conversion, click here on STOP before this red message appears again on next page.</b></span>'; 630 } 631 632 function stoptick() { stop = 1; } 633 634 stop = 0; 635 function membtick() { 636 if (stop != 1) { 637 PleaseWait(); 638 location.href="$set_cgi?action=messages;st=$INFO{'st'};count=$INFO{'count'};tcount=$INFO{'tcount'};total_mess=$INFO{'total_mess'};total_threads=$INFO{'total_threads'}"; 639 } 640 } 641 642 setTimeout("membtick()",2000); 643 </script> 644 ~; 645 } 646 647 elsif ( $action eq 'cleanup' ) { 648 require qq~$vardir/ConvSettings.txt~; 649 MoveVariables(); 650 FixControl(); 651 FixNopost(); 652 653 $yytabmenu = $NavLink1 . $NavLink2 . $NavLink3 . $NavLink5 . $NavLink6a; 654 655 $formsession = cloak("$mbname$username"); 656 657 $convtext .= 658q~<br /><br />After you have tested your forum and made sure everything was converted correctly you can go to your Admin Center and delete /Convert/Boards, /Convert/Members, /Convert/Messages and /Convert/Variables folders and their contents.~; 659 660 $yymain = qq~ 661 <div class="bordercolor borderbox"> 662 <table class="cs_thin pad_4px"> 663 <tr> 664 <td class="tabtitle" colspan="2">YaBB 2.6.11 Converter</td> 665 </tr><tr> 666 <td class="windowbg center"> 667 <img src="$imagesdir/thread.gif" alt="" /> 668 </td> 669 <td class="windowbg2"> 670 <div class="convdone">Member Import.</div> 671 $ConvDone 672 <div class="convdone">Board and Category Import.</div> 673 $ConvDone 674 <div class="convdone">Message Import.</div> 675 $ConvDone 676 <div class="convdone">Clean Up.</div> 677 $ConvDone 678 </td> 679 </tr><tr> 680 <td class="windowbg center"> 681 <img src="$imagesdir/info.png" alt="" /> 682 </td> 683 <td class="windowbg2 fontbigger"> 684 $forumstarttext 685 $convtext<br /> 686 <br /> 687 The conversion took <i>~ 688 . int( ( $INFO{'st'} + 60 ) / 60 ) . qq~ minute(s)</i>.<br /> 689 <br /> 690 <br /> 691 <span style="color:#f33">We recommend you delete the file "$ENV{'SCRIPT_NAME'}". This is to prevent someone else running the converter and damaging your files.<br /> 692 <br /> 693 Further more, we strongly recommend to run the following "Maintenance Controls" in the "Admin Center" before you start doing other things:<br /> 694 - Rebuild Message Index<br /> 695 - Recount Board Totals<br /> 696 - Rebuild Members List<br /> 697 - Recount Membership<br /> 698 - Rebuild Members History<br /> 699 - Rebuild Notifications Files<br /> 700 - Clean Users Online Log<br /> 701 - Attachment Functions => Rebuild Attachments<br /></span> 702 <br /> 703 <br /> 704 You may now login to your forum. Enjoy using YaBB 2.6.11! 705 </td> 706 </tr><tr> 707 <td class="catbg center" colspan="2"> 708 <form action="YaBB.$yyext" method="post" style="display: inline;"> 709 <input type="submit" value="Start" /> 710 <input type="hidden" name="formsession" value="$formsession" /> 711 </form> 712 </td> 713 </tr> 714 </table> 715 </div>~; 716 717 CreateConvLock(); 718 } 719 720 $yyim = 'You are running the YaBB 2.6.11 Converter.'; 721 $yytitle = 'YaBB 2.6.11 Converter'; 722 SetupTemplate(); 723} 724 725# Prepare Conversion ## 726 727sub PrepareConv { 728 fopen( FILE, ">$boardsdir/dummy.testfile" ) 729 or setup_fatal_error( 730"The CHMOD of the $boardsdir is not set correctly! Cannot write this directory!", 731 1 732 ); 733 print {FILE} "dummy testfile\n" or croak 'cannot print FILE'; 734 fclose(FILE); 735 opendir( BDIR, $boardsdir ) 736 or setup_fatal_error( 737"The CHMOD of the $boardsdir is not set correctly! Cannot read this directory! ", 738 1 739 ); 740 @boardlist = readdir BDIR; 741 closedir BDIR; 742 743 fopen( FILE, ">$memberdir/dummy.testfile" ) 744 or setup_fatal_error( 745"The CHMOD of the $memberdir is not set correctly! Cannot write this directory!", 746 1 747 ); 748 print {FILE} "dummy testfile\n" or croak 'cannot print FILE'; 749 fclose(FILE); 750 opendir( MBDIR, $memberdir ) 751 or setup_fatal_error( 752"The CHMOD of the $memberdir is not set correctly! Cannot read this directory! ", 753 1 754 ); 755 @memblist = readdir MBDIR; 756 closedir MBDIR; 757 758 fopen( FILE, ">$datadir/dummy.testfile" ) 759 or setup_fatal_error( 760"The CHMOD of the $datadir is not set correctly! Cannot write this directory!", 761 1 762 ); 763 print {FILE} "dummy testfile\n" or croak 'cannot print FILE'; 764 fclose(FILE); 765 opendir( MSDIR, $datadir ) 766 or setup_fatal_error( 767"The CHMOD of the $datadir is not set correctly! Cannot read this directory! ", 768 1 769 ); 770 @msglist = readdir MSDIR; 771 closedir MSDIR; 772 773 automaintenance('on'); 774 775 foreach my $file (@boardlist) { 776 if ( $file ne '.htaccess' 777 && $file ne 'index.html' 778 && $file ne 'forum.control' 779 && $file ne q{.} 780 && $file ne q{..} ) 781 { 782 unlink "$boardsdir/$file"; 783 } 784 } 785 foreach my $file (@memblist) { 786 if ( $file ne '.htaccess' 787 && $file ne 'index.html' 788 && $file ne 'admin.vars' 789 && $file ne q{.} 790 && $file ne q{..} ) 791 { 792 unlink "$memberdir/$file"; 793 } 794 } 795 foreach my $file (@msglist) { 796 if ( $file ne '.htaccess' 797 && $file ne 'index.html' 798 && $file ne q{.} 799 && $file ne q{..} ) 800 { 801 unlink "$datadir/$file"; 802 } 803 } 804 return; 805} 806 807# / Prepare Conversion ## 808 809# Member Conversion ## 810 811sub ConvertMembers { 812 fopen( MEMDIR, "$convmemberdir/memberlist.txt" ) 813 or setup_fatal_error( "$maintext_23 $convmemberdir/memberlist.txt:", 1 ); 814 my @memlist = <MEMDIR>; 815 fclose(MEMDIR); 816 fopen( MEMDIRLST, "> $memberdir/memberlist.txt" ) 817 or setup_fatal_error( "$maintext_23 $memberdir/memberlist.txt:", 1 ); 818 print {MEMDIRLST} @memlist or croak 'cannot print MEMDIR'; 819 fclose(MEMDIRLST); 820 821 fopen( MEMINFO, "$convmemberdir/memberinfo.txt" ) 822 or setup_fatal_error( "$maintext_23 $convmemberdir/memberinfo.txt: ", 1 ); 823 my @meminfo = <MEMINFO>; 824 fclose(MEMINFO); 825 fopen( NMEMINFO, ">$memberdir/memberinfo.txt" ) 826 or setup_fatal_error( "$maintext_23 $memberdir/memberinfo.txt: ", 1 ); 827 print {NMEMINFO} @meminfo or croak 'cannot print NBMEMINFO'; 828 fclose(NMEMINFO); 829 830 if ( -e "$convmemberdir/broadcast.messages" ) { 831 fopen( BMEMDIR, "$convmemberdir/broadcast.messages" ) 832 or 833 setup_fatal_error( "$maintext_23 $convmemberdir/broadcast.messages: ", 834 1 ); 835 my @bmessages = <BMEMDIR>; 836 fclose(BMEMDIR); 837 fopen( NBMEMDIR, ">$memberdir/broadcast.messages" ) 838 or 839 setup_fatal_error( "$maintext_23 $convmemberdir/broadcast.messages: ", 840 1 ); 841 print {NBMEMDIR} @bmessages or croak 'cannot print NBMEMDIR'; 842 fclose(NBMEMDIR); 843 } 844 845 if ( -e "$convmemberdir/memberlist.approve" ) { 846 fopen( BMEMDIRA, "$convmemberdir/memberlist.approve" ) 847 or 848 setup_fatal_error( "$maintext_23 $convmemberdir/memberlist.approve: ", 849 1 ); 850 my @approve = <BMEMDIRA>; 851 fclose(BMEMDIRA); 852 fopen( NBMEMDIRA, ">$memberdir/memberlist.approve" ) 853 or 854 setup_fatal_error( "$maintext_23 $convmemberdir/memberlist.approve: ", 855 1 ); 856 print {NBMEMDIRA} @approve or croak 'cannot print NBMEMDIR'; 857 fclose(NBMEMDIRA); 858 } 859 860 if ( -e "$convmemberdir/memberlist.inactive" ) { 861 fopen( BMEMDIRIN, "$convmemberdir/memberlist.inactive" ) 862 or setup_fatal_error( 863 "$maintext_23 $convmemberdir/memberlist.inactive: ", 1 ); 864 my @inactive = <BMEMDIRIN>; 865 fclose(BMEMDIRIN); 866 fopen( NBMEMDIRIN, ">$memberdir/memberlist.inactive" ) 867 or setup_fatal_error( 868 "$maintext_23 $convmemberdir/memberlist.inactive: ", 1 ); 869 print {NBMEMDIRIN} @inactive or croak 'cannot print NBMEMDIRIN'; 870 fclose(NBMEMDIRIN); 871 } 872 873 if ( -e "$convmemberdir/members.ttl" ) { 874 fopen( BMEMDIRTTL, "$convmemberdir/members.ttl" ) 875 or 876 setup_fatal_error( "$maintext_23 $convmemberdir/members.ttl: ", 1 ); 877 my @memtotl = <BMEMDIRTTL>; 878 fclose(BMEMDIRTTL); 879 fopen( NBMEMDIRTTL, ">$memberdir/members.ttl" ) 880 or setup_fatal_error( "$maintext_23 $memberdir/members.ttl: ", 1 ); 881 print {NBMEMDIRTTL} @memtotl or croak 'cannot print NBMEMDIRTTL'; 882 fclose(NBMEMDIRTTL); 883 } 884 885 if ( -e "$convmemberdir/forgotten.passes" ) { 886 fopen( BMEMDIRP, "$convmemberdir/forgotten.passes" ) 887 or 888 setup_fatal_error( "$maintext_23 $convmemberdir/forgotten.passes: ", 889 1 ); 890 my @passes = <BMEMDIRP>; 891 fclose(BMEMDIRP); 892 893 fopen( NBMEMDIRP, ">$memberdir/forgotten.passes" ) 894 or 895 setup_fatal_error( "$maintext_23 $memberdir/forgotten.passes: ", 1 ); 896 print {NBMEMDIRP} @passes or croak 'cannot print NBMEMDIRP'; 897 fclose(NBMEMDIRP); 898 } 899 900 for (@approve) { 901 ( undef, undef, $regmember, undef, undef ) = 902 split /\|/xsm, $_; 903 push @memlist, $regmember; 904 } 905 for (@inactive) { 906 ( undef, undef, $regmember, undef, undef ) = 907 split /\|/xsm, $_; 908 push @memlist, $regmember; 909 } 910 my @xtn = qw(vars msg ims imstore log outbox rlog imdraft pre wait); 911 for my $i ( ( $INFO{'mstart1'} || 0 ) .. ( @memlist - 1 ) ) { 912 ( $user, undef ) = split /\t/xsm, $memlist[$i]; 913 914 if ( !-e "$convmemberdir/$user.vars" 915 && !-e "$convmemberdir/$user.pre" 916 && !-e "$convmemberdir/$user.wait" ) 917 { 918 next; 919 } 920 for my $cnt (@xtn) { 921 if ( -e "$convmemberdir/$user.$cnt" ) { 922 fopen( FILEUSER, "$convmemberdir/$user.$cnt" ) 923 or 924 setup_fatal_error( "$maintext_23 $convmemberdir/$user.$cnt: ", 925 1 ); 926 my @divfiles = <FILEUSER>; 927 fclose(FILEUSER); 928 929 fopen( FILEUSERB, ">$memberdir/$user.$cnt" ) 930 or setup_fatal_error( "$maintext_23 $memberdir/$user.$cnt: ", 931 1 ); 932 print {FILEUSERB} @divfiles or croak 'cannot print FILEUSER'; 933 fclose(FILEUSERB); 934 } 935 } 936 if ( -e "$convmemberdir/$user.wlog" && !-e "$convmemberdir/$user.rlog" ) 937 { 938 undef %recent; 939 require "$convmemberdir/$user.wlog"; 940 fopen( RLOG, ">$memberdir/$user.rlog" ); 941 print {RLOG} map { "$_\t$recent{$_}\n" } keys %recent 942 or croak "$croak{'print'} RLOG"; 943 fclose(RLOG); 944 } 945 946 if ( time() > $time_to_jump && ( $i + 1 ) < @memlist ) { 947 $yySetLocation = 948 qq~$set_cgi?action=members2;st=~ 949 . int( $INFO{'st'} + time() - $time_to_jump + $max_process_time ) 950 . qq~;starttime=$time_to_jump;mtotal=~ 951 . @memlist 952 . qq~;mstart1=$i~; 953 redirectexit(); 954 } 955 } 956 return; 957} 958 959# / Member Conversion ## 960 961# Board + Category Conversion ## 962 963sub MoveBoards { 964 my @brdlst = ( 'forum.master', 'forum.totals', 'forum.control', ); 965 966 for my $newbrd (@brdlst) { 967 fopen( OLDBRD, "$convboardsdir/$newbrd" ); 968 my @brdinfo = <OLDBRD>; 969 fclose(OLDBRD); 970 971 fopen( NEWBRD, ">$boardsdir/$newbrd" ); 972 print {NEWBRD} @brdinfo or croak 'cannot print NEWBRD'; 973 fclose(NEWBRD); 974 } 975 require "$boardsdir/forum.master"; 976 @boards = sort keys %board; 977 @subboards = sort keys %subboard; 978 my @brdtype = qw(txt mail exhits); 979 push( @boards, @subboards ); 980 981 for my $i ( ( $INFO{'bstart'} || 0 ) .. ( @boards - 1 ) ) { 982 for my $ext (@brdtype) { 983 if ( -e "$convboardsdir/$boards[$i].$ext" ) { 984 fopen( BOARDFILE, "$convboardsdir/$boards[$i].$ext" ) 985 or setup_fatal_error( 986 "$maintext_23 $convboardsdir/$boards[$i].ext: ", 1 ); 987 @brdinfo = <BOARDFILE>; 988 fclose(BOARDFILE); 989 fopen( NEWBRD, ">$boardsdir/$boards[$i].$ext" ); 990 print {NEWBRD} @brdinfo or croak 'cannot print NEWBRD'; 991 fclose(NEWBRD); 992 } 993 } 994 if ( time() > $time_to_jump && ( $i + 1 ) < @boards ) { 995 $yySetLocation = 996 qq~$set_cgi?action=cats2;st=~ 997 . int( $INFO{'st'} + time() - $time_to_jump + $max_process_time ) 998 . qq~;starttime=$time_to_jump;bstart=$i;btotal=~ 999 . @boards; 1000 redirectexit(); 1001 } 1002 } 1003 return; 1004} 1005 1006sub FixControl { 1007 if ( -e qq~$convvardir/boardconv.txt~ ) { 1008 require qq~$convvardir/boardconv.txt~; 1009 fopen( OLDFORUMCONTROL, "$convboardsdir/forum.control" ) 1010 || setup_fatal_error( "$maintext_23 $convboardsdir/forum.control: ", 1011 1 ); 1012 @oldboardcontrols = <OLDFORUMCONTROL>; 1013 fclose(OLDFORUMCONTROL); 1014 chomp @oldboardcontrols; 1015 foreach (@oldboardcontrols) { 1016 my ( $old, $oldboard ) = split /[|]/xsm, $_; 1017 push @oldboard, $oldboard; 1018 } 1019 my $j = 0; 1020 my @newboard = (); 1021 foreach my $x (@oldboard) { 1022 ${$x}{'mypic'} = q{}; 1023 if ( ${$x}{'pic'} ) { ${$x}{'mypic'} = 'y'; } 1024 1025#$cat|$board|$pic|$description|$mods|$modgroups|$topicperms|$replyperms|$pollperms|$zero|$membergroups|$ann|$rbin|$attperms|$minageperms|$maxageperms|$genderperms|$canpost|$parent|$rules|$rulestitle|$rulesdesc|$rulescollapse|$brdpasswr|$brdpassw|$bdrss 1026 $newboard[$j] = 1027qq~${$x}{'cat'}|$x|${$x}{'mypic'}|${$x}{'description'}|${$x}{'mods'}|${$x}{'modgroups'}|${$x}{'topicperms'}|${$x}{'replyperms'}|${$x}{'pollperms'}|${$x}{'zero'}|${$x}{'membergroups'}|${$x}{'ann'}|${$x}{'rbin'}|${$x}{'attperms'}|${$x}{'minageperms'}|${$x}{'maxageperms'}|${$x}{'genderperms'}|${$x}{'canpost'}|${$x}{'parent'}|${$x}{'rules'}|${$x}{'rulestitle'}|${$x}{'rulesdesc'}|${$x}{'rulescollapse'}|${$x}{'brdpasswr'}|${$x}{'brdpassw'}|${$x}{'brdrss'}\n~; 1028 if ( ${$x}{'pic'} ) { 1029 fopen( BRDPIC, ">>$boardsdir/brdpics.db" ); 1030 print {BRDPIC} qq~$x|default|${$x}{'pic'}\n~; 1031 fclose(BRDPIC); 1032 } 1033 $j++; 1034 } 1035 fopen( FORUMCONTROL, ">$boardsdir/forum.control" ) 1036 or setup_fatal_error( "$maintext_23 $boardsdir/forum.control: ", 1 ); 1037 print {FORUMCONTROL} @newboard 1038 or croak 'cannot print FORUMCONTROL'; 1039 fclose(FORUMCONTROL); 1040 } 1041 else { 1042 fopen( OLDFORUMCONTROL, "$convboardsdir/forum.control" ) 1043 or 1044 setup_fatal_error( "$maintext_23 $convboardsdir/forum.control: ", 1 ); 1045 @oldboardcontrols = <OLDFORUMCONTROL>; 1046 fclose(OLDFORUMCONTROL); 1047 fopen( FORUMCONTROL, ">$boardsdir/forum.control" ) 1048 or setup_fatal_error( "$maintext_23 $boardsdir/forum.control: ", 1 ); 1049 print {FORUMCONTROL} @oldboardcontrols 1050 or croak 'cannot print FORUMCONTROL'; 1051 fclose(FORUMCONTROL); 1052 } 1053} 1054 1055sub FixNopost { 1056 if ( $NoPost{'1'} ) { 1057 fopen( FORUMCONTROL, "$boardsdir/forum.control" ) 1058 or setup_fatal_error( "$maintext_23 $boardsdir/forum.control: ", 1 ); 1059 @boardcontrols = <FORUMCONTROL>; 1060 fclose(FORUMCONTROL); 1061 chomp @boardcontrols; 1062 1063 my $totalnoposts = keys %NoPost; 1064 for my $i ( ( $INFO{'fix_nopost'} || 1 ) .. ( $totalnoposts - 1 ) ) { 1065 ( $grptitle, undef ) = split /\|/xsm, $NoPost{$i}, 2; 1066 1067 foreach my $key ( keys %catinfo ) { 1068 ( $catname, $catperms, $catcol ) = 1069 split /\|/xsm, $catinfo{$key}, 3; 1070 $newperm = q{}; 1071 foreach my $theperm ( split /, /sm, $catperms ) { 1072 if ( $theperm eq $grptitle ) { $theperm = $i; } 1073 $newperm .= qq~$theperm, ~; 1074 } 1075 $newperm =~ s/, $//sm; 1076 $catinfo{$key} = qq~$catname|$newperm|$catcol~; 1077 } 1078 foreach my $key ( keys %board ) { 1079 ( $boardname, $boardperms, $boardshow ) = 1080 split /\|/xsm, $board{$key}, 3; 1081 $newperm = q{}; 1082 foreach my $theperm ( split /, /sm, $boardperms ) { 1083 if ( $theperm eq $grptitle ) { $theperm = $i; } 1084 $newperm .= qq~$theperm, ~; 1085 } 1086 $newperm =~ s/, $//sm; 1087 $board{$key} = qq~$boardname|$newperm|$boardshow~; 1088 } 1089 for my $j ( 0 .. ( @boardcontrols - 1 ) ) { 1090 ( 1091 $cntcat, $cntboard, $cntpic, 1092 $cntdescription, $cntmods, $cntmodgroups, 1093 $cnttopicperms, $cntreplyperms, $cntpollperms, 1094 $cntzero, $cntmembergroups, $cntann, 1095 $cntrbin, $cntattperms, $cntminageperms, 1096 $cntmaxageperms, $cntgenderperms, $cntbrdrss 1097 ) = split /\|/xsm, $boardcontrols[$j]; 1098 1099 $newmodgroups = q{}; 1100 foreach my $theperm ( split /, /sm, $cntmodgroups ) { 1101 if ( $theperm eq $grptitle ) { $theperm = $i; } 1102 $newmodgroups .= qq~$theperm, ~; 1103 } 1104 $newmodgroups =~ s/, $//sm; 1105 1106 $newtopicperms = q{}; 1107 foreach my $theperm ( split /, /sm, $cnttopicperms ) { 1108 if ( $theperm eq $grptitle ) { $theperm = $i; } 1109 $newtopicperms .= qq~$theperm, ~; 1110 } 1111 $newtopicperms =~ s/, $//sm; 1112 1113 $newreplyperms = q{}; 1114 foreach my $theperm ( split /, /sm, $cntreplyperms ) { 1115 if ( $theperm eq $grptitle ) { $theperm = $i; } 1116 $newreplyperms .= qq~$theperm, ~; 1117 } 1118 $newreplyperms =~ s/, $//sm; 1119 1120 $newpollperms = q{}; 1121 foreach my $theperm ( split /, /sm, $cntpollperms ) { 1122 if ( $theperm eq $grptitle ) { $theperm = $i; } 1123 $newpollperms .= qq~$theperm, ~; 1124 } 1125 $newpollperms =~ s/, $//sm; 1126 1127 $boardcontrols[$j] = 1128qq~$cntcat|$cntboard|$cntpic|$cntdescription|$cntmods|$newmodgroups|$newtopicperms|$newreplyperms|$newpollperms|$cntzero|$cntmembergroups|$cntann|$cntrbin|$cntattperms|$cntminageperms|$cntmaxageperms|$cntgenderperms|$brdrss\n~; 1129 } 1130 } 1131 1132 fopen( FORUMCONTROL, ">$boardsdir/forum.control" ) 1133 or setup_fatal_error( "$maintext_23 $boardsdir/forum.control: ", 1 ); 1134 print {FORUMCONTROL} @boardcontrols 1135 or croak 'cannot print FORUMCONTROL'; 1136 fclose(FORUMCONTROL); 1137 } 1138 return; 1139} 1140 1141# / Board + Category Conversion ## 1142 1143# Messages Conversion ## 1144 1145sub MoveMessages { 1146 if ( -e "$convdatadir/movedthreads.cgi" ) { 1147 fopen( OLDMVFILE, "$convdatadir/movedthreads.cgi" ) 1148 or setup_fatal_error( "$maintext_23 $convdatadir/movedthreads.cgi: ", 1149 1 ); 1150 my @movedmessageline = <OLDMVFILE>; 1151 fclose(OLDMVFILE); 1152 1153 fopen( MVFILE, ">$vardir/Movedthreads.pm" ); 1154 print {MVFILE} @movedmessageline 1155 or croak "cannot print $vardir/Movedthreads.pm"; 1156 fclose(MVFILE); 1157 } 1158 require "$boardsdir/forum.master"; 1159 1160 my @boards = sort keys %board; 1161 my @subboards = sort keys %subboard; 1162 push @boards, @subboards; 1163 1164 my $totalbdr = @boards; 1165 my @threadext = qw(mail poll polled); 1166 for my $next_board ( ( $INFO{'count'} || 0 ) .. ( $totalbdr - 1 ) ) { 1167 my $boardname = $boards[$next_board]; 1168 fopen( BRDFILE, "$boardsdir/$boardname.txt" ) 1169 or setup_fatal_error( "$maintext_23 $boardsdir/$boardname.txt: ", 1 ); 1170 my @brdmessageline = <BRDFILE>; 1171 fclose(BRDFILE); 1172 chomp @brdmessageline; 1173 $totalmess = @brdmessageline; 1174 1175 for my $tops ( ( $INFO{'tcount'} || 0 ) .. ( $totalmess - 1 ) ) { 1176 my @thread = split /\|/xsm, $brdmessageline[$tops]; 1177 my $thread = $thread[0]; 1178 if ( -e "$convdatadir/$thread.txt" 1179 && -e "$convdatadir/$thread.ctb" ) 1180 { 1181 fopen( MSGFILE, "$convdatadir/$thread.txt" ) 1182 or 1183 setup_fatal_error( "$maintext_23 $convdatadir/$thread.txt: ", 1184 1 ); 1185 @messagelines = <MSGFILE>; 1186 fclose(MSGFILE); 1187 fopen( MSGFILE, ">$datadir/$thread.txt" ) 1188 or 1189 setup_fatal_error( "$maintext_23 $datadir/$thread.txt: ", 1 ); 1190 print {MSGFILE} @messagelines 1191 or croak "cannot print $datadir/$thread.txt"; 1192 fclose(MSGFILE); 1193 $INFO{'total_mess'} += @messagelines; 1194 $INFO{'total_threads'}++; 1195 fopen( MSGFILE, "$convdatadir/$thread.ctb" ) 1196 or 1197 setup_fatal_error( "$maintext_23 $convdatadir/$thread.ctb: ", 1198 1 ); 1199 @messagelines = <MSGFILE>; 1200 fclose(MSGFILE); 1201 fopen( MSGFILE, ">$datadir/$thread.ctb" ) 1202 or 1203 setup_fatal_error( "$maintext_23 $datadir/$thread.ctb: ", 1 ); 1204 print {MSGFILE} @messagelines 1205 or croak "cannot print $datadir/$thread.ctb"; 1206 fclose(MSGFILE); 1207 1208 for my $ext (@threadext) { 1209 if ( -e "$convdatadir/$thread.$ext" ) { 1210 fopen( MSGFILE, "$convdatadir/$thread.$ext" ) 1211 or setup_fatal_error( 1212 "$maintext_23 $convdatadir/$thread.$ext: ", 1 ); 1213 @messagelines = <MSGFILE>; 1214 fclose(MSGFILE); 1215 fopen( MSGFILE, ">$datadir/$thread.$ext" ) 1216 or setup_fatal_error( 1217 "$maintext_23 $datadir/$thread.$ext: ", 1 ); 1218 print {MSGFILE} @messagelines 1219 or croak "cannot print $datadir/$thread.$ext"; 1220 fclose(MSGFILE); 1221 } 1222 } 1223 } 1224 if ( time() > $time_to_jump && ( $tops + 1 ) < $totalmess ) { 1225 $yySetLocation = 1226 qq~$set_cgi?action=messages2;st=~ 1227 . int( $INFO{'st'} + 1228 time() - 1229 ( $time_to_jump - $max_process_time ) ) 1230 . qq~;starttime=$time_to_jump;count=$next_board;tcount=~ 1231 . ( $tops + 1 ) 1232 . qq~;total_mess=$INFO{'total_mess'};total_threads=$INFO{'total_threads'};totboard=$totalbdr;totmess=$totalmess~; 1233 redirectexit(); 1234 } 1235 } 1236 if ( time() > $time_to_jump && ( $next_board + 1 ) < $totalbdr ) { 1237 $yySetLocation = 1238 qq~$set_cgi?action=messages2;st=~ 1239 . int( 1240 $INFO{'st'} + time() - ( $time_to_jump - $max_process_time ) ) 1241 . qq~;starttime=$time_to_jump;count=~ 1242 . ( $next_board + 1 ) 1243 . qq~;tcount=0;total_mess=$INFO{'total_mess'};total_threads=$INFO{'total_threads'};totboard=$totalbdr;totmess=0~; 1244 redirectexit(); 1245 } 1246 $INFO{'tcount'} = 0; 1247 } 1248 return; 1249} 1250 1251# / Messages Conversion ## 1252 1253# Variables Conversion ## 1254sub MoveVariables { 1255 my ($convdatadir) = @_; 1256 my @mvvar = ( 1257 'allowed.txt', 'attachments.txt', 1258 'ban_log.txt', 'bots.hosts', 1259 'email_domain_filter.txt', 'eventcal.db', 1260 'eventcalbday.db', 'flood.txt', 1261 'gmodsettings.txt', 'modlist.txt', 1262 'mostlog.txt', 'Movedthreads.pm', 1263 'oldestmes.txt', 'pm.attachments', 1264 'registration.log', 'reserve.txt', 1265 'reservecfg.txt', 'spamrules.txt', 1266 'news.txt', 1267 ); 1268 my @oldvar = (); 1269 for my $varfl (@mvvar) { 1270 if ( -e "$convdatadir/$varfl" ) { 1271 if ( $varfl eq 'eventcal.db' ) { 1272 fopen( OLDVAR, "$convdatadir/$varfl" ); 1273 @oldvar = <OLDVAR>; 1274 fclose(OLDVAR); 1275 chomp @oldvar; 1276 my @newvar; 1277 foreach my $eventline (@oldvar) { 1278 my @eventline = split /\|/xsm, $eventline; 1279 if ( scalar(@eventline) < 9 ) { 1280 1281# ( $cal_date,$cal_type,$cal_name,$cal_time,$cal_event,$cal_icon,$cal_noname,$cal_type2) 1282 my $g = q{}; 1283 if ( lc $eventline[2] eq 'guest' ) { 1284 $g = 'g'; 1285 } 1286 push @newvar, 1287qq~$eventline[0]|$eventline[1]|$eventline[2]|$eventline[3]||$eventline[4]|$eventline[5]|$eventline[6]|$eventline[7]||$g\n~; 1288 } 1289 else { push @newvar, qq~$eventline\n~; } 1290 } 1291 1292 fopen( NEWVAR, ">$vardir/$varfl" ); 1293 print {NEWVAR} @newvar 1294 or croak "cannot print $vardir/$varfl"; 1295 fclose(NEWVAR); 1296 } 1297 else { 1298 fopen( OLDVAR, "$convdatadir/$varfl" ); 1299 @oldvar = <OLDVAR>; 1300 fclose(OLDVAR); 1301 1302 fopen( NEWVAR, ">$vardir/$varfl" ); 1303 print {NEWVAR} @oldvar 1304 or croak "cannot print $vardir/$varfl"; 1305 fclose(NEWVAR); 1306 } 1307 } 1308 } 1309 Convert_Settings(); 1310 return; 1311} 1312 1313sub Convert_Settings { 1314 $ret = 0; 1315 if ( -e "$convvardir/Settings.pl" ) { 1316 use Time::gmtime; 1317 $time = time; 1318 require "$convvardir/Settings.pl"; 1319 if ($ip_banlist) { 1320 @i_ban = ( split /,/xsm, $ip_banlist ); 1321 chomp @i_ban; 1322 for my $j (@i_ban) { 1323 fopen( BAN, ">>$vardir/banlist.txt" ); 1324 print {BAN} qq~I|$j|$time|import|p\n~ 1325 or croak 'cannot write to BAN'; 1326 fclose(BAN); 1327 } 1328 } 1329 if ($email_banlist) { 1330 @e_ban = ( split /,/xsm, $email_banlist ); 1331 chomp @e_ban; 1332 for my $j (@e_ban) { 1333 fopen( BAN, ">>$vardir/banlist.txt" ); 1334 print {BAN} qq~E|$j|$time|import|p\n~ 1335 or croak 'cannot write to BAN'; 1336 fclose(BAN); 1337 } 1338 } 1339 if ($user_banlist) { 1340 @u_ban = ( split /,/xsm, $user_banlist ); 1341 chomp @u_ban; 1342 for my $j (@u_ban) { 1343 fopen( BAN, ">>$vardir/banlist.txt" ); 1344 print {BAN} qq~U|$j|$time|import|p\n~ 1345 or croak 'cannot write to BAN'; 1346 fclose(BAN); 1347 } 1348 } 1349 $mypl = 1; 1350 } 1351 elsif ( -e "$convvardir/Settings.pm" ) { 1352 require "$convvardir/Settings.pm"; 1353 } 1354 1355 if ( -e "$convvardir/eventcalset.txt" ) { 1356 require "$convvardir/eventcalset.txt"; 1357 } 1358 1359 if ( $mypl == 1 ) { 1360 $settings_file_version = 'YaBB 2.6.11'; 1361 if ( $enable_notifications eq q{} ) { 1362 $enable_notifications = $enable_notification ? 3 : 0; 1363 } 1364 if ( !$imspan || $imspam eq 'off' ) { $imspam = 0; } 1365 } 1366 1367 ( undef, $rancook ) = split /\-/xsm, $cookieusername; 1368 $cookietsort = isempty( $cookietsort, qq~Y2tsort-$rancook~ ); 1369 $cookieview = isempty( $cookieview, qq~Y2view-$rancook~ ); 1370 $cookieviewtime = isempty( $cookieviewtime, 525600 ); 1371 $MaxIMMessLen = isempty( $MaxIMMessLen, 2000 ); 1372 $AdMaxIMMessLen = isempty( $AdMaxIMMessLen, 3000 ); 1373 $MaxCalMessLen = isempty( $MaxCalMessLen, 200 ); 1374 $AdMaxCalMessLen = isempty( $AdMaxCalMessLen, 300 ); 1375 $Show_EventCal = isempty( $Show_EventCal, 0 ); 1376 $Event_TodayColor = isempty( $Event_TodayColor, '#ff0000' ); 1377 $fix_avatar_img_size = isempty( $fix_avatar_img_size, 0 ); 1378 $max_avatar_width = isempty( $$max_avatar_width, 65 ); 1379 $max_avatar_height = isempty( $max_avatar_height, 65 ); 1380 $fix_avatarml_img_size = isempty( $fix_avatarml_img_size, 0 ); 1381 $max_avatarml_width = isempty( $max_avatarml_width, 65 ); 1382 $max_avatarml_height = isempty( $max_avatarml_height, 65 ); 1383 $fix_brd_img_size = isempty( $fix_brd_img_size, 0 ); 1384 $max_brd_img_width = isempty( $max_brd_img_width, 50 ); 1385 $max_brd_img_height = isempty( $max_brd_img_height, 50 ); 1386 $enabletz = isempty( $enabletz, 0 ); 1387 $default_tz = isempty( $default_tz, 'UTC' ); 1388 $screenlogin = isempty( $screenlogin, 1); 1389 $gzcomp = fileno $GZIP ? 1 : 0; 1390 1391 $ip_banlist = q{}; 1392 $email_banlist = q{}; 1393 $user_banlist = q{}; 1394 $showsearchbox = isempty( $showsearchbox, 1 ); 1395 $fmodview = isempty( $fmodview, $gmodview ); 1396 $mdfmod = isempty( $mdfmod, $mdglobal ); 1397 $show_online_ip_admin = isempty( $show_online_ip_admin, 1 ); 1398 $show_online_ip_gmod = isempty( $show_online_ip_gmod, 1 ); 1399 $show_online_ip_fmod = isempty( $show_online_ip_fmod, 1 ); 1400 $ipLookup = isempty( $ipLookup, 1 ); 1401 $bm_subcut = isempty( $bm_subcut, 50 ); 1402 1403 require Admin::NewSettings; 1404 SaveSettingsTo('Settings.pm'); 1405 1406 $ret = 1; 1407 return; 1408} 1409 1410# / Variables Conversion ## 1411 1412#End Conversion# 1413 1414sub FoundConvert2xLock { 1415 tempstarter(); 1416 require Sources::TabMenu; 1417 1418 if ( -e "$vardir/Convert2x.lock" ) { 1419 $fixa = q{}; 1420 $fixa2 = 1421qq~The 2x Conversion Utility has already been run.<br />To run Utility again, remove the file "$vardir/Convert2x.lock," then re-visit this page.~; 1422 1423 } 1424 else { 1425 $fixa = 1426 q~ 1427 <form action="Convert2x.$yyext" method="post" style="display: inline;"> 1428 <input type="submit" value="Fix 2.0-2.5 files" /> 1429 </form>~; 1430 } 1431 1432 $yymain = qq~ 1433<div class="bordercolor" style="padding: 0px; width: 100%; margin-left: 0px; margin-right: 0px;"> 1434 <table class="cs_thin pad_4px"> 1435 <col style="width:5%" /> 1436 <tr> 1437 <td class="titlebg" colspan="2"> 1438 YaBB 2.6.11 Setup 1439 </td> 1440 </tr><tr> 1441 <td class="windowbg center"> 1442 <img src="$imagesdir/info.png" alt="" /> 1443 </td> 1444 <td class="windowbg2 center"> 1445 $fixa2 1446 </td> 1447 </tr><tr> 1448 <td class="catbg center" colspan="2"> 1449 <form action="$boardurl/YaBB.$yyext" method="post" style="display: inline;"> 1450 <input type="submit" value="Go to your Forum" /> 1451 <input type="hidden" name="formsession" value="$formsession" /> 1452 </form> 1453 $fixa 1454 </td> 1455 </tr> 1456 </table> 1457</div> 1458 ~; 1459 1460 $yyim = 'YaBB 2.6.11 Convert2x Utility has already been run.'; 1461 $yytitle = 'YaBB 2.6.11 Convert2x Utility'; 1462 SetupTemplate(); 1463 return; 1464} 1465 1466sub CreateConvLock { 1467 fopen( 'LOCKFILE', ">$vardir/Convert2x.lock" ) 1468 or setup_fatal_error( "$maintext_23 $vardir/Convert2x.lock: ", 1 ); 1469 print {LOCKFILE} qq~This is a lockfile for the Convert2x Utility.\n~ 1470 or croak 'cannot print to Convert2x.lock'; 1471 print {LOCKFILE} 1472 qq~It prevents it being run again after it has been run once.\n~ 1473 or croak 'cannot print to Convert2x.lock'; 1474 print {LOCKFILE} 1475 q~Delete this file if you want to run the Convert2x Utility again.~ 1476 or croak 'cannot print to Convert2x.lock'; 1477 fclose('LOCKFILE'); 1478 return; 1479} 1480 1481sub tempstarter { 1482 return if !-e "$vardir/Settings.pm"; 1483 1484 $YaBBversion = 'YaBB 2.6.11'; 1485 1486 # Make sure the module path is present 1487 push @INC, './Modules'; 1488 1489 if ( $ENV{'SERVER_SOFTWARE'} =~ /IIS/sm ) { 1490 $yyIIS = 1; 1491 if ( $PROGRAM_NAME =~ m{(.*)(\\|/)}xsm ) { 1492 $yypath = $1; 1493 } 1494 $yypath =~ s/\\/\//gxsm; 1495 chdir $yypath; 1496 push @INC, $yypath; 1497 } 1498 1499 # Requirements and Errors 1500 require Variables::Settings; 1501 if ( -e "$vardir/ConvSettings.txt" ) { 1502 require "$vardir/ConvSettings.txt"; 1503 } 1504 else { $convertdir = './Convert'; } 1505 1506 LoadCookie(); # Load the user's cookie (or set to guest) 1507 LoadUserSettings(); 1508 WhatTemplate(); 1509 WhatLanguage(); 1510 require Sources::Security; 1511 WriteLog(); 1512 return; 1513} 1514 1515sub SetupImgLoc { 1516 if ( !-e "$htmldir/Templates/Forum/$useimages/$_[0]" ) { 1517 $thisimgloc = qq~img src="$yyhtml_root/Templates/Forum/default/$_[0]"~; 1518 } 1519 else { $thisimgloc = qq~img src="$imagesdir/$_[0]"~; } 1520 return $thisimgloc; 1521} 1522 1523sub tabmenushow { # used by the converter 1524 $tabsep = q{ }; 1525 $tabfill = q{ }; 1526 1527 $NavLink1 = qq~<span>$tabfill Members $tabfill</span>~; 1528 $NavLink2 = 1529 qq~$tabsep<span>$tabfill Boards & Categories $tabfill</span>~; 1530 $NavLink3 = qq~$tabsep<span>$tabfill Messages $tabfill</span>~; 1531 $NavLink5 = qq~$tabsep<span>$tabfill Clean Up $tabfill</span>~; 1532 $NavLink6 = qq~$tabsep<span>$tabfill Login $tabfill</span>$tabsep ~; 1533 1534 $NavLink1a = 1535qq~<span class="selected"><a href="$set_cgi?action=members;st=$INFO{'st'}" style="color: #f33; padding:0" class="selected" onClick="PleaseWait();">$tabfill Members $tabfill</a></span>~; 1536 $NavLink2a = 1537qq~$tabsep<span class="selected"><a href="$set_cgi?action=cats;st=$INFO{'st'}" style="color: #f33; padding:0" class="selected" onClick="PleaseWait();">$tabfill Boards & Categories $tabfill</a></span>~; 1538 $NavLink3a = 1539qq~$tabsep<span class="selected"><a href="$set_cgi?action=messages;st=$INFO{'st'}" style="color: #f33; padding:0" class="selected" onClick="PleaseWait();">$tabfill Messages $tabfill</a></span>~; 1540 $NavLink5a = 1541qq~$tabsep<span class="selected"><a href="$set_cgi?action=cleanup;st=$INFO{'st'}" style="color: #f33; padding:0" class="selected" onClick="PleaseWait();">$tabfill Clean Up $tabfill</a></span>~; 1542 $NavLink6a = 1543qq~$tabsep<span class="selected"><a href="$boardurl/YaBB.$yyext?action=login" style="color: #f33; padding:0" class="selected">$tabfill Login $tabfill</a></span>$tabsep ~; 1544 1545 $ConvDone = q~ 1546 <div class="divvary_m"> </div> 1547 <div class="divvary2">100 %</div><br /> 1548 ~; 1549 1550 $ConvNotDone = q~ 1551 <div class="divouter"> </div> 1552 <div class="divvary3">0 %</div><br /> 1553 ~; 1554 return; 1555} 1556 1557sub setup_fatal_error { 1558 my ( $e, $v ) = @_; 1559 $e .= "\n"; 1560 if ($v) { $e .= $! . "\n"; } 1561 1562 $yymenu = q~Boards & Categories | ~; 1563 $yymenu .= q~Members | ~; 1564 $yymenu .= q~Messages | ~; 1565 $yymenu .= q~Clean Up | ~; 1566 $yymenu .= q~Login~; 1567 1568 $yymain .= qq~ 1569 <table class="bordercolor cs_thin pad_4px" style="width:80%"> 1570 <tr> 1571 <td class="titlebg text1"><b>An Error Has Occurred!</b></td> 1572 </tr><tr> 1573 <td class="windowbg text1"><br />$e<br /><br /></td> 1574 </tr> 1575 </table> 1576 <p class="center"><a href="javascript:history.go(-1)">Back</a></p> 1577 ~; 1578 $yyim = 'YaBB 2.6.11 Convertor Error.'; 1579 $yytitle = 'YaBB 2.6.11 Convertor Error.'; 1580 1581 if ( !-e "$vardir/Settings.pm" ) { SimpleOutput(); } 1582 1583 tempstarter(); 1584 SetupTemplate(); 1585 return; 1586} 1587 1588sub SimpleOutput { 1589 $gzcomp = 0; 1590 print_output_header(); 1591 1592 print qq~ 1593<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 1594<html xmlns="http://www.w3.org/1999/xhtml"> 1595<head> 1596<title>YaBB 2.6.11 Setup</title> 1597<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 1598</head> 1599<body> 1600 1601<!-- Main Content --> 1602<div style="height: 40px;"> </div> 1603<div style="text-align:center">$yymain</div> 1604</body> 1605</html> 1606 ~ or croak 'cannot print output screen'; 1607 exit; 1608} 1609 1610sub SetupTemplate { 1611 $gzcomp = fileno $GZIP ? 1 : 0; 1612 print_output_header(); 1613 1614 $yyposition = $yytitle; 1615 $yytitle = "$mbname - $yytitle"; 1616 1617 $yyimages = $imagesdir; 1618 $yydefaultimages = $defaultimagesdir; 1619 $yystyle = 1620qq~<link rel="stylesheet" href="$yyhtml_root/Templates/Forum/$usestyle.css" type="text/css" />\n<link rel="stylesheet" href="$yyhtml_root/Templates/Forum/setup.css" type="text/css" />\n ~; 1621 $yystyle =~ s/$usestyle\///gxsm; 1622 1623 $yytemplate = "$templatesdir/$usehead/$usehead.html"; 1624 fopen( TEMPLATE, "$yytemplate" ) 1625 or setup_fatal_error( "$maintext_23 $yytemplate: ", 1 ); 1626 @yytemplate = <TEMPLATE>; 1627 fclose(TEMPLATE); 1628 1629 my $output = q{}; 1630 $yyboardname = $mbname; 1631 @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); 1632 my ( 1633 $newsecond, $newminute, $newhour, $newday, $newmonth, 1634 $newyear, $newweekday, $newyearday, $newoff 1635 ) = localtime($date); 1636 $newyear += 1900; 1637 $newminute = sprintf '%02d', $newminute; 1638 $newsecond = sprintf '%02d', $newsecond; 1639 $yytime = 1640qq~$months[$newmonth] $newday, $newyear $maintxt{'107'} $newhour:$newminute~; 1641 1642 # $yytime = timeformat( $date, 1 ); 1643 $yyuname = 1644 $iamguest 1645 ? q{} 1646 : qq~$maintxt{'247'} ${$uid.$username}{'realname'}, ~; 1647 1648 if ($enable_news) { 1649 fopen( NEWS, "$vardir/news.txt" ); 1650 @newsmessages = <NEWS>; 1651 fclose(NEWS); 1652 } 1653 for my $i ( 0 .. ( @yytemplate - 1 ) ) { 1654 $curline = $yytemplate[$i]; 1655 if ( !$yycopyin && $curline =~ m/{yabb\ copyright}/xsm ) { 1656 $yycopyin = 1; 1657 } 1658 if ( $curline =~ m/{yabb\ newstitle}/xsm && $enable_news ) { 1659 $yynewstitle = qq~<b>$maintxt{'102'}:</b> ~; 1660 } 1661 if ( $curline =~ m/{yabb\ news}/xsm && $enable_news ) { 1662 srand; 1663 if ( $shownewsfader == 1 ) { 1664 1665 $fadedelay = ( $maxsteps * $stepdelay ); 1666 $yynews .= qq~ 1667 <script type="text/javascript"> 1668 var maxsteps = "$maxsteps"; 1669 var stepdelay = "$stepdelay"; 1670 var fadelinks = $fadelinks; 1671 var delay = "$fadedelay"; 1672 var bcolor = "$color{'faderbg'}"; 1673 var tcolor = "$color{'fadertext'}"; 1674 var fcontent = new Array(); 1675 var begintag = ""; 1676 ~; 1677 fopen( NEWS, "$vardir/news.txt" ); 1678 @newsmessages = <NEWS>; 1679 fclose(NEWS); 1680 for my $j ( 0 .. ( @newsmessages - 1 ) ) { 1681 $newsmessages[$j] =~ s/\n|\r//gxsm; 1682 if ( $newsmessages[$j] eq q{} ) { next; } 1683 if ( $i != 0 ) { $yymain .= qq~\n~; } 1684 $message = $newsmessages[$j]; 1685 if ($enable_ubbc) { 1686 enable_yabbc(); 1687 DoUBBC(); 1688 } 1689 $message =~ s/"/\\"/gxsm; 1690 $yynews .= qq~ 1691 fcontent[$j] = "$message";\n 1692 ~; 1693 } 1694 $yynews .= q~ 1695 var closetag = ''; 1696 </script> 1697 ~; 1698 } 1699 else { 1700 $message = $newsmessages[ int rand @newsmessages ]; 1701 if ($enable_ubbc) { 1702 enable_yabbc(); 1703 DoUBBC(); 1704 } 1705 $message =~ s/\'/'/xsm; 1706 $yynews = qq~ 1707 <script type="text/javascript"> 1708 if (ie4 || DOM2) var news = '$message'; 1709 var div = document.getElementById("newsdiv"); 1710 div.innerHTML = news; 1711 </script>~; 1712 } 1713 } 1714 $yyurl = $scripturl; 1715 $curline =~ s/{yabb\s+(\w+)}/${"yy$1"}/gxsm; 1716 $curline =~ s/<yabb\s+(\w+)>/${"yy$1"}/gxsm; 1717 $curline =~ s/img src\=\"$imagesdir\/(.+?)\"/SetupImgLoc($1)/eisgm; #"; 1718 $output .= $curline; 1719 } 1720 if ( $yycopyin == 0 ) { 1721 $output = 1722q~<h1 style="text-align:center"><b>Sorry, the copyright tag {yabb copyright} must be in the template.<br />Please notify this forum's administrator that this site is using an ILLEGAL copy of YaBB!</b></h1>~; 1723 } 1724 if ( fileno $GZIP ) { 1725 $OUTPUT_AUTOFLUSH = 1; 1726 print {$GZIP} $output or croak 'cannot print compressed page'; 1727 close $GZIP or croak 'cannot close GZIP'; 1728 } 1729 else { 1730 $mycopy = qq~2000-$newyear~; 1731 $output =~ s/2000-1900/$mycopy/xsm; 1732 print $output or croak 'cannot print page'; 1733 } 1734 exit; 1735} 1736 1737sub nicely_aligned_file { 1738 $filler = q{ } x 50; 1739 1740 # Make files look nicely aligned. The comment starts after 50 Col 1741 1742 my $setfile = shift; 1743 $setfile =~ s/=\s+;/= 0;/gsm; 1744 $setfile =~ 1745s/(.+;)[ \t]+(#.+$)/ $1 . substr($filler,(length $1 < 50 ? length $1 : 49)) . $2 /gem; 1746 $setfile =~ s/\t+(#.+$)/$filler$1/gsm; 1747 1748 *cut_comment = sub { # line break of too long comments 1749 my @x = @_; 1750 my ( $comment, $length ) = 1751 ( q{}, 120 ); # 120 Col is the max width of page 1752 my $var_length = length $x[0]; 1753 while ( $length < $var_length ) { $length += 120; } 1754 foreach ( split / +/sm, $x[1] ) { 1755 if ( ( $var_length + length($comment) + length $_ ) > $length ) { 1756 $comment =~ s/ $//sm; 1757 $comment .= "\n$filler# $_ "; 1758 $length += 120; 1759 } 1760 else { $comment .= "$_ "; } 1761 } 1762 $comment =~ s/ $//sm; 1763 return $comment; 1764 }; 1765 $setfile =~ s/(.+)(#.+$)/ $1 . cut_comment($1,$2) /gem; 1766 return $setfile; 1767} 1768 17691; 1770