# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/MELIX/Group.pm $ $Author: autrijus $
# $Revision: #6 $ $Change: 4012 $ $DateTime: 2003/01/29 11:06:24 $
package OurNet::BBS::MELIX::Group;
use open IN => ':raw', OUT => ':raw';
use strict;
no warnings 'deprecated';
use fields qw/bbsroot parent recno group/,
qw/time xmode xid id author nick date title mtime _ego _hash/;
use OurNet::BBS::Base (
'GroupGroup' => [
qw/$packstring $packsize @packlist &STORE &_refresh_meta/,
qw/&GEM_FOLDER &GEM_BOARD &GEM_GOPHER &GEM_HTTP &GEM_EXTEND/,
],
'Board' => [qw/&remove_entry/],
);
sub readok { 1 }
sub writeok { 0 }
# Fetch key: id savemode author date title filemode body
sub refresh_meta {
my ($self, $key) = @_;
my $board;
if (index(' owner title id ', " $key ") > -1) {
@{$self->{_hash}}{qw/owner title id/}
= @{$self}{qw/author title id/};
return 1;
}
return $self->_refresh_meta;
}
sub remove {
my $self = shift->ego;
if ($self->{group}) {
my $file = "$self->{bbsroot}/gem/\@/\@$self->{group}";
open(my $GROUP, "<$file") or die "cannot open $file for reading";
local $/ = \$packsize;
my (%entry, $buf);
my $recno = 0;
while (defined($buf = <$GROUP>)) {
@entry{@packlist} = unpack($packstring, $buf);
$entry{id} =~ s/^@//;
last if $entry{id} eq $self->{id};
$recno++;
}
close $GROUP;
$self->remove_entry($file, $recno) if ($entry{id} eq $self->{id});
}
return unlink "$self->{bbsroot}/gem/\@/\@$self->{group}";
}
1;
syntax highlighted by Code2HTML, v. 0.9.1