500 lines
12 KiB
JavaScript
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
|