Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision af0085b8

Von Sven Schöling vor mehr als 9 Jahren hinzugefügt

  • ID af0085b83ecb257679c8c64324521f9515ae76b8
  • Vorgänger fb974d9c
  • Nachfolger bf7f935d

Menu: Caching und access korrekt clearen

Unterschiede anzeigen:

SL/Menu.pm
$yaml_xs = eval { require YAML::XS };
}
our %menu_cache;
sub new {
my ($package, $domain) = @_;
my $path = File::Spec->catdir('menus', $domain);
if (!$menu_cache{$domain}) {
my $path = File::Spec->catdir('menus', $domain);
opendir my $dir, $path or die "can't open $path: $!";
my @files = sort grep -f "$path/$_", readdir $dir;
close $dir;
opendir my $dir, $path or die "can't open $path: $!";
my @files = sort grep -f "$path/$_", readdir $dir;
close $dir;
my $nodes = [];
my $nodes_by_id = {};
for my $file (@files) {
my $data;
if ($yaml_xs) {
$data = YAML::XS::LoadFile(File::Spec->catfile($path, $file));
} else {
$data = YAML::LoadFile(File::Spec->catfile($path, $file));
my $nodes = [];
my $nodes_by_id = {};
for my $file (@files) {
my $data;
if ($yaml_xs) {
$data = YAML::XS::LoadFile(File::Spec->catfile($path, $file));
} else {
$data = YAML::LoadFile(File::Spec->catfile($path, $file));
}
_merge($nodes, $nodes_by_id, $data);
}
_merge($nodes, $nodes_by_id, $data);
}
my $self = bless {
nodes => $nodes,
by_id => $nodes_by_id,
}, $package;
my $self = bless {
nodes => $nodes,
by_id => $nodes_by_id,
}, $package;
$self->build_tree;
$self->build_tree;
$self->set_access;
$menu_cache{$domain} = $self;
} else {
$menu_cache{$domain}->clear_access;
}
$menu_cache{$domain}->set_access;
return $self;
return $menu_cache{$domain};
}
sub _merge {
......
return $::instance_conf->data->{$setting};
}
sub clear_access {
my ($self) = @_;
for my $node ($self->tree_walk("all")) {
delete $node->{visible};
delete $node->{visible_children};
}
}
sub set_access {
my ($self) = @_;
# 1. evaluate access for all

Auch abrufbar als: Unified diff