Index: /branches/release-33/lib/MT/CMS/Template.pm
===================================================================
--- /branches/release-33/lib/MT/CMS/Template.pm (revision 1775)
+++ /branches/release-33/lib/MT/CMS/Template.pm (revision 1786)
@@ -505,22 +505,4 @@
     require MT::Template;
     my $blog_id = $app->param('blog_id') || 0;
-    # my $filter  = $app->param('filter_key');
-    # if ( !$filter ) {
-    #     if ($blog) {
-    #         $filter = 'templates';
-    #         $app->param( 'filter_key', 'templates' );
-    #     }
-    #     else {
-    #         $filter = 'module_templates';
-    #         $app->param( 'filter_key', 'module_templates' );
-    #     }
-    # }
-    # else {
-    #     # global index templates redirect to module templates
-    #     if ( !$blog && $filter eq 'templates' ) {
-    #         $filter = 'module_templates';
-    #         $app->param( 'filter_key', 'module_templates' );
-    #     }
-    # }
     my $terms = { blog_id => $blog_id };
     my $args  = { sort    => 'name' };
@@ -564,5 +546,4 @@
     my $params        = {};
     my $filter = $app->param('filter_key');
-    $app->delete_param('filter_key') if $filter;
     my $template_type = $filter || '';
     $template_type =~ s/_templates//;
@@ -654,4 +635,13 @@
     }
     foreach my $tmpl_type (@types) {
+        $app->delete_param('filter_key') if $filter;
+        if ( $tmpl_type eq 'index' ) {
+            $filter = 'index_templates';
+            $app->param( 'filter_key', 'index_templates' );
+        }
+        elsif ( $tmpl_type eq 'archive' ) {
+            $filter = 'archive_templates';
+            $app->param( 'filter_key', 'archive_templates' );
+        }
         $terms->{type} = $types{$tmpl_type}->{type};
         my $tmpl_param = $app->listing(
@@ -1847,4 +1837,35 @@
 }
 
+sub publish_archive_templates {
+    my $app = shift;
+    $app->validate_magic or return;
+
+    # permission check
+    my $perms = $app->permissions;
+    return $app->errtrans("Permission denied.")
+      unless $app->user->is_superuser
+      || $perms->can_administer_blog
+      || $perms->can_rebuild;
+
+    my $blog = $app->blog;
+    my $templates =
+      MT->model('template')->lookup_multi( [ $app->param('id') ] );
+    use MT::TemplateMap;
+    TEMPLATE: for my $tmpl (@$templates) {
+        next TEMPLATE if !defined $tmpl;
+        next TEMPLATE if $tmpl->blog_id != $blog->id;
+        my @tmpl_maps = MT::TemplateMap->load( { template_id => $tmpl->id } );
+        foreach my $map (@tmpl_maps) {
+            $app->rebuild(
+                BlogID      => $blog->id,
+                ArchiveType => $map->archive_type,
+                NoIndexes   => 1,
+            );
+        }
+    }
+
+    $app->call_return( published => 1 );
+}
+
 {
     my @period_options = (
Index: /branches/release-33/lib/MT/App/CMS.pm
===================================================================
--- /branches/release-33/lib/MT/App/CMS.pm (revision 1778)
+++ /branches/release-33/lib/MT/App/CMS.pm (revision 1786)
@@ -190,4 +190,6 @@
         'refresh_all_templates'    => "${pkg}Template::refresh_all_templates",
         'preview_template'         => "${pkg}Template::preview",
+        'publish_index_templates'  => "${pkg}Template::publish_index_templates",
+        'publish_archive_templates'=> "${pkg}Template::publish_archive_templates",
 
         ## Comment Replies
@@ -623,10 +625,11 @@
             refresh_tmpl_templates => {
                 label => "Refresh Template(s)",
-                code => "${pkg}Template::refresh_individual_templateE",
+                code => "${pkg}Template::refresh_individual_templates",
                 permission => 'edit_templates',
+                order => 100,
             },
             publish_index_templates => {
                 label => "Publish Template(s)",
-                code => "${pkg}Blog::publish_index_templates",
+                code => "${pkg}Template::publish_index_templates",
                 permission => 'rebuild',
                 condition => sub {
@@ -640,4 +643,20 @@
                          ;
                 },
+                order => 200,
+            },
+            publish_archive_templates => {
+                label      => "Publish Template(s)",
+                code       => "${pkg}Template::publish_archive_templates",
+                permission => 'rebuild',
+                condition  => sub {
+                    my $app       = MT->app;
+                    my $tmpl_type = $app->param('filter_key');
+                    return $app->mode eq 'itemset_action' ? 1
+                      : !$app->blog ? 0
+                      : !$tmpl_type ? 0
+                      : $tmpl_type eq 'archive_templates' ? 1
+                      :                                     0;
+                },
+                order => 300,
             },
             copy_templates => {
@@ -645,4 +664,5 @@
                 code => "${pkg}Template::clone_templates",
                 permission => 'edit_templates',
+                order => 400,
             },
         },
Index: /branches/release-33/tmpl/cms/include/template_table.tmpl
===================================================================
--- /branches/release-33/tmpl/cms/include/template_table.tmpl (revision 1730)
+++ /branches/release-33/tmpl/cms/include/template_table.tmpl (revision 1786)
@@ -23,4 +23,17 @@
 <mt:setvarblock name="action_buttons">
     <mt:unless name="template_type" eq="system"><mt:unless name="template_type" eq="email">
+    <mt:if name="template_type" eq="index">
+        <a href="javascript:void(0)"
+            onclick="doForMarkedInThisWindow(getByID('<$mt:var name="template_type"$>-listing-form'), '<__trans phrase="template" escape="js">', '<__trans phrase="templates" escape="js">', 'id', 'publish_index_templates', {}, '<__trans phrase="to publish" escape="js">'); return false;"
+            accesskey="a"
+            title="<__trans phrase="Publish selected templates (a)">"
+            ><__trans phrase="Publish"></a>
+    <mt:else if name="template_type" eq="archive">
+        <a href="javascript:void(0)"
+            onclick="doForMarkedInThisWindow(getByID('<$mt:var name="template_type"$>-listing-form'), '<__trans phrase="template" escape="js">', '<__trans phrase="templates" escape="js">', 'id', 'publish_archive_templates', {}, '<__trans phrase="to publish" escape="js">'); return false;"
+            accesskey="a"
+            title="<__trans phrase="Publish selected templates (a)">"
+            ><__trans phrase="Publish"></a>
+    </mt:if>
     <a href="javascript:void(0)"
         onclick="doRemoveItems(getByID('<$mt:var name="template_type"$>-listing-form'), '<__trans phrase="template" escape="js">', '<__trans phrase="templates" escape="js">'); return false;"
