From 8fab32abd7ccd992382da799183ff694bf2e551b Mon Sep 17 00:00:00 2001 From: hubaishan Date: Thu, 15 Nov 2018 13:02:34 +0300 Subject: [PATCH] [ticket/14771] Support playing audio attachments Add Audio attachments category, Audio attachments group. add most audio supported extensions to the audio group. presserve audio extensions MIMEtypes. modify the attachment style file to view the audio attachment in AUDIO HTML5 tag. PHPBB3-14771 --- phpBB/includes/acp/acp_attachments.php | 1 + phpBB/includes/constants.php | 1 + phpBB/includes/functions_content.php | 14 ++++++++++++++ phpBB/install/schemas/schema_data.sql | 8 ++++++-- phpBB/language/en/acp/attachments.php | 2 ++ phpBB/phpbb/mimetype/extension_guesser.php | 8 +++++++- phpBB/phpbb/storage/controller/attachment.php | 2 +- phpBB/styles/prosilver/template/attachment.html | 13 +++++++++++++ 8 files changed, 45 insertions(+), 4 deletions(-) diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php index 92363b0ff9..f5b0b357e1 100644 --- a/phpBB/includes/acp/acp_attachments.php +++ b/phpBB/includes/acp/acp_attachments.php @@ -1410,6 +1410,7 @@ class acp_attachments $types = array( ATTACHMENT_CATEGORY_NONE => $user->lang['NO_FILE_CAT'], ATTACHMENT_CATEGORY_IMAGE => $user->lang['CAT_IMAGES'], + ATTACHMENT_CATEGORY_AUDIO => $user->lang['CAT_AUDIO_FILES'], ); if ($group_id) diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index be6916442b..a3aa519295 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -161,6 +161,7 @@ define('CONFIRM_REPORT', 4); define('ATTACHMENT_CATEGORY_NONE', 0); define('ATTACHMENT_CATEGORY_IMAGE', 1); // Inline Images define('ATTACHMENT_CATEGORY_THUMB', 4); // Not used within the database, only while displaying posts +define('ATTACHMENT_CATEGORY_AUDIO', 7); // Browser-playable audio files // BBCode UID length define('BBCODE_UID_LEN', 8); diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index e6dde54737..cdc51d8a9e 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -1228,6 +1228,7 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count_a $block_array += array( 'UPLOAD_ICON' => $upload_icon, 'FILESIZE' => $filesize['value'], + 'MIMETYPE' => $attachment['mimetype'], 'SIZE_LANG' => $filesize['unit'], 'DOWNLOAD_NAME' => utf8_basename($attachment['real_filename']), 'COMMENT' => $comment, @@ -1315,6 +1316,19 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count_a $update_count_ary[] = $attachment['attach_id']; break; + // Audio files + case ATTACHMENT_CATEGORY_AUDIO: + $inline_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']); + $block_array += array( + 'S_AUDIO_FILE' => true, + 'U_FORUM' => generate_board_url(), + 'ATTACH_ID' => $attachment['attach_id'], + ); + + // Heard File ... update the download count + $update_count_ary[] = $attachment['attach_id']; + break; + default: $l_downloaded_viewed = 'DOWNLOAD_COUNTS'; diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index e8294f0a8f..428ad031ba 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -783,6 +783,7 @@ INSERT INTO phpbb_extension_groups (group_name, cat_id, allow_group, upload_icon INSERT INTO phpbb_extension_groups (group_name, cat_id, allow_group, upload_icon, max_filesize, allowed_forums) VALUES ('PLAIN_TEXT', 0, 0, '', 0, ''); INSERT INTO phpbb_extension_groups (group_name, cat_id, allow_group, upload_icon, max_filesize, allowed_forums) VALUES ('DOCUMENTS', 0, 0, '', 0, ''); INSERT INTO phpbb_extension_groups (group_name, cat_id, allow_group, upload_icon, max_filesize, allowed_forums) VALUES ('DOWNLOADABLE_FILES', 0, 0, '', 0, ''); +INSERT INTO phpbb_extension_groups (group_name, cat_id, allow_group, upload_icon, max_filesize, allowed_forums) VALUES ('AUDIO_FILES', 7, 0, '', 0, ''); # -- extensions INSERT INTO phpbb_extensions (group_id, extension) VALUES (1, 'gif'); @@ -838,12 +839,15 @@ INSERT INTO phpbb_extensions (group_id, extension) VALUES (4, 'ods'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (4, 'odt'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (4, 'rtf'); -INSERT INTO phpbb_extensions (group_id, extension) VALUES (5, 'mp3'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (5, 'mpeg'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (5, 'mpg'); -INSERT INTO phpbb_extensions (group_id, extension) VALUES (5, 'ogg'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (5, 'ogm'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'mp3'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'wav'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'm4a'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'ogg'); + # Add default profile fields INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_location', 'profilefields.type.string', 'phpbb_location', '20', '2', '100', '', '', '.*', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, '', ''); INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_website', 'profilefields.type.url', 'phpbb_website', '40', '12', '255', '', '', '', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 2, 1, 'VISIT_WEBSITE', '%s'); diff --git a/phpBB/language/en/acp/attachments.php b/phpBB/language/en/acp/attachments.php index 5e0332462a..4139f4f8b6 100644 --- a/phpBB/language/en/acp/attachments.php +++ b/phpBB/language/en/acp/attachments.php @@ -68,6 +68,7 @@ $lang = array_merge($lang, array( 'ATTACH_QUOTA_EXPLAIN' => 'Maximum drive space available for attachments for the whole board, with 0 being unlimited.', 'ATTACH_TO_POST' => 'Attach file to post', + 'CAT_AUDIO_FILES' => 'Audio files', 'CAT_IMAGES' => 'Images', 'CHECK_CONTENT' => 'Check attachment files', 'CHECK_CONTENT_EXPLAIN' => 'Some browsers can be tricked to assume an incorrect mimetype for uploaded files. This option ensures that such files likely to cause this are rejected.', @@ -100,6 +101,7 @@ $lang = array_merge($lang, array( 'EXT_GROUP_DOWNLOADABLE_FILES' => 'Downloadable Files', 'EXT_GROUP_IMAGES' => 'Images', 'EXT_GROUP_PLAIN_TEXT' => 'Plain Text', + 'EXT_GROUP_AUDIO_FILES' => 'Audio Files', 'FILES_GONE' => 'Some of the attachments you selected for deletion do not exist. They may have been already deleted. Attachments that did exist were deleted.', 'FILES_STATS_WRONG' => 'Your file statistics are likely inaccurate and need to be resynchronised. Actual values: number of attachments = %1$d, total size of attachments = %2$s.
Click %3$shere%4$s to resynchronise them.', diff --git a/phpBB/phpbb/mimetype/extension_guesser.php b/phpBB/phpbb/mimetype/extension_guesser.php index bbccf904d4..36553656e6 100644 --- a/phpBB/phpbb/mimetype/extension_guesser.php +++ b/phpBB/phpbb/mimetype/extension_guesser.php @@ -196,6 +196,8 @@ class extension_guesser extends guesser_base 'm2a' => 'audio/mpeg', 'm2v' => 'video/mpeg', 'm3u' => 'audio/x-mpequrl', + 'm4a' => 'audio/mp4', + 'm4v' => 'video/mp4', 'man' => 'application/x-troff-man', 'map' => 'application/x-navimap', 'mar' => 'text/plain', @@ -220,7 +222,8 @@ class extension_guesser extends guesser_base 'mov' => 'video/quicktime', 'movie' => 'video/x-sgi-movie', 'mp2' => 'audio/x-mpeg', - 'mp3' => 'audio/x-mpeg-3', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', 'mpa' => 'audio/mpeg', 'mpc' => 'application/x-project', 'mpe' => 'video/mpeg', @@ -248,6 +251,9 @@ class extension_guesser extends guesser_base 'o' => 'application/octet-stream', 'oda' => 'application/oda', 'omc' => 'application/x-omc', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogm' => 'video/ogg', 'omcd' => 'application/x-omcdatamaker', 'omcr' => 'application/x-omcregerator', 'p' => 'text/x-pascal', diff --git a/phpBB/phpbb/storage/controller/attachment.php b/phpBB/phpbb/storage/controller/attachment.php index c37644d973..7c3d355ad8 100644 --- a/phpBB/phpbb/storage/controller/attachment.php +++ b/phpBB/phpbb/storage/controller/attachment.php @@ -254,7 +254,7 @@ class attachment extends controller $response->headers->set('Content-Type', $attachment['mimetype']); // Display images in browser and force download for other file types - if (strpos($attachment['mimetype'], 'image') !== false) + if (strpos($attachment['mimetype'], 'image') !== false || strpos($attachment['mimetype'], 'audio') !== false) { $disposition = $response->headers->makeDisposition( ResponseHeaderBag::DISPOSITION_INLINE, diff --git a/phpBB/styles/prosilver/template/attachment.html b/phpBB/styles/prosilver/template/attachment.html index 45b9dc2145..7cff5f76c8 100644 --- a/phpBB/styles/prosilver/template/attachment.html +++ b/phpBB/styles/prosilver/template/attachment.html @@ -29,6 +29,19 @@ + +
+
{_file.UPLOAD_ICON} {_file.DOWNLOAD_NAME}
+
{_file.COMMENT}
+
{_file.DOWNLOAD_NAME} ({_file.FILESIZE} {_file.SIZE_LANG}) {_file.L_DOWNLOAD_COUNT}
+
+ +
+
+ +