|
From: Chris W. <la...@us...> - 2001-10-29 05:13:56
|
Update of /cvsroot/openinteract/OpenInteract/pkg/base_page/OpenInteract
In directory usw-pr-cvs1:/tmp/cvs-serv5251/OpenInteract
Modified Files:
ContentType.pm
Log Message:
added split/merge extensions fakery so we can have multiple extensions
per mime-type but not put them in a separate table (serious overkill)
Index: ContentType.pm
===================================================================
RCS file: /cvsroot/openinteract/OpenInteract/pkg/base_page/OpenInteract/ContentType.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ContentType.pm 2001/10/26 21:09:05 1.1
--- ContentType.pm 2001/10/29 05:13:53 1.2
***************
*** 7,24 ****
use constant DEFAULT_MIME_TYPE => 'text/plain';
# Class method so that you can lookup a MIME type by an extension. If
! # the extension isn't found, we return DEFAULT_MIME_TYPE
sub mime_type_by_extension {
! my ( $class, $extension ) = @_;
$extension = lc $extension;
! my $type_list = $class->db_select({ from => $class->table_name,
! select => 'mime_type',
where => 'extensions LIKE ?',
! value => [ "% $extension %" ],
! return => 'list-single',
db => $class->global_datasource_handle });
! return $type_list->[0]->{mime_type} if ( $type_list->[0] );
return DEFAULT_MIME_TYPE;
}
--- 7,65 ----
use constant DEFAULT_MIME_TYPE => 'text/plain';
+ my $BOUND_CHARACTER = ';';
+
+ ########################################
+ # RULES
+ ########################################
+
+ # The rules here are to ensure that the extensions can be found
+ # properly
+
+ sub ruleset_factory {
+ my ( $class, $rs ) = @_;
+ push @{ $rs->{post_fetch_action} }, \&split_extensions;
+ push @{ $rs->{pre_save_action} }, \&merge_extensions;
+ return __PACKAGE__;
+ }
+
+ sub split_extensions {
+ my ( $self ) = @_;
+ $self->{extensions} = join( ' ',
+ grep ! /^\s*$/,
+ split ( /$BOUND_CHARACTER/, $self->{extensions} ) );
+ return 1;
+ }
+ sub merge_extensions {
+ my ( $self ) = @_;
+ $self->{extensions} = $BOUND_CHARACTER .
+ join( $BOUND_CHARACTER, split /\s+/, $self->{extensions} ) .
+ $BOUND_CHARACTER;
+ return 1;
+ }
+
+
+ ########################################
+ # CLASS METHODS
+ ########################################
+
# Class method so that you can lookup a MIME type by an extension. If
! # the extension isn't found, we return DEFAULT_MIME_TYPE.
+ # $p is used here to pass extra information to the SELECT, like a
+ # value for 'DEBUG'
+
sub mime_type_by_extension {
! my ( $class, $extension, $p ) = @_;
$extension = lc $extension;
! $p ||= {};
! my $type_list = $class->db_select({ %{ $p },
! from => $class->table_name,
! select => [ 'mime_type' ],
where => 'extensions LIKE ?',
! value => [ "%$BOUND_CHARACTER$extension$BOUND_CHARACTER%" ],
! return => 'single-list',
db => $class->global_datasource_handle });
! return $type_list->[0] if ( $type_list->[0] );
return DEFAULT_MIME_TYPE;
}
|