f8bdb38d4f2597965ad1e4add96988e6d34bf055
[ndcode_site.git] / contact / index.html.jst
1 let querystring = require('querystring')
2 let stream_buffers = require('stream-buffers')
3 let XDate = require('xdate')
4
5 return async env => {
6   let breadcrumbs = await _require('/breadcrumbs.jst')
7   let globals = await env.site.get_json('/_config/globals.json')
8   let navbar = await _require('/navbar.jst')
9
10   await navbar(
11     env,
12     async _out => {},
13     async _out => {
14       await breadcrumbs(env, _out)
15
16       if (env.request.method == 'POST') {
17         let write_stream = new stream_buffers.WritableStreamBuffer()
18         let data = new Promise(
19           (resolve, reject) => {
20             write_stream.
21             on('finish', () => {resolve(write_stream.getContents())}).
22             on('error', () => {reject()})
23           }
24         )
25         env.request.pipe(write_stream)
26         let query = querystring.parse((await data).toString())
27         console.log('received contact form:', query.email)
28
29         // save the form contents in a dated logfile, so that we can
30         // recover manually if the email doesn't send for some reason
31         date = new XDate()
32         query.date = date.toUTCString()
33
34         await env.site.ensure_dir('/_logs')
35         env.site.modify_json(
36           `/_logs/contact_${date.toUTCString('yyyyMMdd')}.json`,
37           [],
38           async result => {result.value.push(query)}
39         )
40
41         // send email (asynchronously)
42         let emailjs_contact = await env.site.get_emailjs(
43           '/_config/email_contact.json'
44         )
45         emailjs_contact.send(
46           {
47             from: globals.contact_from,
48             'reply-to':
49               `${query.first_name} ${query.last_name} <${query.email}>`,
50             to: globals.contact_to,
51             subject:
52               Object.prototype.hasOwnProperty.call(query, 'company') ?
53               'Enquiry: ' + query.company :
54               'Enquiry',
55             text: query.message
56           },
57           (err, message) => {
58             if (err)
59               console.error(err.stack || err.message)
60             else
61               console.log('sent contact email:', query.email)
62           }
63         ) // ignore returned promise
64
65         p {'Thanks! We\'ll be in touch as soon as we can.'}
66       }
67       else {
68         p {'Do you require more information or consulting assistance with integrating the projects on this site? We\'d love to hear from you.'}
69
70         form#contact-form(method="post" action="index.html" role="form") {
71           div.row {
72             div.col-md-6 {
73               div.form-group {
74                 label(for="contact_form_first_name") {'First name *'}
75                 input.form-control#contact_form_first_name(type="text" name="first_name" placeholder="Please enter your first name" required="required" data-error="First name is required.") {}
76                 div.help-block.with-errors {}
77               }
78             }
79             div.col-md-6 {
80               div.form-group {
81                 label(for="contact_form_last_name") {'Last name *'}
82                 input.form-control#contact_form_last_name(type="text" name="last_name" placeholder="Please enter your last name" required="required" data-error="Last name is required.") {}
83                 div.help-block.with-errors {}
84               }
85             }
86           }
87           div.row {
88             div.col-md-6 {
89               div.form-group {
90                 label(for="contact_form_company") {'Company'}
91                 input.form-control#contact_form_company(type="text" name="company" placeholder="Please enter your company") {}
92                 div.help-block.with-errors {}
93               }
94             }
95             div.col-md-6 {
96               div.form-group {
97                 label(for="contact_form_email") {'Email *'}
98                 input.form-control#contact_form_email(type="email" name="email" placeholder="Please enter your email" required="required" data-error="Valid email is required.") {}
99                 div.help-block.with-errors {}
100               }
101             }
102           }
103           div.row {
104             div.col-md-12 {
105               div.form-group {
106                 label(for="contact_form_message") {'Message *'}
107                 textarea.form-control#contact_form_message(name="message" placeholder="Please explain your application" rows="4" required="required" data-error="Please, leave us a message.") {}
108                 div.help-block.with-errors {}
109               }
110             }
111           }
112           p {} // fix this later
113           div.row {
114             div.col-md-12 {
115               input.btn.btn-success.btn-send(type="submit" value="Send message") {}
116             }
117           }
118           p {} // fix this later
119           div.row {
120             div.col-md-12 {
121               p.text-muted {
122                 strong {'*'}
123                 'These fields are required.'
124                 //'Contact form template by '
125                 //a(href="https://bootstrapious.com/p/how-to-build-a-working-bootstrap-contact-form" target="_blank") {'Bootstrapious'}
126                 //'.'
127               }
128             }
129           }
130         }
131       }
132     },
133     async _out => {}
134   )
135 }