# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/CVIC/GroupGroup.pm $ $Author: autrijus $ # $Revision: #4 $ $Change: 4012 $ $DateTime: 2003/01/29 11:06:24 $ package OurNet::BBS::CVIC::GroupGroup; use if $OurNet::BBS::Encoding, 'open' => ":encoding($OurNet::BBS::Encoding)"; use strict; no warnings 'deprecated'; use fields qw/bbsroot bbsego mtime _ego _hash/; use OurNet::BBS::Base; sub writeok { 0 }; sub readok { 1 }; sub _brdobj { my $brd = $_[0]{bbsego}{boards}{$_[1]}; return $brd || {}; } # Fetch key: id savemode author date title filemode body sub refresh_meta { my ($self, $key) = @_; my $file = "$self->{bbsroot}/group"; return $self->{_hash}{$key} ||= $self->module('Group')->new( @{$self}{qw/bbsroot bbsego/}, $self->_brdobj($key), $key, ) if defined $key; return if $self->filestamp($file); opendir(my $DIR, $file) or die "can't read group file $file: $!"; %{$self->{_hash}} = map { ($_, $self->module('Group')->new( @{$self}{qw/bbsroot bbsego/}, $self->_brdobj($_), $_) ); } grep { /^[^\.]/; } readdir($DIR); closedir $DIR; } sub STORE { my ($self, $key) = @_; $self = $self->ego; my $file = "$self->{bbsroot}/group/$key"; unless (-e $file) { open(my $TOUCH, ">$file") or die "cannot touch $file: $!"; close $TOUCH; } $self->refresh_meta($key); $self->{_hash}{$key}->refresh; } sub EXISTS { my ($self, $key) = @_; return ((-e $self->ego->{bbsroot}."/group/$key") ? 1 : 0); } 1;