@mmh-software/webview
Version:
518 lines (472 loc) • 18.2 kB
JavaScript
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);
}
});
}
});
});
}