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;