#!/usr/bin/perl #Web Board Professional Skin Library (2004/05/02) $ver = '2.27'; # #Copyright(C) Knight 2002-2004 #Mail ... knight@big.or.jp #Home ... http://www.big.or.jp/~knight/ ### メイン処理 sub skin { &read_data(); &skin_init(); &skin_header(); &skin_title(); &skin_form(); &skin_log(); &skin_navi(); &skin_link(); &skin_footer(); } ### データ読み込み sub read_data { if ($mini_counter != 0) { if ($ENV{'REQUEST_METHOD'} ne 'POST' && $ENV{'QUERY_STRING'} eq '') { &count_up(); } open(COUNT, "$count_log") || &error("カウントログファイルを読み出せません"); $data = ; close(COUNT); ($sum, $today, $yesterday, $key) = split(/\t/, $data); $counter = sprintf("%0${count_figure}d", $sum); if ($count_img == 1) { $counter =~ s/(.)/$1/g; } } open(FILE, "$log_file") || &error("ログファイルを読み出せません"); @logs = ; close(FILE); $no = 0; $parent = 0; $date = ''; $name = ''; %child_logs = (); foreach (@logs) { if ($show_last_post == 1 && $_ + 0 > $no) { ($no, $reno, $date, $name) = (split(/\t/))[0, 1, 2, 3]; } if ((split(/\t/))[1] == 0) { $parent++; } else { $child_logs{(split(/\t/))[1]}++; } } if ($show_last_post == 1) { ($sec, $min, $hour, $day, $mon, $year, $week) = localtime($date); $last_post = sprintf("%02d/%02d-%02d:%02d", $mon + 1, $day, $hour, $min); _HTML_ } $link_info = ''; foreach (0 .. int(($parent - 1) / $page_size)) { $page_info = $_ + 1; if ($in{'page'} == 0 && $page_info > $max_page_info) { $link_info .= qq| [ShowNext]|; last; } if ($in{'page'} == $_) { $link_info .= qq| [$page_info]|; } else { $link_info .= qq| [$page_info]|; } } return; } ### 初期化処理 sub skin_init { open(SKIN, "$skin_file") || &skin_error(); @skin = ; close(SKIN); $skin_header = ''; $skin_title = ''; $skin_form = ''; $skin_loghead = ''; $skin_parent = ''; $skin_res = ''; $skin_undervar = ''; $skin_logfoot = ''; $skin_navi = ''; $skin_link = ''; $skin_footer = ''; $skin_info = ''; foreach (@skin) { if ($_ =~ //) { $skin_info = 'header'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'title'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'form'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'loghead'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'parent'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'res'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'undervar'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'logfoot'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'navi'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'link'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } elsif ($_ =~ //) { $skin_info = 'footer'; next; } elsif ($_ =~ //) { $skin_info = ''; next; } if ($skin_info eq 'header') { $skin_header .= $_; } elsif ($skin_info eq 'title') { $skin_title .= $_; } elsif ($skin_info eq 'form') { $skin_form .= $_; } elsif ($skin_info eq 'loghead') { $skin_loghead .= $_; } elsif ($skin_info eq 'parent') { $skin_parent .= $_; } elsif ($skin_info eq 'res') { $skin_res .= $_; } elsif ($skin_info eq 'undervar') { $skin_undervar .= $_; } elsif ($skin_info eq 'logfoot') { $skin_logfoot .= $_; } elsif ($skin_info eq 'navi') { $skin_navi .= $_; } elsif ($skin_info eq 'link') { $skin_link .= $_; } elsif ($skin_info eq 'footer') { $skin_footer .= $_; } } return; } ### ヘッダ sub skin_header { $skin_header = &skin_basic($skin_header); print "Content-Type: text/html\n\n"; print $skin_header; return; } ### タイトル sub skin_title { $skin_title = &skin_basic($skin_title); print $skin_title; return; } ### フォーム sub skin_form { $skin_form = &skin_basic($skin_form); if ($ENV{'REQUEST_METHOD'} ne 'POST') { %cookie = &get_cookie($cookie_id); if ($cookie{'url'} eq '') { $cookie{'url'} = 'http://'; } if ($cookie{'color'} eq '') { $cookie{'color'} = $color[0]; } } if ($personal_icon == 1) { push(@icon, @personal_icon); } if ($admin_key ne '') { push(@icon, @admin_icon); } @new = (); foreach (@icon) { if ($_ ne '') { push(@new, $_); } } @icon = @new; if ($in{'mode'} eq 'res') { $subj = 'Re:' . (split(/\t/, $logs[0]))[6]; $skin_form =~ s/\$COOKIE_NAME/$cookie{'name'}/g; $skin_form =~ s/\$COOKIE_MAIL/$cookie{'mail'}/g; $skin_form =~ s/\$COOKIE_URL/$cookie{'url'}/g; $skin_form =~ s/\$COOKIE_PWD/$cookie{'pwd'}/g; if ($cookie{'preview'} eq 'on') { $skin_form =~ s/\$COOKIE_PREVIEW/ checked/g; } else { $skin_form =~ s/\$COOKIE_PREVIEW//g; } $color_info = ''; foreach (@color) { if ($_ eq '') { next; } if ($cookie{'color'} eq $_) { $color_info .= qq| / |; } else { $color_info .= qq| / |; } } $skin_form =~ s/\$COOKIE_COLOR/$color_info/g; $icon_info = ''; $icon_info .= qq|\n|; $skin_form =~ s/\$COOKIE_ICON/$icon_info/g; $skin_form =~ s///-->\n/g; $skin_form =~ s/\$FORM_SUBJ/$subj/g; $skin_form =~ s/\$FORM_TEXT//g; $skin_form =~ s/\$FORM_MODE/regist/g; $skin_form =~ s/\$FORM_RENO/$in{'no'}/g; $skin_form =~ s/\$FORM_NO//g; $skin_form =~ s/\$FORM_DATE//g; $skin_form =~ s/\$FORM_ADMINPWD//g; $skin_form =~ s/\$FORM_USERPWD//g; $skin_form =~ s/\$FORM_RANK//g; $skin_form =~ s/\$FORM_HOST//g; } elsif ($in{'mode'} eq 'userdel') { %cookie = &get_cookie($cookie_id); $cookie{'color'} = $color; $cookie{'icon'} = $icon; $text =~ s/
/\n/g; $skin_form =~ s/\$COOKIE_NAME/$name/g; $skin_form =~ s/\$COOKIE_MAIL/$mail/g; $skin_form =~ s/\$COOKIE_URL/$url/g; $skin_form =~ s/\$COOKIE_PWD/$in{'user_pwd'}/g; $skin_form =~ s/\$COOKIE_PREVIEW//g; $color_info = ''; foreach (@color) { if ($_ eq '') { next; } if ($cookie{'color'} eq $_) { $color_info .= qq| / |; } else { $color_info .= qq| / |; } } $skin_form =~ s/\$COOKIE_COLOR/$color_info/g; $icon_info = ''; $icon_info .= qq|\n|; $skin_form =~ s/\$COOKIE_ICON/$icon_info/g; $skin_form =~ s/\$FORM_SUBJ/$subj/g; $skin_form =~ s/\$FORM_TEXT/$text/g; $skin_form =~ s/\$FORM_MODE/userdel/g; $skin_form =~ s/\$FORM_RENO/$reno/g; $skin_form =~ s/\$FORM_NO/$no/g; $skin_form =~ s/\$FORM_DATE/$date/g; $skin_form =~ s/\$FORM_ADMINPWD//g; $skin_form =~ s/\$FORM_USERPWD/$in{'user_pwd'}/g; $skin_form =~ s/\$FORM_RANK/$rank/g; $skin_form =~ s/\$FORM_HOST/$host/g; $skin_form =~ s///-->/g; } elsif ($in{'mode'} eq 'admin') { $cookie{'color'} = $color; $cookie{'icon'} = $icon; $text =~ s/
/\n/g; $skin_form =~ s/\$COOKIE_NAME/$name/g; $skin_form =~ s/\$COOKIE_MAIL/$mail/g; $skin_form =~ s/\$COOKIE_URL/$url/g; $skin_form =~ s/\$COOKIE_PWD/$pwd/g; $skin_form =~ s/\$COOKIE_PREVIEW//g; $color_info = ''; foreach (@color) { if ($_ eq '') { next; } if ($cookie{'color'} eq $_) { $color_info .= qq| / |; } else { $color_info .= qq| / |; } } $skin_form =~ s/\$COOKIE_COLOR/$color_info/g; $icon_info = ''; $icon_info .= qq|\n|; $skin_form =~ s/\$COOKIE_ICON/$icon_info/g; $skin_form =~ s/\$FORM_SUBJ/$subj/g; $skin_form =~ s/\$FORM_TEXT/$text/g; $skin_form =~ s/\$FORM_MODE/admin/g; $skin_form =~ s/\$FORM_RENO/$reno/g; $skin_form =~ s/\$FORM_NO/$no/g; $skin_form =~ s/\$FORM_DATE/$date/g; $skin_form =~ s/\$FORM_ADMINPWD/$in{'admin_pwd'}/g; $skin_form =~ s/\$FORM_USERPWD/$pwd/g; $skin_form =~ s/\$FORM_RANK/$rank/g; $skin_form =~ s/\$FORM_HOST/$host/g; $skin_form =~ s///-->/g; $skin_form =~ s///-->/g; } else { $skin_form =~ s/\$COOKIE_NAME/$cookie{'name'}/g; $skin_form =~ s/\$COOKIE_MAIL/$cookie{'mail'}/g; $skin_form =~ s/\$COOKIE_URL/$cookie{'url'}/g; $skin_form =~ s/\$COOKIE_PWD/$cookie{'pwd'}/g; if ($cookie{'preview'} eq 'on') { $skin_form =~ s/\$COOKIE_PREVIEW/ checked/g; } else { $skin_form =~ s/\$COOKIE_PREVIEW//g; } $color_info = ''; foreach (@color) { if ($_ eq '') { next; } if ($cookie{'color'} eq $_) { $color_info .= qq| / |; } else { $color_info .= qq| / |; } } $skin_form =~ s/\$COOKIE_COLOR/$color_info/g; $icon_info = ''; $icon_info .= qq|\n|; $skin_form =~ s/\$COOKIE_ICON/$icon_info/g; $skin_form =~ s/\$FORM_SUBJ//g; $skin_form =~ s/\$FORM_TEXT//g; $skin_form =~ s/\$FORM_MODE/regist/g; $skin_form =~ s/\$FORM_RENO/0/g; $skin_form =~ s/\$FORM_NO//g; $skin_form =~ s/\$FORM_DATE//g; $skin_form =~ s/\$FORM_ADMINPWD//g; $skin_form =~ s/\$FORM_USERPWD//g; $skin_form =~ s/\$FORM_RANK//g; $skin_form =~ s/\$FORM_HOST//g; } print $skin_form; return; } ### 投稿記事表示 sub skin_log { $skin_loghead = &skin_basic($skin_loghead); $skin_parent = &skin_basic($skin_parent); $skin_res = &skin_basic($skin_res); $skin_undervar = &skin_basic($skin_undervar); $skin_logfoot = &skin_basic($skin_logfoot); $start = $in{'page'} * $page_size; $end = $start + $page_size; $i = 0; $flag = 0; $new_flag = 0; $tmp_skin_loghead = ''; $tmp_skin_parent = ''; $tmp_skin_res = ''; foreach (@logs) { ($no, $reno, $date, $name, $mail, $url, $subj, $text, $color, $icon, $file, $rank, $pwd, $host) = split(/\t/); if ($in{'mode'} eq 'search' || $reno == 0) { $i++; } if ($i <= $start) { next; } if ($i > $end) { last; } if ($new_date != 0 && time() - $date < $new_date * 24 * 60 * 60 && $in{'preview'} ne 'on') { $new_flag = 1; } else { $new_flag = 0; } ($sec, $min, $hour, $day, $mon, $year, $week) = localtime($date); @week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); $date = sprintf("%04d/%02d/%02d/%s/%02d:%02d", $year + 1900, $mon + 1, $day, $week[$week], $hour, $min); if ($icon_mode == 1 && $icon ne '') { $icon = qq|$icon|; } else { $icon = ' '; } if ($replace_mode == 1) { $text =~ s/\/\+([^+]+)\+\//$1<\/big>/gi; $text =~ s/\/\-([^-]+)\-\//$1<\/small>/gi; $text =~ s/\/\!([^!]+)\!\//$1<\/b>/gi; $text =~ s/\/i([^i]+)i\//$1<\/i>/gi; $text =~ s/\/s([^s]+)s\//$1<\/s>/gi; $text =~ s/\/\'([^']+)\'\//$1<\/span>/gi; $text =~ s/\/h\//♥<\/span>/gi; } if ($refer_mode == 1 && $in{'mode'} eq 'res') { $ref_text = $text; $ref_text =~ s/
/\\n> /g; $ref_text =~ s/<[^<]*>//gi; $ref_text =~ s/"/”/g; $ref_text =~ s/<(script|\/script)(\s*)([^&]*)\s*>/<$1$2$3>/gi; $ref_text =~ s/♥/\/h\//gi; $ref_text = '> ' . $ref_text; $ref_text =~ s/<//g; $ref_text = <<"_HTML_"; _HTML_ } if ($auto_link == 1) { $text = &auto_link($text); } if ($color_mode == 1) { if ($color eq '') { $color = $color[0]; } $text = qq|$text|; } if ($ref_color ne '') { $text =~ s/([\>]|^)(>|>)([^<]*)/$1$2$3<\/span>/g; } if ($rank_mode == 1 && $in{'preview'} ne 'on') { $j = 0; foreach (0 .. (($#class - 1) / 2)) { $class_cont = $class[$j]; $now_rank = ''; $j++; if ($rank < $class_cont) { last; } $class_name = $class[$j]; $j++; } } else { $class = ''; } chop($host); if (($in{'mode'} eq 'search' && $in{'no'} eq '') || $reno == 0) { if ($in{'mode'} eq '') { if ($flag == 1) { $tmp_skin_undervar = $skin_undervar; $tmp_skin_undervar =~ s///g; $tmp_skin_undervar =~ s//<\/a>/g; if ($max_res_flag == 0) { $tmp_skin_undervar =~ s///g; $tmp_skin_undervar =~ s//<\/a>/g; } print $tmp_skin_undervar; } if ($max_res_size != 0 && ($child_logs{"$no"} + 0) >= $max_res_size) { $max_res_flag = 1; } else { $max_res_flag = 0; } } if ($flag == 1) { print $skin_logfoot; } } if (($in{'mode'} eq 'search' && $in{'no'} eq '') || $reno == 0) { $flag = 1; $resno = 0; $res_no = $no; $tmp_skin_loghead = $skin_loghead; $tmp_skin_parent = $skin_parent; $tmp_skin_parent =~ s/\$PARENT_NO/$no/g; $tmp_skin_parent =~ s/\$PARENT_DATE/$date/g; $tmp_skin_parent =~ s/\$PARENT_SUBJ/$subj/g; $tmp_skin_parent =~ s/\$PARENT_NAME/$name/g; if ($refer_mode == 1 && $in{'mode'} eq 'res') { $tmp_skin_parent =~ s///g; $tmp_skin_parent =~ s//<\/a>/g; $tmp_skin_parent .= $ref_text; } else { $tmp_skin_parent =~ s///-->/g; } if ($new_flag == 0) { $tmp_skin_parent =~ s///-->/g; } if ($in{'preview'} ne 'on') { $tmp_skin_parent =~ s/\$PARENT_CLASS/$class_name/g; $tmp_skin_parent =~ s/\$PARENT_RANK/$rank/g; } else { $tmp_skin_parent =~ s///-->/g; } if ($mail ne '') { $tmp_skin_parent =~ s///g; $tmp_skin_parent =~ s//<\/a>/g; } else { $tmp_skin_parent =~ s///-->/g; } if ($url ne '') { $tmp_skin_parent =~ s///g; $tmp_skin_parent =~ s//<\/a>/g; } else { $tmp_skin_parent =~ s///-->/g; } if ($in{'mode'} eq '' && $max_res_flag == 0) { $tmp_skin_parent =~ s///g; $tmp_skin_parent =~ s//<\/a>/g; } else { $tmp_skin_parent =~ s///-->/g; } $tmp_skin_parent =~ s/\$PARENT_TEXT/$text/g; if ($icon ne '') { $tmp_skin_parent =~ s/\$PARENT_ICON/$icon/g; } else { $tmp_skin_parent =~ s/\$PARENT_ICON/ /g; } if ($max_res_flag == 0) { $tmp_skin_parent =~ s///-->/g; } if ($show_res_size != 0 && $in{'mode'} eq '' && $child_logs{"$no"} > $show_res_size) { $tmp_skin_parent =~ s///g; $tmp_skin_parent =~ s//<\/a>/g; } else { $tmp_skin_parent =~ s///-->/g; } if ($in{'mode'} eq 'search' && $in{'no'} eq '') { if ($reno == 0) { $show = $no; } else { $show = $reno; } $tmp_skin_parent =~ s///g; $tmp_skin_parent =~ s//<\/a>/g; } else { $tmp_skin_parent =~ s///-->/g; } $tmp_skin_parent =~ s/\$PARENT_HOST/$host/g; print $tmp_skin_loghead; print $tmp_skin_parent; } else { $resno++; if ($show_res_size != 0 && $child_logs{"$reno"}-- > $show_res_size) { next; } if ($show_res_size != 0) { $res_show_info = "[Re:$resno]"; } $tmp_skin_res = $skin_res; $tmp_skin_res =~ s/\$RES_NO/$no/g; $tmp_skin_res =~ s/\$RES_DATE/$date/g; $tmp_skin_res =~ s/\$RES_SUBJ/$subj/g; $tmp_skin_res =~ s/\$RES_NAME/$name/g; if ($refer_mode == 1 && $in{'mode'} eq 'res') { $tmp_skin_res =~ s///g; $tmp_skin_res =~ s//<\/a>/g; $tmp_skin_res .= $ref_text; } else { $tmp_skin_res =~ s///-->/g; } if ($new_flag == 0) { $tmp_skin_res =~ s///-->/g; } if ($in{'preview'} ne 'on') { $tmp_skin_res =~ s/\$RES_CLASS/$class_name/g; $tmp_skin_res =~ s/\$RES_RANK/$rank/g; } else { $tmp_skin_res =~ s///-->/g; } $tmp_skin_res =~ s/\$RES_URL/$url/g; $tmp_skin_res =~ s/\$RES_RESNO/$res_show_info/g; if ($mail ne '') { $tmp_skin_res =~ s///g; $tmp_skin_res =~ s//<\/a>/g; } else { $tmp_skin_res =~ s///-->/g; } if ($url ne '') { $tmp_skin_res =~ s///g; $tmp_skin_res =~ s//<\/a>/g; } else { $tmp_skin_res =~ s///-->/g; } $tmp_skin_res =~ s/\$RES_TEXT/$text/g; if ($icon ne '') { $tmp_skin_res =~ s/\$RES_ICON/$icon/g; } else { $tmp_skin_res =~ s/\$RES_ICON/ /g; } $tmp_skin_res =~ s/\$RES_HOST/$host/g; print $tmp_skin_res; } } if ($in{'mode'} eq '') { $tmp_skin_undervar = $skin_undervar; $tmp_skin_undervar =~ s///g; $tmp_skin_undervar =~ s//<\/a>/g; if ($max_res_flag == 0) { $tmp_skin_undervar =~ s///g; $tmp_skin_undervar =~ s//<\/a>/g; } print $tmp_skin_undervar; } if ($flag == 1) { print $skin_logfoot; } return; } ### ページナビゲーター sub skin_navi { $skin_navi = &skin_basic($skin_navi); print $skin_navi; return; } ### 直接移動リンク sub skin_link { $skin_link = &skin_basic($skin_link); print $skin_link; return; } ### フッタ sub skin_footer { $skin_footer = &skin_basic($skin_footer); print $skin_footer; exit(); } ### 基本変数 sub skin_basic { local($_) = @_; $_ =~ s/\$INFO_SCRIPT/$script/g; $_ =~ s/\$INFO_COUNTER/$counter/g; $_ =~ s/\$INFO_LASTPOST/$last_post $name/g; $_ =~ s/\$LINK_BACK/$back_url/g; $_ =~ s/\$LINK_HOWTO/$script?mode=howto/g; $_ =~ s/\$LINK_RANK/$script?mode=rank/g; $_ =~ s/\$LINK_SEARCH/$script?mode=search/g; $_ =~ s/\$LINK_USERDEL/$script?mode=userdel/g; $_ =~ s/\$LINK_PAST/$script?mode=past/g; $_ =~ s/\$LINK_ADMIN/$script?mode=admin/g; $_ =~ s/\$LINK_ICON/$script?mode=icon/g; $_ =~ s/\$LINK_PAGE/$link_info/g; if ($in{'page'} > 0) { $_ =~ s///g; $_ =~ s//<\/a>/g; } else { $_ =~ s///g; $_ =~ s///g; } if ($in{'page'} > 0) { $n = $in{'page'} - 1; $_ =~ s///g; $_ =~ s//<\/a>/g; } else { $_ =~ s///g; $_ =~ s///g; } if (int(($parent - 1) / $page_size) > $in{'page'}) { $n = $in{'page'} + 1; $_ =~ s///g; $_ =~ s//<\/a>/g; } else { $_ =~ s///g; $_ =~ s///g; } return $_; } ### スキン読み込みエラー sub skin_error { print <<"_HTML_"; Content-Type: text/html $title _HTML_ exit(); } 1;