jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/336454 )
Change subject: Add 3D filetype for STL files
......................................................................
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
---
M includes/installer/MysqlUpdater.php
M includes/libs/mime/MimeAnalyzer.php
M includes/libs/mime/defines.php
M includes/libs/mime/mime.info
M includes/specials/SpecialMIMEsearch.php
A maintenance/archives/patch-add-3d.sql
M maintenance/tables.sql
7 files changed, 41 insertions(+), 4 deletions(-)
Approvals:
MarkTraceur: Looks good to me, approved
Brion VIBBER: Looks good to me, but someone else must approve
jenkins-bot: Verified
Jcrespo: Looks good to me, but someone else must approve
diff --git a/includes/installer/MysqlUpdater.php
b/includes/installer/MysqlUpdater.php
index 70e790c..adfe2f6 100644
--- a/includes/installer/MysqlUpdater.php
+++ b/includes/installer/MysqlUpdater.php
@@ -301,6 +301,7 @@
[ 'dropIndex', 'user_groups', 'ug_user_group',
'patch-user_groups-primary-key.sql' ],
[ 'addField', 'user_groups', 'ug_expiry',
'patch-user_groups-ug_expiry.sql' ],
[ 'addIndex', 'image', 'img_user_timestamp',
'patch-image-user-index-2.sql' ],
+ [ 'modifyField', 'image', 'img_media_type',
'patch-add-3d.sql' ],
];
}
diff --git a/includes/libs/mime/MimeAnalyzer.php
b/includes/libs/mime/MimeAnalyzer.php
index 6ea3c21..4cd8e4e 100644
--- a/includes/libs/mime/MimeAnalyzer.php
+++ b/includes/libs/mime/MimeAnalyzer.php
@@ -533,6 +533,9 @@
// XML formats we sure hope we recognize reliably
'svg',
+
+ // 3D formats
+ 'stl',
];
return in_array( strtolower( $extension ), $types );
}
@@ -800,6 +803,23 @@
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();
$gis = getimagesize( $file );
MediaWiki\restoreWarnings();
diff --git a/includes/libs/mime/defines.php b/includes/libs/mime/defines.php
index ae0b5f8..9f753fe 100644
--- a/includes/libs/mime/defines.php
+++ b/includes/libs/mime/defines.php
@@ -43,4 +43,6 @@
define( 'MEDIATYPE_EXECUTABLE', 'EXECUTABLE' );
// archive file (zip, tar, etc)
define( 'MEDIATYPE_ARCHIVE', 'ARCHIVE' );
+// 3D file types (stl)
+define( 'MEDIATYPE_3D', '3D' );
/**@}*/
diff --git a/includes/libs/mime/mime.info b/includes/libs/mime/mime.info
index 2468f38..d8b8be7 100644
--- a/includes/libs/mime/mime.info
+++ b/includes/libs/mime/mime.info
@@ -118,3 +118,5 @@
chemical/x-mdl-rxnfile [DRAWING]
chemical/x-mdl-rdfile [DRAWING]
chemical/x-mdl-rgfile [DRAWING]
+
+application/sla [3D]
diff --git a/includes/specials/SpecialMIMEsearch.php
b/includes/specials/SpecialMIMEsearch.php
index 52cb30a..e8ead72 100644
--- a/includes/specials/SpecialMIMEsearch.php
+++ b/includes/specials/SpecialMIMEsearch.php
@@ -85,6 +85,7 @@
MEDIATYPE_TEXT,
MEDIATYPE_EXECUTABLE,
MEDIATYPE_ARCHIVE,
+ MEDIATYPE_3D,
],
] + $minorType,
];
diff --git a/maintenance/archives/patch-add-3d.sql
b/maintenance/archives/patch-add-3d.sql
new file mode 100644
index 0000000..13ea4ed
--- /dev/null
+++ b/maintenance/archives/patch-add-3d.sql
@@ -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;
diff --git a/maintenance/tables.sql b/maintenance/tables.sql
index 8f59690..e1fb791 100644
--- a/maintenance/tables.sql
+++ b/maintenance/tables.sql
@@ -871,7 +871,7 @@
img_bits int NOT NULL default 0,
-- 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
-- see https://www.iana.org/assignments/media-types/
@@ -936,7 +936,7 @@
oi_timestamp binary(14) NOT NULL default '',
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_minor_mime varbinary(100) NOT NULL default "unknown",
oi_deleted tinyint unsigned NOT NULL default 0,
@@ -986,7 +986,7 @@
fa_height int default 0,
fa_metadata mediumblob,
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_minor_mime varbinary(100) default "unknown",
fa_description varbinary(767),
@@ -1053,7 +1053,7 @@
us_sha1 varchar(31) NOT NULL,
us_mime varchar(255),
-- 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
us_image_width int unsigned,
us_image_height int unsigned,
--
To view, visit https://gerrit.wikimedia.org/r/336454
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Id78a504302fa664b353a4c45bdc5d99f95a0180a
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: MarkTraceur <[email protected]>
Gerrit-Reviewer: Aaron Schulz <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: EBernhardson <[email protected]>
Gerrit-Reviewer: Jcrespo <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Jjanes <[email protected]>
Gerrit-Reviewer: MarkTraceur <[email protected]>
Gerrit-Reviewer: Matthias Mullie <[email protected]>
Gerrit-Reviewer: Parent5446 <[email protected]>
Gerrit-Reviewer: Reedy <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits