src/it/ht/rcs/console/accounting/view/users/UserForm.mxml
<?xml version="1.0" encoding="utf-8"?>
<utils:TitleWindowSaveCancel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:utils="it.ht.rcs.console.utils.*"
xmlns:groups="it.ht.rcs.console.accounting.view.groups.*"
creationComplete="init()"
save="save()"
title="{currentState == 'create'?R.get('NEW_USER'):R.get('EDIT_USER')}">
<fx:Script>
<![CDATA[
import it.ht.rcs.console.ObjectUtils;
import it.ht.rcs.console.accounting.controller.GroupManager;
import it.ht.rcs.console.accounting.controller.UserManager;
import it.ht.rcs.console.accounting.model.Group;
import it.ht.rcs.console.accounting.model.User;
import it.ht.rcs.console.events.SaveEvent;
import it.ht.rcs.console.utils.AlertPopUp;
import locale.R;
import mx.collections.ArrayCollection;
import mx.collections.ListCollectionView;
import mx.managers.PopUpManager;
[Bindable]
public var user:User;
[Bindable]
private var permissionsXML:XMLList=
<>
<permission name="Admin" id="ADMIN" desc="ADMIN_DESC" selected="0">
<permission name="Users" id="ADMIN_USERS" desc="ADMIN_USERS_DESC" selected="" default="1"/>
<permission name="Operations" id="ADMIN_OPERATIONS" desc="ADMIN_OPERATIONS_DESC" selected="0" default="1"/>
<permission name="Targets" id="ADMIN_TARGETS" desc="ADMIN_TARGETS_DESC" selected="0" default="1"/>
<permission name="Audit" id="ADMIN_AUDIT" desc="ADMIN_AUDIT_DESC" selected="0" default="1"/>
<permission name="License" id="ADMIN_LICENSE" desc="ADMIN_LICENSE_DESC" selected="0" default="1"/>
</permission>
<permission name="System" id="SYS" desc="SYS_DESC" selected="0">
<permission name="Frontend" id="SYS_FRONTEND" desc="SYS_FRONTEND_DESC" selected="0" default="1"/>
<permission name="Backend" id="SYS_BACKEND" desc="SYS_BACKEND_DESC" selected="0" default="1"/>
<permission name="Backup" id="SYS_BACKUP" desc="SYS_BACKUP_DESC" selected="0" default="1"/>
<permission name="Injector" id="SYS_INJECTORS" desc="SYS_INJECTORS_DESC" selected="0" default="1"/>
<permission name="Connectors" id="SYS_CONNECTORS" desc="SYS_CONNECTORS_DESC" selected="0" default="1"/>
</permission>
<permission name="Tech" id="TECH" desc="TECH_DESC" selected="0">
<permission name="Factories" id="TECH_FACTORIES" desc="TECH_FACTORIES_DESC" selected="0" default="1"/>
<permission name="Build" id="TECH_BUILD" desc="TECH_BUILD_DESC" selected="0" default="1"/>
<permission name="Config" id="TECH_CONFIG" desc="TECH_CONFIG_DESC" selected="0" default="1"/>
<permission name="Exec" id="TECH_EXEC" desc="TECH_EXEC_DESC" selected="0" default="1"/>
<permission name="Upload" id="TECH_UPLOAD" desc="TECH_UPLOAD_DESC" selected="0" default="1"/>
<permission name="Import" id="TECH_IMPORT" desc="TECH_IMPORT_DESC" selected="0" default="1"/>
<permission name="NI Rules" id="TECH_NI_RULES" desc="TECH_NI_RULES_DESC" selected="0" default="1"/>
</permission>
<permission name="Viewer" id="VIEW" desc="VIEW_DESC" selected="0">
<permission name="Alerts" id="VIEW_ALERTS" desc="VIEW_ALERTS_DESC" selected="0" default="1"/>
<permission name="File System" id="VIEW_FILESYSTEM" desc="VIEW_FILESYSTEM_DESC" selected="0" default="1"/>
<permission name="Edit" id="VIEW_EDIT" desc="VIEW_EDIT_DESC" selected="0" default="1"/>
<permission name="Delete" id="VIEW_DELETE" desc="VIEW_DELETE_DESC" selected="0" default="0"/>
<permission name="Export" id="VIEW_EXPORT" desc="VIEW_EXPORT_DESC" selected="0" default="1"/>
<permission name="Profiles" id="VIEW_PROFILES" desc="VIEW_PROFILES_DESC" selected="0" default="1"/>
</permission>
</>
private function init():void
{
formName.setFocus();
if (currentState == 'create')
{
user=new User(User.defaultUser());
}
if (user.privs.getItemIndex('ADMIN') != -1)
formAdmin.selected=true;
if (user.privs.getItemIndex('SYS') != -1)
formSys.selected=true;
if (user.privs.getItemIndex('TECH') != -1)
formTech.selected=true;
if (user.privs.getItemIndex('VIEW') != -1)
formView.selected=true;
for each (var element:* in permissionsXML)
{
element.@desc=R.get(element.@desc);
if (user.privs.getItemIndex(String(element.@id)) != -1)
{
element.@selected="1";
}
else
{
element.@selected="0";
}
for each (var node:* in element..permission)
{
node.@desc=R.get(node.@desc);
if (user.privs.getItemIndex(String(node.@id)) != -1)
{
node.@selected="1";
}
else
{
node.@selected="0";
}
}
}
}
private function openPrivsPanel():void
{
var panel:PrivsPreferencePanel=PopUpManager.createPopUp(root, PrivsPreferencePanel, true) as PrivsPreferencePanel;
panel.user=user;
panel.addEventListener(SaveEvent.SAVE, onPanelSave)
panel.permissionsXML=permissionsXML.copy();
PopUpManager.centerPopUp(panel);
return;
}
private function onPanelSave(e:SaveEvent):void
{
permissionsXML=e.currentTarget.permissionsXML;
for each (var element:* in permissionsXML)
{
if (element.@id == "ADMIN")
{
formAdmin.selected=element.@selected == "1" ? true : false;
}
else if (element.@id == "SYS")
{
formSys.selected=element.@selected == "1" ? true : false;
}
else if (element.@id == "TECH")
{
formTech.selected=element.@selected == "1" ? true : false;
}
else if (element.@id == "ADMIN")
{
formView.selected=element.@selected == "1" ? true : false;
}
}
PopUpManager.removePopUp(e.currentTarget as PrivsPreferencePanel);
}
private function save():void
{
if (formName.text == '')
{
AlertPopUp.show(R.get('USER_NO_NAME'), R.get('ERROR'));
return;
}
if (user.pass == '')
{
AlertPopUp.show(R.get('USER_NO_PASS'), R.get('ERROR'));
return;
}
/* keep the name the first to be modified */
if (currentState == 'edit')
{
var v:ListCollectionView=UserManager.instance.getView();
for (var i:int=0; i < v.length; i++)
{
var u:User=v.getItemAt(i) as User;
if (u.name == formName.text && u!=user)
{
AlertPopUp.show(R.get('USER_ALREADY_EXISTS'),'ERROR');
return;
}
}
}
user.name=formName.text;
user.enabled=formEnabled.selected;
user.desc=formDescription.text;
user.contact=formContact.text;
user.locale=formLocale.selectedItem;
user.timezone=formConsoletime.selectedIndex - 12;
//read permissionsXML and convert to string!!!
var privs:ArrayCollection=new ArrayCollection();
for each (var element:* in permissionsXML)
{
if (element.@selected == "1")
{
privs.addItem(String(element.@id));
}
for each (var node:* in element..permission)
{
if (node.@selected == "1")
{
privs.addItem(String(node.@id))
}
}
}
//
if (privs.toString() != user.privs.toString())
user.privs=privs;
//old approach
//user.group_ids=groups.dataProvider.toArray();
if (currentState == 'create')
UserManager.instance.addUser(user, function(u:User):void
{
updateGroups(u)
close();
});
else
{
updateGroups(user)
close();
}
}
private function updateGroups(u:User):void
{
var i:int;
for (i=0; i < groups.groupsToAdd.length; i++)
GroupManager.instance.addUser(groups.groupsToAdd.getItemAt(i) as Group, u, null)
for (i=0; i < groups.groupsToRemove.length; i++)
GroupManager.instance.removeUser(groups.groupsToRemove.getItemAt(i) as Group, u, null)
}
private function changePass():void
{
var cp:ChangePassword=PopUpManager.createPopUp(root, ChangePassword, true) as ChangePassword;
cp.user=user;
cp.mode=currentState;
PopUpManager.centerPopUp(cp);
}
protected function onPermissionsChange(event:MouseEvent):void
{
var permission:String="";
var value:String=event.currentTarget.selected ? "1" : "0";
if (event.currentTarget.id == "formAdmin")
{
permission="ADMIN"
}
if (event.currentTarget.id == "formSys")
{
permission="SYS"
}
if (event.currentTarget.id == "formTech")
{
permission="TECH"
}
if (event.currentTarget.id == "formView")
{
permission="VIEW"
}
for each (var element:* in permissionsXML)
{
if (element.@id == permission)
{
element.@selected=value;
for each (var node:* in element..permission)
{
if (element.@selected == "0")
{
node.@selected="0"
}
else if (element.@selected == "1")
{
if (node.@default == "1")
{
node.@selected="1"
}
else
{
node.@selected="0"
}
}
}
}
}
}
]]>
</fx:Script>
<utils:states>
<s:State name="create"/>
<s:State name="edit"/>
</utils:states>
<s:Form defaultButton="{saveButton}">
<s:FormItem label="{R.get('ENABLED')}">
<!-- the current user cannot disable himself -->
<s:CheckBox id="formEnabled"
enabled="{user._id != Console.currentSession.user._id}"
selected="{user.enabled}"/>
</s:FormItem>
<s:FormItem label="{R.get('NAME')}">
<s:TextInput id="formName"
width="200"
maxChars="20"
text="{user.name}"/>
</s:FormItem>
<s:FormItem label="{R.get('DESCRIPTION')}">
<s:TextArea id="formDescription"
width="200"
heightInLines="3"
text="{user.desc}"/>
</s:FormItem>
<s:FormItem label="E-mail">
<s:TextInput id="formContact"
width="200"
text="{user.contact}"/>
</s:FormItem>
<s:FormItem label="{R.get('PASSWORD')}">
<s:HGroup>
<s:TextInput id="passwordTxt"
visible="{user.pass!=null && user.pass!=''}"
includeInLayout="{user.pass!=null && user.pass!=''}"
text="{user.pass}"
displayAsPassword="true"
editable="false"
selectable="false"/>
<s:Button width="100"
label="{currentState == 'create' ? R.get('SET') : R.get('CHANGE')}..."
click="changePass()"/>
</s:HGroup>
</s:FormItem>
<s:FormItem label="{R.get('PRIVILEGES')}">
<!-- <s:TileGroup width="200" horizontalGap="5" verticalGap="8"> -->
<s:VGroup width="100%">
<s:HGroup horizontalAlign="left"
verticalAlign="middle"
width="100%">
<s:CheckBox id="formAdmin"
width="15"
enabled="{user._id != Console.currentSession.user._id}"
click="onPermissionsChange(event)"/>
<s:Image source="@Embed('img/privs/admin.png')"/>
<s:Label text="{R.get('ADMIN_DESC')}"/>
</s:HGroup>
<s:HGroup horizontalAlign="left"
verticalAlign="middle"
width="100%">
<s:CheckBox id="formSys"
width="15"
click="onPermissionsChange(event)"/>
<s:Image source="@Embed('img/privs/sys.png')"/>
<s:Label text="{R.get('SYS_DESC')}"/>
</s:HGroup>
<s:HGroup horizontalAlign="left"
verticalAlign="middle"
width="100%">
<s:CheckBox id="formTech"
width="15"
click="onPermissionsChange(event)"/>
<s:Image source="@Embed('img/privs/tech.png')"/>
<s:Label text="{R.get('TECH_DESC')}"/>
</s:HGroup>
<s:HGroup horizontalAlign="left"
verticalAlign="middle"
width="100%">
<s:CheckBox id="formView"
width="15"
click="onPermissionsChange(event)"/>
<s:Image source="@Embed('img/privs/view.png')"/>
<s:Label text="{R.get('VIEW_DESC')}"/>
</s:HGroup>
<s:HGroup width="100%"
horizontalAlign="right">
<s:Button click="openPrivsPanel()"
label="{R.get('ADVANCED_PERMISSIONS')}"/>
</s:HGroup>
</s:VGroup>
<!-- </s:TileGroup> -->
</s:FormItem>
<s:FormItem label="{R.get('LANGUAGE')}">
<s:DropDownList id="formLocale"
width="100"
dataProvider="{Console.locales}"
requireSelection="true"
selectedIndex="{Console.locales.getItemIndex(user.locale)}"/>
</s:FormItem>
<s:FormItem label="{R.get('CONSOLE_TIMEZONE')}">
<s:DropDownList id="formConsoletime"
width="100"
dataProvider="{ClockProfile.timezones}"
selectedIndex="{user.timezone + 12}"/>
</s:FormItem>
<s:FormItem label="{R.get('GROUPS')}">
<groups:GroupSelector id="groups"
width="200"
dataProvider="{user.group_ids}"/>
</s:FormItem>
</s:Form>
</utils:TitleWindowSaveCancel>