Add 3D filetype for STL files
Other filetypes use the text/plain MIME type, so we'll have to do something else to support them. Bug: T157348 Change-Id: Id78a504302fa664b353a4c45bdc5d99f95a0180a
This commit is contained in:
parent
c3a61a2748
commit
a2f5d05ae8
7 changed files with 41 additions and 4 deletions
|
|
@ -301,6 +301,7 @@ class MysqlUpdater extends DatabaseUpdater {
|
||||||
[ 'dropIndex', 'user_groups', 'ug_user_group', 'patch-user_groups-primary-key.sql' ],
|
[ 'dropIndex', 'user_groups', 'ug_user_group', 'patch-user_groups-primary-key.sql' ],
|
||||||
[ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ],
|
[ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ],
|
||||||
[ 'addIndex', 'image', 'img_user_timestamp', 'patch-image-user-index-2.sql' ],
|
[ 'addIndex', 'image', 'img_user_timestamp', 'patch-image-user-index-2.sql' ],
|
||||||
|
[ 'modifyField', 'image', 'img_media_type', 'patch-add-3d.sql' ],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -533,6 +533,9 @@ EOT;
|
||||||
|
|
||||||
// XML formats we sure hope we recognize reliably
|
// XML formats we sure hope we recognize reliably
|
||||||
'svg',
|
'svg',
|
||||||
|
|
||||||
|
// 3D formats
|
||||||
|
'stl',
|
||||||
];
|
];
|
||||||
return in_array( strtolower( $extension ), $types );
|
return in_array( strtolower( $extension ), $types );
|
||||||
}
|
}
|
||||||
|
|
@ -800,6 +803,23 @@ EOT;
|
||||||
return $this->detectZipType( $head, $tail, $ext );
|
return $this->detectZipType( $head, $tail, $ext );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for STL (3D) files
|
||||||
|
// @see https://en.wikipedia.org/wiki/STL_(file_format)
|
||||||
|
if ( $fsize >= 15 &&
|
||||||
|
stripos( $head, 'SOLID ' ) === 0 &&
|
||||||
|
preg_match( '/\RENDSOLID .*$/i', $tail ) ) {
|
||||||
|
// ASCII STL file
|
||||||
|
return 'application/sla';
|
||||||
|
} elseif ( $fsize > 84 ) {
|
||||||
|
// binary STL file
|
||||||
|
$triangles = substr( $head, 80, 4 );
|
||||||
|
$triangles = unpack( 'V', $triangles );
|
||||||
|
$triangles = reset( $triangles );
|
||||||
|
if ( $triangles !== false && $fsize === 84 + ( $triangles * 50 ) ) {
|
||||||
|
return 'application/sla';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MediaWiki\suppressWarnings();
|
MediaWiki\suppressWarnings();
|
||||||
$gis = getimagesize( $file );
|
$gis = getimagesize( $file );
|
||||||
MediaWiki\restoreWarnings();
|
MediaWiki\restoreWarnings();
|
||||||
|
|
|
||||||
|
|
@ -43,4 +43,6 @@ define( 'MEDIATYPE_TEXT', 'TEXT' );
|
||||||
define( 'MEDIATYPE_EXECUTABLE', 'EXECUTABLE' );
|
define( 'MEDIATYPE_EXECUTABLE', 'EXECUTABLE' );
|
||||||
// archive file (zip, tar, etc)
|
// archive file (zip, tar, etc)
|
||||||
define( 'MEDIATYPE_ARCHIVE', 'ARCHIVE' );
|
define( 'MEDIATYPE_ARCHIVE', 'ARCHIVE' );
|
||||||
|
// 3D file types (stl)
|
||||||
|
define( 'MEDIATYPE_3D', '3D' );
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
|
||||||
|
|
@ -118,3 +118,5 @@ chemical/x-mdl-sdfile [DRAWING]
|
||||||
chemical/x-mdl-rxnfile [DRAWING]
|
chemical/x-mdl-rxnfile [DRAWING]
|
||||||
chemical/x-mdl-rdfile [DRAWING]
|
chemical/x-mdl-rdfile [DRAWING]
|
||||||
chemical/x-mdl-rgfile [DRAWING]
|
chemical/x-mdl-rgfile [DRAWING]
|
||||||
|
|
||||||
|
application/sla [3D]
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ class MIMEsearchPage extends QueryPage {
|
||||||
MEDIATYPE_TEXT,
|
MEDIATYPE_TEXT,
|
||||||
MEDIATYPE_EXECUTABLE,
|
MEDIATYPE_EXECUTABLE,
|
||||||
MEDIATYPE_ARCHIVE,
|
MEDIATYPE_ARCHIVE,
|
||||||
|
MEDIATYPE_3D,
|
||||||
],
|
],
|
||||||
] + $minorType,
|
] + $minorType,
|
||||||
];
|
];
|
||||||
|
|
|
||||||
11
maintenance/archives/patch-add-3d.sql
Normal file
11
maintenance/archives/patch-add-3d.sql
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
ALTER TABLE /*$wgDBprefix*/image
|
||||||
|
MODIFY img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL;
|
||||||
|
|
||||||
|
ALTER TABLE /*$wgDBprefix*/oldimage
|
||||||
|
MODIFY oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL;
|
||||||
|
|
||||||
|
ALTER TABLE /*$wgDBprefix*/filearchive
|
||||||
|
MODIFY fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL;
|
||||||
|
|
||||||
|
ALTER TABLE /*$wgDBprefix*/uploadstash
|
||||||
|
MODIFY us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL;
|
||||||
|
|
@ -871,7 +871,7 @@ CREATE TABLE /*_*/image (
|
||||||
img_bits int NOT NULL default 0,
|
img_bits int NOT NULL default 0,
|
||||||
|
|
||||||
-- Media type as defined by the MEDIATYPE_xxx constants
|
-- Media type as defined by the MEDIATYPE_xxx constants
|
||||||
img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
|
img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
|
||||||
|
|
||||||
-- major part of a MIME media type as defined by IANA
|
-- major part of a MIME media type as defined by IANA
|
||||||
-- see https://www.iana.org/assignments/media-types/
|
-- see https://www.iana.org/assignments/media-types/
|
||||||
|
|
@ -936,7 +936,7 @@ CREATE TABLE /*_*/oldimage (
|
||||||
oi_timestamp binary(14) NOT NULL default '',
|
oi_timestamp binary(14) NOT NULL default '',
|
||||||
|
|
||||||
oi_metadata mediumblob NOT NULL,
|
oi_metadata mediumblob NOT NULL,
|
||||||
oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
|
oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
|
||||||
oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
|
oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
|
||||||
oi_minor_mime varbinary(100) NOT NULL default "unknown",
|
oi_minor_mime varbinary(100) NOT NULL default "unknown",
|
||||||
oi_deleted tinyint unsigned NOT NULL default 0,
|
oi_deleted tinyint unsigned NOT NULL default 0,
|
||||||
|
|
@ -986,7 +986,7 @@ CREATE TABLE /*_*/filearchive (
|
||||||
fa_height int default 0,
|
fa_height int default 0,
|
||||||
fa_metadata mediumblob,
|
fa_metadata mediumblob,
|
||||||
fa_bits int default 0,
|
fa_bits int default 0,
|
||||||
fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
|
fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
|
||||||
fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
|
fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
|
||||||
fa_minor_mime varbinary(100) default "unknown",
|
fa_minor_mime varbinary(100) default "unknown",
|
||||||
fa_description varbinary(767),
|
fa_description varbinary(767),
|
||||||
|
|
@ -1053,7 +1053,7 @@ CREATE TABLE /*_*/uploadstash (
|
||||||
us_sha1 varchar(31) NOT NULL,
|
us_sha1 varchar(31) NOT NULL,
|
||||||
us_mime varchar(255),
|
us_mime varchar(255),
|
||||||
-- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
|
-- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
|
||||||
us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
|
us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
|
||||||
-- image-specific properties
|
-- image-specific properties
|
||||||
us_image_width int unsigned,
|
us_image_width int unsigned,
|
||||||
us_image_height int unsigned,
|
us_image_height int unsigned,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue