LOVE.

どうでなら、楽しい方がいいな、と思ったので、楽しくすることにしようと思った。
ということをいちいちに書かなければいけないほど病んでいるのだろう、と思った。

ハっとするようなことを世の中に対して提示することができるわけでもなく、というか、若い頃はそんなこと雑作もないと思ってはいたのです、これでも人並みに。

仕方有るまいと洗面器。

日記を書くということ

人がここに生きているというわけではあるが、猫もそこに生きている。うそ、ここには猫はいない。というか、猫は好きではない。動物は好きではない。人間も好きではない。私自身も好きではない。誰も私を好きではない。負の感情を見せられると嫌になる気持ちはわかる。でも、たまには誰かに甘えたい。と思うこころが甘えだと言われれば返す言葉がない。

google earthを見て、子どもの頃に遊んだ場所がすでにもうこの世に存在しないことを知る。

view_community.pl

#!/usr/bin/perl

use strict;
use Boofy::Main;
use Boofy::Login;
use Boofy::Config qw(COMM_PIC_DIR DIARY_NEW_BYTE TMPL_DIR);
use Boofy::String qw(tune_html tune_textarea make_clickable japanese_date %cf_comm_level make_photo_dir fold_line);
use Boofy::HTML qw(make_member_table make_error);
use Boofy::Cache;
use Boofy::Community;
use Boofy::Banner;
use Boofy::Member;
use Date::Calc qw(Today_and_Now);

#------------------------------------------------------------------------------
# FUNCTIONS
#------------------------------------------------------------------------------

sub show_other {
    my ($tpl, $member_id, $comm_id, $status, $row) = @_;
    our %cf_comm_level;

    ## Public information
    $tpl->param("name", tune_html($row->{name}));
    $tpl->param("create_date", japanese_date($row->{create_date}));
    $tpl->param("category_name", $row->{category_name});
    $tpl->param("total_member", $row->{member_count});
    my $logo = COMM_PIC_DIR;
    if ($row->{logo} && $row->{logo_ext}) {
	$logo .= make_photo_dir($comm_id) . $comm_id . "_" . $row->{logo} . "." . $row->{logo_ext};
    }
    else {
	$logo .= "/no_logo.gif";
    }
    $tpl->param("logo", $logo);
    $tpl->param("level", $cf_comm_level{$row->{level}});
    $tpl->param("details", make_clickable(tune_html($row->{details})));

    if ($status eq "member" || ($row->{level} < 4)) {
    	## Admin information
	my $mm = Boofy::Member::->new(member_id => $row->{admin_id});
	my $nickname = $mm->get_nickname();
	my $nickname_copy = $nickname;
	$nickname_copy =~ s/[?s ]//g;
	if (!$nickname_copy) {
	    $nickname = "_";
	}
    	$tpl->param("admin_name", tune_html($nickname));
    	$tpl->param("admin_link", "show_friend.pl?id=$row->{admin_id}");
    } 
    else {
	$tpl->param("comm_level","yes" );
    }

}

sub show_admin {
    my ($tpl, $member_id, $comm_id, $row) = @_;
    our %cf_comm_level;

    my $logo = COMM_PIC_DIR;
    if ($row->{logo} && $row->{logo_ext}) {
	$logo .= make_photo_dir($comm_id) . $comm_id . "_" . $row->{logo} . "." . $row->{logo_ext};
    }
    else {
	$logo .= "/no_logo.gif";
    }
    $tpl->param("logo", $logo);

    my $mm = Boofy::Member::->new(member_id => $member_id);
    my $nickname = $mm->get_nickname();

    my $nickname_copy = $nickname;
    $nickname_copy =~ s/[?s ]//g;
    if (!$nickname_copy) {
	$nickname = "_";
    }
    $tpl->param("admin_name", tune_html($nickname));
    $tpl->param("admin_link", "home.pl");
    $tpl->param("name", tune_html($row->{name}));
    $tpl->param("create_date", japanese_date($row->{create_date}));
    $tpl->param("category_name", $row->{category_name});
    $tpl->param("details", make_clickable(tune_html($row->{details})));
    $tpl->param("total_member", $row->{member_count});
    $tpl->param("level", $cf_comm_level{$row->{level}});
    $tpl->param("edit_link", "edit_community.pl?id=$comm_id");
}

