Index: lams_flash/src/central/flex/CloudWizard/src/CloudWizard.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/CloudWizard.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/CloudWizard.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_flash/src/central/flex/CloudWizard/src/assets/images/ajax-loader-big.swf =================================================================== diff -u Binary files differ Index: lams_flash/src/central/flex/CloudWizard/src/assets/styles/main.css =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/assets/styles/main.css (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/assets/styles/main.css (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,59 @@ +/* CSS file */ +Application { + backgroundColor: #FFFFFF; + themeColor: #0087e5; +} + +Alert { + backgroundColor: #FFFFFF; + color: #000000; +} + + +Panel { + borderColor: #6abcec; + borderThicknessLeft: 1; + borderThicknessRight: 1; + borderThicknessBottom: 1; + borderAlpha: 1; + + paddingTop: 0; + paddingLeft: 0; + paddingRight: 0; + paddingBottom: 0; + + highlightAlphas: 0.67, 0; + headerColors: #000000, #0087e5; + + titleStyleName: "myPanelStyle"; +} + +Wizard { + horizontalAlign : center; +} + +.mainBody { + backgroundColor: #FFFFFF; + paddingTop: 20; + horizontalAlign : center; +} + +Form, Label, TextInput { + color: #000000; + font-weight: normal; +} + +FormItem, List { + font-weight: bold; + text-align: left; +} + +.myPanelStyle { + color: #FFFFFF; +} + +.panelText { + color: #000000; + font-weight: none; + text-align: left; +} Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/business/WizardManager.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/business/WizardManager.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/business/WizardManager.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,199 @@ +package org.lamsfoundation.lams.business +{ + import flash.events.Event; + import flash.events.EventDispatcher; + import flash.external.*; + import flash.utils.clearInterval; + import flash.utils.setInterval; + + import mx.collections.ArrayCollection; + import mx.rpc.Fault; + + import org.lamsfoundation.lams.common.dictionary.XMLDictionaryRegistry; + import org.lamsfoundation.lams.events.WizardErrorEvent; + import org.lamsfoundation.lams.vos.Lesson; + import org.lamsfoundation.lams.vos.WorkspaceItem; + + public class WizardManager extends EventDispatcher + { + public var READ_ACCESS:Number = 1; + public var MEMBERSHIP_ACCESS:Number = 2; + public var OWNER_ACCESS:Number = 3; + public var NO_ACCESS:Number = 4; + + /*-.........................................Properties..........................................*/ + private var _dictionaryRegistry:XMLDictionaryRegistry; + + // lesson tab + private var _selectedResource:WorkspaceItem; + private var _workspaceRoot:WorkspaceItem; + + // learners tab + private var _learners:ArrayCollection; + private var _staff:ArrayCollection; + private var _usersLoaded:Boolean; + + private var _lessonID:uint; + private var _initializedLesson:Lesson; + + private var _lessonInstances:Array; + private var _xmppRoomCount:uint = 0; + + private var closeInterval:uint = 0; + + /*-.........................................Constructor..........................................*/ + public function WizardManager() + { + _dictionaryRegistry = new XMLDictionaryRegistry(new XML()); + + setLearners(new ArrayCollection()); + setStaff(new ArrayCollection()); + + _lessonInstances = new Array(); + + _usersLoaded = false; + } + + /*-.........................................Setters and Getters..........................................*/ + + [Bindable (event="workspaceRootChanged")] + public function get workspaceRoot():WorkspaceItem + { + return _workspaceRoot; + } + + [Bindable (event="learnersChanged")] + public function get learners():ArrayCollection + { + return _learners; + } + + [Bindable (event="staffChanged")] + public function get staff():ArrayCollection + { + return _staff; + } + + [Bindable (event="usersLoadedChanged")] + public function get usersLoaded():Boolean + { + return _usersLoaded; + } + + [Bindable (event="lessonIDChanged")] + public function get lessonID():uint + { + return _lessonID; + } + + [Bindable (event="lessonInstancesChanged")] + public function get lessonInstances():Array + { + return _lessonInstances; + } + + [Bindable (event="xxmpRoomCreated")] + public function get xxmpRoomCount():uint + { + return _xmppRoomCount; + } + + [Bindable (event="dictionaryUpdated")] + public function get dictionaryRegistry():XMLDictionaryRegistry + { + return _dictionaryRegistry; + } + + /*-.........................................Methods..........................................*/ + + public function initWorkspace():WorkspaceItem { + var item:WorkspaceItem = new WorkspaceItem(); + item.populate({name: "root", description: "root node", resourceID: -1, resourceType:WorkspaceItem.RT_FOLDER}); + + _workspaceRoot = item; + + dispatchEvent(new Event("workspaceRootChanged")); + + return workspaceRoot; + } + + public function setFolderContents(contents:Object, folder:WorkspaceItem):void { + for each(var content:Object in contents.contents as ArrayCollection) { + var newItem:WorkspaceItem = new WorkspaceItem(); + newItem.populate(content); + newItem.parentWorkspaceFolderID = folder.workspaceFolderID; + + folder.children.addItem(newItem); + } + } + + public function setUsersLoaded(value:Boolean):void { + _usersLoaded = value; + + dispatchEvent(new Event("usersLoadedChanged")); + } + + public function setLesson(newlessonID:uint, newLesson:Lesson):void { + _lessonID = newlessonID; + _initializedLesson = newLesson; + + if(_lessonInstances.length <= 0) + setLessonInstances(new ArrayCollection([newlessonID]), newLesson); + + dispatchEvent(new Event("lessonIDChanged")); + } + + public function setLessonInstances(instances:ArrayCollection, newLesson:Lesson):void { + _lessonInstances = instances.toArray(); + + if(_lessonInstances.length == 1) + setLesson(_lessonInstances[0], newLesson); + + dispatchEvent(new Event("lessonInstancesChanged")); + } + + public function setLearners(newLearners:ArrayCollection):void { + _learners = newLearners; + + dispatchEvent(new Event("learnersChanged")); + } + + public function setStaff(newStaff:ArrayCollection):void { + _staff = newStaff; + + dispatchEvent(new Event("staffChanged")); + } + + public function setDictionary(xml:XML):void { + _dictionaryRegistry.xml = xml; + + dispatchEvent(new Event("dictionaryUpdated")); + } + + public function closeOnSuccess(success:Boolean, last:Boolean):void { + //trace('success close: ' + success); + //trace('success last: ' + last); + //trace('success room count: ' + xxmpRoomCount); + //trace('success li length: ' + lessonInstances.length); + + if(success && last && xxmpRoomCount >= lessonInstances.length) { + clearInterval(closeInterval); + ExternalInterface.call("close"); + } else if(closeInterval == 0 && last) + closeInterval = setInterval(closeOnSuccess, 500, success, last); + } + + public function closeNoStart():void { + ExternalInterface.call("close"); + } + + public function updateXmppRoomCount():void { + _xmppRoomCount++; + + dispatchEvent(new Event("xxmpRoomCreated")); + } + + // ----------------------------------------------------------- + + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/NavigationEvent.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/NavigationEvent.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/NavigationEvent.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,25 @@ +package org.lamsfoundation.lams.events +{ + import flash.events.Event; + + import org.lamsfoundation.lams.vos.*; + + public class NavigationEvent extends Event + { + /*-.........................................Constants..........................................*/ + + public static const TAB_SELECT: String = "tabSelectNavigationEvent" + public static const LESSON: String = "lessonNavigationEvent" + public static const LEARNERS: String = "learnersNavigationEvent" + public static const ADVANCED: String = "advancedNavigationEvent" + + public var selectedIndex:uint; + + /*-.........................................Constructor..........................................*/ + public function NavigationEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + } + + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/WizardErrorEvent.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/WizardErrorEvent.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/WizardErrorEvent.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,22 @@ +package org.lamsfoundation.lams.events +{ + import flash.events.Event; + + public class WizardErrorEvent extends Event + { + /*-.........................................Constants..........................................*/ + + public static const SHOW_ERROR:String = "showErrorEvent"; + + + /*-.........................................Properties..........................................*/ + public var message:String; + /*-.........................................Constructor..........................................*/ + + public function WizardErrorEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + } + + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/WizardEvent.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/WizardEvent.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/events/WizardEvent.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,65 @@ +package org.lamsfoundation.lams.events +{ + import flash.events.Event; + + import mx.collections.ArrayCollection; + import mx.core.Application; + + import org.lamsfoundation.lams.vos.Lesson; + import org.lamsfoundation.lams.vos.WorkspaceItem; + + public class WizardEvent extends Event + { + /*-.........................................Constants..........................................*/ + + public static const INIT_WORKSPACE:String = "initWorkspaceEvent"; + + public static const GET_FOLDER_CONTENTS:String = "getFolderContentsEvent"; + public static const OPEN_FOLDER:String = "openFolderContentsEvent"; + + public static const LOAD_ORGANISATION_USERS:String = "loadOrganisationUsers"; + public static const LOAD_ORGANISATION_LEARNERS:String = "loadOrganisationStaff"; + public static const LOAD_ORGANISATION_STAFF:String = "loadOrganisationLearners"; + + public static const ADD_LESSON:String = "addLessonEvent"; + public static const SCHEDULE_LESSON:String = "scheduleLessonEvent"; + public static const CREATE_LESSON_CLASS:String = "createLessonClassEvent"; + public static const SPLIT_LESSON_CLASS:String = "splitLessonClassEvent"; + public static const START:String = "startEvent"; + public static const START_LESSON:String = "startLessonEvent"; + public static const CREATE_PRESENCE_ROOM:String = "createPresenceRoomEvent"; + + public static const CLOSE_NOSTART:String = "closeNoStartEvent"; + public static const CHANGE_START_BUTTON_LABEL:String = "changeStartButtonLabelEvent"; + + /*-.........................................Properties..........................................*/ + + public var mode:uint = 2; + + public var folderID:int = -1; + public var folder:WorkspaceItem; + + public var organisationID:uint = Application.application.parameters.organisationID; + + public var contents:ArrayCollection; + + public var lesson:Lesson; + + public var startEvent_type:String; + public var schedule:String; + + public var last:Boolean = true; + + public var label:String; // changing start button label + + /*-.........................................Constructor..........................................*/ + + public function WizardEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + + startEvent_type = (schedule != null) ? START_LESSON : SCHEDULE_LESSON; + } + + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/maps/MainEventMap.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/maps/MainEventMap.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/maps/MainEventMap.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/maps/ModelMap.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/maps/ModelMap.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/maps/ModelMap.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/validators/LessonValidator.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/validators/LessonValidator.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/validators/LessonValidator.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,75 @@ +package org.lamsfoundation.lams.validators +{ + import com.visualempathy.display.controls.datetime.DateTimePicker; + + import mx.validators.ValidationResult; + import mx.validators.Validator; + + import org.lamsfoundation.lams.vos.UserCollection; + + public class LessonValidator extends Validator + { + public var errorMessage:String; + private var results:Array; + + public function LessonValidator() + { + super(); + } + + override protected function doValidation(value:Object):Array { + + // Clear results Array. + results = []; + + if(value is String) { + validateLessonName(value as String); + } else if(value is UserCollection) { + validateUserCollection(value as UserCollection); + } else if(value is DateTimePicker) { + validateScheduleDate(value as DateTimePicker); + } + + // Return if there are errors. + if(results.length > 0) + return results; + + + // Call base class doValidation(). + results = super.doValidation(value); + + return results; + } + + private function validateLessonName(lessonName:String):void { + // Check lesson name field. + if (lessonName == "" || lessonName == null) { + results.push(new ValidationResult(true, + "", "noLessonName", this.errorMessage)); + } + } + + private function validateUserCollection(collection:UserCollection):void { + if(collection.users.length <= 0) + results.push(new ValidationResult(true, "", "noLearners", this.errorMessage)); + } + + private function validateScheduleDate(timePicker:DateTimePicker):void { + var now:Date = new Date(); + + if(timePicker.enabled) { + if(timePicker.selectedDate.date > now.date) + return; + else if(timePicker.selectedDate.date == now.date) + if(timePicker.selectedDate.getHours() > now.getHours()) + return; + else if(timePicker.selectedDate.getHours() == now.getHours()) + if(timePicker.selectedDate.getMinutes() >= now.getMinutes()) + return; + + results.push(new ValidationResult(true, "", "incorrectScheduleDate", this.errorMessage)); + } + } + + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Advanced.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Advanced.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Advanced.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,246 @@ + + + + + learnersSize) + noLearnersPerLesson_stp.value = (learnersSize > 0) ? learnersSize : 1; + + noLearnersPerLesson = noLearnersPerLesson_stp.value; + + noInstances = (valChk) ? Math.floor(learnersSize/noLearnersPerLesson) : 1; + if(noInstances <= 1 && learnersSize != noLearnersPerLesson) noInstances++; + + noLearnersPerInstance = (valChk) ? learnersSize/noInstances : learnersSize; + + if(valChk) addInstanceText(); + + } + + private function addInstanceText():void { + + if(learnersNoteBox.getChildren().length > 0) + removeInstanceText(); + + var instTxt:Text = new Text(); + instTxt.id = "learnersNote_txt"; + instTxt.setStyle("paddingTop", 8); + instTxt.width = learnersNoteBox.width * 0.5; + instTxt.text = dictionary.getLabelAndInsert("wizard.splitLearners.splitSum", [noInstances, Math.round(noLearnersPerInstance)]); + //noInstances + + //" instances of this lesson will be created and approx. " + Math.round(noLearnersPerInstance) + + //" learners will be allocated to each lesson."; + + learnersNoteBox.addChild(instTxt); + + } + + private function removeInstanceText():void { + learnersNoteBox.removeAllChildren(); + } + + private function changePresenceSelection():void { + if(!enablePresence.selected) enableIm.selected = false; + } + + private function hasFocus(value:Boolean):void { + if(value) { + // tab is current selection + enableSplitLessonsOption(); + + var valEvent:ValidationResultEvent = scheduleValidator.validate(); + if(valEvent.results != null) { + this.dispatchEvent(valEvent); + this.setValidationFocus(valEvent.currentTarget.listener); + } + } else { + this.clearValidationFocus(dateTimePicker_fItm); + } + } + + private function checkScheduleDateTime(event:Event):void { + this.scheduleDateTimeStr = ScheduleDateDisplay.format(event.currentTarget.selectedDate); + var valEvent:ValidationResultEvent = scheduleValidator.validate(); + + this.clearValidationFocus(valEvent.currentTarget.listener); + + if(valEvent.results != null) { + this.dispatchEvent(valEvent); + this.setValidationFocus(valEvent.currentTarget.listener); + } else { + this.clearValidationHighlight(valEvent.currentTarget.listener); + } + } + + private function changeStartMonitorSelection():void { + + enableScheduling.enabled = !startInMonitor.selected; + + if(startInMonitor.selected) { + enableScheduling.selected = false; + updateSelectedDate(); + } + + var event:WizardEvent = new WizardEvent(WizardEvent.CHANGE_START_BUTTON_LABEL); + + // change label on normal start button (add now >> ) if selected to (start in monitor >>) + event.label = (!startInMonitor.selected) ? dictionary.getLabel('add.now.button.label') + : dictionary.getLabel('finish.btn'); + + this.dispatchEvent(event); + } + + + /** static Validation focus methods */ + public function setValidationFocus(formObject:Object):void { + if(formObject is FormItem) { + // set focus on scheduling form item + formObject.drawFocus(true); + formObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER)); + focusTimeout = setTimeout(this.clearValidationFocus, 3000, formObject); + } else { + Wizard.setValidationFocus(formObject); + } + } + + public function clearValidationFocus(focusObject:Object):void { + clearTimeout(focusTimeout); + focusObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT)); + } + + public function clearValidationHighlight(formObject:Object):void { + formObject.drawFocus(false); + } + + private function updateSelectedDate():void { + var now:Date = new Date(); + if(scheduleDateTimePicker.selectedDate < now) + scheduleDateTimePicker.selectedDate = now; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Learners.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Learners.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Learners.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Lesson.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Lesson.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Lesson.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,268 @@ + + + + + 0) { + var invalid:Boolean = false; + + for each(valEvent in valArray) { + if(valEvent.results != null && valEvent.type == ValidationResultEvent.INVALID) { + this.dispatchEvent(valEvent); + Wizard.setValidationFocus(valEvent.currentTarget.listener); + invalid = true; + } + } + + if(invalid) + this.dispatchEvent(new NavigationEvent(NavigationEvent.LEARNERS)); + + // validate learning design + } else if(newLesson.learningDesignID != 0) { + var addType:String = (newLesson.numberLessonsSplit > 0) ? WizardEvent.SPLIT_LESSON_CLASS : WizardEvent.ADD_LESSON; + var wizardEvent:WizardEvent = new WizardEvent(addType); + wizardEvent.lesson = newLesson; + + this.dispatchEvent(wizardEvent); + + return true; + + // else case - unknown error + } else { + Alert.okLabel = dictionary.getLabel('button.ok'); + Alert.show(dictionary.getLabelAndInsert("error.system.error", ['unknown']), dictionary.getLabel('sys.error'), Alert.OK, this); + } + + } else { + Alert.okLabel = dictionary.getLabel('button.ok'); + Alert.show(dictionary.getLabel("al.validation.msg1"), dictionary.getLabel("al.alert"), Alert.OK, this); + + this.dispatchEvent(new NavigationEvent(NavigationEvent.LESSON)); + } + + return false; + } + + public function startLesson(event:WizardEvent):void { + // close window - start in monitor (tab -advanced) + if(advanced.startInMonitor.selected) { + this.dispatchEvent(new WizardEvent(WizardEvent.CLOSE_NOSTART)); + return; + } + + // fire normal start event(s) + var startType:String = (newLesson.enableScheduling) ? WizardEvent.SCHEDULE_LESSON : WizardEvent.START_LESSON; + var wizardEvent:WizardEvent = new WizardEvent(startType); + + wizardEvent.lesson = newLesson; + wizardEvent.schedule = (newLesson.enableScheduling) ? advanced.scheduleDateTimeStr : null; + + if(lessonInstances.length > 1) { + startLessonInstances(wizardEvent); + } else { + this.dispatchEvent(wizardEvent); + } + + } + + public function startLessonInstances(event:WizardEvent):void { + var count:uint = 0; + + for each(var instanceLessonID:uint in lessonInstances) { + var wizardEvent:WizardEvent = new WizardEvent(event.type); + count++; + + lessonID = instanceLessonID; + + wizardEvent.lesson = newLesson; + wizardEvent.schedule = event.schedule; + wizardEvent.last = (lessonInstances.length == count); + + this.dispatchEvent(wizardEvent); + } + + } + + private function hasFocus(value:Boolean):void { + if(value) { + // tab is current selection + validateLessonNameField(); + } + } + + private function validateLessonNameField():void { + if(selectedNode != null) { + var valEvent:ValidationResultEvent = lessonNameVal.validate(); + if(valEvent.results != null) + Wizard.setValidationFocus(lessonNameVal.listener); + } + + } + ]]> + + + + + + + + + + + {lessonID} + {resourceName_txi.text} + {advanced.description_txi.text} + {organisationID} + {selectedNode.resourceID} + {advanced.enabledExportPortfolio.selected} + {advanced.enablePresence.selected} + {advanced.enabledLiveEdit.selected} + {advanced.enableIm.selected} + {advanced.noInstances} + {advanced.noLearnersPerInstance} + + {advanced.enableScheduling.selected} + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Wizard.mxml =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Wizard.mxml (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/views/Wizard.mxml (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/Lesson.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/Lesson.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/Lesson.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,65 @@ +package org.lamsfoundation.lams.vos +{ + import mx.collections.ArrayCollection; + import org.lamsfoundation.lams.common.util.WDDXUtil; + + public class Lesson + { + public var lessonID:uint; + public var lessonName:String; + public var lessonDescription:String; + public var organisationID:uint; + public var learningDesignID:uint; + + // Advanced options + public var learnerExportPortfolio:Boolean; + public var enablePresence:Boolean; + public var enableLiveEdit:Boolean; + public var enableIm:Boolean; + + public var enableScheduling:Boolean; + + public var numberLessonsSplit:int; + public var numberLearnersSplit:int; + + // new Lesson copy + public var copyType:uint = 2; + + // Lesson class - learners and staff users + public var learners:UserCollection; + public var staff:UserCollection; + + public function Lesson() { + learners = new UserCollection(); + staff = new UserCollection(); + + numberLessonsSplit = null; + numberLearnersSplit = null; + } + + public function get toData():Object { + var data:Object = new Object(); + data.lessonID = this.lessonID; + data.lessonName = this.lessonName; + data.lessonDescription = WDDXUtil.toWDDXNull(this.lessonDescription); + data.organisationID = this.organisationID; + data.learningDesignID = this.learningDesignID; + data.learnerExportPortfolio = this.learnerExportPortfolio; + + data.enablePresence = this.enablePresence; + data.enableLiveEdit = this.enableLiveEdit; + data.enableIm = this.enableIm; + + data.numberLessonsSplit = WDDXUtil.toWDDXNull(this.numberLessonsSplit); + data.numberLearnersSplit = WDDXUtil.toWDDXNull(this.numberLearnersSplit); + + data.copyType = this.copyType; + + data.learners = learners.toData; + data.staff = staff.toData; + + return data; + } + } + +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/UserCollection.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/UserCollection.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/UserCollection.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,51 @@ +package org.lamsfoundation.lams.vos +{ + import mx.collections.ArrayCollection; + + public class UserCollection { + + public var _users:ArrayCollection; + public var _groupName:String; + + public function UserCollection() { + users = new ArrayCollection(); + } + + public function get toData():Object { + + return {users: getIdArray(), groupName: groupName}; + } + + private function getIdArray():Array { + var idArray:Array = new Array(); + + for each(var user:Object in users) { + idArray.push(int(user.userID)); + } + + return idArray; + } + + public function set groupName(value:String):void { + if(value != null) + _groupName = value; + else + _groupName = ""; + } + + public function get groupName():String { + return _groupName; + } + + public function set users(value:ArrayCollection):void { + if(value != null) + _users = value; + else + _users = new ArrayCollection(); + } + + public function get users():ArrayCollection { + return _users; + } + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/WorkspaceCollection.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/WorkspaceCollection.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/WorkspaceCollection.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,60 @@ +package org.lamsfoundation.lams.vos +{ + import flash.events.EventDispatcher; + + import mx.collections.ArrayCollection; + import mx.collections.ICollectionView; + import mx.controls.treeClasses.ITreeDataDescriptor; + + import org.lamsfoundation.lams.events.WizardEvent; + + public class WorkspaceCollection implements ITreeDataDescriptor + { + + public function WorkspaceCollection() { + } + + public function getChildren(node:Object, model:Object=null):ICollectionView + { + return node.children; + } + + public function hasChildren(node:Object, model:Object=null):Boolean + { + if(node is WorkspaceItem && node.resourceType == WorkspaceItem.RT_FOLDER) { + return (node.children.length > 0); + } + + return false; + + } + + public function isBranch(node:Object, model:Object=null):Boolean + { + if(node is WorkspaceItem && node.resourceType == WorkspaceItem.RT_FOLDER) { + return true; + } + + return false; + } + + public function getData(node:Object, model:Object=null):Object + { + if(node is WorkspaceItem && node.resourceType == WorkspaceItem.RT_FOLDER) { + return {resourceID: node.resourceID, children:node.children}; + } + return null; + } + + public function addChildAt(parent:Object, newChild:Object, index:int, model:Object=null):Boolean + { + return false; + } + + public function removeChildAt(parent:Object, child:Object, index:int, model:Object=null):Boolean + { + return false; + } + + } +} \ No newline at end of file Index: lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/WorkspaceItem.as =================================================================== diff -u --- lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/WorkspaceItem.as (revision 0) +++ lams_flash/src/central/flex/CloudWizard/src/org/lamsfoundation/lams/vos/WorkspaceItem.as (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -0,0 +1,96 @@ +package org.lamsfoundation.lams.vos +{ + + import flash.events.EventDispatcher; + import flash.events.IEventDispatcher; + + import mx.collections.ArrayCollection; + + import org.lamsfoundation.lams.common.util.WDDXUtil; + + public class WorkspaceItem extends EventDispatcher + { + public static var ROOT_VFOLDER:Number = -1; + public static var ORG_VFOLDER:Number = -2; + + public static var RT_FOLDER:String = "Folder"; + public static var RT_LD:String = "LearningDesign"; + public static var RT_LESSON:String = "Lesson"; + public static var RT_FILE:String = "File"; + + // properties + private var _name:String; + private var _description:String; + + private var _workspaceFolderID:Number; + private var _parentWorkspaceFolderID:Number; + + private var _resourceID:Number; + private var _resourceType:String; + + private var _children:ArrayCollection = new ArrayCollection(); + + //private var creationDateTime:Date; + //private var lastModifiedDateTime:Date; + + public function WorkspaceItem(dispatcher:IEventDispatcher=null) + { + super(dispatcher); + } + + public function get name():String { + return _name; + } + + public function get description():String { + return _description; + } + + public function get resourceID():Number { + return _resourceID; + } + + public function get resourceType():String { + return _resourceType; + } + + public function set workspaceFolderID(value:Number):void { + _workspaceFolderID = value; + } + + public function get workspaceFolderID():Number { + return _workspaceFolderID; + } + + public function set parentWorkspaceFolderID(value:Number):void { + _parentWorkspaceFolderID = value; + } + + public function get parentWorkspaceFolderID():Number { + return _parentWorkspaceFolderID; + } + + public function populate(dto:Object):void { + _name = WDDXUtil.cleanNull(dto.name) as String; + _description = WDDXUtil.cleanNull(dto.description) as String; + _resourceID = dto.resourceID; + _resourceType = WDDXUtil.cleanNull(dto.resourceType) as String; + + if(_resourceType == RT_FOLDER) + _workspaceFolderID = _resourceID; + } + + public function set children(value:ArrayCollection):void { + _children = value; + } + + public function get children():ArrayCollection { + return _children; + } + + public function isValidDesign():Boolean { + return (_resourceType == RT_LD || _resourceType == RT_LESSON); + } + + } +} \ No newline at end of file Index: lams_flash/src/common/flex/lib/Mate_08_7.swc =================================================================== diff -u Binary files differ Index: lams_flash/src/common/flex/org/lamsfoundation/lams/common/dictionary/XMLDictionaryEvent.as =================================================================== diff -u -r062ddaf9efbc0d6927b44b16ad7c7bc7a3b38afe -rb791537342fb2b0446a7010efcc2db8ef94e826a --- lams_flash/src/common/flex/org/lamsfoundation/lams/common/dictionary/XMLDictionaryEvent.as (.../XMLDictionaryEvent.as) (revision 062ddaf9efbc0d6927b44b16ad7c7bc7a3b38afe) +++ lams_flash/src/common/flex/org/lamsfoundation/lams/common/dictionary/XMLDictionaryEvent.as (.../XMLDictionaryEvent.as) (revision b791537342fb2b0446a7010efcc2db8ef94e826a) @@ -4,10 +4,9 @@ public class XMLDictionaryEvent extends Event { - public static const COMPLETE: String = "completeXMLDictionaryEvent"; - public function XMLDictionaryEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) + public function XMLDictionaryEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false) { super(type, bubbles, cancelable); }