UNPKG

@mmh-software/webview

Version:
518 lines (472 loc) 18.2 kB
const db = require('./db.js'); const express = require('express'); const fs = require('fs'); const userMiddleware = require('../middleware/users.js'); const path = require('path'); const config = require('../config'); //const speedyvault = "/home/ks/Dokumente/vault"; function fromDirPreview(startPath, docno){ //console.log('Starting from dir '+startPath+'/'); if (!fs.existsSync(startPath)){ console.log("no dir ",startPath); return; } var ArFiles =[]; var path = require('path'); var files=fs.readdirSync(startPath); for(var i=0;i<files.length;i++){ var filename=path.join(startPath,files[i]); var stat = fs.lstatSync(filename); if (filename.indexOf(docno)>=0) { if(filename.indexOf("preview")>=0) { var basename = filename.substr(0, filename.lastIndexOf(".")); //var name = path.basename(basename); var ext = path.extname(basename); var file = { Filename: path.basename(filename), Fileext: path.extname(filename), Fileext2: ext, Filepath: filename, FileLocation: filename.replace(config.path.speedyvault,''), Filesize: stat.size / 1000000.0 + " MB", CreateDate: stat.birthtime.toISOString().replace(/T/, ' ').replace(/\..+/, '') }; ArFiles.push(file); } else if(filename.indexOf("pdf")>=0 || filename.indexOf("png")>=0 || filename.indexOf("jpg")>=0 ) { var file = { Filename: path.basename(filename), Fileext: path.extname(filename), Fileext2: path.extname(filename), Filepath: filename, FileLocation: filename.replace(config.path.speedyvault,''), Filesize: stat.size / 1000000.0 + " MB", CreateDate: stat.birthtime.toISOString().replace(/T/, ' ').replace(/\..+/, '') }; ArFiles.push(file); } else if(filename.indexOf("html")>=0) { var basename = filename.substr(0, filename.lastIndexOf(".")); //var name = path.basename(basename); var ext = path.extname(basename); var file = { Filename: path.basename(filename), Fileext: path.extname(filename), Fileext2: '3D', Filepath: filename, FileLocation: filename.replace(config.path.speedyvault,''), Filesize: stat.size / 1000000.0 + " MB", CreateDate: stat.birthtime.toISOString().replace(/T/, ' ').replace(/\..+/, '') }; //console.log(file); ArFiles.push(file); }; }; }; return ArFiles; }; function fromDirFiles(startPath, docno){ //console.log('Starting from dir '+startPath+'/'); if (!fs.existsSync(startPath)){ console.log("no dir ",startPath); return; } var ArFiles =[]; var path = require('path'); var files=fs.readdirSync(startPath); for(var i=0;i<files.length;i++){ var filename=path.join(startPath,files[i]); var stat = fs.lstatSync(filename); if (filename.indexOf(docno)>=0 && path.extname(filename) != ".preview" && path.extname(filename) != ".webview") { var file = { Filename: path.basename(filename), Fileext: path.extname(filename), Fileext2: path.extname(filename), Filepath: filename, FileLocation: filename.replace(config.path.speedyvault,''), Filesize: stat.size / 1000000.0 + " MB", CreateDate: stat.birthtime.toISOString().replace(/T/, ' ').replace(/\..+/, '') }; ArFiles.push(file); }; }; return ArFiles; }; module.exports = function(app) { app.get('/documentIDFromCtnr', function(req, res, next){ var id = req.param('ctnr_id') db.query(`SELECT dc.* FROM dm_d2c dc INNER JOIN dm_document d ON dc.d2c_did=d.doc_did WHERE dc.d2c_cid=? AND HasPermission(dc.d2c_did,d.doc_dtid,1);`, [id], function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send({ data: results }); } }); }); app.get('/docFromDocID', function(req, res, next){ var id = req.param('doc_id') db.query(`SELECT d.doc_did, dt.dtype_proptable FROM dm_document d inner join dm_doctype dt on dt.dtype_dtid=d.doc_dtid WHERE d.doc_did=?;`, [id], function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { if(results[0] != null) { var proptable = results[0].dtype_proptable; var sql = "SELECT * FROM dm_document d INNER JOIN dm_version v ON d.doc_did = v.ver_did AND d.doc_rev = v.ver_major AND d.doc_ver = v.ver_minor INNER JOIN dm_doctype dt ON d.doc_dtid=dt.dtype_dtid INNER JOIN " + proptable +" p ON v.ver_vid = p.prop_did WHERE d.doc_did=" + id +";"; db.query(sql, function (error1, results1, fields) { if (error1) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results1); } }); } } }); }); app.get('/DoctypeFromID', function(req, res, next){ var id = req.param('doctype_id') db.query(`SELECT * FROM dm_doctype WHERE dtype_dtid=?;`, [id], function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/getDoctypes', function(req, res, next){ db.query(`SELECT * FROM dm_doctype WHERE dtype_flag != 65553 ORDER BY dtype_name;`, function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/DoctypeTables', function(req, res, next){ db.query(`SELECT dt.dtype_proptable FROM dm_doctype dt WHERE dt.dtype_proptable != '' GROUP BY dt.dtype_proptable;`, function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/DoctypeTableFromDoctype', function(req, res, next){ var doctype_id = req.param('doctype_id'); db.query(`SELECT dtype_proptable FROM dm_doctype WHERE dtype_dtid=?;`, [doctype_id], function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/DocumentSearch', function(req, res, next){ var SearchStr = req.param('search_str'); var dtTable = req.param("dtTable"); if(dtTable == null) dtTable = "dm_prop_cad"; db.query("DROP TEMPORARY TABLE IF EXISTS search;",function (err, result1, fields) { if (err) throw err; //console.log("Created Authorities") }); var sql = "CREATE TEMPORARY TABLE search AS (SELECT * FROM dm_document d INNER JOIN dm_version v ON d.doc_did = v.ver_did AND d.doc_rev = v.ver_major AND d.doc_ver = v.ver_minor INNER JOIN dm_doctype dt ON d.doc_dtid=dt.dtype_dtid INNER JOIN "+ dtTable + " p ON v.ver_vid = p.prop_did WHERE (d.doc_docno LIKE '%"+ SearchStr +"%' OR d.doc_origin LIKE '%" + SearchStr + "%' OR p.BEN1 LIKE '%" + SearchStr + "%' OR p.BEN2 LIKE '%" + SearchStr + "%') ORDER BY d.doc_docno ASC);"; //console.log(sql); db.query(sql, function (err, result2, fields) { if (err) throw err; //console.log("Created Authorities") }); sql = "SELECT * FROM search d WHERE HasPermission(d.doc_did, d.doc_dtid, 1)"; db.query(sql,function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/DocumentExtendedSearch', function(req, res, next){ var docno = req.param('docno'); var doctype = req.param('doctype'); var dtTable = req.param("dtTable"); var Search1 = req.param('search1'); var SearchType1 = req.param('selSearch1'); var Search2 = req.param('search2'); var SearchType2 = req.param('selSearch2'); var Search3 = req.param('search3'); var SearchType3 = req.param('selSearch3'); var Search4 = req.param('search4'); var SearchType4 = req.param('selSearch4'); var Search5 = req.param('search5'); var SearchType5 = req.param('selSearch5'); var Search6 = req.param('search6'); var SearchType6 = req.param('selSearch6'); var Search7 = req.param('search7'); var SearchType7 = req.param('selSearch7'); var Search8 = req.param('search8'); var SearchType8 = req.param('selSearch8'); var Search9 = req.param('search9'); var SearchType9 = req.param('selSearch9'); var Search10 = req.param('search10'); var SearchType10 = req.param('selSearch10'); if(dtTable == null) dtTable = "dm_prop_cad"; var whereStr = ''; //docno if(docno != "") { whereStr = 'd.doc_docno LIKE \"%'+ docno +'%\"'; } //Doctype if(doctype != "null" && whereStr != "") { whereStr += " AND dt.dtype_dtid = " + doctype; } else if(doctype != "null") { whereStr = 'dt.dtype_dtid = ' + doctype; } //Search1 if(Search1 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType1 + ' LIKE \"%'+ Search1 +'%\"'; } else if(Search1 != "") { whereStr = 'p.' + SearchType1 + ' LIKE \"%'+ Search1 +'%\"'; } //Search2 if(Search2 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType2 + ' LIKE \"%'+ Search2 +'%\"'; } else if(Search2 != "") { whereStr = 'p.' + SearchType2 + ' LIKE \"%'+ Search2 +'%\"'; } //Search3 if(Search3 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType3 + ' LIKE \"%'+ Search3 +'%\"'; } else if(Search3 != "") { whereStr = 'p.' + SearchType3 + ' LIKE \"%'+ Search3 +'%\"'; } //Search4 if(Search4 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType4 + ' LIKE \"%'+ Search4 +'%\"'; } else if(Search4 != "") { whereStr = 'p.' + SearchType4 + ' LIKE \"%'+ Search4 +'%\"'; } //Search5 if(Search5 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType5 + ' LIKE \"%'+ Search5 +'%\"'; } else if(Search5 != "") { whereStr = 'p.' + SearchType5 + ' LIKE \"%'+ Search5 +'%\"'; } //Search6 if(Search6 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType6 + ' LIKE \"%'+ Search6 +'%\"'; } else if(Search6 != "") { whereStr = 'p.' + SearchType6 + ' LIKE \"%'+ Search6 +'%\"'; } //Search7 if(Search7 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType7 + ' LIKE \"%'+ Search7 +'%\"'; } else if(Search7 != "") { whereStr = 'p.' + SearchType7 + ' LIKE \"%'+ Search7 +'%\"'; } //Search8 if(Search8 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType8 + ' LIKE \"%'+ Search8 +'%\"'; } else if(Search8 != "") { whereStr = 'p.' + SearchType8 + ' LIKE \"%'+ Search8 +'%\"'; } //Search9 if(Search9 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType9 + ' LIKE \"%'+ Search9 +'%\"'; } else if(Search9 != "") { whereStr = 'p.' + SearchType9 + ' LIKE \"%'+ Search9 +'%\"'; } //Search10 if(Search10 != "" && whereStr != "") { whereStr += ' AND p.' + SearchType10 + ' LIKE \"%'+ Search10 +'%\"'; } else if(Search10 != "") { whereStr = 'p.' + SearchType10 + ' LIKE \"%'+ Search10 +'%\"'; } db.query("DROP TEMPORARY TABLE IF EXISTS search;",function (err, result1, fields) { if (err) throw err; //console.log("Created Authorities") }); var sql = "CREATE TEMPORARY TABLE search AS (SELECT * FROM dm_document d INNER JOIN dm_version v ON d.doc_did = v.ver_did AND d.doc_rev = v.ver_major AND d.doc_ver = v.ver_minor INNER JOIN dm_doctype dt ON d.doc_dtid=dt.dtype_dtid INNER JOIN "+ dtTable + " p ON v.ver_vid = p.prop_did WHERE (" + whereStr + ") ORDER BY d.doc_docno ASC);"; //console.log(sql); db.query(sql, function (err, result2, fields) { if (err) throw err; //console.log("Created Authorities") }); sql = "SELECT * FROM search d WHERE HasPermission(d.doc_did, d.doc_dtid, 1)"; //var sql = "SELECT * FROM dm_document d INNER JOIN dm_version v ON d.doc_did = v.ver_did AND d.doc_rev = v.ver_major AND d.doc_ver = v.ver_minor INNER JOIN dm_doctype dt ON d.doc_dtid=dt.dtype_dtid INNER JOIN "+ dtTable + " p ON v.ver_vid = p.prop_did WHERE (" + whereStr + ") AND HasPermission(d.doc_did,d.doc_dtid,1) ORDER BY d.doc_docno ASC;"; //console.log(sql); db.query(sql,function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/Propformat', function(req, res, next){ var dtTable = req.param("dtTable"); var sql = "SELECT pf.* FROM information_schema.`COLUMNS` c INNER JOIN dm_propformat pf ON c.COLUMN_NAME=pf.pfrmt_name WHERE c.TABLE_SCHEMA='speedy7_cad' AND c.TABLE_NAME='" + dtTable + "' AND pf.pfrmt_size <> -1;"; //console.log(sql); db.query(sql,function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/getDocVersions', function(req, res, next){ var docid = req.param('doc_id'); db.query("SELECT * FROM dm_version WHERE ver_did=?;",[docid],function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results); } }); }); app.get('/getDocFiles', function(req, res, next){ var docno = req.param('doc_no'); var ContainerPath = req.param('containerpath'); var path = config.path.speedyvault + ContainerPath;//"201404/Konstruktion/07"; //console.log(path); var Files = fromDirFiles(path, docno); return res.status(200).send(Files); }); app.get('/getPreviewFiles', function(req, res, next){ var docno = req.param('doc_no'); var ContainerPath = req.param('containerpath'); var path = config.path.speedyvault + ContainerPath;//"201404/Konstruktion/07"; //console.log(path); var Files = fromDirPreview(path, docno); return res.status(200).send(Files); }); app.get('/downloadFile', function(req, res, next){ var filePath = req.param('filepath'); var fileLocation = path.join(config.path.speedyvault,filePath); const ext = path.parse(fileLocation).ext; const map = { '.ico': 'image/x-icon', '.html': 'text/html', '.webview': 'text/html', '.js': 'text/javascript', '.json': 'application/json', '.css': 'text/css', '.png': 'image/png', '.jpg': 'image/jpeg', '.wav': 'audio/wav', '.mp3': 'audio/mpeg', '.svg': 'image/svg+xml', '.pdf': 'application/pdf', '.doc': 'application/msword' }; fs.readFile(fileLocation, function(err, data){ if(err){ res.statusCode = 500; res.end(`Error getting the file: ${err}.`); } else { // if the file is found, set Content-type and send data res.setHeader('Content-type', map[ext] || 'text/plain' ); res.end(data); } }); }); app.get('/getContainerPath', function(req, res, next){ var docno = req.param('doc_no'); var ContainerPath; var sql = "Call getDocumentPath("+ docno + ",'*',@result);" db.query(sql,function (error, results, fields) { if (error) { return res.status(409).send({ msg: 'ERROR' }); } else { db.query("SELECT @result AS Path;",function (error1, results1, fields1) { if (error1) { return res.status(409).send({ msg: 'ERROR' }); } else { return res.status(200).send(results1); } }); } }); }); }