6 package Gruta
::Data
::BASE
;
10 sub fields
{ return (); }
11 sub vfields
{ return (); }
12 sub afields
{ return ($_[0]->fields(), $_[0]->vfields()); }
18 $self->{_source
} = shift;
21 return $self->{_source
};
28 my $id = $self->get('id') || '';
29 $id =~ /^[\d\w_-]+$/ or croak
"Bad id [$id]";
38 my $self = bless({ }, $class);
40 foreach my $k ($self->afields()) {
41 $self->{$k} = $args{$k};
51 croak
'get ' . ref($self) . " field '$field'?" unless exists $self->{$field};
53 return $self->{$field};
60 croak
'set ' . ref($self) . " field '$field'?" unless exists $self->{$field};
62 $self->{$field} = shift;
64 return $self->{$field};
68 package Gruta
::Data
::Topic
;
70 use base
'Gruta::Data::BASE';
72 sub fields
{ return qw(id name editors max_stories internal); }
74 package Gruta
::Data
::Story
;
76 use base
'Gruta::Data::BASE';
80 sub fields
{ return qw(id topic_id title date userid format hits ctime content); }
81 sub vfields
{ return qw(abstract body); }
86 $self->SUPER::_assert
();
88 my $topic_id = $self->get('topic_id') || '';
89 $topic_id =~ /^[\d\w_-]+$/ or croak
"Bad topic_id";
94 sub date
{ return Gruta
::Data
::format_date
($_[0]->get('date'), $_[1]); }
96 sub touch
{ return $_[0]; }
103 $self->set('tags', [ @_ ]);
106 @ret = @
{ $self->get('tags') };
115 return sprintf ('%08x', int(rand(0xffffffff)));
118 package Gruta
::Data
::User
;
120 use base
'Gruta::Data::BASE';
122 sub fields
{ return qw(id username email password can_upload is_admin xdate); }
123 sub vfields
{ return qw(sid); }
125 sub xdate
{ return Gruta
::Data
::format_date
($_[0]->get('xdate'), $_[1]); }
127 package Gruta
::Data
::Session
;
129 use base
'Gruta::Data::BASE';
131 sub fields
{ return qw(id time user_id ip); }
140 my ($y, $m, $d, $H, $M, $S) = ($date =~
141 /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/);
143 $format =~ s/%Y/$y/g;
144 $format =~ s/%y/$y/g;
145 $format =~ s/%m/$m/g;
146 $format =~ s/%d/$d/g;
147 $format =~ s/%H/$H/g;
148 $format =~ s/%M/$M/g;
149 $format =~ s/%S/$S/g;
162 my ($S,$M,$H,$d,$m,$y) = (localtime)[0..5];
164 my $date = sprintf('%04d%02d%02d%02d%02d%02d',
165 1900 + $y, $m + 1, $d, $H, $M, $S);
167 return Gruta
::Data
::format_date
($date, $format);