#!/usr/bin/perl use strict; use Boofy::Main; use Boofy::Login; use Boofy::String qw(japanese_date tune_html short_japanese_date encode_post_key); use Boofy::Config qw(MSG_PER_PAGE DB_MESSAGE_SLAVE); use Boofy::HTML qw(make_page); use Boofy::Member; use Boofy::Message; #------------------------------------------------------------------------------ # FUNCTIONS #------------------------------------------------------------------------------ sub render_space { my ($text) = @_; my $copy = $text; $copy =~ s/[\s\n\r ]//g; if (!$copy) { $text = "_"; } return $text; } sub show_outbox { my ($tpl, $ms, $page_now) = @_; my $per_page = 20; my $dummy_per_page = $per_page + 1; my $limit_from = ($page_now - 1) * $per_page; my $limit_count = $dummy_per_page; my $sth = $ms->get_message_sth("outbox", $limit_from, $limit_count); my @loop; my $count_row = 0; my $mm = Boofy::Member::->new(); while (my $row = $sth->fetchrow_hashref()) { my %loop; $loop{id} = $row->{message_id}; $loop{name} = tune_html($mm->multi_get_nickname($row->{to_id})); $loop{view_link} = "view_message.pl?id=$row->{message_id}&box=outbox"; $loop{subject} = tune_html(render_space($row->{subject})); my $date; if (length($row->{timestamp}) == 14) { ## MySQL 4.0 $date = join("-", unpack("A4 A2 A2", $row->{timestamp})); } else { ## MySQL 4.1 $date = join("-", unpack("A4 x1 A2 x1 A2", $row->{timestamp})); } $loop{date} = short_japanese_date($date); if ($count_row < $per_page) { push(@loop, \%loop); } $count_row++; } $tpl->param("message_loop", \@loop); ## Make page count my %param = ( box => "outbox" ); my $page_link = make_page(page => $page_now, count_row => $count_row, per_page => $per_page, url => "list_message.pl", param => \%param); $tpl->param("page_link", $page_link); } sub show_savebox { my ($tpl, $ms, $page_now) = @_; my $per_page = 20; my $dummy_per_page = $per_page + 1; my $limit_from = ($page_now - 1) * $per_page; my $limit_count = $dummy_per_page; my $sth = $ms->get_message_sth("savebox", $limit_from, $limit_count); my $count_row = 0; my @loop; my $mm = Boofy::Member::->new(); while (my $row = $sth->fetchrow_hashref()) { my %loop; $loop{id} = $row->{message_id}; $loop{name} = tune_html($mm->multi_get_nickname($row->{to_id})); $loop{view_link} = "view_message.pl?id=$row->{message_id}&box=savebox"; $loop{subject} = tune_html(render_space($row->{subject})); my $date; if (length($row->{timestamp}) == 14) { ## MySQL 4.0 $date = join("-", unpack("A4 A2 A2", $row->{timestamp})); } else { ## MySQL 4.1 $date = join("-", unpack("A4 x1 A2 x1 A2", $row->{timestamp})); } $loop{date} = short_japanese_date($date); if ($count_row < $per_page) { push(@loop, \%loop); } $count_row++; } $tpl->param("message_loop", \@loop); ## Make page count my %param = ( box => "savebox" ); my $page_link = make_page(page => $page_now, count_row => $count_row, per_page => $per_page, url => "list_message.pl", param => \%param); $tpl->param("page_link", $page_link); } sub show_inbox { my ($tpl, $ms, $page_now) = @_; my $per_page = 20; my $dummy_per_page = $per_page + 1; my $limit_from = ($page_now - 1) * $per_page; my $limit_count = $dummy_per_page; my $sth = $ms->get_message_sth("inbox", $limit_from, $limit_count); my @loop; my $count_row = 0; my $mm = Boofy::Member::->new(); while (my $row = $sth->fetchrow_hashref()) { my %loop; $loop{id} = $row->{message_id}; $loop{name} = tune_html($mm->multi_get_nickname($row->{from_id})); $loop{view_link} = "view_message.pl?id=$row->{message_id}&box=inbox"; if ($row->{new} eq "y") { $loop{background} = "#FFF7E1"; $loop{icon} = "img/mail1.gif"; } elsif ($row->{new} eq "n") { $loop{background} = "#FFFFFF"; $loop{icon} = "img/mail2.gif"; } else { $loop{background} = "#FFFFFF"; $loop{icon} = "img/mail5.gif"; } $loop{subject} = tune_html(render_space($row->{subject})); my $date; if (length($row->{timestamp}) == 14) { ## MySQL 4.0 $date = join("-", unpack("A4 A2 A2", $row->{timestamp})); } else { ## MySQL 4.1 $date = join("-", unpack("A4 x1 A2 x1 A2", $row->{timestamp})); } $loop{date} = short_japanese_date($date); if ($count_row < $per_page) { push(@loop, \%loop); } $count_row++; } $tpl->param("message_loop", \@loop); ## Make page count my %param = ( box => "inbox" ); my $page_link = make_page( page => $page_now, count_row => $count_row, per_page => $per_page, url => "list_message.pl", param => \%param ); $tpl->param("page_link", $page_link); } sub show_thrash { my ($tpl, $ms, $page_now) = @_; my $per_page = 20; my $dummy_per_page = $per_page + 1; my $limit_from = ($page_now - 1) * $per_page; my $limit_count = $dummy_per_page; my $sth = $ms->get_message_sth("thrash", $limit_from, $limit_count); my @loop; my $count_row = 0; my $mm = Boofy::Member::->new(); while (my $row = $sth->fetchrow_hashref()) { my %loop; $loop{id} = $row->{message_id}; $loop{name} = tune_html($mm->multi_get_nickname($row->{from_id})); $loop{view_link} = "view_message.pl?id=$row->{message_id}&box=thrash"; $loop{subject} = tune_html(render_space($row->{subject})); my $date; if (length($row->{timestamp}) == 14) { ## MySQL 4.0 $date = join("-", unpack("A4 A2 A2", $row->{timestamp})); } else { ## MySQL 4.1 $date = join("-", unpack("A4 x1 A2 x1 A2", $row->{timestamp})); } $loop{date} = short_japanese_date($date); if ($count_row < $per_page) { push(@loop, \%loop); } $count_row++; } $tpl->param("message_loop", \@loop); ## Make page count my %param = ( box => "thrash" ); my $page_link = make_page(page => $page_now, count_row => $count_row, per_page => $per_page, url => "list_message.pl", param => \%param); $tpl->param("page_link", $page_link); } sub check_vars { my ($href) = @_; my %v = ref($href) ? %{ $href } : (); if ($v{page} =~ /\D/) { return undef(); } if ($v{box} !~ /(inbox|outbox|savebox|thrash)/) { return undef(); } return 1; } #------------------------------------------------------------------------------ # MAIN #------------------------------------------------------------------------------ my $mn = Boofy::Main::->new(); my $cgi = $mn->load_cgi(); my $lg = Boofy::Login::->new($cgi); ## Login my $member_status = $lg->get_member_status(); my $member_id = $member_status->{id}; my $member_type = $member_status->{type}; if (!$member_id) { $lg->show_login($mn); exit; } ## Vars 2 my %v = $cgi->Vars(); $v{box} ||= "inbox"; $v{page} ||= 1; if (!check_vars(\%v)) { my $tpl = $mn->load_tpl("header.tmpl"); $mn->show_header(); $mn->show_alert(); print $tpl->output(); exit; } ## メッセージの数 (退会したメンバー除く) my $ms = Boofy::Message::->new(member_id => $member_id); if (!$ms->has_message($v{box})) { my $tpl = $mn->load_tpl("list_message_" . $v{box} . "_blank.tmpl"); if ($member_type == 2) { $tpl->param("premium", 1); } $mn->show_header(); $mn->show_banner($member_id); $mn->show_premium($member_type); print $tpl->output(); } elsif ($v{box} eq "inbox") { my $tpl = $mn->load_tpl("list_message_inbox.tmpl"); if ($member_type == 2) { $tpl->param("premium", 1); } $mn->show_header(); $mn->show_banner($member_id); $mn->show_premium($member_type); show_inbox($tpl, $ms, $v{page}); print $tpl->output(); } elsif ($v{box} eq "outbox") { my $tpl = $mn->load_tpl("list_message_outbox.tmpl"); if ($member_type == 2) { $tpl->param("premium", 1); } $mn->show_header(); $mn->show_banner($member_id); $mn->show_premium($member_type); show_outbox($tpl, $ms, $v{page}); print $tpl->output(); } elsif ($v{box} eq "savebox") { my $tpl = $mn->load_tpl("list_message_savebox.tmpl"); if ($member_type == 2) { $tpl->param("premium", 1); } $mn->show_header(); $mn->show_banner($member_id); $mn->show_premium($member_type); show_savebox($tpl, $ms, $v{page}); print $tpl->output(); } elsif ($v{box} eq "thrash") { my $tpl = $mn->load_tpl("list_message_thrash.tmpl"); if ($member_type == 2) { $tpl->param("premium", 1); } $mn->show_header(); $mn->show_banner($member_id); $mn->show_premium($member_type); show_thrash($tpl, $ms, $v{page}); my $post_key = encode_post_key($member_id); $tpl->param("post_key", $post_key); print $tpl->output(); }