87 lines
		
	
	
		
			No EOL
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			No EOL
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const passport = require('../../lib/passport');
 | |
| const lists = require('../../models/lists');
 | |
| const forms = require('../../models/forms');
 | |
| const fields = require('../../models/fields');
 | |
| const settings = require('../../models/settings');
 | |
| const tools = require('../../lib/tools');
 | |
| const contextHelpers = require('../../lib/context-helpers');
 | |
| 
 | |
| const router = require('../../lib/router-async').create();
 | |
| const {castToInteger} = require('../../lib/helpers');
 | |
| 
 | |
| 
 | |
| router.postAsync('/forms-table', passport.loggedIn, async (req, res) => {
 | |
|     return res.json(await forms.listDTAjax(req.context, req.body));
 | |
| });
 | |
| 
 | |
| router.getAsync('/forms/:formId', passport.loggedIn, async (req, res) => {
 | |
|     const entity = await forms.getById(req.context, castToInteger(req.params.formId));
 | |
|     entity.hash = forms.hash(entity);
 | |
|     return res.json(entity);
 | |
| });
 | |
| 
 | |
| router.postAsync('/forms', passport.loggedIn, passport.csrfProtection, async (req, res) => {
 | |
|     return res.json(await forms.create(req.context, req.body));
 | |
| });
 | |
| 
 | |
| router.putAsync('/forms/:formId', passport.loggedIn, passport.csrfProtection, async (req, res) => {
 | |
|     const entity = req.body;
 | |
|     entity.id = castToInteger(req.params.formId);
 | |
| 
 | |
|     await forms.updateWithConsistencyCheck(req.context, entity);
 | |
|     return res.json();
 | |
| });
 | |
| 
 | |
| router.deleteAsync('/forms/:formId', passport.loggedIn, passport.csrfProtection, async (req, res) => {
 | |
|     await forms.remove(req.context, castToInteger(req.params.formId));
 | |
|     return res.json();
 | |
| });
 | |
| 
 | |
| router.postAsync('/forms-validate', passport.loggedIn, async (req, res) => {
 | |
|     return res.json(await forms.serverValidate(req.context, req.body));
 | |
| });
 | |
| 
 | |
| router.postAsync('/forms-preview', passport.loggedIn, passport.csrfProtection, async (req, res) => {
 | |
|     function sortAndFilterCustomFieldsBy(key) {
 | |
|         data.customFields = data.customFields.filter(fld => fld[key] !== null);
 | |
|         data.customFields.sort((a, b) => a[key] - b[key]);
 | |
|     }
 | |
| 
 | |
|     const formKey = req.body.formKey;
 | |
|     const listId = req.body.listId;
 | |
| 
 | |
|     const data = {};
 | |
| 
 | |
|     const list = await lists.getById(req.context, listId);
 | |
|     data.title = list.name;
 | |
|     data.cid = list.cid;
 | |
| 
 | |
|     data.isWeb = true;
 | |
|     data.customFields = await fields.forHbs(req.context, listId, {});
 | |
| 
 | |
|     const configItems = await settings.get(contextHelpers.getAdminContext(), ['pgpPrivateKey']);
 | |
|     data.hasPubkey = !!configItems.pgpPrivateKey;
 | |
| 
 | |
|     data.formInputStyle = req.body.formInputStyle;
 | |
| 
 | |
|     if (formKey === 'web_subscribe') {
 | |
|         sortAndFilterCustomFieldsBy('order_subscribe');
 | |
|     } else if (formKey === 'web_manage') {
 | |
|         sortAndFilterCustomFieldsBy('order_manage');
 | |
|     }
 | |
| 
 | |
|     const tmpl = {
 | |
|         template: req.body.template,
 | |
|         layout: req.body.layout,
 | |
|         type: 'mjml'
 | |
|     };
 | |
| 
 | |
|     const htmlRenderer = await tools.getTemplate(tmpl, req.locale);
 | |
| 
 | |
|     return res.json({content: htmlRenderer(data)});
 | |
| });
 | |
| 
 | |
| 
 | |
| module.exports = router; |