diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2019-07-07 20:01:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-07 20:01:58 +0200 |
commit | 5a03189ce71490f5edac7d11905b21023bb8b04f (patch) | |
tree | 4813b97b5ee2ea4fd89a8836f53f2652229f5ebb /core/Command | |
parent | 1f4312fd9238928c91b9267d59212079f44b2ef3 (diff) | |
parent | ea2d75c2b446ee8548ad19c17460a9a187c92e4a (diff) | |
download | nextcloud-server-5a03189ce71490f5edac7d11905b21023bb8b04f.tar.gz nextcloud-server-5a03189ce71490f5edac7d11905b21023bb8b04f.zip |
Mimetype list integrity check should not fail if it's changed (#15810)
Mimetype list integrity check should not fail if it's changed
Diffstat (limited to 'core/Command')
-rw-r--r-- | core/Command/Maintenance/Mimetype/GenerateMimetypeFileBuilder.php | 105 | ||||
-rw-r--r-- | core/Command/Maintenance/Mimetype/UpdateJS.php | 75 |
2 files changed, 108 insertions, 72 deletions
diff --git a/core/Command/Maintenance/Mimetype/GenerateMimetypeFileBuilder.php b/core/Command/Maintenance/Mimetype/GenerateMimetypeFileBuilder.php new file mode 100644 index 00000000000..2eef5e9faaa --- /dev/null +++ b/core/Command/Maintenance/Mimetype/GenerateMimetypeFileBuilder.php @@ -0,0 +1,105 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 Xheni Myrtaj <xheni@protonmail.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Core\Command\Maintenance\Mimetype; + + +class GenerateMimetypeFileBuilder +{ + /** + * Generate mime type list file + * @param $aliases + * @return string + */ + public function generateFile(array $aliases): string { + // Remove comments + $keys = array_filter(array_keys($aliases), function($k) { + return $k[0] === '_'; + }); + foreach($keys as $key) { + unset($aliases[$key]); + } + + // Fetch all files + $dir = new \DirectoryIterator(\OC::$SERVERROOT.'/core/img/filetypes'); + + $files = []; + foreach($dir as $fileInfo) { + if ($fileInfo->isFile()) { + $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); + $files[] = $file; + } + } + + //Remove duplicates + $files = array_values(array_unique($files)); + sort($files); + + // Fetch all themes! + $themes = []; + $dirs = new \DirectoryIterator(\OC::$SERVERROOT.'/themes/'); + foreach($dirs as $dir) { + //Valid theme dir + if ($dir->isFile() || $dir->isDot()) { + continue; + } + + $theme = $dir->getFilename(); + $themeDir = $dir->getPath() . '/' . $theme . '/core/img/filetypes/'; + // Check if this theme has its own filetype icons + if (!file_exists($themeDir)) { + continue; + } + + $themes[$theme] = []; + // Fetch all the theme icons! + $themeIt = new \DirectoryIterator($themeDir); + foreach ($themeIt as $fileInfo) { + if ($fileInfo->isFile()) { + $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); + $themes[$theme][] = $file; + } + } + + //Remove Duplicates + $themes[$theme] = array_values(array_unique($themes[$theme])); + sort($themes[$theme]); + } + + //Generate the JS + return '/** +* This file is automatically generated +* DO NOT EDIT MANUALLY! +* +* You can update the list of MimeType Aliases in config/mimetypealiases.json +* The list of files is fetched from core/img/filetypes +* To regenerate this file run ./occ maintenance:mimetype:update-js +*/ +OC.MimeTypeList={ + aliases: ' . json_encode($aliases, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . ', + files: ' . json_encode($files, JSON_PRETTY_PRINT) . ', + themes: ' . json_encode($themes, JSON_PRETTY_PRINT) . ' +}; +'; + } + +}
\ No newline at end of file diff --git a/core/Command/Maintenance/Mimetype/UpdateJS.php b/core/Command/Maintenance/Mimetype/UpdateJS.php index a6925c5dc61..0606e210c3f 100644 --- a/core/Command/Maintenance/Mimetype/UpdateJS.php +++ b/core/Command/Maintenance/Mimetype/UpdateJS.php @@ -53,78 +53,9 @@ class UpdateJS extends Command { // Fetch all the aliases $aliases = $this->mimetypeDetector->getAllAliases(); - // Remove comments - $keys = array_filter(array_keys($aliases), function($k) { - return $k[0] === '_'; - }); - foreach($keys as $key) { - unset($aliases[$key]); - } - - // Fetch all files - $dir = new \DirectoryIterator(\OC::$SERVERROOT.'/core/img/filetypes'); - - $files = []; - foreach($dir as $fileInfo) { - if ($fileInfo->isFile()) { - $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); - $files[] = $file; - } - } - - //Remove duplicates - $files = array_values(array_unique($files)); - sort($files); - - // Fetch all themes! - $themes = []; - $dirs = new \DirectoryIterator(\OC::$SERVERROOT.'/themes/'); - foreach($dirs as $dir) { - //Valid theme dir - if ($dir->isFile() || $dir->isDot()) { - continue; - } - - $theme = $dir->getFilename(); - $themeDir = $dir->getPath() . '/' . $theme . '/core/img/filetypes/'; - // Check if this theme has its own filetype icons - if (!file_exists($themeDir)) { - continue; - } - - $themes[$theme] = []; - // Fetch all the theme icons! - $themeIt = new \DirectoryIterator($themeDir); - foreach ($themeIt as $fileInfo) { - if ($fileInfo->isFile()) { - $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); - $themes[$theme][] = $file; - } - } - - //Remove Duplicates - $themes[$theme] = array_values(array_unique($themes[$theme])); - sort($themes[$theme]); - } - - //Generate the JS - $js = '/** -* This file is automatically generated -* DO NOT EDIT MANUALLY! -* -* You can update the list of MimeType Aliases in config/mimetypealiases.json -* The list of files is fetched from core/img/filetypes -* To regenerate this file run ./occ maintenance:mimetype:update-js -*/ -OC.MimeTypeList={ - aliases: ' . json_encode($aliases, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . ', - files: ' . json_encode($files, JSON_PRETTY_PRINT) . ', - themes: ' . json_encode($themes, JSON_PRETTY_PRINT) . ' -}; -'; - - //Output the JS - file_put_contents(\OC::$SERVERROOT.'/core/js/mimetypelist.js', $js); + // Output the JS + $generatedMimetypeFile = new GenerateMimetypeFileBuilder(); + file_put_contents(\OC::$SERVERROOT.'/core/js/mimetypelist.js', $generatedMimetypeFile->generateFile($aliases)); $output->writeln('<info>mimetypelist.js is updated'); } |