evemailingListConfig.py (24881B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\evemailingListConfig.py 2 import math 3 import utillib 4 from carbonui.control.combo import Combo 5 from carbonui.control.singlelineedits.singleLineEditText import SingleLineEditText 6 from carbonui.control.window import Window 7 from carbonui.primitives.container import Container 8 from carbonui.primitives.containerAutoSize import ContainerAutoSize 9 from carbonui.primitives.layoutGrid import LayoutGrid 10 from carbonui.primitives.line import Line 11 from eve.client.script.ui.control import eveLabel, eveScroll 12 from eve.client.script.ui.control.allUserEntries import AllUserEntries 13 from carbonui.button.group import ButtonGroup 14 from carbonui.control.button import Button 15 from carbonui.control.checkbox import Checkbox 16 from eve.client.script.ui.control.entries.util import GetFromClass 17 from eve.client.script.ui.control.eveEditPlainText import EditPlainText 18 from carbonui.control.tabGroup import TabGroup 19 from eve.client.script.ui.shared.neocom.evemail import MailWindow 20 from eve.client.script.ui.shared.userentry import UserSimple 21 from eve.common.lib import appConst as const 22 import evetypes 23 import carbonui.const as uiconst 24 import uthread 25 import localization 26 from eve.client.script.ui.util import searchOld 27 from eve.client.script.ui.util.linkUtil import GetItemIDFromTextLink 28 from eveexceptions import UserError 29 from eveservices.menu import GetMenuService 30 from player_messaging.client.ui_message import prompt_player_fsd_dialog 31 PAD = 6 32 SPACING = 22 33 EDITHEIGHT = 32 34 FIELDWIDTH = 70 35 FIELDSPACE = 10 36 BUTTONTOP = 2 37 FILTER_ALL = 0 38 FILTER_MEMBERS = 1 39 FILTER_MUTED = 2 40 FILTER_OPERATORS = 3 41 FILTER_BYNAME = 4 42 ACTION_SETMEMBER = 0 43 ACTION_SETMUTED = 1 44 ACTION_SETOPERATOR = 2 45 ACTION_KICK = 3 46 NUMPERPAGE = 50 47 ALLOWED_GROUP_IDS = [const.groupCharacter, const.groupCorporation, const.groupAlliance] 48 49 class MaillistSetupWindow(Window): 50 __guid__ = 'form.MaillistSetupWindow' 51 default_iconNum = MailWindow.default_iconNum 52 53 def ApplyAttributes(self, attributes): 54 Window.ApplyAttributes(self, attributes) 55 self.mailingListID = attributes.mailingListID 56 self.mlsvc = sm.GetService('mailinglists') 57 self.groupName = self.mlsvc.GetDisplayName(self.mailingListID) 58 self.SetMinSize([350, 460]) 59 self.SetCaption(localization.GetByLabel('UI/EVEMail/MailingLists/Caption', mailinglistName=self.groupName)) 60 self.welcomeText = None 61 self.sr.tabs = TabGroup(name='tabs', parent=self.content) 62 self.sr.membersPanel = Container(name='membersPanel', parent=self.content, align=uiconst.TOALL) 63 self.sr.accessPanel = Container(name='accessPanel', parent=self.content, align=uiconst.TOALL) 64 self.sr.welcomePanel = Container(name='welcomePanel', parent=self.content, align=uiconst.TOALL) 65 tabs = [[localization.GetByLabel('UI/EVEMail/MailingLists/MembersTab'), 66 self.sr.membersPanel, 67 self, 68 'members'], [localization.GetByLabel('UI/EVEMail/MailingLists/AccessTab'), 69 self.sr.accessPanel, 70 self, 71 'access'], [localization.GetByLabel('UI/EVEMail/MailingLists/WelcomeMailTab'), 72 self.sr.welcomePanel, 73 self, 74 'welcome']] 75 self.StartupMembersPanel() 76 self.StartupAccessPanel() 77 self.StartupWelcomePanel() 78 self.sr.tabs.Startup(tabs, 'mailinglistSetup_tabs', autoselecttab=1) 79 80 def StartupMembersPanel(self): 81 membersPanel = self.sr.membersPanel 82 comboOptions = [(localization.GetByLabel('UI/Common/All'), FILTER_ALL), 83 (localization.GetByLabel('UI/EVEMail/MailingLists/NormalMembers'), FILTER_MEMBERS), 84 (localization.GetByLabel('UI/EVEMail/MailingLists/MutedMembers'), FILTER_MUTED), 85 (localization.GetByLabel('UI/Chat/Operators'), FILTER_OPERATORS), 86 (localization.GetByLabel('UI/EVEMail/MailingLists/SearchByName'), FILTER_BYNAME)] 87 topCont = Container(name='topCont', parent=membersPanel, align=uiconst.TOTOP, pos=(0, 10, 0, 28)) 88 self.sr.membersPanel.showMembersCombo = Combo(label=localization.GetByLabel('UI/EVEMail/MailingLists/ShowLabel'), parent=topCont, options=comboOptions, name='showMembersCombo', callback=self.OnShowMembersComboChanged, width=100, align=uiconst.TOPLEFT) 89 self.sr.membersPanel.searchEdit = SingleLineEditText(label=localization.GetByLabel('UI/PeopleAndPlaces/SearchString'), name='searchEdit', parent=topCont, align=uiconst.TOPLEFT, pos=(115, 90 0, 91 80, 92 EDITHEIGHT), state=uiconst.UI_HIDDEN, isCharCorpOrAllianceField=True) 93 self.sr.membersPanel.searchEdit.ShowClearButton(showOnLetterCount=3) 94 self.sr.membersPanel.searchEdit.OnReturn = self.UpdateMembersScroll 95 self.sr.membersPanel.searchButton = Button(parent=topCont, label=localization.GetByLabel('UI/Common/Buttons/Search'), left=200, func=self.UpdateMembersScroll, align=uiconst.TOPLEFT, state=uiconst.UI_HIDDEN) 96 pagingCont = LayoutGrid(parent=ContainerAutoSize(parent=topCont, align=uiconst.TORIGHT), align=uiconst.CENTER, columns=3, cellSpacing=(4, 0)) 97 self.sr.pageBackBtn = Button(parent=pagingCont, align=uiconst.CENTER, texturePath='res:/UI/Texture/Icons/23_64_1.png', iconSize=24, hint=localization.GetByLabel('UI/Common/Previous'), func=lambda : self.ChangeMembersPage(-1), args=()) 98 self.sr.pageCount = eveLabel.EveLabelMedium(parent=pagingCont, align=uiconst.CENTER, state=uiconst.UI_DISABLED, text='') 99 self.sr.pageFwdBtn = Button(parent=pagingCont, align=uiconst.CENTER, texturePath='res:/UI/Texture/Icons/23_64_2.png', iconSize=24, hint=localization.GetByLabel('UI/Common/Next'), func=lambda : self.ChangeMembersPage(1), args=()) 100 bottomCont = Container(parent=membersPanel, align=uiconst.TOBOTTOM, pos=(0, 101 0, 102 100, 103 EDITHEIGHT), padding=(0, 104 3 * PAD, 105 0, 106 PAD), state=uiconst.UI_PICKCHILDREN) 107 comboOptions = [(localization.GetByLabel('UI/EVEMail/MailingLists/SetRoleMember'), ACTION_SETMEMBER), 108 (localization.GetByLabel('UI/EVEMail/MailingLists/SetRoleMuted'), ACTION_SETMUTED), 109 (localization.GetByLabel('UI/EVEMail/MailingLists/SetRoleOperator'), ACTION_SETOPERATOR), 110 (localization.GetByLabel('UI/EVEMail/MailingLists/Kick'), ACTION_KICK)] 111 self.sr.membersPanel.actionCombo = Combo(label=localization.GetByLabel('UI/EVEMail/MailingLists/ApplyToSelected'), parent=bottomCont, options=comboOptions, name='showMembersCombo', width=150, align=uiconst.TOPLEFT) 112 self.sr.membersPanel.ApplyBtn = Button(parent=bottomCont, label=localization.GetByLabel('UI/Generic/Apply'), func=self.ApplyActionToMembers, align=uiconst.TOPRIGHT) 113 self.sr.membersPanel.ApplyBtn.Disable() 114 self.roles = {const.mailingListMemberDefault: localization.GetByLabel('UI/EVEMail/MailingLists/Member'), 115 const.mailingListMemberMuted: localization.GetByLabel('UI/EVEMail/MailingLists/MutedMember'), 116 const.mailingListMemberOperator: localization.GetByLabel('UI/EVEMail/MailingLists/Operator'), 117 const.mailingListMemberOwner: localization.GetByLabel('UI/EVEMail/MailingLists/Owner')} 118 self.sr.membersPanel.scroll = eveScroll.Scroll(parent=membersPanel, name='membersScroll', padTop=PAD) 119 self.sr.membersPanel.scroll.sr.id = 'membersPanelScroll' 120 self.sr.membersPanel.scroll.OnSelectionChange = self.OnMembersScrollSelectionChange 121 122 def OnMembersScrollSelectionChange(self, *args): 123 if len(self.sr.membersPanel.scroll.GetSelected()) > 0: 124 self.sr.membersPanel.ApplyBtn.Enable() 125 else: 126 self.sr.membersPanel.ApplyBtn.Disable() 127 128 def OnShowMembersComboChanged(self, comboBox, selString, selVal): 129 if selVal == FILTER_BYNAME: 130 self.sr.membersPanel.searchEdit.state = uiconst.UI_NORMAL 131 self.sr.membersPanel.searchButton.state = uiconst.UI_NORMAL 132 else: 133 self.sr.membersPanel.searchEdit.state = uiconst.UI_HIDDEN 134 self.sr.membersPanel.searchButton.state = uiconst.UI_HIDDEN 135 self.UpdateMembersScroll() 136 137 def ChangeMembersPage(self, pageChange, *args): 138 self.currPage += pageChange 139 if self.numPages <= 1: 140 self.sr.pageBackBtn.Disable() 141 self.sr.pageFwdBtn.Disable() 142 elif self.currPage == 0: 143 self.sr.pageBackBtn.Disable() 144 self.sr.pageFwdBtn.Enable() 145 elif self.currPage == self.numPages - 1: 146 self.sr.pageBackBtn.Enable() 147 self.sr.pageFwdBtn.Disable() 148 else: 149 self.sr.pageBackBtn.Enable() 150 self.sr.pageFwdBtn.Enable() 151 self.PopulateMembersScroll() 152 self.sr.pageCount.text = '%s / %s' % (self.currPage + 1, self.numPages) 153 154 def UpdateMembersScroll(self, *args): 155 self.members = self.mlsvc.GetMembers(self.mailingListID) 156 if not self or self.destroyed: 157 return 158 self.FilterMembers() 159 self.SortMembers() 160 self.PageMembers() 161 self.PopulateMembersScroll() 162 163 def FilterMembers(self, *args): 164 filter = self.sr.membersPanel.showMembersCombo.GetValue() 165 self.filteredMembers = [] 166 if filter == FILTER_ALL: 167 for memberID, accessLevel in self.members.iteritems(): 168 self.filteredMembers.append(utillib.KeyVal(memberID=memberID, accessLevel=accessLevel)) 169 170 elif filter == FILTER_MEMBERS: 171 for memberID, accessLevel in self.members.iteritems(): 172 if accessLevel == const.mailingListMemberDefault: 173 self.filteredMembers.append(utillib.KeyVal(memberID=memberID, accessLevel=accessLevel)) 174 175 elif filter == FILTER_MUTED: 176 for memberID, accessLevel in self.members.iteritems(): 177 if accessLevel == const.mailingListMemberMuted: 178 self.filteredMembers.append(utillib.KeyVal(memberID=memberID, accessLevel=accessLevel)) 179 180 elif filter == FILTER_OPERATORS: 181 for memberID, accessLevel in self.members.iteritems(): 182 if accessLevel == const.mailingListMemberOperator or accessLevel == const.mailingListMemberOwner: 183 self.filteredMembers.append(utillib.KeyVal(memberID=memberID, accessLevel=accessLevel)) 184 185 elif filter == FILTER_BYNAME: 186 searchStr = self.sr.membersPanel.searchEdit.GetValue().strip().lower() 187 for memberID, accessLevel in self.members.iteritems(): 188 name = cfg.eveowners.Get(memberID).name.strip().lower() 189 if name.startswith(searchStr): 190 self.filteredMembers.append(utillib.KeyVal(memberID=memberID, accessLevel=accessLevel)) 191 192 def SortMembers(self): 193 self.filteredMembers.sort(cmp=self._CompareMembers) 194 195 def _CompareMembers(self, x, y): 196 nameX = cfg.eveowners.Get(x.memberID).name.lower() 197 nameY = cfg.eveowners.Get(y.memberID).name.lower() 198 if nameX < nameY: 199 return -1 200 elif nameX == nameY: 201 return 0 202 else: 203 return 1 204 205 def PageMembers(self): 206 self.currPage = 0 207 self.pagedMembers = [] 208 self.numPages = int(math.ceil(float(len(self.filteredMembers)) / NUMPERPAGE)) 209 for i in range(self.numPages): 210 self.pagedMembers.append(self.filteredMembers[i * NUMPERPAGE:(i + 1) * NUMPERPAGE]) 211 212 if self.numPages > 1: 213 pages = [] 214 for i in range(self.numPages): 215 pages.append((str(i + 1), i)) 216 217 self.ChangeMembersPage(0) 218 219 def PopulateMembersScroll(self, *args): 220 scrolllist = [] 221 self.checkedMembers = [] 222 if len(self.pagedMembers) == 0: 223 page = [] 224 else: 225 page = self.pagedMembers[self.currPage] 226 ownerIDs = {m.memberID for m in page} 227 cfg.eveowners.Prime(ownerIDs) 228 for m in page: 229 memberID = m.memberID 230 memberInfo = cfg.eveowners.Get(memberID) 231 label = '%s<t>%s' % (memberInfo.name, self.roles[m.accessLevel]) 232 entry = GetFromClass(UserSimple, {'charID': memberID, 233 'info': memberInfo, 234 'label': label, 235 'ownerID': memberID}) 236 scrolllist.append(entry) 237 238 self.sr.membersPanel.scroll.Load(contentList=scrolllist, headers=[localization.GetByLabel('UI/Generic/NamePerson'), localization.GetByLabel('UI/EVEMail/MailingLists/Role')], customColumnWidths=True, noContentHint=localization.GetByLabel('UI/EVEMail/MailingLists/NoMembersFound')) 239 self.sr.membersPanel.ApplyBtn.Disable() 240 241 @staticmethod 242 def GetCharMenu(entry, *args): 243 return GetMenuService().CharacterMenu(entry.sr.node.charID) 244 245 def ApplyActionToMembers(self, *args): 246 action = self.sr.membersPanel.actionCombo.GetValue() 247 selectedMembers = self._GetSelectedMembers() 248 doClose = False 249 if action == ACTION_SETMEMBER: 250 if session.charid in selectedMembers: 251 ret = prompt_player_fsd_dialog('MailingListMemberSelfConfirm', {}, uiconst.YESNO) 252 if ret != uiconst.ID_YES: 253 return 254 doClose = True 255 self.mlsvc.SetMembersClear(self.mailingListID, selectedMembers) 256 elif action == ACTION_SETMUTED: 257 if session.charid in selectedMembers: 258 ret = prompt_player_fsd_dialog('MailingListMuteSelfConfirm', {}, uiconst.YESNO) 259 if ret != uiconst.ID_YES: 260 return 261 doClose = True 262 self.mlsvc.SetMembersMuted(self.mailingListID, selectedMembers) 263 elif action == ACTION_SETOPERATOR: 264 self.mlsvc.SetMembersOperator(self.mailingListID, selectedMembers) 265 elif action == ACTION_KICK: 266 self.mlsvc.KickMembers(self.mailingListID, selectedMembers) 267 self.UpdateAccessScrollData() 268 if doClose: 269 self.Close() 270 else: 271 self.UpdateMembersScroll() 272 273 def _GetSelectedMembers(self): 274 selected = [] 275 for s in self.sr.membersPanel.scroll.GetSelected(): 276 selected.append(s.ownerID) 277 278 return selected 279 280 def ClearAccessForSelected(self, *args): 281 selected = self.sr.blockedScroll.GetSelected() + self.sr.allowedScroll.GetSelected() 282 if selected: 283 for e in selected: 284 self.mlsvc.ClearEntityAccess(self.mailingListID, e.ownerID) 285 286 self.UpdateAccessScrollData() 287 else: 288 raise UserError('PICKERRORNOTIFY', {'num': 1}) 289 290 def AddToBlocked(self, *args): 291 self._ModifyAccess(const.mailingListBlocked) 292 293 def AddToAllowed(self, *args): 294 self._ModifyAccess(const.mailingListAllowed) 295 296 def _ModifyAccess(self, newAccess): 297 ownerID = self.Search(self.sr.blockEdit.GetValue()) 298 if ownerID is not None: 299 self.mlsvc.SetEntityAccess(self.mailingListID, ownerID, newAccess) 300 self.UpdateAccessScrollData() 301 302 def OnDropInBlocked(self, dragObj, nodes): 303 self._UpdateAccessOnDropNodes(nodes, const.mailingListBlocked) 304 305 def OnDropInAllowed(self, dragObj, nodes): 306 self._UpdateAccessOnDropNodes(nodes, const.mailingListAllowed) 307 308 def _UpdateAccessOnDropNodes(self, nodes, newAccess): 309 validTypeIDs = evetypes.GetTypeIDsByGroups(ALLOWED_GROUP_IDS) 310 ownerIDs = set() 311 for node in nodes: 312 if (node.charID or node.itemID) and node.__guid__ in AllUserEntries(): 313 ownerIDs.add(node.charID or node.itemID) 314 elif node.itemID and node.typeID and node.typeID in validTypeIDs: 315 ownerIDs.add(node.itemID) 316 elif getattr(node, '__guid__', None) == 'TextLink': 317 itemID = GetItemIDFromTextLink(node, validTypeIDs) 318 if itemID: 319 ownerIDs.add(itemID) 320 321 if not ownerIDs: 322 return 323 cfg.eveowners.Prime(ownerIDs) 324 accessByEntityID = {x:newAccess for x in ownerIDs if cfg.eveowners.Get(x).groupID in ALLOWED_GROUP_IDS} 325 if not accessByEntityID: 326 return 327 self.mlsvc.SetEntitiesAccess(self.mailingListID, accessByEntityID) 328 self.UpdateAccessScrollData() 329 330 def UpdateBlockedScroll(self): 331 self.sr.blockedScroll.Load(contentList=self.scrolllist[const.mailingListBlocked], headers=[localization.GetByLabel('UI/Generic/NamePerson'), localization.GetByLabel('UI/Common/Type')], customColumnWidths=True) 332 333 def UpdateAllowedScroll(self): 334 self.sr.allowedScroll.Load(contentList=self.scrolllist[const.mailingListAllowed], headers=[localization.GetByLabel('UI/Generic/NamePerson'), localization.GetByLabel('UI/Common/Type')], customColumnWidths=True) 335 336 def StartupAccessPanel(self): 337 accessPanel = self.sr.accessPanel 338 topCont = Container(name='topCont', parent=accessPanel, align=uiconst.TOTOP, height=130) 339 comboOptions = [(localization.GetByLabel('UI/EVEMail/MailingLists/PrivateAccess'), const.mailingListBlocked), (localization.GetByLabel('UI/EVEMail/MailingLists/PublicAccess'), const.mailingListAllowed)] 340 self.sr.accessPanel.defaultAccessCombo = Combo(label=localization.GetByLabel('UI/EVEMail/MailingLists/DefaultAccessLabel'), parent=topCont, options=comboOptions, name='subcriptionAccessCombo', select=self.mlsvc.GetSettings(self.mailingListID).defaultAccess, pos=(0, 341 SPACING, 342 0, 343 0), width=200) 344 Button(parent=topCont, label=localization.GetByLabel('UI/Common/Buttons/Apply'), pos=(0, 41, 0, 0), func=self.ApplySettings, align=uiconst.TOPRIGHT) 345 roleComboOptions = [(localization.GetByLabel('UI/EVEMail/MailingLists/Normal'), const.mailingListMemberDefault), (localization.GetByLabel('UI/EVEMail/MailingLists/MutedRole'), const.mailingListMemberMuted)] 346 self.sr.accessPanel.defaultRoleCombo = Combo(label=localization.GetByLabel('UI/EVEMail/MailingLists/DefaultMemberRole'), parent=topCont, options=roleComboOptions, name='roleCombo', select=self.mlsvc.GetSettings(self.mailingListID).defaultMemberAccess, pos=(0, 347 self.sr.accessPanel.defaultAccessCombo.top + self.sr.accessPanel.defaultAccessCombo.height + SPACING, 348 0, 349 0), width=200) 350 Line(parent=topCont, align=uiconst.TOBOTTOM) 351 addToBlockCont = Container(name='AddToBlockCont', parent=accessPanel, align=uiconst.TOTOP, state=uiconst.UI_PICKCHILDREN, pos=(0, 0, 0, 22), padding=(0, 20, 0, 0)) 352 self.sr.blockEdit = SingleLineEditText(label=localization.GetByLabel('UI/EVEMail/MailingLists/EntitySearchLabel'), name='AddToBlockEdit', parent=addToBlockCont, align=uiconst.TOPLEFT, pos=(0, 0, 100, 0), isCharCorpOrAllianceField=True) 353 self.sr.blockEdit.ShowClearButton(showOnLetterCount=3) 354 b1 = Button(parent=addToBlockCont, label=localization.GetByLabel('UI/EVEMail/MailingLists/Allow'), func=self.AddToAllowed, align=uiconst.CENTERRIGHT) 355 Button(parent=addToBlockCont, label=localization.GetByLabel('UI/PeopleAndPlaces/BlockContact'), func=self.AddToBlocked, align=uiconst.CENTERRIGHT, left=b1.width + b1.left + 4) 356 self.sr.scrollCont = scrollCont = Container(name='scrollCont', parent=accessPanel, align=uiconst.TOALL) 357 eveLabel.EveLabelSmall(text=localization.GetByLabel('UI/EVEMail/MailingLists/BlockedLabel'), parent=scrollCont, align=uiconst.TOTOP, top=10, state=uiconst.UI_NORMAL) 358 self.sr.blockedScroll = eveScroll.Scroll(parent=scrollCont, name='blockedScroll', align=uiconst.TOTOP) 359 self.sr.blockedScroll.OnSetFocus = self.BlockedScrollOnSetFocus 360 self.sr.blockedScroll.sr.id = 'blockedScroll' 361 self.sr.blockedScroll.sr.content.OnDropData = self.OnDropInBlocked 362 eveLabel.EveLabelSmall(text=localization.GetByLabel('UI/EVEMail/MailingLists/AllowedLabel'), parent=scrollCont, align=uiconst.TOTOP, top=10, state=uiconst.UI_NORMAL) 363 self.sr.allowedScroll = eveScroll.Scroll(parent=scrollCont, name='allowedScroll', align=uiconst.TOTOP) 364 self.sr.allowedScroll.OnSetFocus = self.AllowedScrollOnSetFocus 365 self.sr.allowedScroll.sr.id = 'allowedScroll' 366 self.sr.allowedScroll.sr.content.OnDropData = self.OnDropInAllowed 367 self.UpdateAccessScrollData() 368 ButtonGroup(btns=[[localization.GetByLabel('UI/EVEMail/MailingLists/RemoveSelected'), 369 self.ClearAccessForSelected, 370 None, 371 None]], parent=accessPanel, line=False) 372 self._OnResize() 373 374 def AllowedScrollOnSetFocus(self): 375 self.sr.blockedScroll.DeselectAll() 376 377 def BlockedScrollOnSetFocus(self): 378 self.sr.allowedScroll.DeselectAll() 379 380 def UpdateAccessScrollData(self): 381 self.scrolllist = {const.mailingListAllowed: [], 382 const.mailingListBlocked: []} 383 accessList = self.mlsvc.GetSettings(self.mailingListID).access 384 cfg.eveowners.Prime(accessList.keys()) 385 for i, m in enumerate(accessList.iteritems()): 386 ownerID, accessLevel = m 387 owner = cfg.eveowners.Get(ownerID) 388 label = '%s<t>%s' % (owner.name, evetypes.GetGroupNameByGroup(owner.groupID)) 389 entry = GetFromClass(UserSimple, {'charID': ownerID, 390 'info': owner, 391 'label': label, 392 'ownerID': ownerID}) 393 self.scrolllist[accessLevel].append(entry) 394 395 self.UpdateAllowedScroll() 396 self.UpdateBlockedScroll() 397 398 def ApplySettings(self, *args): 399 defaultAccess = self.sr.accessPanel.defaultAccessCombo.GetValue() 400 defaultRole = self.sr.accessPanel.defaultRoleCombo.GetValue() 401 self.mlsvc.SetDefaultAccess(self.mailingListID, defaultAccess, defaultRole) 402 403 def Search(self, searchStr): 404 return searchOld.SearchOwners(searchStr=searchStr, groupIDs=ALLOWED_GROUP_IDS, hideNPC=True, notifyOneMatch=True, searchWndName='AddToBlockSearch') 405 406 def StartupWelcomePanel(self, *args): 407 welcomePanel = self.sr.welcomePanel 408 self.sr.wekcomeToAllCB = Checkbox(parent=welcomePanel, align=uiconst.TOBOTTOM, padTop=8, text=localization.GetByLabel('UI/EVEMail/MailingLists/SendWelcomeMailToAllCheckbox'), settingsKey='welcomeToAllCB', retval=self.mailingListID, checked=settings.user.ui.Get('welcomeToAllCB_%s' % self.mailingListID, 0), callback=self.OnCheckboxChange) 409 self.sr.subjecField = SingleLineEditText(name='subjecField', parent=welcomePanel, align=uiconst.TOTOP, padBottom=8, maxLength=const.mailMaxSubjectSize, label='', hintText=localization.GetByLabel('UI/EVEMail/MailingLists/WelcomeMailSubject')) 410 self.sr.welcomeScrollCont = scrollCont = Container(name='scrollCont', parent=welcomePanel, align=uiconst.TOALL) 411 self.sr.welcomeEdit = EditPlainText(setvalue='', parent=self.sr.welcomeScrollCont, align=uiconst.TOALL, showattributepanel=1, maxLength=const.mailMaxTaggedBodySize) 412 ButtonGroup(btns=[[localization.GetByLabel('UI/Common/Buttons/Save'), 413 self.SaveWelcomeMail, 414 None, 415 None]], parent=welcomePanel, padTop=8, idx=0) 416 417 def OnCheckboxChange(self, checkbox, *args): 418 value = self.mailingListID or '' 419 name = '%s_%s' % (checkbox.name, value) 420 settings.user.ui.Set(name, checkbox.checked) 421 422 def UpdateWelcome(self, *args): 423 welcomeMail = self.mlsvc.GetWelcomeMail(self.mailingListID) 424 if not welcomeMail: 425 self.sr.welcomeEdit.SetValue('') 426 self.sr.subjecField.SetValue('') 427 return 428 self.welcomeText = welcomeMail 429 mail = welcomeMail[0] 430 self.sr.welcomeEdit.SetValue(mail.body) 431 self.sr.subjecField.SetValue(mail.title) 432 433 def SaveWelcomeMail(self, *args): 434 sendToAll = self.sr.wekcomeToAllCB.GetValue() 435 subject = self.sr.subjecField.GetValue() 436 body = self.sr.welcomeEdit.GetValue() 437 if len(subject) < 1 and len(body) < 1: 438 self.mlsvc.ClearWelcomeMail(self.mailingListID) 439 return 440 if len(subject) < 1: 441 raise UserError('NoSubject') 442 if sendToAll: 443 self.mlsvc.SaveAndSendWelcomeMail(self.mailingListID, subject, body) 444 else: 445 self.mlsvc.SaveWelcomeMail(self.mailingListID, subject, body) 446 447 def _OnResize(self, *args): 448 uthread.new(self.__OnResize) 449 450 def __OnResize(self): 451 if self.destroyed or not self.sr.scrollCont: 452 return 453 aL, aT, aW, aH = self.sr.scrollCont.GetAbsolute() 454 newHeight = (aH - 72) / 2 455 self.sr.allowedScroll.height = newHeight 456 self.sr.blockedScroll.height = newHeight 457 458 def Load(self, key): 459 if key == 'members': 460 self.UpdateMembersScroll() 461 elif key == 'access': 462 self.UpdateAllowedScroll() 463 self._OnResize() 464 elif key == 'welcome': 465 if self.welcomeText is None: 466 self.UpdateWelcome()