sub name { shift->field('name') }
sub sub_cat_ids { @{shift->field('sub_cats') }
####
sub new_tree
{
my $class = shift;
my $id = shift;
my $depth = shift;
my $self = $class->new($id);
$self->{_depth} = $depth;
$self->{_sub_cats} = [
sort { $a->name cmp $b->name }
map { $class->new_tree($_, $depth+1) }
$self->sub_cat_ids
];
return $self;
}
sub sub_cats { @{shift->{_sub_cats} }
####
sub as_hash
{
my $self = shift;
my $name = $self->name;
my $depth = $self->depth;
my $id = $self->id;
return { depth->$depth, id=>$id, name=>$name };
}
sub as_flattened_list
{
my $self=shift;
return
$self->as_hash,
map { $_->as_flattened_list } $self->sub_cats
}
####
sub BuildCatList
{
my $top = Category->new_tree("top", 0);
my @cats_list = $top->as_flattened_list;
my $cats = &main::GetDB('cats');
$cats->{'~cat_list'} = &main::nfreeze( \@cat_list );
}