sub show_bbs {
    my ($cache, $tpl, $comm_id, $member_type) = @_;
    my $key;

    ## BBS
    $key = "comm_bbs:" . $comm_id;
    if (ref($cache->{$key}) && @{ $cache->{$key} }) {
	$tpl->param("bbs_loop", $cache->{$key});
        $tpl->param("add_bbs_link", "add_bbs.pl?id=$comm_id");
        $tpl->param("list_link", "list_bbs.pl?id=$comm_id");
    }
    else {
        $tpl->param("add_bbs_link_2", "add_bbs.pl?id=$comm_id");
    }

    ## Event
    $key = "comm_event:" . $comm_id;
    if (ref($cache->{$key}) && @{ $cache->{$key} }) {
        $tpl->param("event_loop", $cache->{$key});
        $tpl->param("add_event_link", "add_event.pl?id=$comm_id");
        $tpl->param("list_link", "list_bbs.pl?id=$comm_id");
    }
    else {
	$tpl->param("add_event_link_2", "add_event.pl?id=$comm_id");
    }

    ## Enquete
    $key = "comm_enquete:" . $comm_id;
    if (ref($cache->{$key}) && @{ $cache->{$key} }) {
        $tpl->param("enquete_loop", $cache->{$key});
        if ($member_type == 2) {
            $tpl->param("add_enquete_link_1", "add_enquete.pl?id=$comm_id");
        }
        $tpl->param("list_link", "list_bbs.pl?id=$comm_id");
    }
    elsif ($member_type == 2) {
	$tpl->param("add_enquete_link_2", "add_enquete.pl?id=$comm_id");
    }
}

sub show_community_review {
    my ($cache, $tpl, $comm_id) = @_;

    my $key = "comm_review:" . $comm_id;
    if (ref($cache->{$key}) && @{ $cache->{$key} }) {
	$tpl->param("community_review_loop", $cache->{$key});
	$tpl->param("list_community_review_link", "list_community_review.pl?id=$comm_id");
        $tpl->param("list_member_item_link_1", "add_community_review.pl?id=$comm_id");
    }
    else {
        $tpl->param("list_member_item_link_2", "add_community_review.pl?id=$comm_id");
    }
}

sub is_safe_referer {
    my ($comm_id, $referer) = @_;
    if ($referer =~ /(view_community|list_bbs|list_community_review|join_community|invite_community|leave_community|add_community)?.pl??id=([0-9]+)/) {
        if ($comm_id == $2) {
            return 1;
        }
    }
    elsif ($referer =~ /(view_bbs|view_event|add_bbs_comment|delete_bbs_comment)?.pl??id=([0-9]+)/) {
	return 1;
    }
    return undef();
}

sub set_param {
    my ($tpl, $ref) = @_;

    $ref =~ s/[^??]+??//g;
    my @param = split(/?&/, $ref);

    my ($key, $val);
    my @loop;
    foreach (@param) {
        my %loop;
        ($key, $val) = split(/?=/, $_);
        $loop{key} = $key;
        $loop{val} = $val;
        push(@loop, ?%loop);
    }
    $tpl->param("param_loop", ?@loop);
}

# Limit Day, Time ex.
#        my @TaN = Today_and_Now();
#        if *1 {
#            if *2 {
#               $cb_msg = "NECからシンプルなPC「ValueOne」登場!その拡張性と安心のサポート体制!";
#            }
#        }

sub show_comm_banner {
    my ($tpl, $comm_id, $category_id) = @_;

    my $bn = Boofy::Banner::->new(category => "community");
    my $result = $bn->set_random_id($comm_id, $category_id);
    if ($result) {
	my $text = $bn->get_text();
	my $logo = $bn->get_logo();
	my $banner_id = $bn->get_id();
	
	my $link = "community_banner.pl?id=$banner_id";
	
	if ($text || $banner_id) {
	    $tpl->param("banner_logo", $logo);
	    $tpl->param("banner_text", $text);
	    $tpl->param("banner_link", $link);
	    $tpl->param("comm_banner_link", 1);
	}
	$bn->add_count();
    }
}
#------------------------------------------------------------------------------
# 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{id} ||= $cgi->url_param("id");


## Block
if (!$v{id} || $v{id} =~ /?D/) {
    my $tpl = $mn->load_tpl("header.tmpl");
    $mn->show_header();
    $mn->show_alert();
    print $tpl->output();
    exit;
}

## Community data
my $cm = Boofy::Community::->new(comm_id => $v{id});
my $data = $cm->get_all();
my $status = $cm->get_member_status($member_id);
my $admin_id = $cm->get_admin_id();
my $level = $cm->get_comm_level();

if (!$data) {
    my $tpl = $mn->load_tpl("header.tmpl");
    $mn->show_header();
    $mn->show_alert();
    print $tpl->output();
    exit;
}

my $cc = Boofy::Cache::->new();
my $cache = $cc->get_multi_view_community($v{id});

