| 1110 | | sub _populate_archive_loop { |
| 1111 | | my $app = shift; |
| 1112 | | my ( $blog, $obj ) = @_; |
| 1113 | | |
| 1114 | | my $index = $app->config('IndexBasename'); |
| 1115 | | my $ext = $blog->file_extension || ''; |
| 1116 | | $ext = '.' . $ext if $ext ne ''; |
| 1117 | | |
| 1118 | | require MT::TemplateMap; |
| 1119 | | my @tmpl_maps = MT::TemplateMap->load( { template_id => $obj->id } ); |
| 1120 | | my @maps; |
| 1121 | | my %types; |
| 1122 | | foreach my $map_obj (@tmpl_maps) { |
| 1123 | | my $map = {}; |
| 1124 | | $map->{map_id} = $map_obj->id; |
| 1125 | | $map->{map_is_preferred} = $map_obj->is_preferred; |
| 1126 | | my $at = $map->{archive_type} = $map_obj->archive_type; |
| 1127 | | $types{$at}++; |
| 1128 | | $map->{ 'archive_type_preferred_' . $blog->archive_type_preferred } = 1 |
| 1129 | | if $blog->archive_type_preferred; |
| 1130 | | $map->{file_template} = $map_obj->file_template |
| 1131 | | if $map_obj->file_template; |
| 1132 | | |
| 1133 | | my $archiver = $app->publisher->archiver($at); |
| 1134 | | next unless $archiver; |
| 1135 | | $map->{archive_label} = $archiver->archive_label; |
| 1136 | | my $tmpls = $archiver->default_archive_templates; |
| 1137 | | my $tmpl_loop = []; |
| 1138 | | foreach (@$tmpls) { |
| 1139 | | my $name = $_->{label}; |
| 1140 | | $name =~ s/\.html$/$ext/; |
| 1141 | | $name =~ s/index$ext$/$index$ext/; |
| 1142 | | push @$tmpl_loop, |
| 1143 | | { |
| 1144 | | name => $name, |
| 1145 | | value => $_->{template}, |
| 1146 | | default => ( $_->{default} || 0 ) |
| 1147 | | }; |
| 1148 | | } |
| 1149 | | |
| 1150 | | my $custom = 1; |
| 1151 | | |
| 1152 | | foreach (@$tmpl_loop) { |
| 1153 | | if ( ( !$map->{file_template} && $_->{default} ) |
| 1154 | | || ( $map->{file_template} eq $_->{value} ) ) |
| 1155 | | { |
| 1156 | | $_->{selected} = 1; |
| 1157 | | $custom = 0; |
| 1158 | | $map->{file_template} = $_->{value} |
| 1159 | | if !$map->{file_template}; |
| 1160 | | } |
| 1161 | | } |
| 1162 | | if ($custom) { |
| 1163 | | unshift @$tmpl_loop, |
| 1164 | | { |
| 1165 | | name => $map->{file_template}, |
| 1166 | | value => $map->{file_template}, |
| 1167 | | selected => 1, |
| 1168 | | }; |
| 1169 | | } |
| 1170 | | |
| 1171 | | $map->{archive_tmpl_loop} = $tmpl_loop; |
| 1172 | | if ( |
| 1173 | | 1 < MT::TemplateMap->count( |
| 1174 | | { archive_type => $at, blog_id => $obj->blog_id } |
| 1175 | | ) |
| 1176 | | ) |
| 1177 | | { |
| 1178 | | $map->{has_multiple_archives} = 1; |
| 1179 | | } |
| 1180 | | |
| 1181 | | push @maps, $map; |
| 1182 | | } |
| 1183 | | @maps = sort { MT::App::CMS::archive_type_sorter( $a, $b ) } @maps; |
| 1184 | | return \@maps; |
| 1185 | | } |
| 1186 | | |