hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/accounting/view/users/UserForm.mxml

Summary

Maintainability
Test Coverage
<?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 &amp;&amp; user.pass!=''}"
                                         includeInLayout="{user.pass!=null &amp;&amp; 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>