klnodekb/a/app.js

500 lines
12 KiB
JavaScript

//console.log('Hello world!');
const express=require('express');
const path= require('path');
const mongoose=require('mongoose');
const bodyParser=require('body-parser');
const numeral = require('numeral');
const expressValidator = require('express-validator');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const config = require('./config/database');
var fse = require('fs-extra');
var utils = require('./js/utils');
var logging=require('./js/helpers');
//const util = require('util');
//var currentWorkNumber=0;
global.currentWorkNumber=0;
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://nodeUser:Kutafaja1234@localhost/nodekb',{ useMongoClient: true });
//mongoose.connect('mongodb://admin:MarkoSn1Pb1@iotechnic.eu:27017/nodekb',{ useMongoClient: true });
let db = mongoose.connection;
//autoIncrement.initialize(mongoose.connection);
//TEST
// set globals
// Check for DB errors
db.on('error', function(err) {
console.log(err);
});
// Check connection
db.once('openUri', function(){
console.log('Connected to MongoDB')
});
// Init app
const app = express();
// Bring in models
let Article = require('./models/article')
let Work=require('./models/works')
let User = require('./models/user');
let KifCert = require('./models/kifcerts');
let Log = require('./models/logmodel');
//let Tool = require('./models/tool')
var wCounter=0;
var findWorkQuery = Work.find({'workNumber': /EMSZ/ }).sort({workCounter : -1}).limit(1);
var utils = require('./js/utils');
function ensureExists(path, mask, cb) {
if (typeof mask == 'function') { // allow the `mask` parameter to be optional
cb = mask;
mask = 0777;
}
fs.mkdir(path, mask, function(err) {
if (err) {
if (err.code == 'EEXIST') cb(null); // ignore the error if the folder already exists
else cb(err); // something else went wrong
} else cb(null); // successfully created folder
});
}
// Új berendezés sorszám generálása
function getNextWorkId(callback)
{
// Find last id
var cnt=0;
findWorkQuery.exec(function(err, maxResult){
if (err) {
return callback(err);
}
if (maxResult[0]===undefined)
{
console.log('workCounter undefined...');
cnt=0;
}
else {
if (maxResult[0].workCounter==undefined)
{
cnt=1;
}
else {
cnt=maxResult[0].workCounter;
}
console.log(maxResult[0].workCounter);
}
cnt++;
console.log('Új WorkID: ' + cnt.toString());
callback(null, cnt);
});
}
// Load view engine
app.set('views',path.join(__dirname,'views'));
app.set('view engine','pug');
// Body parser MW
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
// Set Public folder
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'media')));
app.use(express.static(path.join(__dirname, 'docs')));
app.use(flash());
// Express session middlevare
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}))
// Express messages middleware
app.use(require('connect-flash')());
app.use(function (req, res, next) {
res.locals.messages = require('express-messages')(req, res);
next();
});
app.use(expressValidator({
errorformatter: function(param, msg, value){
var namescape = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length){
formParam += '[' + namespace.shift() + ']';
}
return {
param : formParam,
msg: msg,
value: value
};
}
}));
// Passport Config
require('./config/passport')(passport);
// Passport Middleware
app.use(passport.initialize());
app.use(passport.session());
app.get('*', function(req, res, next){
res.locals.user = req.user || null;
next();
});
// Admin check
function checkUserAdmin2(req,callback)
{
// Find last id
if(req.user)
{
//console.log(req.user);
if(req.user.username==='admisJacica' & req.user.auth==='ADMIN')
{
callback(null, true);
}
else {
callback(null, false);
}
}
}
// Works Route
app.get('/', utils.ensureAuthenticated, function(req, res) {
var admin=false;
if(req.user)
{
checkUserAdmin2(req,function(err,res){
admin=res;
console.log(admin);
});
// if(req.user.username==='admisJacica') ad=true;
}
Work.find({},null,{sort: {workDate: -1}} ,function(err, works){
if (err)
{
console.log(err);
}
else {
// lastId=articles.workNumber;
res.render('index', {
title: 'Munkák',
works: works,
rot:admin
// articles: workSign
});
}
});
});
// Works Route
app.get('/work/layout_table',utils.ensureAuthenticated, function(req, res) {
res.render('layout_table', {
title: 'Munkák'
// articles: workSign
});
});
// Edit Work Route
app.get('/work/edit/:id', utils.ensureAuthenticated,function (req,res) {
Work.findById(req.params.id,function(err,work){
if(err)
{
console.log(err);
}
else {
var wnE=work.workNumber.substring(0,4);
var wnY=work.workNumber.substring(5,9);
var wnN=work.workNumber.substring(10,14);
res.render('edit_work', {
title: work.title+' módosítása:',
work: work,
wCustom: wnE,
wYear: wnY,
wNumber: wnN
});
}
});
});
// Update Work data
app.post('/work/edit/:id', utils.ensureAuthenticated,function(req,res){
let work = {};
let query = {_id:req.params.id}
work.title = req.body.title;
work.author = req.user._id;
work.body = req.body.body;
Work.update(query, work, function(err){
if(err){
console.log(err);
return;
}else{
console.log(Work.db.name);
logging.logAppend("Munka módosítása.",req.user,work.id,Work.db.name,'WORKEDIT');
req.flash('success',work.title+' adatai sikeresen szerkesztve');
res.redirect('/work/'+req.params.id);
}
});
//}
});
// Add Work Route
app.get('/work/add', utils.ensureAuthenticated,function (req,res) {
var dt = new Date();
var devId;
var wnY=dt.getFullYear();
var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, '');
// Find last id
console.log('Keres');
var admin=false;
if(req.user)
{
checkUserAdmin2(req,function(err,res){
admin=res;
console.log(admin);
});
}
getNextWorkId(function(err,wid){
if(err)
{
console.log('Hiba: getNextDevId');
}
else {
//console.log('Kész W' +wid);
devId=numeral(wid).format('0000');
wCounter=wid;
res.render('add_work', {
title: 'Munka Felvétele',
workN: devId,
workDate: workDate,
dateYear: wnY,
rot:admin
});
}
});
});
// Add Work Submit POST Route
app.post('/works/add', utils.ensureAuthenticated,function(req,res){
req.checkBody('title','Munka megnevezése kötelező!').notEmpty();
req.checkBody('workNumber','Munkaszám formátuma nem megfelelő: pl.: 0001').matches('^[0-9][0-9][0-9][0-9]$');//.notEmpty();
// req.checkBody('author','Létrehozó nevének megadása kötelező!').notEmpty();
// req.check('workNumber','Munkaszám fotrmátumnak meg kell felllnie: ÉÉÉÉ/####').matches('^\d{3}$');
//req.checkBody('workSign','Berendezés jel megadása kötelező!').notEmpty();
var dt = new Date();
var wnY=dt.getFullYear();
// Get errors
let errors = req.validationErrors();
if(errors)
{
var admin=false;
if(req.user)
{
checkUserAdmin2(req,function(err,res){
admin=res;
console.log(admin);
});
}
//var devId =numeral(wid).format('0000');
var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, '');
res.render('add_work', {
title: 'Munka Felvétele',
errors:errors,
//workN: workN,
workDate: workDate,
dateYear: wnY,
rot:admin
})
}
else {
let work=new Work();
work.title = req.body.title;
work.author = req.user._id;
work.body = req.body.body;
if (req.body.workNumberE==="EMSZ")
{
work.workNumber = "EMSZ-"+req.body.workNumberY+"/"+ req.body.workNumber;
work.workCounter=wCounter;
}
else {
work.workNumber = req.body.workNumberY+"/"+ req.body.workNumber;
work.workCounter=0;
}
console.log(work.workNumber);
work.workDate= req.body.workDate;
//db.users.findOne({"username" : {$regex : ".*son.*"}});
Work.findOne({'workNumber': work.workNumber}, function(err,wn) // Megnézzük van e már
{
if (err){
console.log(err);
}
else {
if (wn)
{
console.log("Már van ilyen munka");
req.flash('danger','A '+work.workNumber+' munkaszám már foglalt!');
res.redirect('/work/add');
}
else {
work.save(function(err){
if(err){
console.log(err);
return;
}else{
// Munka könyvtár létrehozása
logging.logAppend("Munka hozzáadása.",req.user,work.id,Work.db.name,'WORKADD');
fse.mkdirs('/filedata/'+work._id, function(err){
if (err) return console.error(err);
console.log("Könyvtár létrehozva! ->"+"/filedata/"+work._id);
});
req.flash('success','Munka sikeresen felvéve.');
res.redirect('/');
}
});
}
}
});
}
});
// Get Single Work
app.get('/work/:id',utils.ensureAuthenticated,function(req,res){
Work.findById(req.params.id,function(err,work) // Munka keresése sz ID-je alapján
{
currentWorkNumber=work.workNumber;
console.log(work.devicesArray);
Article.find({
'_id': { $in: work.devicesArray
//mongoose.Types.ObjectId("5a5a0dd6a0bc231270e9fe91"),
//mongoose.Types.ObjectId('4ed3f117a844e0471100000d'),
//mongoose.Types.ObjectId('4ed3f18132f50c491100000e')
}
}, function(err, docs)
{
User.findById(work.author, function(err,user){
if (err)
{
res.render('work',
{
work: work,
articles: docs,
author: 'Ismeretlen'
});
}else {
//console.log(docs);
res.render('work',
{
work: work,
articles: docs,
author: user.name
});
}
});
}
);
});
});
//Devices Route
app.get('/devices', utils.ensureAuthenticated,function(req, res) {
Article.find({}, function(err, articles){
if (err)
{
console.log(err);
}
else {
// lastId=articles.workNumber;
res.render('devicesView', {
title: 'Berendezés gyártási számok',
articles: articles
// articles: workSign
});
}
});
});
// Route Files
let articles = require('./routes/articles');
let users = require('./routes/users');
//let tools = require('./routes/tools');
let certificates_kif = require('./routes/certificates_kif');
let certificates_tr = require('./routes/certificates_tr');
let certificates_mc = require('./routes/certificates_mc');
app.use('/articles', articles);
app.use('/users', users);
//app.use('/tools', tools);
app.use('/certificates_kif',certificates_kif);
app.use('/certificates_tr',certificates_tr);
app.use('/certificates_mc',certificates_mc);
/*
app.delete('/devices/:id',utils.ensureAuthenticated,function(req,res){
let query = { _id:req.params.id}
console.log('Miafasz?');
Article.remove(query, function(err){
if(err)
{
console.log(err);
}
res.send('Success');
})
});
*/
app.listen(80,function functionName() {
console.log('Server elindult a 80-es porton.');
});
//3. lecke 9:58