use warnings; use strict; package RT::Extension::CustomizeContentType; our $VERSION = "0.03"; use RT::Attachment; package RT::Attachment; my $new = sub { my $self = shift; my $content_type = shift; return $content_type unless $self->Filename && $self->Filename =~ /\.(\w+)$/; my $ext = lc $1; my $config = RT->Config->Get('ContentTypes') or return $content_type; return $config->{$ext} || $content_type; }; my $old = __PACKAGE__->can('ContentType'); if ($old) { no warnings 'redefine'; *ContentType = sub { my $self = shift; my $content_type = $old->( $self, @_ ); return $content_type unless defined $content_type; return $new->( $self, $content_type ); }; } else { *ContentType = sub { my $self = shift; my $content_type = $self->_Value('ContentType'); return $content_type unless defined $content_type; return $new->( $self, $content_type ); }; } 1; __END__ =head1 NAME RT::Extension::CustomizeContentType - Customize Attachments' ContentType =head1 VERSION Version 0.01 =head1 INSTALLATION To install this module, run the following commands: perl Makefile.PL make make install add RT::Extension::CustomizeContentType to @Plugins in RT's etc/RT_SiteConfig.pm: Set( @Plugins, qw(... RT::Extension::CustomizeContentType) ); Set( %ContentTypes, ( 't' => 'text/x-perl-script', 'psgi' => 'text/x-perl-script', ) ); =head1 EXAMPLE CONFIGURATIONS =head2 Microsoft Office Older versions of IE often upload newer Microsoft Office documents with the generic C MIME type instead of something more appropriate. This causes RT to offer the file for download using the generic content type, which confuses users and doesn't launch Office for them. You can fix that by L and using the configuration below: Set(%ContentTypes, '.docm' => 'application/vnd.ms-word.document.macroEnabled.12', '.docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', '.dotm' => 'application/vnd.ms-word.template.macroEnabled.12', '.dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', '.potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12', '.potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', '.ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12', '.ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', '.ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', '.pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', '.pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', '.xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', '.xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', '.xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', '.xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', '.xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', '.xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', ); Config contributed by Nathan March. =head1 AUTHOR sunnavy, Thomas Sibley =head1 LICENSE AND COPYRIGHT Copyright 2012 Best Practical Solutions, LLC. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.