#!/usr/bin/perl
################################################
#          IkonBoard генератор архива
#      Генерация форума в HTML архив. v1.0
#       Автор - Rick (rickdrumer@mail.ru)
#
# Главную страницу форума, которая выводится при заходе
# на ikonboard.cgi Вам придется сделать своими руками.
#
# Этот скрипт генерирует из БД IkonBoard HTML версию
# главных разделов форума. Вывод производится в формате
# папка_форума+№форума+/index_страница_форума.html
# Иначе говоря:
# forum1/index_1.html forum1/index_2.html
# index_1 и index_2 - это страницы раздела форума.
#
# Для использования скрипта, закачайте его в папку, где у Вас хранится форум IkonBoard, проставьте CHMOD 755.
# Введите имя папки в которой будет лежать архив
$ibarch = "ibarch"; #Папка в которой будут располагаться файлы архива + графика и прочее
# Переместите все файлы графики в вышеуказанную папку (avatars, emoticons, images).
# Следуйте инструкции в файле forum_arch.txt
# После этого создайте папки для будущего архива форума. Сколько номеров форумов, столько и папок вида forum1, forum2, forum3 и т.д. Внутри каждой папки заведите папку topics.
# Запускаем скрипт и получаем архив страниц форума.
################################################



&parse_form;
print "Content-type: text/html\n\n";
$maxthreads=20;
if ($FORM{'action'} eq "print") {&print_forum;}
else {
print <<EOF;
<html>
<head>
<title>Форум Rage</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<form action="forum_arch.cgi" method="post">
<input type="hidden" name="action" value="print">
Введите номер форума: <input type="text" name="forum" size="2" maxlength="2"><br>
<input type="submit" value="Перевести">
</form>
EOF
}

print <<EOF;
</body></html>
EOF

