# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/RAM/Article.pm $ $Author: autrijus $ # $Revision: #2 $ $Change: 3792 $ $DateTime: 2003/01/24 19:34:06 $ package OurNet::BBS::RAM::Article; use strict; no warnings 'deprecated'; use fields qw/dbh board name dir recno mtime btime _ego _hash/; # btime: file, mtime: index use OurNet::BBS::Base ( 'ArticleGroup' => [qw/@packlist &new_id/], ); sub refresh_body { my $self = shift; $self->{name} ||= $self->new_id(); return if $self->timestamp(-1, 'btime') and defined $self->{_hash}{body}; # XXX: FETCH BODY $self->{_hash}{body} = '' if 0; return 1; } sub refresh_header { my $self = shift; $self->{name} ||= $self->new_id(); return if $self->timestamp(-1) and defined $self->{_hash}{header}; $self->refresh_meta(); # XXX: FETCH HEADER my ($from, $date); $self->{_hash}{header} = { From => $from ||= ( $self->{_hash}{author} . ($self->{_hash}{nick} ? " ($self->{_hash}{nick})" : '') ), Subject => $self->{_hash}{title}, Date => $date ||= scalar localtime($self->{_hash}{id}), Board => $self->{board}, }; OurNet::BBS::Utils::set_msgid($self->{_hash}{header}); return 1; } sub refresh_meta { my $self = shift; $self->{name} ||= $self->new_id; return if $self->timestamp(-1); if (defined $self->{recno}) { # XXX: FETCH ONE ARTICLE HEADER # @{$self->{_hash}}{@packlist} = () if 0; undef $self->{recno} if ($self->{_hash}{id} and $self->{_hash}{id} ne $self->{name}); } unless (defined $self->{recno}) { use Date::Parse; use Date::Format; $self->{_hash}{id} = $self->{name}; $self->{_hash}{author} ||= 'guest.'; $self->{_hash}{date} ||= time2str( '%y/%m/%d', str2time(scalar localtime) ); $self->{_hash}{title} ||= '(untitled)'; # XXX: STORE INTO ARTICLE } else { $self->{_hash}{id} = $self->{name}; } return 1; } sub STORE { my ($self, $key, $value) = @_; $self = $self->ego; $self->refresh_meta($key); if ($key eq 'body') { # XXX: WRITE BODY $self->{_hash}{$key} = $value; $self->{btime} = 1; } else { $self->{_hash}{$key} = $value; $self->{mtime} = 1; } return 1; } sub remove { my $self = shift; # XXX: DELETE ARTICLE ENTRY return 1; } 1;