/* Copyright (c) 2009 Yahoo! Inc. All rights reserved. The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license */ package { /** * * insertMessage.php * * */ import fl.controls.Button; import fl.controls.TextArea; import fl.controls.TextInput; // Add Adobe as3Validators into proper class path. // http://code.google.com/p/flash-validators/ import com.adobe.as3Validators.as3DataValidation; import com.yahoo.astra.containers.formClasses.FormItem; import com.yahoo.astra.containers.formClasses.FormLayoutStyle; import com.yahoo.astra.events.FormDataManagerEvent; import com.yahoo.astra.fl.containers.Form; import com.yahoo.astra.fl.managers.AlertManager; import com.yahoo.astra.fl.utils.FlValueParser; import com.yahoo.astra.managers.FormDataManager; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.text.TextFormat; public class SendFormData extends Sprite { //-------------------------------------- // Constructor //-------------------------------------- public function SendFormData() { init(); } //-------------------------------------- // Properties //-------------------------------------- private var myForm : Form; private var whiteTextFormat : TextFormat; private var yellowTextFormat : TextFormat; private var nameInput : TextInput; private var emailInput : TextInput; private var websiteInput : TextInput; private var commentInput : TextArea; private var submitButton : Button; private var formDataManager : FormDataManager; //-------------------------------------- // Private Methods //-------------------------------------- private function init() : void { initUI(); initForm(); initData(); } private function initUI() : void { whiteTextFormat = new TextFormat("Chalkboard", 11, 0xffffff); yellowTextFormat = new TextFormat("Chalkboard", 11, 0xFFFFBF); nameInput = makeTextInput(); emailInput = makeTextInput(); websiteInput = makeTextInput(); websiteInput.text = "http://"; commentInput = new TextArea(); commentInput.width = 200; commentInput.height = 100; commentInput.setStyle("textFormat", whiteTextFormat); commentInput.setStyle("upSkin", "darkGrayBock"); commentInput.setStyle("focusRectSkin", new yellowFocusRectSkin()); submitButton = new Button(); submitButton.setStyle("textFormat", yellowTextFormat); submitButton.width = 200; submitButton.label = "Submit Comment"; } private function initForm() : void { myForm = new Form("Leave a comment"); myForm.autoSize = true; // myForm.horizontalGap = 16; myForm.setStyle("skin", "grayBlock"); myForm.setStyle("indicatorSkin", "yellowDot"); myForm.setStyle("headTextFormat", yellowTextFormat); myForm.setStyle("instructionTextFormat", whiteTextFormat); myForm.setStyle("textFormat", whiteTextFormat); myForm.indicatorLocation = FormLayoutStyle.INDICATOR_RIGHT; myForm.paddingTop = myForm.paddingBottom = myForm.paddingLeft = myForm.paddingRight = 20; var asterisk : MovieClip = new yellowDot(); var asteriskMC : Sprite = new Sprite(); asterisk.x = asterisk.width / 2; asterisk.y = 10; asteriskMC.addChild(asterisk); myForm.subFormHeading(asteriskMC, " is required field."); // Attach Form on the stage. myForm.move(10, 10); this.addChild(myForm); } private function initData() : void { // Init and Attach FormDataManager to Form to collect user input data. formDataManager = new FormDataManager(FlValueParser); formDataManager.functionValidationPassed = handlerValidationPassed; formDataManager.functionValidationFailed = handlerValidationFailed; formDataManager.addTrigger(submitButton, handlerDataCollectionSuccess, handlerDataCollectionFail); myForm.formDataManager = formDataManager; // Init validator to be used. var validator : as3DataValidation = new as3DataValidation(); // Init data array to set dataSource. var myFormDataArr : Array = [{label:"Name", items:nameInput, skin:new darkestBlock(), id:"name", source:nameInput}, {label:"Email", items:emailInput, labelTextFormat:yellowTextFormat, skin:new darkestBlock(), id:"email", instructionText :"Your email address will not be saved.", source:emailInput, required:true, validator:validator.isEmail}, {label:"website", items:websiteInput, skin:new darkestBlock(), id:"website", source:websiteInput}, {label:"Comment", items:commentInput, labelTextFormat:yellowTextFormat, skin:new darkestBlock(), required:true, id:"message", source:commentInput, validator:validator.isNotEmpty, errorString:"the comment field is empty."}, {label:"", items:submitButton}]; myForm.dataSource = myFormDataArr; } //---------------------------------- //--------- event handler----------- //---------------------------------- private function handlerValidationPassed(e : FormDataManagerEvent) : void { if(e.target is FormItem) { var formItem : FormItem = e.target as FormItem; if(formItem.requiredIndicator) formItem.requiredIndicator.visible = false; } } private function handlerValidationFailed(e : FormDataManagerEvent) : void { if(e.target is FormItem) { var formItem : FormItem = e.target as FormItem; if(formItem.requiredIndicator) formItem.requiredIndicator.visible = true; } } //---------------------------------- private function handlerDataCollectionSuccess(e : FormDataManagerEvent) : void { submitButton.enabled = false; var url : String = "yourServer/insertMessage.php"; var variables : URLVariables = new URLVariables(); var resultTxt : String = ""; for (var i:String in e.collectedData) { var val : Object = e.collectedData[i]; // Hide email address. just save id from email address. if(i == "email") { var emailStr : String = val.toString(); variables[i] = emailStr.substring(emailStr.indexOf("@"), -1) + "@***"; } else { variables[i] = val; } resultTxt += i + " : " + val.toString() + "\n\n"; } var request : URLRequest = new URLRequest(url); request.data = variables; var myLoader : URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, completeHandler); myLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); try { myLoader.load(request); } catch (error : Error) { trace("Unable to load requested document."); } trace("resultTxt: ", resultTxt); } private function ioErrorHandler(event : IOErrorEvent) : void { AlertManager.createAlert(this, "Set your url first.", "Unable to load requested document."); } private function handlerDataCollectionFail(e : FormDataManagerEvent) : void { var resultTxt : String = ""; for (var i:String in FormDataManager.failedData) { resultTxt += i + " : " + FormDataManager.failedData[i] + "\n\n"; } AlertManager.createAlert(this, resultTxt, "Problems with your form."); } private function completeHandler(event : Event) : void { var loader : URLLoader = URLLoader(event.target); var dataStr : String = loader.data.toString(); var errStr : String = dataStr.substr(dataStr.lastIndexOf("errorcode=") + 10, 1); var alertMsg : String = ""; switch(errStr) { case "0": alertMsg = "Thanks for your comment."; break; case "1": alertMsg = "Can not connect to server."; break; case "2": alertMsg = "Can not find database."; case "3": var msg : String = dataStr.substr(dataStr.lastIndexOf("msg=") + 4); alertMsg = (msg) ? msg : "Error in your SQL syntax"; break; } AlertManager.createAlert(this, alertMsg, "Submitted"); } private function makeTextInput() : TextInput { var TInput : TextInput = new TextInput(); TInput.maxChars = 35; TInput.width = 200; TInput.setStyle("upSkin", "darkGrayBock"); TInput.setStyle("textFormat", whiteTextFormat); TInput.setStyle("focusRectSkin", new yellowFocusRectSkin()); return TInput; } } }