sub print_forum {
require "ikon.lib";
open(FILE, "data/allforums.cgi") or die "$ibtxt{'5010'} allforums.cgi!";
flock(FILE, 2);
@forums = <FILE>;
close(FILE);

foreach (@forums) {
@line=split(/\|/,$_);
push (@ff,$line[0]);
}

&forumjump;

foreach (@ff) { ###Конвертим все форумы

&getforum("$_");
open(FILE,"forum".$_."/list.cgi") or die print "Error";
@topics=<FILE>;
close(FILE);

    $numberofitems = @topics;
    $maxtopics = 20;
    $numberofpages = $numberofitems / $maxtopics;
    $nofp = $numberofitems / $maxtopics;
	($integer,$decimal) = split(/\./,$nofp);
	$lasti = $numberofitems - $maxtopics*$integer;
$i=1;
$p=1;

foreach $topic (@topics) { # start topic foreach
if ($i == 1) {

###БЛОК СОЗДАНИЯ ДИНАМИЧЕСКИХ СТРАНИЦ ФОРУМА###
$topicpages="<b>Все страницы форума</b> [ ";
($integer,$decimal) = split(/\./,$nofp);
if ($decimal > 0) { $nofp = $integer + 1; }
for ($j=1;$j<=$nofp;$j++) {
if ($j==$p) {$topicpages .= "".$j." ";}
else {$topicpages .= "<a href=\"/$ibarch/forum".$_."/index_".$j."".$filterpart.".html\"><b>".$j."</b></a> ";}
}
$topicpages .= " ]";
$need_page=$topicpages;
###///БЛОК СОЗДАНИЯ ДИНАМИЧЕСКИХ СТРАНИЦ ФОРУМА///###

###ВЕРХУШКА ТАБЛИЦЫ###
$output .= <<EOF;
<p>
<table width=730 align=center cellspacing=0 cellpadding=0 border=0><tr><td class=small-text-color>$topicpages</td></tr></table>
<table cellpadding=0 cellspacing=0 border=0 width=730 bgcolor=#999999 align=center>
<tr>
	<td>

<table cellpadding=3 cellspacing=1 border=0 width=100%>
<tr bgcolor=#003333 align=center>
	<td width=50% colspan=2 align=left>&nbsp;</td>
	<td class=small-text><b>Автор</b></td>
	<td class=small-text><b>Ответов</b></td>
	<td class=small-text><b>Обновления</b></td>
</tr>
EOF
###///ВЕРХУШКА ТАБЛИЦЫ///###
}
                chomp $topic;
                ($topicid, $topictitle, $topicdescription, $threadstate, $threadposts, $threadviews, $startedby, $startedpostdate, $lastposter, $lastpostdate, $sticky) = split(/\|/,$topic);


###БЛОК СОЗДАНИЯ ДИНАМИЧЕСКИХ СТРАНИЦ ТОПИКОВ###
$numberofitems = $threadposts + 1;
$numberofpages = $numberofitems / $maxthreads;

($integer,$decimal) = split(/\./,$numberofpages);
if ($decimal > 0) { $numberofpages = $integer + 1; }
$str1=4; $str2=$numberofpages-$str1+1;
if ($numberofpages > 1) {
$pagestoshow = "[ Стр. ";
	for ($j=1;$j<=$numberofpages;$j++)
	{
	if ($j <= $str1 || $j >= $str2) {
	$pagestoshow .= "<a href=\"/$ibarch/forum".$_."/topics/topic".$topicid."_".$j.".html\">".$j."</a> ";	}
	elsif ($j == $str1+1) { $pagestoshow .= "... "; }
	}
$pagestoshow .= "]";
}
###///БЛОК СОЗДАНИЯ ДИНАМИЧЕСКИХ СТРАНИЦ ТОПИКОВ///###

$topictitle = "<a href=\"/$ibarch/forum".$_."/topics/topic".$topicid."_1.html\" class=big>$topictitle</a>";
if ($topicdescription) { $topicdescription = qq~&nbsp;&nbsp;&raquo;$topicdescription~; } 

###ВЫЧИСЛЯЕМ LASTPOST###
if ($lastpostdate ne "") {
                        $lastpostdate = $lastpostdate + ($timedifferencevalue*3600) + ($timezone*3600);
                        $longdate = &joineddate("$lastpostdate");
                        $shorttime = &shorttime("$lastpostdate");
                        $lastpostdate = qq~$longdate - $shorttime~;
                        }
                        else {
                                $lastpostdate = qq~$ibtxt{'3009'}~;
                                        $lastpoststamp = "";
                                }
###///ВЫЧИСЛЯЕМ LASTPOST///###

###ВЫВОДИМ ЯЧЕЙКИ С ДАННЫМИ###
                        $output .=qq~
<tr align=center bgcolor=#333333>
	<td width=5%><img src="/$ibarch/images/topicnonew.gif"></td>
	<td width=45% align=left class=small-text><b>$topictitle</b> $pagestoshow<br>$topicdescription</td>
	<td class=small-text-color><b>$startedby</b></td>
	<td class=small-text>$threadposts</td>
	<td class=small-text-color>$lastpostdate<br><b>$lastposter</b></td>
</tr>
                                ~;
###///ВЫВОДИМ ЯЧЕЙКИ С ДАННЫМИ///###
$pagestoshow = undef;
$topicpages = undef;
if ($i == 20 or ($p == $nofp && $i == $lasti)) {
open(FILE,">c:/met/rage/$ibarch/forum$_/index_$p.html");
print FILE <<EOF;

<!--#set var="TITLE" value="Форум Rage" -->
<!--#include virtual="/$ibarch/head.html" -->
<table cellpadding=1 cellspacing=1 border=0 width=730 align=center>
<tr>
	<td valign=top bgcolor=#999999>

<table cellpadding=0 cellspacing=0 border=0 width=100% align=center>
<tr bgcolor=#333333>
	<td valign=top class=middle-text-color>&nbsp;<a href="/$ibarch/">Форум Rage</a> &raquo; $forumname</td>

</tr>
</table>

	</td>
</tr>
</table>

EOF

print FILE $output;

print FILE <<EOF;
</table>
</td></tr></table>
<br>
<table width=730 align=center cellspacing=0 cellpadding=0 border=0><tr><td class=small-text-color>$need_page</td><td align=right>$jumphtml</td></tr></table>
<!--#include virtual="/$ibarch/foot.html" -->
EOF
close(FILE);
$output = undef;
$need_page = undef;
$i=1; $p++;
next;}

$i++;
}
}

print "Все форумы сгенерированы! Все ок!";
}

sub parse_form {

read(STDIN, $FORM_DATA, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $FORM_DATA);
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ s/<!--(.|\n)*-->//g;
   $value =~ s/<([^>]|\n)*>//g;
   $FORM{$name} = $value;
}
}