menuProvider.py (6127B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\accessGroups\menuProvider.py 2 from collections import defaultdict 3 from carbon.common.script.sys.serviceConst import ROLEMASK_ELEVATEDPLAYER 4 from carbonui.util.sortUtil import SortListOfTuples 5 from eve.client.script.ui.shared.addressBookWindow import AddressBookWindow 6 from eve.client.script.ui.structure.accessGroups.nameAndDescriptionWnd import AccessGroupsEditGroup 7 from localization import GetByLabel 8 from ownergroups.ownergroupConst import MEMBERSHIP_TYPE_MANAGER, MEMBERSHIP_TYPE_ADMIN, MEMBERSHIP_TYPE_EXCLUDED, MEMBERSHIP_TYPE_MEMBER, PUBLIC_MEMBER_ID 9 from ownergroups.ownergroupsUIUtil import MENU_LABEL_PATH_DICT, ACCESS_SORT_ORDER 10 import blue 11 from carbonui.uicore import uicore 12 from eveservices.menu import GetMenuService 13 from menu import MenuLabel 14 15 class MenuProvider(object): 16 17 def GetMenuForMember(self, groupID, nodes, myMemberShipType, parentController, corpOwnedGroup): 18 characterListDict = defaultdict(list) 19 nodesByMemberID = {} 20 for eachNode in nodes: 21 memberID = eachNode.memberID 22 nodesByMemberID[memberID] = eachNode 23 for eachMembershipType in [MEMBERSHIP_TYPE_MANAGER, MEMBERSHIP_TYPE_ADMIN, MEMBERSHIP_TYPE_EXCLUDED]: 24 if not self._CanModifyOther(myMemberShipType, eachMembershipType): 25 continue 26 if eachNode.membershipType == eachMembershipType: 27 memberShipKey = (eachMembershipType, True) 28 else: 29 memberShipKey = (eachMembershipType, False) 30 characterListDict[memberShipKey].append(memberID) 31 32 m = [] 33 for eachMembershipType, memberIDs in characterListDict.iteritems(): 34 membershipType, haveLevel = eachMembershipType 35 charIDs = self._GetFilteredCharIDsBasedOnMembership(myMemberShipType, nodesByMemberID, doTypeCheck=True) 36 label = GetByLabel(MENU_LABEL_PATH_DICT.get(eachMembershipType)) 37 if not charIDs: 38 continue 39 if len(charIDs) > 1: 40 label += ' (%s)' % len(charIDs) 41 sortValue = ACCESS_SORT_ORDER.index(membershipType) 42 if haveLevel: 43 newMembershipType = MEMBERSHIP_TYPE_MEMBER 44 else: 45 newMembershipType = membershipType 46 m.append(((sortValue, label.lower()), (label, parentController.UpdateMembershipTypes, (groupID, charIDs, newMembershipType)))) 47 48 m = SortListOfTuples(m) 49 removeText = GetByLabel('UI/Structures/AccessGroups/RemoveMember') 50 removableMemberIDs = self._GetFilteredCharIDsBasedOnMembership(myMemberShipType, nodesByMemberID) 51 if session.charid in nodesByMemberID: 52 removableMemberIDs.add(session.charid) 53 if not corpOwnedGroup and removableMemberIDs: 54 if len(removableMemberIDs) > 1: 55 removeText += ' (%s)' % len(removableMemberIDs) 56 m += [(removeText, parentController.RemoveMembers, (groupID, removableMemberIDs))] 57 memberMenuOptions = self._GetGenericMemberMenuOptions(nodesByMemberID) 58 if memberMenuOptions: 59 m += [None] + memberMenuOptions 60 return m 61 62 def _GetFilteredCharIDsBasedOnMembership(self, ownMembership, membershipTypeByMemberID, doTypeCheck = False): 63 filteredMemberIDs = set() 64 for memberID, node in membershipTypeByMemberID.iteritems(): 65 if doTypeCheck and node.entryType in (PUBLIC_MEMBER_ID, const.typeAlliance, const.typeCorporation): 66 continue 67 if ownMembership == MEMBERSHIP_TYPE_ADMIN or self._CanModifyOther(ownMembership, node.membershipType): 68 filteredMemberIDs.add(memberID) 69 70 return filteredMemberIDs 71 72 def _GetGenericMemberMenuOptions(self, nodesByMemberID): 73 if len(nodesByMemberID) != 1: 74 return [] 75 node = nodesByMemberID.values()[0] 76 if node.ownerInfo is None: 77 return [] 78 memberID = node.memberID 79 typeID = node.ownerInfo.typeID 80 if typeID == const.typeAlliance: 81 menuLabel = MenuLabel('UI/Common/Alliance') 82 elif typeID == const.typeCorporation: 83 menuLabel = MenuLabel('UI/Common/Corporation') 84 else: 85 menuLabel = MenuLabel('UI/Common/Pilot', {'character': memberID}) 86 memberMenuOptions = [(menuLabel, ('isDynamic', GetMenuService().GetMenuFromItemIDTypeID, (memberID, typeID)))] 87 return memberMenuOptions 88 89 def _CanModifyOther(self, myMembership, theirMembership): 90 if myMembership == MEMBERSHIP_TYPE_ADMIN: 91 return True 92 myIndex = ACCESS_SORT_ORDER.index(myMembership) 93 theirIndex = ACCESS_SORT_ORDER.index(theirMembership) 94 if myIndex < theirIndex: 95 return True 96 return False 97 98 def GetMenuForGroupID(self, node, parentController): 99 groupID = node.groupInfo.groupID 100 accessRight = node.groupInfo.membershipType 101 ownedByCorp = node.groupInfo.creatorID == session.corpid 102 m = [] 103 if not ownedByCorp: 104 m += [(MenuLabel('UI/Structures/AccessGroups/AddMembers'), self._OpenPeopleAndPlaces, ())] 105 if accessRight == MEMBERSHIP_TYPE_ADMIN and not ownedByCorp: 106 m += [(MenuLabel('UI/Structures/AccessGroups/EditGroup'), self._EditGroup, (parentController, groupID)), None, (MenuLabel('UI/Structures/AccessGroups/DeleteGroup'), parentController.Delete, (groupID,))] 107 if session.role & ROLEMASK_ELEVATEDPLAYER: 108 m.append(('GM: groupID: ' + str(groupID), blue.pyos.SetClipboardData, (str(groupID),))) 109 return m 110 111 def _OpenPeopleAndPlaces(self): 112 wnd = AddressBookWindow.GetIfOpen() 113 if wnd and not wnd.destroyed: 114 wnd.Maximize() 115 else: 116 return uicore.cmd.OpenPeopleAndPlaces() 117 118 def _EditGroup(self, parentController, groupID): 119 groupInfo = parentController.GetMyGroupInfo(groupID) 120 editWnd = AccessGroupsEditGroup(controller=parentController, groupInfo=groupInfo)