Revision 629 (by ahitrov, 2016/12/02 12:00:52) |
Edit form and tag tree
|
package tag::Keeper;
use strict;
use warnings 'all';
use base qw(Contenido::Keeper);
use Contenido::Globals;
sub get_tree {
my $self = shift;
my (%opts) = @_;
my $level;
if ( exists $opts{level} && $opts{level} ) {
$level = [1..$opts{level}];
delete $opts{level};
} else {
$level = [1,2];
}
my $cache = delete $opts{cache};
my $tree;
my $cache_key = 'plugin_tag_tree_level_'.join('_', @$level);
if ( $cache && $keeper->MEMD ) {
$tree = $keeper->MEMD->get( $key );
}
unless ( defined $tree ) {
$tree = { hash => {}, root => [] };
my $tags = $keeper->get_documents(
class => 'tag::Tag',
level => $level,
%opts,
order_by => 'level, pid, id',
return_mode => 'array_ref',
);
foreach my $tag ( @$tree ) {
$tag->{keeper} = undef;
$hash->{$tag->id} = $tag;
if ( $tag->pid ) {
push @{$tree->{$tag->pid}}, $tag;
if ( exists $tree->{hash}{$tag->pid} ) {
push @{$tree->{hash}{$tag->pid}{children}}, $tag;
}
} else {
push @{$tree->{root}}, $tag;
}
if ( $cache && $keeper->MEMD ) {
$keeper->MEMD->set( $key, $tree, 3600 );
}
}
}
return $tree;
}
1;