| | 615 | sub _generate_map_table { |
| | 616 | my $app = shift; |
| | 617 | my ( $blog_id, $template_id ) = @_; |
| | 618 | |
| | 619 | require MT::Template; |
| | 620 | require MT::Blog; |
| | 621 | my $blog = MT::Blog->load($blog_id); |
| | 622 | my $template = MT::Template->load($template_id); |
| | 623 | my $tmpl = $app->load_tmpl('include/archive_maps.tmpl'); |
| | 624 | my $maps = _populate_archive_loop( $app, $blog, $template ); |
| | 625 | $tmpl->param( { object_type => 'templatemap' } ); |
| | 626 | $tmpl->param( { object_loop => $maps } ) if @$maps; |
| | 627 | my $html = $tmpl->output(); |
| | 628 | |
| | 629 | if ( $html =~ m/<__trans / ) { |
| | 630 | $html = $app->translate_templatized($html); |
| | 631 | } |
| | 632 | $html; |
| | 633 | } |
| | 634 | |
| | 635 | sub _populate_archive_loop { |
| | 636 | my $app = shift; |
| | 637 | my ( $blog, $obj ) = @_; |
| | 638 | |
| | 639 | my $index = $app->config('IndexBasename'); |
| | 640 | my $ext = $blog->file_extension || ''; |
| | 641 | $ext = '.' . $ext if $ext ne ''; |
| | 642 | |
| | 643 | require MT::TemplateMap; |
| | 644 | my @tmpl_maps = MT::TemplateMap->load( { template_id => $obj->id } ); |
| | 645 | my @maps; |
| | 646 | my %types; |
| | 647 | foreach my $map_obj (@tmpl_maps) { |
| | 648 | my $map = {}; |
| | 649 | $map->{map_id} = $map_obj->id; |
| | 650 | $map->{map_is_preferred} = $map_obj->is_preferred; |
| | 651 | my $at = $map->{archive_type} = $map_obj->archive_type; |
| | 652 | $types{$at}++; |
| | 653 | $map->{ 'archive_type_preferred_' . $blog->archive_type_preferred } = 1 |
| | 654 | if $blog->archive_type_preferred; |
| | 655 | $map->{file_template} = $map_obj->file_template |
| | 656 | if $map_obj->file_template; |
| | 657 | |
| | 658 | my $archiver = $app->publisher->archiver($at); |
| | 659 | next unless $archiver; |
| | 660 | $map->{archive_label} = $archiver->archive_label; |
| | 661 | my $tmpls = $archiver->default_archive_templates; |
| | 662 | my $tmpl_loop = []; |
| | 663 | foreach (@$tmpls) { |
| | 664 | my $name = $_->{label}; |
| | 665 | $name =~ s/\.html$/$ext/; |
| | 666 | $name =~ s/index$ext$/$index$ext/; |
| | 667 | push @$tmpl_loop, |
| | 668 | { |
| | 669 | name => $name, |
| | 670 | value => $_->{template}, |
| | 671 | default => ( $_->{default} || 0 ) |
| | 672 | }; |
| | 673 | } |
| | 674 | |
| | 675 | my $custom = 1; |
| | 676 | |
| | 677 | foreach (@$tmpl_loop) { |
| | 678 | if ( ( !$map->{file_template} && $_->{default} ) |
| | 679 | || ( $map->{file_template} eq $_->{value} ) ) |
| | 680 | { |
| | 681 | $_->{selected} = 1; |
| | 682 | $custom = 0; |
| | 683 | $map->{file_template} = $_->{value} |
| | 684 | if !$map->{file_template}; |
| | 685 | } |
| | 686 | } |
| | 687 | if ($custom) { |
| | 688 | unshift @$tmpl_loop, |
| | 689 | { |
| | 690 | name => $map->{file_template}, |
| | 691 | value => $map->{file_template}, |
| | 692 | selected => 1, |
| | 693 | }; |
| | 694 | } |
| | 695 | |
| | 696 | $map->{archive_tmpl_loop} = $tmpl_loop; |
| | 697 | if ( |
| | 698 | 1 < MT::TemplateMap->count( |
| | 699 | { archive_type => $at, blog_id => $obj->blog_id } |
| | 700 | ) |
| | 701 | ) |
| | 702 | { |
| | 703 | $map->{has_multiple_archives} = 1; |
| | 704 | } |
| | 705 | |
| | 706 | push @maps, $map; |
| | 707 | } |
| | 708 | @maps = sort { MT::App::CMS::archive_type_sorter( $a, $b ) } @maps; |
| | 709 | return \@maps; |
| | 710 | } |
| | 711 | |