diff --git a/db/migrations/5.3.1_add_show_folder_size_config.php b/db/migrations/5.3.1_add_show_folder_size_config.php new file mode 100644 index 0000000000000000000000000000000000000000..fe45a4cc4016f05c7b1d91cecb0889a84f8428dc --- /dev/null +++ b/db/migrations/5.3.1_add_show_folder_size_config.php @@ -0,0 +1,32 @@ +<?php + + +class AddShowFolderSizeConfig extends Migration +{ + public function description() + { + return 'Adds the configuration SHOW_FOLDER_SIZE.'; + } + + + protected function up() + { + DBManager::get()->exec( + "INSERT IGNORE INTO `config` + (`field`, `value`, `type`, `range`, + `section`, `mkdate`, `chdate`, + `description`) + VALUES + ('SHOW_FOLDER_SIZE', '1', 'boolean', 'global', + 'files', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), + 'SHOW_FOLDER_SIZE gibt an, ob die Anzahl der Objekte (Dateien und Unterordner) in einem Ordner angezeigt werden sollen.')" + ); + } + + protected function down() + { + DBManager::get()->exec( + "DELETE FROM `config_values` WHERE `field` = 'SHOW_FOLDER_SIZE'" + ); + } +} diff --git a/lib/filesystem/FilesystemVueDataManager.php b/lib/filesystem/FilesystemVueDataManager.php index 84fbedb7282ba3b7d686d7de84e3b29cf68bf676..9054de628a32dcb9222b8482c2a1541335b92558 100644 --- a/lib/filesystem/FilesystemVueDataManager.php +++ b/lib/filesystem/FilesystemVueDataManager.php @@ -133,6 +133,10 @@ class FilesystemVueDataManager 'name' => $folder->name, 'url' => URLHelper::getURL('dispatch.php/' . $controllerpath . '/' . $folder->getId()), 'user_id' => $folder->user_id, + 'object_count' => (Config::get()->SHOW_FOLDER_SIZE + ? count($folder->getFiles()) + count($folder->getSubfolders()) + : 0 + ), 'author_name' => $folder->owner ? $folder->owner->getFullname('no_title_rev') : '', 'author_url' => $folder->owner && $folder->owner->id !== $GLOBALS['user']->id? URLHelper::getURL('dispatch.php/profile', ['username' => $folder->owner->username]) : '', 'chdate' => (int) $folder->chdate, diff --git a/resources/vue/base-components.js b/resources/vue/base-components.js index 97231d2827d47162ce34672b2cec476f0e55646c..09dbac3fb5403958e3ffc3ba6fc9a6281c5cb27d 100644 --- a/resources/vue/base-components.js +++ b/resources/vue/base-components.js @@ -7,6 +7,7 @@ import StudipAssetImg from './components/StudipAssetImg.vue'; import StudipDateTime from './components/StudipDateTime.vue'; import StudipDialog from './components/StudipDialog.vue'; import StudipFileSize from './components/StudipFileSize.vue'; +import StudipFolderSize from './components/StudipFolderSize.vue'; import StudipIcon from './components/StudipIcon.vue'; import RangeInput from './components/RangeInput.vue'; import Datetimepicker from './components/Datetimepicker.vue'; @@ -31,6 +32,7 @@ const BaseComponents = { Datetimepicker, StudipDialog, StudipFileSize, + StudipFolderSize, StudipIcon, I18nTextarea, // StudipLoadingIndicator, diff --git a/resources/vue/components/FilesTable.vue b/resources/vue/components/FilesTable.vue index 88abdeca723b8805d8fc1fde58991bb3ff8b7ab0..15f2d49802f8edd3656859c1ae27e4e284918083 100644 --- a/resources/vue/components/FilesTable.vue +++ b/resources/vue/components/FilesTable.vue @@ -130,7 +130,10 @@ <span v-html="highlightString(folder.name)"></span> </a> </td> - <td class="responsive-hidden"></td> + <td class="responsive-hidden" :data-sort-value="folder.object_count"> + <studip-folder-size v-if="folder.object_count" + :object_count="folder.object_count"></studip-folder-size> + </td> <td v-if="showdownloads" class="responsive-hidden"> </td> diff --git a/resources/vue/components/StudipFolderSize.vue b/resources/vue/components/StudipFolderSize.vue new file mode 100644 index 0000000000000000000000000000000000000000..0c6e0bc6d1221871666154358bfed3e6ced228f4 --- /dev/null +++ b/resources/vue/components/StudipFolderSize.vue @@ -0,0 +1,24 @@ +<template> + <span>{{ folder_size }}</span> +</template> + +<script> +export default { + name: 'studip-folder-size', + props: { + object_count: Number + }, + computed: { + folder_size() { + if (this.object_count < 1) { + return ''; + } + + return this.$gettextInterpolate( + this.$ngettext('%{count} Objekt', '%{count} Objekte', this.object_count), + {count: this.object_count} + ); + } + } +} +</script>