From 06efc1d1267a1a786d3f4a33a9a3a69030070e2e Mon Sep 17 00:00:00 2001 From: Josh Sherman Date: Sun, 7 Sep 2008 18:11:51 +0000 Subject: [PATCH] Ported the contact form to the new naming conventions for ajax, added some stuff to the ribbon config, tweaked the contoller and added some new validation to the ajax class. git-svn-id: http://svn.cleancode.org/svn/pickles@42 4d10bc64-7434-11dc-a737-d2d0f8310089 --- classes/Controller.php | 1 - config/ribbonnutrition.com.xml | 4 +- smarty/functions/function.contact_form.php | 2 +- static/js/ajax.js | 78 +++++++++++++++++----- 4 files changed, 64 insertions(+), 21 deletions(-) diff --git a/classes/Controller.php b/classes/Controller.php index b4183e4..9062fea 100755 --- a/classes/Controller.php +++ b/classes/Controller.php @@ -67,7 +67,6 @@ class Controller extends Object { $this->model = new Model(); } - if ($this->model->get('auth') == false) { $this->model->set('auth', $this->config->get('behavior', 'auth')); } diff --git a/config/ribbonnutrition.com.xml b/config/ribbonnutrition.com.xml index 2c17ad9..01f17eb 100755 --- a/config/ribbonnutrition.com.xml +++ b/config/ribbonnutrition.com.xml @@ -14,8 +14,8 @@ false - News - FAQs + News + FAQs Logout diff --git a/smarty/functions/function.contact_form.php b/smarty/functions/function.contact_form.php index da57de2..2999c54 100644 --- a/smarty/functions/function.contact_form.php +++ b/smarty/functions/function.contact_form.php @@ -10,7 +10,7 @@ function smarty_function_contact_form($params, &$smarty) { Message:


- +
'; diff --git a/static/js/ajax.js b/static/js/ajax.js index 4207430..8f939fa 100644 --- a/static/js/ajax.js +++ b/static/js/ajax.js @@ -13,11 +13,19 @@ function getForm(form) { case 'text': case 'textarea': // Check if it's required - if (element.title == 'required' && element.value == '') { + if (element.title == 'required' && trim(element.value) == '') { alert('Error: The ' + element.name.replace('_', ' ') + ' field is required.'); element.focus(); return false; } + // If the field is named email, check it's validity + else if (element.name == 'email') { + if (element.value.match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i) == null) { + alert('Error: The email address entered is not valid.'); + element.focus(); + return false; + } + } params += '&' + element.name + '=' + encodeURI(element.value); break; @@ -30,7 +38,7 @@ function getForm(form) { break; case 'select-one': - params += '&' + element.name + "=" + element.options[element.selectedIndex].value; + params += '&' + element.name + "=" + element.options[element.selectedIndex].value; break; } } @@ -58,14 +66,29 @@ function createRequest() { } } -function ajaxSubmit(form, customHandler, beforeOrAfter) { +function ajaxRequest(htmlElement, customHandler, beforeOrAfter, url) { var params = ''; var customHandler = (customHandler == null) ? null : customHandler; var beforeOrAfter = (beforeOrAfter == null) ? 'before' : beforeOrAfter; + var url = (url == null) ? null : url; - if (params = getForm(form)) { + if (typeof htmlElement.value == 'undefined') { + params = getForm(htmlElement); + method = htmlElement.method; + action = htmlElement.action; + } + else { + params = 'id=' + htmlElement.value; + method = 'POST'; + action = url; + + // @todo this may eventually need to be a loop that keeps going up until it's at a form tag? + htmlElement = htmlElement.parentNode; + } + + if (params) { createRequest(); - request.open(form.method, form.action, true); + request.open(method, action, true); request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.setRequestHeader("Content-length", params.length); @@ -73,28 +96,49 @@ function ajaxSubmit(form, customHandler, beforeOrAfter) { request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { - var responseObject = eval( "(" + request.responseText + ")" ); var responseElement = document.createElement('div'); + responseElement.id = 'ajaxResponse'; - if (customHandler) { - responseElement = window[customHandler](responseObject, responseElement); + if (request.responseText.substring(0, 1) == '{' && request.responseText.substring(request.responseText.length - 1) == '}') { + var responseObject = eval( "(" + request.responseText + ")" ); + + if (document.getElementById(responseElement.id) != null) { + htmlElement.removeChild(document.getElementById(responseElement.id)); + } + + if (customHandler) { + responseElement = window[customHandler](responseObject, responseElement); + } + else { + var responseMessage = document.createTextNode(responseObject.message); + responseElement.className = responseObject.type; + responseElement.appendChild(responseMessage); + } } else { - var responseMessage = document.createTextNode(responseObject.message); - responseElement.className = responseObject.type; - responseElement.appendChild(responseMessage); + responseElement.innerHTML = request.responseText; } - - if (document.getElementById('ajaxResponse') != null) { - form.removeChild(document.getElementById('ajaxResponse')); + + if (document.getElementById(responseElement.id) != null) { + htmlElement.removeChild(document.getElementById(responseElement.id)); } - responseElement.id = 'ajaxResponse'; - form.insertBefore(responseElement, (beforeOrAfter == 'before') ? form.firstChild : form.lastChild); - + htmlElement.insertBefore(responseElement, (beforeOrAfter == 'before') ? htmlElement.firstChild : htmlElement.lastChild); } } request.send(params); } } + +function trim(str) { + str = str.replace(/^\s+/, ''); + for (var i = str.length - 1; i >= 0; i--) { + if (/\S/.test(str.charAt(i))) { + str = str.substr(0, i + 1); + break; + } + } + + return str; +}