Authorization-RBAC
view release on metacpan or search on metacpan
t/lib/Schema/RBAC/ResultSet/Page.pm view on Meta::CPAN
package Schema::RBAC::ResultSet::Page;
use strict;
use warnings;
use base 'DBIx::Class::ResultSet';
=head1 NAME
Catapulse::Schema::ResultSet::Page - resultset methods on pages
=head1 METHODS
=head2 retrieve_pages_from_path
=cut
sub retrieve_pages_from_path {
my ( $self, $path, $get_all_pages ) = @_;
my $nodes = [ split m%/%, $path ];
$$nodes[0] = '/';
my $lasted_obj;
my (@not_found, @all_pages);
my $parent_id = 0; # page /
foreach my $node ( @$nodes ) {
my $page = $self->find({
name => $node,
parent_id => $parent_id,
},
);
$parent_id = $page->id if $page;
if ( $page ) {
push(@all_pages, $page);
$lasted_obj=$page;
}
else {
push(@not_found, $node);
}
}
my $pages;
if ( $get_all_pages ) {
$pages = [ @all_pages, @not_found ];
}
else {
$pages = [ $lasted_obj, @not_found ];
}
return $pages;
}
=head2 build_pages_from_path
=cut
sub build_pages_from_path {
my ( $self, $path ) = @_;
# retrieve all pages from path (=> path,1)
my $nodes = $self->retrieve_pages_from_path($path,1);
my $pages = [];
my $page_id = 0; # page /
my ( $name, $title );
foreach my $node ( @$nodes ) {
# Build page
if ( ! ref($node) ){
$name = $node; $title = $node;
my $page = $self->find_or_create({
name => $name,
active => 1,
parent_id => $page_id,
},
);
$page_id = $page->id;
push(@$pages, $page);
}
( run in 2.840 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )