Moved menu to the DB and started modernizing old code
							parent
							
								
									ceb23e1ce1
								
							
						
					
					
						commit
						ecef3b8224
					
				|  | @ -6,7 +6,7 @@ | ||||||
|         "promise" |         "promise" | ||||||
|     ], |     ], | ||||||
|     "parserOptions": { |     "parserOptions": { | ||||||
|         "ecmaVersion": 6 |         "ecmaVersion": 2017 | ||||||
|     }, |     }, | ||||||
|     "globals": { |     "globals": { | ||||||
|         "$": true |         "$": true | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								app.js
								
								
								
								
							
							
						
						
									
										18
									
								
								app.js
								
								
								
								
							|  | @ -260,16 +260,22 @@ app.use((err, req, res, next) => { | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | // Nodejs version check
 | ||||||
|  | if(parseInt(process.version.split('.')[0].replace('v', '')) <= 7){ | ||||||
|  |     console.log(colors.red('Please use Node.js version 7.x or above')); | ||||||
|  |     process.exit(2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| app.on('uncaughtException', (err) => { | app.on('uncaughtException', (err) => { | ||||||
|     console.error(colors.red(err.stack)); |     console.error(colors.red(err.stack)); | ||||||
|     process.exit(); |     process.exit(2); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| MongoClient.connect(config.databaseConnectionString, {}, (err, client) => { | MongoClient.connect(config.databaseConnectionString, {}, (err, client) => { | ||||||
|     // On connection error we display then exit
 |     // On connection error we display then exit
 | ||||||
|     if(err){ |     if(err){ | ||||||
|         console.log(colors.red('Error connecting to MongoDB: ' + err)); |         console.log(colors.red('Error connecting to MongoDB: ' + err)); | ||||||
|         process.exit(); |         process.exit(2); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // select DB
 |     // select DB
 | ||||||
|  | @ -281,22 +287,22 @@ MongoClient.connect(config.databaseConnectionString, {}, (err, client) => { | ||||||
|     db.products = db.collection('products'); |     db.products = db.collection('products'); | ||||||
|     db.orders = db.collection('orders'); |     db.orders = db.collection('orders'); | ||||||
|     db.pages = db.collection('pages'); |     db.pages = db.collection('pages'); | ||||||
|  |     db.menu = db.collection('menu'); | ||||||
| 
 | 
 | ||||||
|     // add db to app for routes
 |     // add db to app for routes
 | ||||||
|     app.db = db; |     app.db = db; | ||||||
| 
 | 
 | ||||||
|     // add indexing
 |     // add indexing
 | ||||||
|     common.runIndexing(app) |     common.runIndexing(app) | ||||||
|     .then(common.testData(db)) |     .then(common.testData(db, app)) | ||||||
|  |     .then(app.listen(app.get('port'))) | ||||||
|     .then(() => { |     .then(() => { | ||||||
|         // lift the app
 |         // lift the app
 | ||||||
|         app.listen(app.get('port'), () => { |  | ||||||
|         console.log(colors.green('expressCart running on host: http://localhost:' + app.get('port'))); |         console.log(colors.green('expressCart running on host: http://localhost:' + app.get('port'))); | ||||||
|         }); |  | ||||||
|     }) |     }) | ||||||
|     .catch(() => { |     .catch(() => { | ||||||
|         console.error(colors.red('Error setting up indexes:' + err)); |         console.error(colors.red('Error setting up indexes:' + err)); | ||||||
|         process.exit(); |         process.exit(2); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| [ | { | ||||||
|  |     "products":[ | ||||||
|         { |         { | ||||||
|             "productPermalink": "duckworth-jacket", |             "productPermalink": "duckworth-jacket", | ||||||
|             "productTitle": "Duckworth Woolfill Jacket", |             "productTitle": "Duckworth Woolfill Jacket", | ||||||
|  | @ -64,4 +65,19 @@ | ||||||
|             "productImage": "/uploads/scout-backpack/scout-backpack_a035275d-8975-4a05-8456-5e1ec35f020f_grande.jpg", |             "productImage": "/uploads/scout-backpack/scout-backpack_a035275d-8975-4a05-8456-5e1ec35f020f_grande.jpg", | ||||||
|             "productOptions": "{\"colour\":{\"optName\":\"colour\",\"optLabel\":\"Select colour\",\"optType\":\"select\",\"optOptions\":[\"Navy\",\"Moss\",\"Nutmeg\",\"Khaki\"]}}" |             "productOptions": "{\"colour\":{\"optName\":\"colour\",\"optLabel\":\"Select colour\",\"optType\":\"select\",\"optOptions\":[\"Navy\",\"Moss\",\"Nutmeg\",\"Khaki\"]}}" | ||||||
|         } |         } | ||||||
| ] |     ], | ||||||
|  |     "menu": { | ||||||
|  |         "items": [ | ||||||
|  |             { | ||||||
|  |                 "title" : "Backpacks", | ||||||
|  |                 "link" : "backpack", | ||||||
|  |                 "order" : 0 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "title" : "Boots", | ||||||
|  |                 "link" : "boots", | ||||||
|  |                 "order" : 1 | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -359,7 +359,6 @@ router.get('/product/new', common.restrict, (req, res) => { | ||||||
| // insert new product form action
 | // insert new product form action
 | ||||||
| router.post('/product/insert', common.restrict, (req, res) => { | router.post('/product/insert', common.restrict, (req, res) => { | ||||||
|     let db = req.app.db; |     let db = req.app.db; | ||||||
|     let config = common.getConfig(); |  | ||||||
| 
 | 
 | ||||||
|     let doc = { |     let doc = { | ||||||
|         productPermalink: req.body.frmProductPermalink, |         productPermalink: req.body.frmProductPermalink, | ||||||
|  | @ -852,7 +851,8 @@ router.post('/settings/option/remove', common.restrict, (req, res) => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // settings update
 | // settings update
 | ||||||
| router.get('/settings/menu', common.restrict, (req, res) => { | router.get('/settings/menu', common.restrict, async (req, res) => { | ||||||
|  |     let db = req.app.db; | ||||||
|     res.render('settings_menu', { |     res.render('settings_menu', { | ||||||
|         title: 'Cart menu', |         title: 'Cart menu', | ||||||
|         session: req.session, |         session: req.session, | ||||||
|  | @ -861,17 +861,18 @@ router.get('/settings/menu', common.restrict, (req, res) => { | ||||||
|         messageType: common.clearSessionValue(req.session, 'messageType'), |         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|         helpers: req.handlebars.helpers, |         helpers: req.handlebars.helpers, | ||||||
|         config: common.getConfig(), |         config: common.getConfig(), | ||||||
|         menu: common.getMenu().items |         menu: common.sortMenu(await common.getMenu(db)) | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // settings page list
 | // settings page list
 | ||||||
| router.get('/settings/pages', common.restrict, (req, res) => { | router.get('/settings/pages', common.restrict, (req, res) => { | ||||||
|     let db = req.app.db; |     let db = req.app.db; | ||||||
|     common.dbQuery(db.pages, {}, null, null, (err, pages) => { |     common.dbQuery(db.pages, {}, null, null, async (err, pages) => { | ||||||
|         if(err){ |         if(err){ | ||||||
|             console.info(err.stack); |             console.info(err.stack); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|         res.render('settings_pages', { |         res.render('settings_pages', { | ||||||
|             title: 'Static pages', |             title: 'Static pages', | ||||||
|             pages: pages, |             pages: pages, | ||||||
|  | @ -881,13 +882,15 @@ router.get('/settings/pages', common.restrict, (req, res) => { | ||||||
|             messageType: common.clearSessionValue(req.session, 'messageType'), |             messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|             helpers: req.handlebars.helpers, |             helpers: req.handlebars.helpers, | ||||||
|             config: common.getConfig(), |             config: common.getConfig(), | ||||||
|             menu: common.getMenu().items |             menu: common.sortMenu(await common.getMenu(db)) | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // settings pages new
 | // settings pages new
 | ||||||
| router.get('/settings/pages/new', common.restrict, (req, res) => { | router.get('/settings/pages/new', common.restrict, async (req, res) => { | ||||||
|  |     let db = req.app.db; | ||||||
|  | 
 | ||||||
|     res.render('settings_page_edit', { |     res.render('settings_page_edit', { | ||||||
|         title: 'Static pages', |         title: 'Static pages', | ||||||
|         session: req.session, |         session: req.session, | ||||||
|  | @ -897,18 +900,19 @@ router.get('/settings/pages/new', common.restrict, (req, res) => { | ||||||
|         messageType: common.clearSessionValue(req.session, 'messageType'), |         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|         helpers: req.handlebars.helpers, |         helpers: req.handlebars.helpers, | ||||||
|         config: common.getConfig(), |         config: common.getConfig(), | ||||||
|         menu: common.getMenu().items |         menu: common.sortMenu(await common.getMenu(db)) | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // settings pages editor
 | // settings pages editor
 | ||||||
| router.get('/settings/pages/edit/:page', common.restrict, (req, res) => { | router.get('/settings/pages/edit/:page', common.restrict, (req, res) => { | ||||||
|     let db = req.app.db; |     let db = req.app.db; | ||||||
|     db.pages.findOne({_id: common.getId(req.params.page)}, (err, page) => { |     db.pages.findOne({_id: common.getId(req.params.page)}, async (err, page) => { | ||||||
|         if(err){ |         if(err){ | ||||||
|             console.info(err.stack); |             console.info(err.stack); | ||||||
|         } |         } | ||||||
|         // page found
 |         // page found
 | ||||||
|  |         const menu = common.sortMenu(await common.getMenu(db)); | ||||||
|         if(page){ |         if(page){ | ||||||
|             res.render('settings_page_edit', { |             res.render('settings_page_edit', { | ||||||
|                 title: 'Static pages', |                 title: 'Static pages', | ||||||
|  | @ -920,7 +924,7 @@ router.get('/settings/pages/edit/:page', common.restrict, (req, res) => { | ||||||
|                 messageType: common.clearSessionValue(req.session, 'messageType'), |                 messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|                 helpers: req.handlebars.helpers, |                 helpers: req.handlebars.helpers, | ||||||
|                 config: common.getConfig(), |                 config: common.getConfig(), | ||||||
|                 menu: common.getMenu().items |                 menu | ||||||
|             }); |             }); | ||||||
|         }else{ |         }else{ | ||||||
|             // 404 it!
 |             // 404 it!
 | ||||||
|  | @ -930,9 +934,8 @@ router.get('/settings/pages/edit/:page', common.restrict, (req, res) => { | ||||||
|                 message: '404 Error - Page not found', |                 message: '404 Error - Page not found', | ||||||
|                 helpers: req.handlebars.helpers, |                 helpers: req.handlebars.helpers, | ||||||
|                 showFooter: 'showFooter', |                 showFooter: 'showFooter', | ||||||
|                 menu: common.getMenu() |                 menu | ||||||
|             } |             }); | ||||||
|             ); |  | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
|  |  | ||||||
							
								
								
									
										148
									
								
								routes/common.js
								
								
								
								
							
							
						
						
									
										148
									
								
								routes/common.js
								
								
								
								
							|  | @ -4,6 +4,7 @@ const colors = require('colors'); | ||||||
| const lunr = require('lunr'); | const lunr = require('lunr'); | ||||||
| const fs = require('fs'); | const fs = require('fs'); | ||||||
| const escape = require('html-entities').AllHtmlEntities; | const escape = require('html-entities').AllHtmlEntities; | ||||||
|  | let ObjectId = require('mongodb').ObjectID; | ||||||
| 
 | 
 | ||||||
| // common functions
 | // common functions
 | ||||||
| exports.checkLogin = function(req, res, next){ | exports.checkLogin = function(req, res, next){ | ||||||
|  | @ -229,77 +230,99 @@ exports.updateConfig = function(fields){ | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| exports.getMenu = function(){ | exports.getMenu = function(db){ | ||||||
|     let fs = require('fs'); |     return db.menu.findOne({}); | ||||||
|     let path = require('path'); |  | ||||||
|     let menuFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../config/menu.json'), 'utf8')); |  | ||||||
| 
 |  | ||||||
|     menuFile.items = _.sortBy(menuFile.items, 'order'); |  | ||||||
|     return menuFile; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // creates a new menu item
 | // creates a new menu item
 | ||||||
| exports.newMenu = function(req, res){ | exports.newMenu = function(req, res){ | ||||||
|     let fs = require('fs'); |     const db = req.app.db; | ||||||
|     let path = require('path'); |     return exports.getMenu(db) | ||||||
|     let menuJson = '../config/menu.json'; |     .then((menu) => { | ||||||
|     let menuFile = require(menuJson); |         // if no menu present
 | ||||||
| 
 |         if(!menu){ | ||||||
|  |             menu = {}; | ||||||
|  |             menu.items = []; | ||||||
|  |         } | ||||||
|         let newNav = { |         let newNav = { | ||||||
|             title: req.body.navMenu, |             title: req.body.navMenu, | ||||||
|             link: req.body.navLink, |             link: req.body.navLink, | ||||||
|         order: Object.keys(menuFile.items).length + 1 |             order: Object.keys(menu.items).length + 1 | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|     // add new menu item
 |         menu.items.push(newNav); | ||||||
|     menuFile.items.push(newNav); |         return db.menu.updateOne({}, {$set: {items: menu.items}}, {upsert: true}) | ||||||
| 
 |         .then(() => { | ||||||
|     // write file
 |  | ||||||
|     try{ |  | ||||||
|         fs.writeFileSync(path.join(__dirname, '../config/menu.json'), JSON.stringify(menuFile)); |  | ||||||
|             return true; |             return true; | ||||||
|     }catch(e){ |         }); | ||||||
|  |     }) | ||||||
|  |     .catch((err) => { | ||||||
|  |         console.log('Error creating new menu', err); | ||||||
|         return false; |         return false; | ||||||
|     } |     }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // delete a menu item
 | // delete a menu item
 | ||||||
| exports.deleteMenu = function(req, res, menuIndex){ | exports.deleteMenu = function(req, res, menuIndex){ | ||||||
|     let fs = require('fs'); |     const db = req.app.db; | ||||||
|     let path = require('path'); |     return exports.getMenu(db) | ||||||
|     let menuJson = '../config/menu.json'; |     .then((menu) => { | ||||||
|     let menuFile = require(menuJson); |         // Remove menu item
 | ||||||
| 
 |         menu.items.splice(menuIndex, 1); | ||||||
|     delete menuFile.items[menuIndex]; |         return db.menu.updateOne({}, {$set: {items: menu.items}}, {upsert: true}) | ||||||
| 
 |         .then(() => { | ||||||
|     // write file
 |  | ||||||
|     try{ |  | ||||||
|         fs.writeFileSync(path.join(__dirname, '../config/menu.json'), JSON.stringify(menuFile)); |  | ||||||
|             return true; |             return true; | ||||||
|     }catch(e){ |         }); | ||||||
|  |     }) | ||||||
|  |     .catch(() => { | ||||||
|         return false; |         return false; | ||||||
|     } |     }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // updates and existing menu item
 | // updates and existing menu item
 | ||||||
| exports.updateMenu = function(req, res){ | exports.updateMenu = function(req, res){ | ||||||
|     let fs = require('fs'); |     const db = req.app.db; | ||||||
|     let path = require('path'); |     return exports.getMenu(db) | ||||||
|     let menuJson = '../config/menu.json'; |     .then((menu) => { | ||||||
|     let menuFile = require(menuJson); |  | ||||||
| 
 |  | ||||||
|         // find menu item and update it
 |         // find menu item and update it
 | ||||||
|     let menuIndex = _.findIndex(menuFile.items, ['title', req.body.navId]); |         let menuIndex = _.findIndex(menu.items, ['title', req.body.navId]); | ||||||
|     menuFile.items[menuIndex].title = req.body.navMenu; |         menu.items[menuIndex].title = req.body.navMenu; | ||||||
|     menuFile.items[menuIndex].link = req.body.navLink; |         menu.items[menuIndex].link = req.body.navLink; | ||||||
| 
 |         return db.menu.updateOne({}, {$set: {items: menu.items}}, {upsert: true}) | ||||||
|     // write file
 |         .then(() => { | ||||||
|     try{ |  | ||||||
|         fs.writeFileSync(path.join(__dirname, '../config/menu.json'), JSON.stringify(menuFile)); |  | ||||||
|             return true; |             return true; | ||||||
|     }catch(e){ |         }); | ||||||
|  |     }) | ||||||
|  |     .catch(() => { | ||||||
|         return false; |         return false; | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | exports.sortMenu = function(menu){ | ||||||
|  |     if(menu && menu.items){ | ||||||
|  |         menu.items = _.sortBy(menu.items, 'order'); | ||||||
|  |         return menu; | ||||||
|     } |     } | ||||||
|  |     return{}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // orders the menu
 | ||||||
|  | exports.orderMenu = function(req, res){ | ||||||
|  |     const db = req.app.db; | ||||||
|  |     return exports.getMenu(db) | ||||||
|  |     .then((menu) => { | ||||||
|  |         // update the order
 | ||||||
|  |         for(let i = 0; i < req.body.navId.length; i++){ | ||||||
|  |             _.find(menu.items, ['title', req.body.navId[i]]).order = i; | ||||||
|  |         } | ||||||
|  |         return db.menu.updateOne({}, {$set: {items: menu.items}}, {upsert: true}) | ||||||
|  |         .then(() => { | ||||||
|  |             return true; | ||||||
|  |         }); | ||||||
|  |     }) | ||||||
|  |     .catch(() => { | ||||||
|  |         return false; | ||||||
|  |     }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| exports.getEmailTemplate = function(result){ | exports.getEmailTemplate = function(result){ | ||||||
|  | @ -360,36 +383,14 @@ exports.sendEmail = function(to, subject, body){ | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // orders the menu
 |  | ||||||
| exports.orderMenu = function(req, res){ |  | ||||||
|     let fs = require('fs'); |  | ||||||
|     let path = require('path'); |  | ||||||
|     let menuJson = '../config/menu.json'; |  | ||||||
|     let menuFile = require(menuJson); |  | ||||||
| 
 |  | ||||||
|     // update the order
 |  | ||||||
|     for(let i = 0; i < req.body.navId.length; i++){ |  | ||||||
|         _.find(menuFile.items, ['title', req.body.navId[i]]).order = i; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // write file
 |  | ||||||
|     try{ |  | ||||||
|         fs.writeFileSync(path.join(__dirname, '../config/menu.json'), JSON.stringify(menuFile)); |  | ||||||
|         return true; |  | ||||||
|     }catch(e){ |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // gets the correct type of index ID
 | // gets the correct type of index ID
 | ||||||
| exports.getId = function(id){ | exports.getId = function(id){ | ||||||
|     let ObjectID = require('mongodb').ObjectID; |  | ||||||
|     if(id){ |     if(id){ | ||||||
|         if(id.length !== 24){ |         if(id.length !== 24){ | ||||||
|             return id; |             return id; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return ObjectID(id); |     return ObjectId(id); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // run the DB query
 | // run the DB query
 | ||||||
|  | @ -496,7 +497,7 @@ exports.runIndexing = (app) => { | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| exports.testData = (db) => { | exports.testData = (db, app) => { | ||||||
|     db.products.count({}) |     db.products.count({}) | ||||||
|     .then((products) => { |     .then((products) => { | ||||||
|         if(products > 0){ |         if(products > 0){ | ||||||
|  | @ -505,9 +506,12 @@ exports.testData = (db) => { | ||||||
| 
 | 
 | ||||||
|         console.info(colors.cyan('No products, inserting test data')); |         console.info(colors.cyan('No products, inserting test data')); | ||||||
| 
 | 
 | ||||||
|         const testdata = fs.readFileSync('./bin/testdata.json', 'utf-8'); |         const testData = fs.readFileSync('./bin/testdata.json', 'utf-8'); | ||||||
|  |         const jsonData = JSON.parse(testData); | ||||||
|         return Promise.all([ |         return Promise.all([ | ||||||
|             db.products.insertMany(JSON.parse(testdata)) |             db.products.insertMany(jsonData.products), | ||||||
|  |             db.menu.insertOne(jsonData.menu), | ||||||
|  |             exports.runIndexing(app) | ||||||
|         ]) |         ]) | ||||||
|         .catch((err) => { |         .catch((err) => { | ||||||
|             console.info(colors.red('Error inserting test data. Check `/bin/testdata.json` is correctly formatted.', err)); |             console.info(colors.red('Error inserting test data. Check `/bin/testdata.json` is correctly formatted.', err)); | ||||||
|  |  | ||||||
|  | @ -4,12 +4,12 @@ const colors = require('colors'); | ||||||
| const _ = require('lodash'); | const _ = require('lodash'); | ||||||
| const common = require('./common'); | const common = require('./common'); | ||||||
| 
 | 
 | ||||||
| router.get('/payment/:orderId', (req, res, next) => { | router.get('/payment/:orderId', async (req, res, next) => { | ||||||
|     let db = req.app.db; |     let db = req.app.db; | ||||||
|     let config = common.getConfig(); |     let config = common.getConfig(); | ||||||
| 
 | 
 | ||||||
|     // render the payment complete message
 |     // render the payment complete message
 | ||||||
|     db.orders.findOne({_id: common.getId(req.params.orderId)}, (err, result) => { |     db.orders.findOne({_id: common.getId(req.params.orderId)}, async (err, result) => { | ||||||
|         if(err){ |         if(err){ | ||||||
|             console.info(err.stack); |             console.info(err.stack); | ||||||
|         } |         } | ||||||
|  | @ -23,12 +23,12 @@ router.get('/payment/:orderId', (req, res, next) => { | ||||||
|             messageType: common.clearSessionValue(req.session, 'messageType'), |             messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|             helpers: req.handlebars.helpers, |             helpers: req.handlebars.helpers, | ||||||
|             showFooter: 'showFooter', |             showFooter: 'showFooter', | ||||||
|             menu: common.getMenu() |             menu: common.sortMenu(await common.getMenu(db)) | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/checkout', (req, res, next) => { | router.get('/checkout', async (req, res, next) => { | ||||||
|     let config = common.getConfig(); |     let config = common.getConfig(); | ||||||
| 
 | 
 | ||||||
|     // if there is no items in the cart then render a failure
 |     // if there is no items in the cart then render a failure
 | ||||||
|  | @ -50,12 +50,11 @@ router.get('/checkout', (req, res, next) => { | ||||||
|         message: common.clearSessionValue(req.session, 'message'), |         message: common.clearSessionValue(req.session, 'message'), | ||||||
|         messageType: common.clearSessionValue(req.session, 'messageType'), |         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|         helpers: req.handlebars.helpers, |         helpers: req.handlebars.helpers, | ||||||
|         showFooter: 'showFooter', |         showFooter: 'showFooter' | ||||||
|         menu: common.getMenu() |  | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/pay', (req, res, next) => { | router.get('/pay', async (req, res, next) => { | ||||||
|     let config = common.getConfig(); |     let config = common.getConfig(); | ||||||
| 
 | 
 | ||||||
|     // if there is no items in the cart then render a failure
 |     // if there is no items in the cart then render a failure
 | ||||||
|  | @ -78,8 +77,7 @@ router.get('/pay', (req, res, next) => { | ||||||
|         message: common.clearSessionValue(req.session, 'message'), |         message: common.clearSessionValue(req.session, 'message'), | ||||||
|         messageType: common.clearSessionValue(req.session, 'messageType'), |         messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|         helpers: req.handlebars.helpers, |         helpers: req.handlebars.helpers, | ||||||
|         showFooter: 'showFooter', |         showFooter: 'showFooter' | ||||||
|         menu: common.getMenu() |  | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | @ -113,7 +111,7 @@ router.get('/product/:id', (req, res) => { | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             // show the view
 |             // show the view
 | ||||||
|             common.getImages(result._id, req, res, (images) => { |             common.getImages(result._id, req, res, async (images) => { | ||||||
|                 res.render(config.themeViews + 'product', { |                 res.render(config.themeViews + 'product', { | ||||||
|                     title: result.productTitle, |                     title: result.productTitle, | ||||||
|                     result: result, |                     result: result, | ||||||
|  | @ -129,7 +127,7 @@ router.get('/product/:id', (req, res) => { | ||||||
|                     messageType: common.clearSessionValue(req.session, 'messageType'), |                     messageType: common.clearSessionValue(req.session, 'messageType'), | ||||||
|                     helpers: req.handlebars.helpers, |                     helpers: req.handlebars.helpers, | ||||||
|                     showFooter: 'showFooter', |                     showFooter: 'showFooter', | ||||||
|                     menu: common.getMenu() |                     menu: common.sortMenu(await common.getMenu(db)) | ||||||
|                 }); |                 }); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|  | @ -240,6 +238,7 @@ router.post('/login_action', (req, res) => { | ||||||
| 
 | 
 | ||||||
| // search products
 | // search products
 | ||||||
| router.get('/search/:searchTerm/:pageNum?', (req, res) => { | router.get('/search/:searchTerm/:pageNum?', (req, res) => { | ||||||
|  |     let db = req.app.db; | ||||||
|     let searchTerm = req.params.searchTerm; |     let searchTerm = req.params.searchTerm; | ||||||
|     let productsIndex = req.app.productsIndex; |     let productsIndex = req.app.productsIndex; | ||||||
|     let config = common.getConfig(); |     let config = common.getConfig(); | ||||||
|  | @ -256,7 +255,7 @@ router.get('/search/:searchTerm/:pageNum?', (req, res) => { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // we search on the lunr indexes
 |     // we search on the lunr indexes
 | ||||||
|     getData(req, pageNum, {_id: {$in: lunrIdArray}}, (err, results) => { |     getData(req, pageNum, {_id: {$in: lunrIdArray}}, async (err, results) => { | ||||||
|         if(err){ |         if(err){ | ||||||
|             console.error(colors.red('Error searching for products', err)); |             console.error(colors.red('Error searching for products', err)); | ||||||
|         } |         } | ||||||
|  | @ -276,7 +275,7 @@ router.get('/search/:searchTerm/:pageNum?', (req, res) => { | ||||||
|             pageNum: pageNum, |             pageNum: pageNum, | ||||||
|             paginateUrl: 'search', |             paginateUrl: 'search', | ||||||
|             config: config, |             config: config, | ||||||
|             menu: common.getMenu(), |             menu: common.sortMenu(await common.getMenu(db)), | ||||||
|             helpers: req.handlebars.helpers, |             helpers: req.handlebars.helpers, | ||||||
|             showFooter: 'showFooter' |             showFooter: 'showFooter' | ||||||
|         }); |         }); | ||||||
|  | @ -285,6 +284,7 @@ router.get('/search/:searchTerm/:pageNum?', (req, res) => { | ||||||
| 
 | 
 | ||||||
| // search products
 | // search products
 | ||||||
| router.get('/category/:cat/:pageNum?', (req, res) => { | router.get('/category/:cat/:pageNum?', (req, res) => { | ||||||
|  |     let db = req.app.db; | ||||||
|     let searchTerm = req.params.cat; |     let searchTerm = req.params.cat; | ||||||
|     let productsIndex = req.app.productsIndex; |     let productsIndex = req.app.productsIndex; | ||||||
|     let config = common.getConfig(); |     let config = common.getConfig(); | ||||||
|  | @ -292,18 +292,16 @@ router.get('/category/:cat/:pageNum?', (req, res) => { | ||||||
| 
 | 
 | ||||||
|     let lunrIdArray = []; |     let lunrIdArray = []; | ||||||
|     productsIndex.search(searchTerm).forEach((id) => { |     productsIndex.search(searchTerm).forEach((id) => { | ||||||
|         lunrIdArray.push(common.getId(id.ref)) |         lunrIdArray.push(common.getId(id.ref)); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     let menuLink = _.find(common.getMenu().items, (obj) => { return obj.link === searchTerm; }); |  | ||||||
| 
 |  | ||||||
|     let pageNum = 1; |     let pageNum = 1; | ||||||
|     if(req.params.pageNum){ |     if(req.params.pageNum){ | ||||||
|         pageNum = req.params.pageNum; |         pageNum = req.params.pageNum; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // we search on the lunr indexes
 |     // we search on the lunr indexes
 | ||||||
|     getData(req, pageNum, {_id: {$in: lunrIdArray}}, (err, results) => { |     getData(req, pageNum, {_id: {$in: lunrIdArray}}, async (err, results) => { | ||||||
|         if(err){ |         if(err){ | ||||||
|             console.error(colors.red('Error getting products for category', err)); |             console.error(colors.red('Error getting products for category', err)); | ||||||
|         } |         } | ||||||
|  | @ -321,10 +319,10 @@ router.get('/category/:cat/:pageNum?', (req, res) => { | ||||||
|             productsPerPage: numberProducts, |             productsPerPage: numberProducts, | ||||||
|             totalProductCount: results.totalProducts, |             totalProductCount: results.totalProducts, | ||||||
|             pageNum: pageNum, |             pageNum: pageNum, | ||||||
|             menuLink: menuLink, |             menuLink: _.find(common.sortMenu(await common.getMenu(db)).items, (obj) => { return obj.link === searchTerm; }), | ||||||
|             paginateUrl: 'category', |             paginateUrl: 'category', | ||||||
|             config: config, |             config: config, | ||||||
|             menu: common.getMenu(), |             menu: common.sortMenu(await common.getMenu(db)), | ||||||
|             helpers: req.handlebars.helpers, |             helpers: req.handlebars.helpers, | ||||||
|             showFooter: 'showFooter' |             showFooter: 'showFooter' | ||||||
|         }); |         }); | ||||||
|  | @ -365,10 +363,11 @@ router.get('/sitemap.xml', (req, res, next) => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/page/:pageNum', (req, res, next) => { | router.get('/page/:pageNum', (req, res, next) => { | ||||||
|  |     let db = req.app.db; | ||||||
|     let config = common.getConfig(); |     let config = common.getConfig(); | ||||||
|     let numberProducts = config.productsPerPage ? config.productsPerPage : 6; |     let numberProducts = config.productsPerPage ? config.productsPerPage : 6; | ||||||
| 
 | 
 | ||||||
|     getData(req, req.params.pageNum, {}, (err, results) => { |     getData(req, req.params.pageNum, {}, async (err, results) => { | ||||||
|         if(err){ |         if(err){ | ||||||
|             console.error(colors.red('Error getting products for page', err)); |             console.error(colors.red('Error getting products for page', err)); | ||||||
|         } |         } | ||||||
|  | @ -388,7 +387,7 @@ router.get('/page/:pageNum', (req, res, next) => { | ||||||
|             paginateUrl: 'page', |             paginateUrl: 'page', | ||||||
|             helpers: req.handlebars.helpers, |             helpers: req.handlebars.helpers, | ||||||
|             showFooter: 'showFooter', |             showFooter: 'showFooter', | ||||||
|             menu: common.getMenu() |             menu: common.sortMenu(await common.getMenu(db)) | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
|  | @ -400,7 +399,7 @@ router.get('/:page?', (req, res, next) => { | ||||||
| 
 | 
 | ||||||
|     // if no page is specified, just render page 1 of the cart
 |     // if no page is specified, just render page 1 of the cart
 | ||||||
|     if(!req.params.page){ |     if(!req.params.page){ | ||||||
|         getData(req, 1, {}, (err, results) => { |         getData(req, 1, {}, async (err, results) => { | ||||||
|             if(err){ |             if(err){ | ||||||
|                 console.error(colors.red('Error getting products for page', err)); |                 console.error(colors.red('Error getting products for page', err)); | ||||||
|             } |             } | ||||||
|  | @ -420,7 +419,7 @@ router.get('/:page?', (req, res, next) => { | ||||||
|                 paginateUrl: 'page', |                 paginateUrl: 'page', | ||||||
|                 helpers: req.handlebars.helpers, |                 helpers: req.handlebars.helpers, | ||||||
|                 showFooter: 'showFooter', |                 showFooter: 'showFooter', | ||||||
|                 menu: common.getMenu() |                 menu: common.sortMenu(await common.getMenu(db)) | ||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
|     }else{ |     }else{ | ||||||
|  | @ -429,7 +428,7 @@ router.get('/:page?', (req, res, next) => { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         // lets look for a page
 |         // lets look for a page
 | ||||||
|         db.pages.findOne({pageSlug: req.params.page, pageEnabled: 'true'}, (err, page) => { |         db.pages.findOne({pageSlug: req.params.page, pageEnabled: 'true'}, async (err, page) => { | ||||||
|             if(err){ |             if(err){ | ||||||
|                 console.error(colors.red('Error getting page', err)); |                 console.error(colors.red('Error getting page', err)); | ||||||
|             } |             } | ||||||
|  | @ -446,7 +445,7 @@ router.get('/:page?', (req, res, next) => { | ||||||
|                     metaDescription: common.getConfig().cartTitle + ' - ' + page, |                     metaDescription: common.getConfig().cartTitle + ' - ' + page, | ||||||
|                     helpers: req.handlebars.helpers, |                     helpers: req.handlebars.helpers, | ||||||
|                     showFooter: 'showFooter', |                     showFooter: 'showFooter', | ||||||
|                     menu: common.getMenu() |                     menu: common.sortMenu(await common.getMenu(db)) | ||||||
|                 }); |                 }); | ||||||
|             }else{ |             }else{ | ||||||
|                 res.status(404).render('error', { |                 res.status(404).render('error', { | ||||||
|  | @ -455,9 +454,8 @@ router.get('/:page?', (req, res, next) => { | ||||||
|                     message: '404 Error - Page not found', |                     message: '404 Error - Page not found', | ||||||
|                     helpers: req.handlebars.helpers, |                     helpers: req.handlebars.helpers, | ||||||
|                     showFooter: 'showFooter', |                     showFooter: 'showFooter', | ||||||
|                     menu: common.getMenu() |                     menu: common.sortMenu(await common.getMenu(db)) | ||||||
|                 } |                 }); | ||||||
|                 ); |  | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
|                 <th>Link</th> |                 <th>Link</th> | ||||||
|                 <th></th> |                 <th></th> | ||||||
|                 <tbody id="draggable_list"> |                 <tbody id="draggable_list"> | ||||||
|                     {{#each menu}} |                     {{#each menu.items}} | ||||||
|                         <tr class="drag-row"> |                         <tr class="drag-row"> | ||||||
|                             <form method="post" action="/admin/settings/menu/update"> |                             <form method="post" action="/admin/settings/menu/update"> | ||||||
|                             <input type="hidden" class="navId" name="navId" value="{{title}}"> |                             <input type="hidden" class="navId" name="navId" value="{{title}}"> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue