)/) {
$pattern = "$1$2$3$4$5$6$7";
$album_id = $4;
$number = $6;
$owner_id = $db->select_album_owner_id($4);
if ($member_id == $owner_id) {
$photo_url = $im->make_image_url($number);
$thumb_url = $im->make_thumb_url($number);
$html =~ s/$pattern/$data{1}$photo_url$data{2}$album_id$data{3}$number$data{4}$thumb_url$data{5}/g;
}
else {
$html =~ s/$pattern//g;
}
}
}
$html =~ s/\n/
/g;
return $html;
}
sub show_diary_quota {
my ($tpl, $diary_usage, $diary_limit) = @_;
$diary_usage = sprintf("%.1f", $diary_usage / (1024 * 1024));
$diary_limit = sprintf("%.1f", $diary_limit / (1024 * 1024));
$tpl->param("diary_usage", $diary_usage);
$tpl->param("diary_limit", $diary_limit);
}
#------------------------------------------------------------------------------
# main
#------------------------------------------------------------------------------
my $mn = Boofy::Main::->new();
my $cgi = $mn->load_cgi();
my $lg = Boofy::Login::->new($cgi); ## Need to change to cgi => $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;
}
## Maintenance
#my $tpl = $mn->load_tpl("header.tmpl");
#$mn->show_header();
#$mn->show_alert("現在メンテナンス中です。ご迷惑をおかけいたしますが、今しばらくお待ちいただきますようお願い申し上げます。");
#print $tpl->output();
#exit;
my $diary = Boofy::Diary->new($member_id);
if ($diary->is_readonly) {
my $tpl = $mn->load_tpl("header.tmpl");
$mn->show_header();
$mn->show_alert('
現在、日記の作成・編集機能にエラーが発生しています。
誠に申し訳ございません。しばらく時間が経ってからアクセスしてください。
');
print $tpl->output();
exit;
}
## TODO: キャッシュに移動!
## Block
my $cc = Boofy::Cache->new();
if ($cc->get_limit($member_id, "diary") >= LIMIT_DIARY_COUNT) {
my $tpl = $mn->load_tpl("add_diary_block.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
print $tpl->output();
exit;
}
## Check Diary Quota
my $diary_quota = $cc->get_diary_quota($member_id);
my ($diary_usage, $diary_limit) = split(/:/, $diary_quota);
if ($diary_usage >= $diary_limit) {
$diary_limit = ($diary_limit / (1024 * 1024));
my $message_title = "日記を書く";
my $message_body = "
申し訳ございませんが$diary_limitメガを超えられている場合は、新たな記事を作成
することが出来ません。";
if ($member_type == 1) {
$message_body .= "$diary_limitメガ未満まで容量を空けていただくか、容量拡大
のお手続きをおこなっていただけば作成可能になります。
日記容量拡大はmixiプレミアムにご登録いただければ可能です。詳細は こちら";
}
else {
$message_body .= "$diary_limitメガ未満まで容量を空けてください。";
}
my $tpl = $mn->load_tpl("message.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
$mn->show_message($message_title, $message_body);
print $tpl->output();
exit;
}
my %v = $cgi->Vars();
$v{diary_title} =~ s/[\n\r]//g;
if (!$v{submit} || $cgi->url_param("submit")) {
$v{orig_size} = 1;
my $tpl = $mn->load_tpl("add_diary_main.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
show_main($cc, $diary->get_dbh(), $tpl, $member_id, \%v);
show_diary_quota($tpl, $diary_usage, $diary_limit);
print $tpl->output();
}
elsif ($v{submit} eq "cancel") {
my $im = Boofy::Image::->new(type => "diary", member_id => $member_id);
my @tmp_ftp = split(":", $v{packed});
if (scalar(@tmp_ftp) > (4 * $im->get_max_img_count())) {
die "add_diary.pl: POST value has been tampered by $member_id.\n";
}
$im->delete_tmp_file(@tmp_ftp);
## Display
my $tpl = $mn->load_tpl("add_diary_main.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
show_main($cc, $diary->get_dbh, $tpl, $member_id, \%v);
show_diary_quota($tpl, $diary_usage, $diary_limit);
print $tpl->output();
}
elsif ($v{submit} eq "main") {
my %error;
my $sanitized;
if ($member_type == 2) {
$sanitized = scrub_html($v{diary_body});
if ($sanitized) {
$sanitized = convert_html($member_id, $sanitized, 1);
if ($v{diary_body} && !$sanitized) {
$error{diary_body} = "自分の写真を使って下さい。";
}
}
else {
$v{diary_body} = undef();
}
}
%error = check_error(\%v);
my %upload;
my $im = Boofy::Image::->new(type => "diary", member_id => $member_id);
my $ic = Boofy::ImageCluster->new('diary');
my $max_count = $im->get_max_img_count();
if (!$v{orig_size}) {
$im->set_compress(1);
}
for (my $seq = 1; $seq <= $max_count; $seq++) {
my $photo = "photo" . $seq;
if (!$v{$photo}) {
next;
}
if ($v{$photo} !~ /\.(jpg|jpeg|jpe)$/i) {
$error{photo} = "画像$seqはJPG形式にして下さい。";
last;
}
if ($im->get_error()) {
last;
}
my $fh = $cgi->upload($photo);
my $id = $ic->prepare(
blob => $fh, id => $member_id, compress => $v{orig_size} ? 0 : 1
);
$error{photo} = "画像$seqのアップロードに失敗しました。" unless $id;
$upload{$seq} = $id;
}
my $image_error = $im->get_error();
if ($image_error) {
$error{photo} = $image_error;
}
## Display (Error)
if (%error) {
$im->delete_tmp_file();
my @sort = ("diary_title", "diary_body", "photo");
my $error = make_error(\@sort, \%error);
my $tpl = $mn->load_tpl("add_diary_main.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
show_main($cc, $diary->get_dbh, $tpl, $member_id, \%v, $error);
show_diary_quota($tpl, $diary_usage, $diary_limit);
print $tpl->output();
exit;
}
## Display (Confirm)
my $packed = $im->pack(\%upload);
my $tpl = $mn->load_tpl("add_diary_confirm.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
show_confirm($tpl, $member_id, $member_type, $max_count, $packed, $sanitized, \%v);
$tpl->param("post_key", encode_post_key($member_id));
print $tpl->output();
}
elsif ($v{submit} eq "confirm") {
if (encode_post_key($member_id) ne $v{post_key}) {
my $tpl = $mn->load_tpl("header.tmpl");
$mn->show_header();
$mn->show_alert();
print $tpl->output();
exit;
}
## Check sanitized once more
my %error = check_error(\%v);
my $sanitized;
if ($member_type == 2) {
$sanitized = scrub_html($v{diary_body});
$sanitized = convert_html($member_id, $v{diary_body}, 1);
if (!$sanitized) {
$error{diary_body} = "自分の写真を使って下さい。";
}
}
if (%error) {
die "add_diary.pl: $member_id try to tamper value\n";
}
## Vars
my $photo_size_total = 0;
## Add to DB
my $diary_id = $diary->add($member_type, \%v);
my $count = $cc->add_limit($member_id, "diary", LIMIT_DIARY_TIME);
if ($count >= LIMIT_DIARY_COUNT) {
mail_mixi($member_id, $v{body});
}
my $im = Boofy::Image::->new(type => "diary", member_id => $member_id);
$im->set_type_id($diary_id);
my $ic = Boofy::ImageCluster->new('diary');
my %ftp_tmp = $im->unpack($v{packed}); ## Built-in protection
my $total_size = 0;
my %photo_data;
for my $seq (keys(%ftp_tmp)) {
my $img_name = $ftp_tmp{$seq}->{img};
my $thumb_name = $ftp_tmp{$seq}->{thumb};
my $number = $im->_get_random;
my $uri = sprintf '/photo/diary/%s/%s_%s.%s',
$im->_get_inner_dir, $diary_id, $number, 'jpg';
my $uri_s = sprintf '/photo/diary/%s/%s_%ss.%s',
$im->_get_inner_dir, $diary_id, $number, 'jpg';
my $size = $ic->put($img_name, $uri, $member_id);
if ($ic->errstr) {
die "add_diary.pl: $member_id cannot put image: $uri: ". $ic->errstr;
}
$size += $ic->put($thumb_name, $uri_s, $member_id);
if ($ic->errstr) {
die "add_diary.pl: $member_id cannot put image: $uri_s: ". $ic->errstr;
}
$photo_data{$seq} = [ $number, $size ];
}
## DB Insert
insert_diary_photo($diary->get_dbh, $member_id, $diary_id, \%photo_data);
$cc->delete_own_diary($member_id);
$cc->delete_diary_calendar($member_id);
my $tpl = $mn->load_tpl("add_diary_finish.tmpl");
$mn->show_header();
$mn->show_banner($member_id);
$mn->show_premium($member_type);
print $tpl->output();
}
else {
my $tpl = $mn->load_tpl("header.tmpl");
$mn->show_header();
$mn->show_alert('不正な入力です。');
print $tpl->output();
exit;
}