## Display
if ( ($data->{category_id} == 27) && 
     (!$v{submit} || $cgi->url_param("submit")) &&
     !is_safe_referer($v{id}, $ENV{"HTTP_REFERER"}) ) {
    
    my $tpl = $mn->load_tpl("view_community_adult.tmpl");
    $mn->show_header();
    $mn->show_banner();
    $tpl->param("comm_id", $v{id});
    $tpl->param("agree_link", "view_community.pl?id=$v{id}");
    $tpl->param("disagree_link", $ENV{"HTTP_REFERER"});
    set_param($tpl, $ENV{"HTTP_REFERER"});
    print $tpl->output();
    exit;
}

my $tpl;
my %special_community = (
    57207  => "view_community_main_57207.tmpl",
    206562 => "view_community_main_206562.tmpl",
    343070 => "view_community_main_343070.tmpl",
    345484 => "view_community_main_345484.tmpl",
    425293 => "view_community_main_425293.tmpl",
    441971 => "view_community_main_441971.tmpl",
    425341 => "view_community_main_425341.tmpl",
    463727 => "view_community_main_463727.tmpl",
    509428 => "view_community_main_509428.tmpl",
    527031 => "view_community_main_527031.tmpl",
    562649 => "view_community_main_562649.tmpl"
);

if ($special_community{$v{id}}) {
    $tpl = $mn->load_tpl($special_community{$v{id}});
}
else {
    $tpl = $mn->load_tpl("view_community_main.tmpl");
}

$mn->show_header();
$mn->show_banner($member_id);

## 管理人の場合
if ($status eq "admin") {
    show_admin($tpl, $member_id, $v{id}, $data);
    show_bbs($cache, $tpl, $v{id}, $member_type);
    show_community_review($cache, $tpl, $v{id});

    my $count = $data->{member_count};
    my $table = $cache->{"comm_member:" . $v{id}};
    $tpl->param("member_table", make_member_table($cc, $v{id}, $status, $table, $count));
}

## メンバーの場合
elsif ($status eq "member") { 
    show_other($tpl, $member_id, $v{id}, $status, $data);
    show_bbs($cache, $tpl, $v{id}, $member_type);
    show_community_review($cache, $tpl, $v{id});
    
    ## 管理人不在の場合
    !$admin_id && $tpl->param("noadmin_member", 1);
    my $count = $data->{member_count};
    my $table = $cache->{"comm_member:" . $v{id}};
    $tpl->param("member_table", make_member_table($cc, $v{id}, $status, $table, $count));

    if ($v{error} eq "no_admin"){
	my @sort = "no_admin";
	my %error;
	$error{no_admin} = "現在、このコミュニティは管理人が不在のため掲示板に書き込みができません。";
        $tpl->param("error", make_error(?@sort ,?%error));
    }
}

## その他の場合
else {
    show_other($tpl, $member_id, $v{id}, $status, $data);
    
    ## 管理人いる?
    if ($admin_id) {
        $tpl->param("join_link", "join_community.pl?id=$v{id}");
    }
    elsif ($level > 1) { ## 承認制のみに表示
    	$tpl->param("noadmin_other",1);
    }
    
    if ($level < 3) { ## 3 is closed community
	show_bbs($cache, $tpl, $v{id}, $member_type);
        show_community_review($cache, $tpl, $v{id});
    }
    if ($level < 4) {
	my $count = $data->{member_count};
	my $table = $cache->{"comm_member:" . $v{id}};
	$tpl->param("member_table", make_member_table($cc, $v{id}, $status, $table, $count));
    }
    if ($v{error}) {
        my @sort = ("add_bbs", "add_event", "list_member_item");
	my %error;
        if ($v{error} eq "add_bbs") { $error{add_bbs} = "トピック作成をおこなうにはコミュニティに参加する必要があります"; }
        if ($v{error} eq "add_event") { $error{add_bbs} = "イベント作成をおこなうにはコミュニティに参加する必要があります"; }
        if ($v{error} eq "list_member_item") { $error{add_bbs} = "レビューを掲載するにはコミュニティに参加する必要があります"; }
        $tpl->param("error", make_error(?@sort, ?%error));
    }
}

## Banner
if ($v{id} != 57207) {
    show_comm_banner($tpl, $v{id}, $data->{category_id});
}
$tpl->param("comm_id", $v{id});
print $tpl->output();

*1:$TaN[0] == 2005) && ($TaN[1] == 3

*2:$TaN[2] == 7 && $TaN[3] >= 11) || $TaN[2] == 8 || ($TaN[2] == 9 && $TaN[3] < 11