Index: lams_common/src/flash/org/lamsfoundation/lams/common/ws/Workspace.as =================================================================== diff -u -r5397e183752ce15d883d88aaacbb2438e36a4123 -rc878e57661279a89f0195eb9fa58f5fb9b8e77bf --- lams_common/src/flash/org/lamsfoundation/lams/common/ws/Workspace.as (.../Workspace.as) (revision 5397e183752ce15d883d88aaacbb2438e36a4123) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ws/Workspace.as (.../Workspace.as) (revision c878e57661279a89f0195eb9fa58f5fb9b8e77bf) @@ -36,12 +36,17 @@ private function init():Void{ //find out the users wsp: - requestUserWorkspace(); + //requestUserWorkspace(); + workspaceModel.initWorkspaceTree(); + requestAvailableLicenses(); } + + /** * Retrieves the workspace details for the current user from the server. + * DEPRICATED ! - we dontthink we have a use for this anymore * @usage */ private function requestUserWorkspace():Void{ @@ -59,17 +64,14 @@ Debugger.log('workspaceID:'+dto.workspaceID+',rootFolderID:'+dto.rootFolderID,Debugger.GEN,'recievedUserWorkspace','Workspace'); workspaceModel.rootFolderID = dto.rootFolderID; workspaceModel.workspaceID = dto.workspaceID; - //if the wsp data is null, then must be 1st time in (probabbly is ay!? - we are in init phase) - requestWorkspaceFolders(); - } public function requestFolderContents(folderID:Number):Void{ var callback:Function = Proxy.create(this,recievedFolderContents); var uid:Number = Config.getInstance().userID; - //Application.getInstance().getComms().getRequest('workspace.do?method=getFolderContents&folderID='+folderID+'&mode='+Config.getInstance().mode+'&userID='+uid,callback, false); - Application.getInstance().getComms().getRequest('workspace.do?method=getFolderContentsExcludeHome&folderID='+folderID+'&mode='+Config.getInstance().mode+'&userID='+uid,callback, false); + Application.getInstance().getComms().getRequest('workspace.do?method=getFolderContents&folderID='+folderID+'&mode='+Config.getInstance().mode+'&userID='+uid,callback, false); + //Application.getInstance().getComms().getRequest('workspace.do?method=getFolderContentsExcludeHome&folderID='+folderID+'&mode='+Config.getInstance().mode+'&userID='+uid,callback, false); } @@ -185,7 +187,7 @@ PRIVATE The folder which belongs to the given User RUN_SEQUENCES The folder in which user stores his lessons ORGANISATIONS List of folders (root folder only) which belong to organizations of which user is a member - */ + private function requestWorkspaceFolders():Void{ var callback:Function = Proxy.create(this,recievedWorkspaceFolders); var uid:Number = Config.getInstance().userID; @@ -197,14 +199,22 @@ Debugger.log('Got the available folders - PRIVATE.resourceID:'+dto.PRIVATE.resourceID,Debugger.GEN,'recievedWorkspaceFolders','Workspace'); //_global.breakpoint(); workspaceModel.parseDataForTree(dto); - - //TODO: Enable the Workspace buttons on the UI now we have the minimum data - - + } + */ + public function requestAvailableLicenses(){ + var callback:Function = Proxy.create(this,recievedAvailableLicenses); + var uid:Number = Config.getInstance().userID; + Application.getInstance().getComms().getRequest('authoring/author.do?method=getAvailableLicenses',callback, false); + } + public function recievedAvailableLicenses(dto:Array){ + workspaceModel.setAvailableLicenses(dto); + } + + /** * This is the method called when the user opens a design * Index: lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceController.as =================================================================== diff -u -r57d64bb2cc6656c0ff30aa8afb6496503eb8ea11 -rc878e57661279a89f0195eb9fa58f5fb9b8e77bf --- lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceController.as (.../WorkspaceController.as) (revision 57d64bb2cc6656c0ff30aa8afb6496503eb8ea11) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceController.as (.../WorkspaceController.as) (revision c878e57661279a89f0195eb9fa58f5fb9b8e77bf) @@ -43,15 +43,22 @@ evt.target.scrollContent.addEventListener('locationTabClick',Delegate.create(this,locationTabClick)); evt.target.scrollContent.addEventListener('propertiesTabClick',Delegate.create(this,propertiesTabClick)); //evt.target.scrollContent.addEventListener('click',Delegate.create(this,click)); + + + //set a ref to the view evt.target.scrollContent.workspaceView = getView(); //set a ref to the dia in the view getView().workspaceDialogue = evt.target.scrollContent; //set up UI + //note this function registeres the dialog to recieve view updates evt.target.scrollContent.setUpContent(); + //populate the licenses drop down + _workspaceModel.populateLicenseDetails(); + //select the right tab, dont pass anything to show the default tab _workspaceModel.showTab(_workspaceModel.currentTab); }else { @@ -113,8 +120,7 @@ if(!nodeToOpen.hasChildNodes()){ - - + //if the resourceID is null then use the folderID //var resourceToOpen = (nodeToOpen.attributes.data.resourceID) ? nodeToOpen.attributes.data.resourceID : nodeToOpen.attributes.data.workspaceFolderID; @@ -155,9 +161,15 @@ } + /** + * Initiates a move request for a folder or resource + * @usage + * @param evt //this event should contain: {type:"drag_complete", target: this.tree, sourceNode: node, targetNode: this.__targetNode.item} + * @return + */ public function onDragComplete(evt:Object){ Debugger.log('type::'+evt.type,Debugger.GEN,'onDragComplete','org.lamsfoundation.lams.WorkspaceController'); - //this event should contain: {type:"drag_complete", target: this.tree, sourceNode: node, targetNode: this.__targetNode.item} + var treeview = evt.target; //var snodeData = treeview.selectedNode.attributes.data; @@ -251,40 +263,60 @@ //get the selected node: var snodeData = workspaceDialogue.treeview.selectedNode.attributes.data; var selectedFolderID:Number; + //if its a folder then the resourceID is the selected folder ID, otherwise its the parent if(snodeData.resourceType == _workspaceModel.RT_FOLDER){ selectedFolderID = snodeData.resourceID; + }else{ selectedFolderID = snodeData.workspaceFolderID; } - _workspaceModel.folderIDPendingRefresh = selectedFolderID; - - Debugger.log('Selected (target) folder ID=:'+selectedFolderID,Debugger.GEN,'fileOperationRequest','org.lamsfoundation.lams.WorkspaceController'); - - + //check if we can write to this folder + if(_workspaceModel.isWritableResource(snodeData.resourceType,selectedFolderID)){ + _workspaceModel.folderIDPendingRefresh = selectedFolderID; + Debugger.log('Selected (target) folder ID=:'+selectedFolderID,Debugger.GEN,'fileOperationRequest','org.lamsfoundation.lams.WorkspaceController'); _workspaceModel.getWorkspace().requestCopyResource(itemToPaste.resourceID,selectedFolderID,itemToPaste.resourceType); + + }else{ + LFMessage.showMessageAlert(Dictionary.getValue('ws_no_permission'),null,null); + } + }else{ //nothing to paste.. } }else if(tgt.indexOf("delete_btn") != -1){ //find out the selected folderID: //get the selected node: + var snodeData = workspaceDialogue.treeview.selectedNode.attributes.data; if(snodeData != null){ //TODO Check permission code to make sure we can do this! - var snodeData = workspaceDialogue.treeview.selectedNode.attributes.data; + //check if we can write to this folder + if(_workspaceModel.isWritableResource(snodeData.resourceType,snodeData.resourceID)){ + _workspaceModel.folderIDPendingRefresh = snodeData.workspaceFolderID; + _workspaceModel.getWorkspace().requestDeleteResource(snodeData.resourceID,snodeData.resourceType); + }else{ + LFMessage.showMessageAlert(Dictionary.getValue('ws_no_permission'),null,null); + } - _workspaceModel.folderIDPendingRefresh = snodeData.workspaceFolderID; - _workspaceModel.getWorkspace().requestDeleteResource(snodeData.resourceID,snodeData.resourceType); + }else{ //nothing to delete } }else if(tgt.indexOf("new_btn") != -1){ //check we can create a folder here var snodeData = workspaceDialogue.treeview.selectedNode.attributes.data; if(snodeData != null){ - Dialog.createInputDialog(Dictionary.getValue('ws_newfolder_ins'), Dictionary.getValue('ws_newfolder_ok'), Dictionary.getValue('ws_newfolder_cancel'), Delegate.create(_workspaceController ,setNewFolderName),null); + + + //check if we can write to this folder + if(_workspaceModel.isWritableResource(snodeData.resourceType,snodeData.resourceID)){ + Dialog.createInputDialog(Dictionary.getValue('ws_newfolder_ins'), Dictionary.getValue('ws_newfolder_ok'), Dictionary.getValue('ws_newfolder_cancel'), Delegate.create(_workspaceController ,setNewFolderName),null); + }else{ + LFMessage.showMessageAlert(Dictionary.getValue('ws_no_permission'),null,null); + } + }else{ //no where to make new folder } @@ -295,7 +327,14 @@ //check we can create a folder here var snodeData = workspaceDialogue.treeview.selectedNode.attributes.data; if(snodeData != null){ - Dialog.createInputDialog(Dictionary.getValue('ws_rename_ins'), Dictionary.getValue('ws_newfolder_ok'), Dictionary.getValue('ws_newfolder_cancel'), Delegate.create(_workspaceController ,setNewResourceName),null); + //check if we can write to this folder + if(_workspaceModel.isWritableResource(snodeData.resourceType,snodeData.resourceID)){ + Dialog.createInputDialog(Dictionary.getValue('ws_rename_ins'), Dictionary.getValue('ws_newfolder_ok'), Dictionary.getValue('ws_newfolder_cancel'), Delegate.create(_workspaceController ,setNewResourceName),null); + }else{ + LFMessage.showMessageAlert(Dictionary.getValue('ws_no_permission'),null,null); + } + + }else{ //nothing to rename } Index: lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceDialog.as =================================================================== diff -u -r38cd9b8499ebe7e8dce1607c63af6c3f536f9608 -rc878e57661279a89f0195eb9fa58f5fb9b8e77bf --- lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceDialog.as (.../WorkspaceDialog.as) (revision 38cd9b8499ebe7e8dce1607c63af6c3f536f9608) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceDialog.as (.../WorkspaceDialog.as) (revision c878e57661279a89f0195eb9fa58f5fb9b8e77bf) @@ -45,6 +45,8 @@ private var resourceDesc_txa:TextArea; private var license_txa:TextArea; private var licenseID_cmb:ComboBox; + private var licenseImg_pnl:MovieClip; + private var viewLicense_btn:Button; @@ -107,11 +109,10 @@ //Set the text on the labels - //Set the text for buttons ok_btn.label = Dictionary.getValue('ws_dlg_ok_button'); cancel_btn.label = Dictionary.getValue('ws_dlg_cancel_button'); - + viewLicense_btn.label = Dictionary.getValue('ws_view_license_button'); //TODO: Dictionary calls for all the rest of the buttons @@ -130,7 +131,7 @@ //Register for LFWindow size events _container.addEventListener('size',this); - + //panel.setStyle('backgroundColor',0xFFFFFF); //Debugger.log('setting offsets',Debugger.GEN,'init','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); @@ -159,10 +160,10 @@ //register to recive updates form the model WorkspaceModel(_workspaceView.getModel()).addEventListener('viewUpdate',this); - Debugger.log('_workspaceView:'+_workspaceView,Debugger.GEN,'setUpTreeview','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); + Debugger.log('_workspaceView:'+_workspaceView,Debugger.GEN,'setUpContent','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); //get a ref to the controller and kkep it here to listen for events: _workspaceController = _workspaceView.getController(); - Debugger.log('_workspaceController:'+_workspaceController,Debugger.GEN,'setUpTreeview','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); + Debugger.log('_workspaceController:'+_workspaceController,Debugger.GEN,'setUpContent','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); //Add event listeners for ok, cancel and close buttons @@ -179,10 +180,13 @@ delete_btn.addEventListener('click',Delegate.create(_workspaceController, _workspaceController.fileOperationRequest)); rename_btn.addEventListener('click',Delegate.create(_workspaceController, _workspaceController.fileOperationRequest)); + viewLicense_btn.addEventListener('click',Delegate.create(this, openLicenseURL)); + licenseID_cmb.addEventListener('change',Delegate.create(this, onLicenseComboSelect)); //Set up the treeview setUpTreeview(); + itemSelected(treeview.selectedNode); } /** @@ -199,7 +203,8 @@ _workspaceModel = wm; switch (event.updateType){ - + case 'POPULATE_LICENSE_DETAILS' : + populateAvailableLicenses(event.data, wm); case 'REFRESH_TREE' : refreshTree(wm); break; @@ -217,6 +222,10 @@ case 'SHOW_TAB' : showTab(event.data,wm); break; + case 'SET_UP_BRANCHES_INIT' : + setUpBranchesInit(); + break; + default : Debugger.log('unknown update type :' + event.updateType,Debugger.GEN,'viewUpdate','org.lamsfoundation.lams.ws.WorkspaceDialog'); } @@ -289,24 +298,11 @@ private function refreshFolder(nodeToOpen:XMLNode, wm:WorkspaceModel){ Debugger.log('refreshFolder:'+nodeToOpen ,Debugger.GEN,'refreshFolder','org.lamsfoundation.lams.ws.WorkspaceDialog'); //close the node - treeview.setIsOpen(nodeToOpen,false); - /* - for(var i=0; i 0){ + for(var i=0; i -1){ + Debugger.log('Found a root/fake node',Debugger.GEN,'clearWorkspaceCache','org.lamsfoundation.lams.WorkspaceModel'); + //need refresh root data as is one of the fake root folders ( root , or orgs) + _folderIDPendingRefreshList = new Array(); + parseDataForTree(_accessibleWorkspaceFoldersDTOCopy); + Debugger.log('Gonna try auto open:'+folderIDPendingRefresh,Debugger.GEN,'clearWorkspaceCache','org.lamsfoundation.lams.WorkspaceModel'); + //setFolderOpen(folderIDPendingRefresh); + broadcastViewUpdate('SET_UP_BRANCHES_INIT',null); + return 'CLEARED_ALL'; + } + */ + + }else{ + Debugger.log('No Child nodes to delete',Debugger.GEN,'clearWorkspaceCache','org.lamsfoundation.lams.WorkspaceModel'); + } + _folderIDPendingRefresh = null; + /* //this only deletes some children, dont know why, see solution above + for(var i=0; i
+ * + * getAvailableLicenses + * 3.0 + * + * by-nc-sa + * + * 1.0 + * Attribution-Noncommercial-ShareAlike 2.5 + * http://localhost:8080/lams//images/license/byncsa.jpg + * http://creativecommons.org/licenses/by-nc-sa/2.5/ + * + * * @usage + * @param newavailableLicenses + * @return + */ + public function setAvailableLicenses (newavailableLicenses:Array):Void { + newavailableLicenses.sortOn('name'); + _availableLicenses = newavailableLicenses; + } + /** + * + * @usage + * @return + */ + public function getAvailableLicenses ():Array { + return _availableLicenses; + } }