diff --git a/webv4/lib/files.js b/webv4/lib/files.js index a4fc22ba812564cace06a8fa54f5533e58b19c1a..e429149c31b632b79181e9033f85397ff47d093b 100644 --- a/webv4/lib/files.js +++ b/webv4/lib/files.js @@ -2,26 +2,30 @@ require('filebase.js', 'FileBase'); require('file_size.js', 'file_size_str'); function count_files(dir) { - var n = 0; const fn = format("%s%s.ixb", file_area.dir[dir].data_dir, dir); - if (!file_exists(fn)) return n; + if (!file_exists(fn)) return 0; return Math.floor(file_size(fn) / 22); // ixb record length is 22 bytes } +function libHasFiles(lib) { + return lib.dir_list.some(function (e) { + return count_files(e.code) > 0; + }); +} + function listLibraries() { - return file_area.lib_list.filter(function (library) { - return library.dir_list.length >= 1; + return file_area.lib_list.filter(function (lib) { + return lib.dir_list.length >= 1 && libHasFiles(lib); }); } -function listDirectories(library) { - var dirs = []; - file_area.lib_list[library].dir_list.forEach(function (dir) { - const fc = count_files(dir.code); - if (fc < 1) return; - dirs.push({ dir: dir, fileCount: fc }); - }); - return dirs; +function listDirectories(lib) { + return file_area.lib_list[lib].dir_list.reduce(function (a, c) { + const fc = count_files(c.code); + if (fc < 1) return a; + a.push({ dir: c, fileCount: fc }); + return a; + }, []); } function listFiles(dir) { diff --git a/webv4/pages/002-files.xjs b/webv4/pages/002-files.xjs index b0e510aaa014f991db9bd8d9120349d84ee10850..d17c7b46fd2a1529417f33730af00286491e3fb2 100644 --- a/webv4/pages/002-files.xjs +++ b/webv4/pages/002-files.xjs @@ -24,19 +24,28 @@ </li> </ol> - <?xjs function writeFileDetails(file) { ?> - <a href="./api/files.ssjs?call=download-file&dir=<? Request.write_param('dir'); ?>&file=<? write(file.name); ?>" target="_blank" class="list-group-item striped" data-file-list-element data-size="<? write(file._size); ?>" data-uploaded="<? write(file.uldate); ?>" data-name="<? write(file.name); ?>"> - <strong><? write(file.name); ?></strong> (<? write(file.size); ?>) - <p><em>Uploaded <? write(system.timestr(file.uldate)); ?></em></p> - <?xjs if (typeof file.extdesc === 'undefined') { ?> - <p><? write(file.desc); ?></p> - <?xjs } else if (file.extdesc.search(/(\x1B\[|[\xA8-\xFE])/) > -1) { ?> - <pre class="ansi"><? write(html_encode(file.extdesc, true, false, true, true)); ?></pre> - <?xjs } else { ?> - <pre class="list"><? write(file.extdesc.replace(/[^\r,\n\x20-\x7E]/g, '')); ?></pre> - <?xjs } ?> - </a> - <?xjs } ?> + <? function writeFileDetails(file) { ?> + <? const cd = file_area.dir[Request.get_param('dir')].can_download && user.compare_ars(file_area.dir[Request.get_param('dir')].download_ars); ?> + <? if (cd) { ?> + <a href="./api/files.ssjs?call=download-file&dir=<? Request.write_param('dir'); ?>&file=<? write(file.name); ?>" target="_blank" class="list-group-item striped" data-file-list-element data-size="<? write(file._size); ?>" data-uploaded="<? write(file.uldate); ?>" data-name="<? write(file.name); ?>"> + <? } else { ?> + <li class="list-group-item striped" data-file-list-element data-size="<? write(file._size); ?>" data-uploaded="<? write(file.uldate); ?>" data-name="<? write(file.name); ?>"> + <? } ?> + <strong><? write(file.name); ?></strong> (<? write(file.size); ?>) + <p><em>Uploaded <? write(system.timestr(file.uldate)); ?></em></p> + <?xjs if (typeof file.extdesc === 'undefined') { ?> + <p><? write(file.desc); ?></p> + <?xjs } else if (file.extdesc.search(/(\x1B\[|[\xA8-\xFE])/) > -1) { ?> + <pre class="ansi"><? write(html_encode(file.extdesc, true, false, true, true)); ?></pre> + <?xjs } else { ?> + <pre class="list"><? write(file.extdesc.replace(/[^\r,\n\x20-\x7E]/g, '')); ?></pre> + <?xjs } ?> + <? if (cd) { ?> + </a> + <? } else { ?> + </li> + <? } ?> + <? } ?> <div class="clearfix" style="margin-bottom:1em;"> <div class="dropdown pull-right"> diff --git a/webv4/root/api/files.ssjs b/webv4/root/api/files.ssjs index 00f08a3b732714f00fae881e94bea39bac5edbca..6737c49b616f7edc6b75f472776fa3d1345269f9 100644 --- a/webv4/root/api/files.ssjs +++ b/webv4/root/api/files.ssjs @@ -20,6 +20,7 @@ if ((http_request.method === 'GET' || http_request.method === 'POST') && file_area.dir[http_request.query.dir[0]].index >= 0 && file_area.dir[http_request.query.dir[0]].can_download && typeof http_request.query.file !== 'undefined' + && user.compare_ars(file_area.dir[http_request.query.dir[0]].download_ars) ) { var dircode = file_area.dir[http_request.query.dir[0]].code; var fileBase = new FileBase(dircode);