Advertisement
Guest User

Untitled

a guest
Oct 10th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var express = require('express');
  2. var path = require('path');
  3. var handlebars = require('express-handlebars').create({defaultLayout:'main'});
  4. var formidable = require('formidable');
  5. var credentials = require('./credentials');
  6. var session = require('express-session');
  7. var parseurl = require('parseurl');
  8. var fs = require('fs');
  9. var mysql = require('mysql');
  10. var multer  = require('multer');
  11. var upload = multer({ dest: 'uploads/' });
  12.  
  13. var app = express();
  14.  
  15. // Database Connection
  16. var connection = mysql.createConnection({
  17.     host: 'localhost',
  18.     user: 'root',
  19.     password: '',
  20.     database: 'hotelowa-baza-danych'
  21. });
  22. connection.connect(function (err) {
  23.     if(err) {
  24.         if(err.code == 'ECONNREFUSED') console.error('Nieudana próba połączenia z bazą danych.');
  25.         return console.error(err);
  26.     }
  27. });
  28. // End of Database Connection
  29.  
  30. app.disable('x-powered-by');
  31.  
  32. app.engine('handlebars', handlebars.engine);
  33. app.set('view engine', 'handlebars');
  34.  
  35.  
  36. app.set('port', process.env.PORT || 3000);
  37.  
  38. app.use(express.static(path.join(__dirname, '/public')));
  39.  
  40. app.use(function (req, res, next) {
  41.     console.log("Looking for URL : " + req.url);
  42.     next();
  43. });
  44.  
  45. app.use(require('body-parser').urlencoded({
  46.     extended: true
  47. }));
  48.  
  49. app.use(require('cookie-parser')(credentials.cookieSecret));
  50.  
  51. String.prototype.capitalizeFirstLetter = function() {
  52.     return this.charAt(0).toUpperCase() + this.slice(1);
  53. };
  54. String.prototype.replaceAll = function(search, replacement) {
  55.     var target = this;
  56.     return target.replace(new RegExp(search, 'g'), replacement);
  57. };
  58. String.prototype.createClause = function () {
  59.     return this.replaceAll('_',' ').capitalizeFirstLetter();
  60. };
  61.  
  62. function clauseColumns(row) {
  63.     var fields = [];
  64.     for (var i = 0; i < row.length; i++) {
  65.          fields[i] = row[i].Field.createClause();
  66.     }
  67.     return fields;
  68. }
  69. function makeArray(object) {
  70.     var array = [];
  71.     var i = 0;
  72.     for(var key in object) {
  73.         array[i] = key;
  74.         i++;
  75.     }
  76.     return array;
  77. }
  78.  
  79. function checkForm(inputsNames, formName) {
  80.     inputsNames = makeArray(inputsNames);
  81.     var formOptions = formData(formName);
  82.     var formFields = formOptions.fields;
  83.     if(formOptions.textarea)var formFields = formFields.concat(formOptions.textarea);
  84.     for (var i = 0; i < inputsNames.length; i++){
  85.         if(inputsNames[i] == 'id' || inputsNames[i] == 'created')return false;
  86.         for (var j = 0; j < formFields.length; j++) {
  87.             if(inputsNames[i] == formFields[j].name)break;
  88.             if(j+1 == formFields.length)return false;
  89.         }
  90.     }
  91.     return true;
  92. }
  93.  
  94. function formData(formName) {
  95.     switch (formName){
  96.         case 'reservation':
  97.             return reservation;
  98.             break;
  99.         case 'service':
  100.             return service;
  101.             break;
  102.         case 'room':
  103.             return room;
  104.             break;
  105.         case 'client':
  106.             return client;
  107.             break;
  108.         case 'discount':
  109.             return discount;
  110.             break;
  111.         case 'client_service':
  112.             return clientService;
  113.             break;
  114.         default:
  115.             return '404';
  116.             break;
  117.     }
  118. }
  119.  
  120.  
  121. // [Forms]
  122. var service = {
  123.     formName: 'service',
  124.     tableName: 'services',
  125.     services_active: 'active',
  126.     fields: [
  127.         {id: 'fieldName', displayed: 'Name', type: 'text', name: 'name'},
  128.         {id: 'fieldPrice', displayed: 'Price', type: 'number', name: 'price', step: 0.1}
  129.     ],
  130.     textarea: [
  131.         {id: 'fieldDescription', displayed: 'Description',  name: 'description'}
  132.         ]
  133. };
  134. var discount = {
  135.     formName: 'discount',
  136.     tableName: 'discounts',
  137.     discounts_active: 'active',
  138.     fields: [
  139.         {id: 'fieldName', displayed: 'Name', type: 'text', name: 'name'},
  140.         {id: 'fieldCode', displayed: 'Code', type: 'text', name: 'code'},
  141.         {id: 'fieldValue', displayed: 'Value', type: 'number', name: 'value'},
  142.         {id: 'fieldDateFrom', displayed: 'From', type: 'date', name: 'date_from'},
  143.         {id: 'fieldDateTo', displayed: 'To', type: 'date', name: 'date_to'}
  144.     ]
  145. };
  146. var clientService = {
  147.     formName: 'client&service',
  148.     tableName: 'client_service',
  149.     client_service_active: 'active',
  150.     fields: [
  151.         {id: 'fieldClientId', displayed: 'Client id', type: 'number', name: 'id_client'},
  152.         {id: 'fieldServiceId', displayed: 'Service id', type: 'number', name: 'id_service'},
  153.         {id: 'fieldPaid', displayed: 'Date of paid', type: 'date', name: 'paid'}
  154.     ]
  155. };
  156. var reservation = {
  157.     formName: 'reservation',
  158.     tableName: 'reservations',
  159.     reservations_active: 'active',
  160.     fields: [
  161.         {id: 'fieldClientId', displayed: 'Client id', type: 'number', name: 'id_client'},
  162.         {id: 'fieldRoomId', displayed: 'Room id', type: 'number', name: 'id_room'},
  163.         {id: 'fieldDateFrom', displayed: 'From', type: 'date', name: 'date_from'},
  164.         {id: 'fieldDateTo', displayed: 'To', type: 'date', name: 'date_to'}
  165.     ]
  166. };
  167. var room = {
  168.     formName: 'room',
  169.     tableName: 'rooms',
  170.     rooms_active: 'active',
  171.     fields: [
  172.         {id: 'fieldNumber', displayed: 'Number of room', type: 'number', name: 'number'},
  173.         {id: 'fieldCountOfPeople', displayed: 'Count of people', type: 'number', name: 'count_of_people'},
  174.         {id: 'fieldType', displayed: 'Type', type: 'text', name: 'type'},
  175.         {id: 'fieldPrice', displayed: 'Price', type: 'number', name: 'price', step: 0.1}
  176.     ],
  177.     textarea: [
  178.         {id: 'fieldDescription', displayed: 'Description',  name: 'description'}
  179.     ]
  180. };
  181. var client = {
  182.     formName: 'client',
  183.     tableName: 'clients',
  184.     clients_active: 'active',
  185.     fields: [
  186.         {id: 'fieldName', displayed: 'Name', type: 'text', name: 'name'},
  187.         {id: 'fieldLastName', displayed: 'Last Name', type: 'text', name: 'last_name'},
  188.         {id: 'fieldPESEL', displayed: 'PESEL', type: 'number', name: 'pesel'},
  189.         {id: 'fieldCity', displayed: 'City', type: 'text', name: 'city'},
  190.         {id: 'fieldPostCode', displayed: 'Post code', type: 'text', name: 'post_code'},
  191.         {id: 'fieldStreet', displayed: 'Street', type: 'text', name: 'street'},
  192.         {id: 'fieldHome', displayed: 'Home', type: 'number', name: 'home'},
  193.         {id: 'fieldFlat', displayed: 'Flat', type: 'number', name: 'flat'},
  194.         {id: 'fieldEmail', displayed: 'Email', type: 'email', name: 'email'},
  195.         {id: 'fieldBirthday', displayed: 'Birthday', type: 'date', name: 'birthday'},
  196.         {id: 'fieldPhone', displayed: 'Phone', type: 'number', name: 'phone'},
  197.         {id: 'fieldPhoto', displayed: 'Photo', type: 'file', name: 'photo', accept: "image/*" }
  198.     ]
  199. };
  200.  
  201. app.get('/', function (req, res){
  202.     return res.render('home', { home_active: "active"});
  203. });
  204.  
  205. app.get('/phpmyadmin', function (req, res) {
  206.     console.log('Redirect to localhost/phpmyadmin')
  207.     return res.redirect(303, 'http://localhost/phpmyadmin/');
  208. });
  209.  
  210. app.get('/list/:form',function (req, res, next){
  211.     if(formData(req.params.form) != '404')var table = formData(req.params.form).tableName;
  212.     else return next();
  213.     connection.query("DESCRIBE "+table,function (err, row) {
  214.         if (err) {
  215.             console.error(err);
  216.             return res.redirect(505, '/505');
  217.         }
  218.         connection.query('SELECT * FROM `'+table+'`',function (err, result) {
  219.             if (err) {
  220.                 console.error(err);
  221.                 return res.redirect(505, '/505');
  222.             }
  223.             var formName = formData(req.params.form).formName;
  224.             var options = {
  225.                 item: formName,
  226.                 thead: clauseColumns(row),
  227.                 list: result
  228.             };
  229.             if (req.query.messages) options.messages = req.query.messages;
  230.             if (req.query.alertType) options.alertType = req.query.alertType;
  231.             return res.render('list', options);
  232.         });
  233.     });
  234. });
  235. // [/Forms]
  236.  
  237. app.get('/add/:form', function (req, res, next) {
  238.     if(formData(req.params.form) != '404')var options = formData(req.params.form);
  239.     else return next();
  240.     if(req.query.messages) options.messages = req.query.messages;
  241.     if(req.query.alertType) options.alertType = req.query.alertType;
  242.     return res.render('add', options);
  243. });
  244.  
  245. app.post('/add/:form', function (req, res, next) {
  246.     console.log("Received form : " + req.params.form);
  247.     console.log("User data : ");
  248.     console.log(req.body);
  249.     if(formData(req.params.form) != '404')var table = formData(req.params.form).tableName;
  250.     else return next();
  251.  
  252.     if(checkForm(req.body,req.params.form) == false)return next();
  253.  
  254.     req.body.created = new Date();
  255.  
  256.     connection.query('INSERT INTO `'+table+'` SET ?', req.body, function (err, result) {
  257.         if(err){
  258.             console.error(err);
  259.             return res.redirect(505,'/505');
  260.         }
  261.         res.redirect(303,'/list/'+req.params.form);
  262.     });
  263. });
  264.  
  265.  
  266. app.use(function (req, res) {
  267.     res.type('text/html');
  268.     res.status(404);
  269.     res.render('404');
  270.     console.log('Response : 404');
  271. });
  272.  
  273. app.use('/500', function (err, req, res) {
  274.     console.error(err.stack);
  275.     res.status(500);
  276.     res.render('500');
  277. });
  278.  
  279.  
  280. app.listen(app.get('port'), function () {
  281.     console.log('Express started at 127.0.0.1:' + app.get('port'));
  282. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement