1# -*- cperl -*-
2# -----------------------------------------------------------------------------
3# $Id: PersonInChannel.pm 11365 2008-05-10 14:58:28Z topia $
4# -----------------------------------------------------------------------------
5# なるとや発言権を持っているかどうかの情報とPersonalInfoのセット。
6# -----------------------------------------------------------------------------
7package PersonInChannel;
8use strict;
9use warnings;
10use Carp;
11use PersonalInfo;
12use Tiarra::DefineEnumMixin qw(PERSON HAS_O HAS_V REMARKS);
13use Tiarra::Utils;
14Tiarra::Utils->define_array_attr_getter(0, qw(person));
15Tiarra::Utils->define_array_attr_accessor(0, qw(has_o has_v));
16
17sub new {
18    my ($class,$person,$has_o,$has_v) = @_;
19    croak "PersonInChannel->new requires 3 parameters.\n" if @_ != 4;
20    my $obj = bless [] => $class;
21    $obj->[PERSON] = $person;
22    $obj->[HAS_O] = $has_o;
23    $obj->[HAS_V] = $has_v;
24    $obj->[REMARKS] = undef;
25    $obj;
26}
27
28sub info {
29    my ($this, $wantarray) = @_;
30    shift->[PERSON]->info($wantarray);
31}
32
33sub priv_symbol {
34    my $this = shift;
35
36    return '@' if ($this->has_o);
37    return '+' if ($this->has_v);
38    return '';
39}
40
41*remarks = \&remark;
42sub remark {
43    my ($this,$key,$value) = @_;
44    my $remarks = $this->[REMARKS];
45
46    if (defined $value) {
47	if (!$remarks) {
48	    $remarks = $this->[REMARKS] = {};
49	}
50
51	$remarks->{$key} = $value;
52    }
53    elsif (@_ >= 3) {
54	if ($remarks) {
55	    delete $remarks->{$key};
56	}
57    }
58
59    if ($remarks) {
60	$remarks->{$key};
61    }
62    else {
63	undef;
64    }
65}
66
67sub delete_remark {
68    my ($this,$key) = @_;
69    if ($_ = $this->[REMARKS]) {
70	delete $_->{$key};
71    }
72}
73
741;
75