diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php index f2d42aef1a..ebfff442a2 100644 --- a/phpBB/includes/acp/acp_attachments.php +++ b/phpBB/includes/acp/acp_attachments.php @@ -637,6 +637,7 @@ class acp_attachments ATTACHMENT_CATEGORY_NONE => $user->lang['NO_FILE_CAT'], ATTACHMENT_CATEGORY_IMAGE => $user->lang['CAT_IMAGES'], ATTACHMENT_CATEGORY_AUDIO => $user->lang('CAT_AUDIO_FILES'), + ATTACHMENT_CATEGORY_VIDEO => $user->lang('CAT_VIDEO_FILES'), ); $group_id = $request->variable('g', 0); @@ -1412,6 +1413,7 @@ class acp_attachments ATTACHMENT_CATEGORY_NONE => $user->lang['NO_FILE_CAT'], ATTACHMENT_CATEGORY_IMAGE => $user->lang['CAT_IMAGES'], ATTACHMENT_CATEGORY_AUDIO => $user->lang('CAT_AUDIO_FILES'), + ATTACHMENT_CATEGORY_VIDEO => $user->lang('CAT_VIDEO_FILES'), ); if ($group_id) diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index 046cbf063b..286a9f2442 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -162,6 +162,7 @@ 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 +define('ATTACHMENT_CATEGORY_VIDEO', 8); // Browser-playable video files // BBCode UID length define('BBCODE_UID_LEN', 8); diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index f61c7928f8..4dd6fef47e 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -1323,6 +1323,15 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count_a $update_count_ary[] = $attachment['attach_id']; break; + // Audio files + case ATTACHMENT_CATEGORY_VIDEO: + $block_array += [ + 'S_VIDEO_FILE' => true, + ]; + + $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 c3a3ff9876..d708a0d6ad 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -777,6 +777,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 ('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, ''); +INSERT INTO phpbb_extension_groups (group_name, cat_id, allow_group, upload_icon, max_filesize, allowed_forums) VALUES ('VIDEO_FILES', 8, 0, '', 0, ''); # -- extensions INSERT INTO phpbb_extensions (group_id, extension) VALUES (1, 'gif'); @@ -842,6 +843,11 @@ INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'm4a'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'ogg'); INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'webm'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'mp4'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'ogg'); +INSERT INTO phpbb_extensions (group_id, extension) VALUES (6, 'webm'); + + # 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 4139f4f8b6..3c8ae0b340 100644 --- a/phpBB/language/en/acp/attachments.php +++ b/phpBB/language/en/acp/attachments.php @@ -69,6 +69,7 @@ $lang = array_merge($lang, array( 'ATTACH_TO_POST' => 'Attach file to post', 'CAT_AUDIO_FILES' => 'Audio files', + 'CAT_VIDEO_FILES' => 'Video 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.', diff --git a/phpBB/phpbb/db/migration/data/v400/add_video_files_attachment_group.php b/phpBB/phpbb/db/migration/data/v400/add_video_files_attachment_group.php new file mode 100644 index 0000000000..cca0b244a8 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v400/add_video_files_attachment_group.php @@ -0,0 +1,86 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\migration\data\v400; + +class add_video_files_attachment_group extends \phpbb\db\migration\migration +{ + public static function depends_on() + { + return ['\phpbb\db\migration\data\v400\dev']; + } + + public function update_data() + { + return [ + ['custom', [[$this, 'add_video_files']]], + ]; + } + + public function add_video_files() + { + $sql = 'SELECT group_id + FROM ' . $this->table_prefix . 'extension_groups + WHERE ' . $this->db->sql_build_array('SELECT', ['group_name' => 'VIDEO_FILES']); + $result = $this->db->sql_query($sql); + $video_group_id = $this->db->sql_fetchfield('group_id'); + $this->db->sql_freeresult($result); + + if ($video_group_id === false) + { + $sql = 'INSERT INTO ' . $this->table_prefix . 'extension_groups ' . $this->db->sql_build_array('INSERT', [ + 'group_name' => 'VIDEO_FILES', + 'cat_id' => ATTACHMENT_CATEGORY_VIDEO, + 'allow_group' => 0, + 'upload_icon' => '', + 'max_filesize' => 0, + 'allowed_forums' => '', + ]); + $this->db->sql_query($sql); + $video_group_id = $this->db->sql_nextid(); + } + else + { + $sql = 'UPDATE ' . $this->table_prefix . 'extension_groups SET cat_id = ' . ATTACHMENT_CATEGORY_VIDEO . ' + WHERE ' . $this->db->sql_build_array('SELECT', ['group_id' => $video_group_id]); + $this->db->sql_query($sql); + } + + $video_extensions = ['mp4', 'ogg', 'webm']; + + foreach ($video_extensions as $video_extension) + { + $sql = 'SELECT group_id + FROM ' . $this->table_prefix . 'extensions + WHERE ' . $this->db->sql_build_array('SELECT', ['extension' => $video_extension]); + $result = $this->db->sql_query($sql); + $extension_group_id = $this->db->sql_fetchfield('group_id'); + $this->db->sql_freeresult($result); + + if ($extension_group_id === false) + { + $sql = 'INSERT INTO ' . $this->table_prefix . 'extensions ' . $this->db->sql_build_array('INSERT', [ + 'group_id' => $video_group_id, + 'extension' => $video_extension, + ]); + $this->db->sql_query($sql); + } + else if ($extension_group_id != $video_group_id) + { + $sql = 'UPDATE ' . $this->table_prefix . "extensions SET group_id = $video_group_id + WHERE " . $this->db->sql_build_array('SELECT', ['extension' => $video_extension]); + $this->db->sql_query($sql); + } + } + } +} diff --git a/phpBB/phpbb/mimetype/extension_guesser.php b/phpBB/phpbb/mimetype/extension_guesser.php index 19de618df6..67a9d26e35 100644 --- a/phpBB/phpbb/mimetype/extension_guesser.php +++ b/phpBB/phpbb/mimetype/extension_guesser.php @@ -253,6 +253,7 @@ class extension_guesser extends guesser_base 'omc' => 'application/x-omc', 'oga' => 'audio/ogg', 'ogg' => 'audio/ogg', + 'ogg' => 'video/ogg', 'ogm' => 'video/ogg', 'omcd' => 'application/x-omcdatamaker', 'omcr' => 'application/x-omcregerator', @@ -426,6 +427,7 @@ class extension_guesser extends guesser_base 'wbmp' => 'image/vnd.wap.wbmp', 'web' => 'application/vnd.xara', 'webm' => 'audio/webm', + 'webm' => 'video/webm', 'wiz' => 'application/msword', 'wk1' => 'application/x-123', 'wmf' => 'windows/metafile', diff --git a/phpBB/phpbb/storage/controller/attachment.php b/phpBB/phpbb/storage/controller/attachment.php index 7c3d355ad8..8df2727ea1 100644 --- a/phpBB/phpbb/storage/controller/attachment.php +++ b/phpBB/phpbb/storage/controller/attachment.php @@ -254,7 +254,8 @@ 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 || strpos($attachment['mimetype'], 'audio') !== false) + if (strpos($attachment['mimetype'], 'image') !== false || strpos($attachment['mimetype'], 'audio') !== false || + strpos($attachment['mimetype'], 'video') !== 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 ceeea21d24..7d47ec13d0 100644 --- a/phpBB/styles/prosilver/template/attachment.html +++ b/phpBB/styles/prosilver/template/attachment.html @@ -49,6 +49,26 @@ {% endif %} + {% if _file.S_VIDEO_FILE %} +