;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*- (declaim (optimize (speed 0) (safety 3) (debug 3))) (in-package :bogenherr) (defclass contact-us-service (rest-service) () (:documentation "")) (defclass contact-us/view-service (contact-us-service) ((content :initarg :content :initform nil :accessor content) (form :initarg :form :initform nil :accessor form) (location-p :initform nil)) (:documentation "")) (defun contact-us-form () (make-form "contact-us-form" nil t `((:name "first_name" :label "First Name" :field-type "text" :required "required") (:name "last_name" :label "Last Name" :field-type "text" :required "required") (:name "email" :label "Email" :field-type "text" :required "required") (:name "phone" :label "Phone" :field-type "text") (:name "comments" :label "Message" :field-type "textarea" :required "required") (:label "Submit" :field-type "button" :onclick "on_contact_us_email_submit_clicked()")))) (defun contact-us-json () (with-noauth (instance contact-us-service) t)) (defun contact-us-view-json () (with-noauth (instance contact-us/view-service) (setf (form instance) (contact-us-form)))) (defun contact-us-email-json (first_name last_name email phone comments) (declare (special first_name last_name email phone comments)) (with-noauth (instance contact-us/email-servicea) (with-bogenherr-database (let ((contact-pkg (make-instance 'contact-pkg)) (contact-us-post (make-instance 'contact-us-post))) (loop for param in (sb-introspect:function-lambda-list #'contact-us-email-json) do (setf (slot-value contact-us-post param) (symbol-value param))) (insert-contact-us-post contact-pkg contact-us-post) (handler-case (let ((text-message (format nil "A contact-us form submission was received.~%~%Name: ~a ~a~%Email: ~a~%Phone: ~a~%~%Message: ~a~%" (first_name contact-us-post) (last_name contact-us-post) (email contact-us-post) (phone contact-us-post) (comments contact-us-post))) (html-message (org-ckons-http::html5 `(html ((p) "A contact-us form submission was received.") ((p) ,(format nil "Name: ~a ~a
Email: ~a
Phone: ~a" (first_name contact-us-post) (last_name contact-us-post) (email contact-us-post) (phone contact-us-post))) ((p) ,(format nil "Message: ~a" (comments contact-us-post))))))) (org-ckons-core::sendmail (mail-mx *webapp*) (mail-postmaster *webapp*) (mail-info *webapp*) (format nil "~a contact-us form" (name *webapp*)) text-message :html-message html-message :reply-to (mail-postmaster *webapp*) :ssl (mail-ssl *webapp*) :authentication (mail-authentication *webapp*)) (setf (message instance) "Form submitted successfully.")) (error (e) (declare (ignore e)) (setf (errormsg instance) "Error submitting form."))))))) (define-endpoint ("/contact-us" :method :get) () contact-us-json) (define-endpoint ("/contact-us/view" :method :get) () contact-us-view-json) (define-endpoint ("/contact-us/email" :method :post) (&post (first_name :parameter-type 'string) (last_name :parameter-type 'string) (email :parameter-type 'string) (phone :parameter-type 'string) (comments :parameter-type 'string)) contact-us-email-json first_name last_name email phone comments)