def RemoveProfessionalName(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if "FullName" in objMember.objectIds(): if not objMember.Name: objMember.Name = objMember.FullName
def PostFixCheck(objHere): strResult = """<fieldset> <legend>Post-fix check</legend>""" strResult += "<ol>\n" objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if "ListMemberships" in objMember.objectIds(): if "ECL" in objMember.ListMemberships.objectIds(): strOldDeliveryMode = objMember.ListMemberships.ECL.myDeliveryMode strOldDeliveryAddress = objMember.ListMemberships.ECL.EmailAddress strDeliveryFrequency = objMember.EmailFrequency_ECL strDigestMode = objMember.EmailDigestMode strDeliveryAddress = objMember.EmailDeliveryAddress if strOldDeliveryMode == "NoMail" and strDeliveryFrequency == "Direct" and objMember.NoMail: pass elif strOldDeliveryMode == "Direct" and strDeliveryFrequency == "Direct" and strDigestMode == "StructuredDigest": pass elif strOldDeliveryMode in ["MIMEDigest", "TextDigest", "StructuredDigest", "TopicsList"] and strDeliveryFrequency == "Daily" and strDigestMode == strOldDeliveryMode: pass else: strResult += "<li>%s, from %s to %s - %s</li>" % (objMember.id, strOldDeliveryMode, strDeliveryFrequency, strDigestMode) strResult += "</ol>\n" strResult += "</fieldset>" return strResult
def ConvertNameToUstring(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): strName = ToUnicode(objMember.Name) objMember.manage_delProperties(("Name", )) objMember.manage_addProperty("Name", strName, "ustring")
def ChangeEmailSettings(objHere): # Old setting: # (member).ListMemberships.ECL.myDeliveryMode # (member).ListMemberships.ECL.EmailAddress # New settings: # (member).EmailDigestMode # (member).EmailFrequency-ECL # (member).EmailDeliveryAddress # Unchanged: # (member).NoMail # (member).ContactEmailAddress # Might happen later: # (member).EmailFrequency-ECL-Adverts, etc objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if not objMember.hasProperty("EmailDigestMode"): strDeliveryMode = objMember.ListMemberships.ECL.GetDeliveryMode() strEmailAddress = objMember.ListMemberships.ECL.EmailAddress objMember.manage_addProperty("EmailDeliveryAddress", strEmailAddress, "ustring") if "Digest" in strDeliveryMode: strFrequency = "Daily" strDigestMode = strDeliveryMode else: strFrequency = "Direct" strDigestMode = "StructuredDigest" objMember.manage_addProperty("EmailDigestMode", strDigestMode, "string") objMember.manage_addProperty("EmailFrequency_ECL", strFrequency, "string")
def SaveStats(objContext, dictStats): print "Saving stats" # Update all existing stats objStats = GetDataFolder(objContext, "E3ListStat") for objStat in objStats.objectValues("E3ListStat"): dtmDate = objStat.GetDateOfCount() if dictStats.has_key(dtmDate): for strItem in ("JoinedYesterday", "PaymentYesterday", "ExpiredYesterday", "AdvertPostedYesterday", "NonAdvertPostedYesterday"): if not objStat.hasProperty(strItem): objStat.manage_addProperty(strItem, dictStats[dtmDate][strItem], 'int') del(dicStats[dtmDate]) for strItem in cnStatsList: if not objStat.hasProperty(strItem): objStat.manage_addProperty(strItem, 0, "int") dodListStat = GetDOD(objContext, "E3ListStat") for dtmDate in dictStats.keys(): objStat = dodListStat.NewObject() objStat.SetDateOfCount(dtmDate) for strItem in ("JoinedYesterday", "PaymentYesterday", "ExpiredYesterday", "AdvertPostedYesterday", "NonAdvertPostedYesterday"): if dictStats[dtmDate].has_key(strItem): objStat.manage_addProperty(strItem, dictStats[dtmDate][strItem], 'int') for strItem in cnStatsList: if not objStat.hasProperty(strItem): objStat.manage_addProperty(strItem, 0, "int")
def u32to33AddProfileProperties(objHere, blnSkip = False): if blnSkip: print "Skipping: AddProfileProperties" return objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): AddProperties(objMember, (('FullName', '', 'ustring'), ('TagLine', '', 'ustring'), ('Biography', '', 'utext'), ('Testimonials', '', 'utext'), ('Country', '', 'ustring'), ('Location', '', 'ustring'), ('Postcode', '', 'ustring'), ('CommercialComments', '', 'utext'), ('CommunityComments', '', 'utext'), ('ContactEmailAddress', '', 'ustring'), ('PhoneNumber', '', 'ustring'), ('Languages', '', 'utext'), ('WebsiteAddress', '', 'ustring'), ('HostOfChapter', '', 'ustring'), ('ShowFullName', 'Hide', 'string'), ('ShowCountry', 'Hide', 'string'), ('ShowLocation', 'Hide', 'string'), ('ShowPostcode', 'Hide', 'string'), ('ShowEmailAddress', 'Hide', 'string'), ('ShowPhoneNumber', 'Hide', 'string'), ('ShowBiography', 'Hide', 'string'), ('ShowCommunityComments', 'Hide', 'string')))
def ParkingAccounts(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if objMember.GetNextExpiryFromMailman() < cnFirstDate: if objMember.Name <> 'Unknown': print objMember.Name
def ExtractEmailAddresses(objHere): """Processes all messages""" # objUnknownMember = SearchOne(objHere, 'E3Member', 'Username', 'Unknown') # if not objUnknownMember: # objDataObjectDefinition = GetDataFolder(objHere, 'DataObjectDefinitions').E3Member # objUnknownMember = objDataObjectDefinition.NewObject() # objUnknownMember.Username = '******' objArchive = GetDataFolder(objHere, 'E3Messages') objEmailAddresses = GetDataFolder(objHere, 'E3EmailAddress') objMembers = GetDataFolder(objHere, 'E3Member') dictAllEmailAddresses = GetAllEmailAddresses(objMembers, objEmailAddresses.Catalogue) dodMember = GetDOD(objHere, 'E3Member') dodEmailAddress = GetDOD(objHere, 'E3EmailAddress') intDone = 0 for objYear in objArchive.objectValues(): for objMonth in objYear.objectValues(): for objThread in objMonth.objectValues(): dictAllEmailAddresses = ExtractOneAddress(objThread, dictAllEmailAddresses, dodMember, dodEmailAddress) intDone = intDone + 1 # if intDone > 100: # return "done" for objMessage in objThread.objectValues('Folder'): intDone = intDone + 1 dictAllEmailAddresses = ExtractOneAddress(objMessage, dictAllEmailAddresses, dodMember, dodEmailAddress) return "%s done" % intDone
def ListUnconfirmedMembers(objHere): lstAddresses = [] lstMembershipTypes = [] objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if not objMember.MembershipType in lstMembershipTypes: lstMembershipTypes.append(objMember.MembershipType) if objMember.MembershipType == "Full" and not objMember.HasConfirmedEmailAddress: lstAddresses.append(objMember) strAddresses = "" for objMember in lstAddresses: strAddresses += '<li>%s (%s)</li>\n' % (objMember.EmailDeliveryAddress, objMember.id) strMembershipTypes = "" for strMembershipType in lstMembershipTypes: strMembershipTypes += "<li>%s</li>\n" % strMembershipType strResult = """ <h2>Membership types</h2> <ol> %s </ol> <h2>Members without confirmed email addresses</h2> <ol> %s </ol> """ % (strMembershipTypes, strAddresses) return strResult
def RemindToConfirm(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if objMember.VisitCount < 2: objMember.RemindToConfirm() return "Done"
def GetMemberForId(objHere, strMemberId): objMembers = GetDataFolder(objHere, 'E3Member') strBatchId = strMemberId[8:11] try: return objMembers.unrestrictedTraverse('Batch%s/%s' % (strBatchId, strMemberId)) except: return None
def ImportHelpFile(objHere): objHelpFolder = GetDataFolder(objHere, "E3Help") for strId in objHelpFolder.objectIds("E3Help"): objHelpFolder.manage_delObjects(strId) ReadHelp(objHere) ReindexOne(objHere, "E3Help") BuildRules(objHere)
def ChangeMonthCount(objHere, intYear, intMonth, intIncrease = 1, blnPublicCount = False): objE3Messages = GetDataFolder(objHere, 'E3Messages') if blnPublicCount: lstMessageCount = objE3Messages.PublicMessageCount else: lstMessageCount = objE3Messages.MessageCount blnFound = False lstResult = [] for strYearLine in lstMessageCount: if not blnFound and strYearLine[:4] == str(intYear): blnFound = True lstCounts = strYearLine.split() lstCounts[intMonth] = str(int(lstCounts[intMonth]) + intIncrease) strYearLine = " ".join(lstCounts) lstResult.append(strYearLine) if not blnFound: lstCounts = [] for intI in range(0, 13): lstCounts.append("0") lstCounts[intMonth] = str(intIncrease) lstCounts[0] = str(intYear) lstResult.append(" ".join(lstCounts)) if blnPublicCount: objE3Messages.PublicMessageCount = lstResult else: objE3Messages.MessageCount = lstResult
def AddPropertyToOfferings(objHere, strPropertyName, varDefault, strType): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): for objOffering in objMember.Offerings.objectValues("E3Offering"): if not strPropertyName in objOffering.propertyIds(): objOffering.manage_addProperty(strPropertyName, varDefault, strType)
def UsernameExists(objHere, strUsername): objMembers = GetDataFolder(objHere, "E3Member") for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if objMember.Username.lower() == strUsername.lower(): return True return False
def ChangeFromMembersOnly(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): for strField in ('ShowCountry', 'ShowLocation', 'ShowPostcode', 'ShowEmailAddress', 'ShowPhoneNumber', 'ShowBiography', 'ShowFullName', 'ShowCommunityComments'): strValue = objMember.getProperty(strField) if strValue == "MembersOnly": objMember.setProperty(strField, "Members")
def HasDuplicateBookings(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if len(objMember.Events.objectValues("E3Conf08Booking")) > 1: print "Duplicates for: ", objMember.id return True return False
def GenerateTestData3p1(objContext): # Set 'Private' property to True/False at random objArchive = GetDataFolder(objContext, 'E3Messages') for objYear in objArchive.objectValues('Folder'): for objMonth in objYear.objectValues('Folder'): for objMessage in objMonth.objectValues('Folder'): objMessage.Private = random.choice((True, False))
def CountBookReviews(objHere): objBooks = GetDataFolder(objHere, 'MCIBook') intResult = 0 for objBatch in objBooks.objectValues(): for objBook in objBatch.objectValues('MCIBook'): if objBook.Review: intResult = intResult + 1 return intResult
def HasFutureMasterclasses(objHere): objMasterclasses = GetDataFolder(objHere, 'MCIMasterclass') dtmNow = datetime.datetime.today() for objMasterclass in objMasterclasses.objectValues('MCIMasterclass'): if not objMasterclass.Cancelled: dtmClassDate = datetime.datetime(year = objMasterclass.ClassDate.year(), month = objMasterclass.ClassDate.month(), day = objMasterclass.ClassDate.day()) if dtmClassDate >= dtmNow: return True return False
def SearchHelp(objHere, strSearchText): objHelpFolder = GetDataFolder(objHere, 'E3Help') lstResult = [] for objHelp in objHelpFolder.objectValues('E3Help'): if not objHelp.Type == 'Rules' and \ (strSearchText in " ".join(objHelp.Lines).lower() or strSearchText in objHelp.title): lstResult.append((objHelp.title, """<li><a href="/Help/ShowOne?Id=%s">%s</a></li>\n""" % (objHelp.HelpId, objHelp.title))) return PresentWebTree(lstResult)
def CountMembers(objHere): intResult = 0 objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if objMember.Live() and not objMember.ParkingMember(): intResult = intResult + 1 objData = GetDataFolder(objHere, 'E3Data') objData.MembersCount = intResult
def ExtensiveMembersSearch(objHere, strSearchFor): lstResult = [] strSearchFor = strSearchFor.lower() objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if objMember.ContainsString(strSearchFor): lstResult.append(objMember) return lstResult
def CountBooksForCategories(objHere): print "Counting books for categories" objCategories = GetDataFolder(objHere, 'MCIBookCategory') for objCategory in objCategories.objectValues('MCIBookCategory'): objCategory.BooksInCategory = CountBooksForOneCategory(objCategory) print objCategory.CategoryName, objCategory.BooksInCategory for objSubCategory in objCategory.objectValues('MCIBookCategory'): objSubCategory.BooksInCategory = CountBooksForOneCategory(objSubCategory) print objSubCategory.CategoryName, objSubCategory.BooksInCategory
def FindPrivateMessages(objHere): strResult = "<ul>" objArchive = GetDataFolder(objHere, 'E3Messages') for objYear in objArchive.objectValues('Folder'): for objMonth in objYear.objectValues('Folder'): for objMessage in objMonth.objectValues('Folder'): if not ValidPrefix(objMessage.mailSubject): strResult += """<a href="/Archive/ViewThread?ThreadId=%s"><li>%s</li></a>\n""" % (objMessage.id, objMessage.mailSubject) strResult += "</ul>"
def UpgradeTo3p8p4(objHere): print "Upgrading to 3.8.4" print "New EmailFrequency_ECL_Advert property" objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if not "EmailFrequency_ECL_Advert" in objMember.propertyIds(): objMember.manage_addProperty("EmailFrequency_ECL_Advert", "SameAsMain", "string") CreateNewListMembers(objHere)
def ECLMasterclassesSideBar(objHere): objMasterclasses = GetDataFolder(objHere, 'MCIMasterclass') dtmNow = datetime.datetime.today() lstComing = [] lstPast = [] for objMasterclass in objMasterclasses.objectValues('MCIMasterclass'): if not objMasterclass.Cancelled: dtmClassDate = datetime.datetime(year = objMasterclass.ClassDate.year(), month = objMasterclass.ClassDate.month(), day = objMasterclass.ClassDate.day()) if dtmClassDate >= dtmNow: lstComing.append(objMasterclass) else: lstPast.append(objMasterclass) if lstComing: lstComing.sort(RecentMasterclasses) strComing = "" for objComing in lstComing: strComing = strComing + ListOneComingMasterclass(objComing) strComing = """<ul> %s </ul>""" % strComing else: strComing = """<p>By <a href = "http://www.MentorCoaches.com">Mentor Coaches International</a></p>""" intRecordings = 0 strRecordings = "" intNotes = 0 strNotes = "" lstPast.sort(RecentMasterclasses) for objPast in lstPast: if objPast.ClassRecording: if intRecordings < 3: strRecordings = strRecordings + ListOneRecording(objPast) intRecordings = intRecordings + 1 if objPast.Notes: if intNotes < 3: strNotes = strNotes + ListOneNotes(objPast) intNotes = intNotes + 1 strResult = """ <h1>Masterclasses</h1> %(Coming)s <h2>Recordings</h2> <ul> %(Recordings)s </ul> <p><a href="http://%(Root)s/Masterclasses/Past" target="_blank">More ...</a></p> <h2>Notes</h2> <ul> %(Notes)s </ul> <p><a href="http://%(Root)s/Masterclasses/Past" target="_blank">More ...</a></p> """ % {'Coming': strComing, 'RecordingsCount': intRecordings, 'Recordings': strRecordings, 'NotesCount': intNotes, 'Notes': strNotes, 'Root': cnMCIRoot} return strResult
def FindIncorrectPaymentFlags(objHere): strResult = "" objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): if objMember.Historic.objectValues('E3Payment') and not objMember.HasPayments: strResult += """<p>%s</p>\n""" % objMember if objMember.HasPayments and not objMember.Historic.objectValues('E3Payment'): strResult += """<p>%s</p>\n""" % objMember return strResult
def AddNewProperties3p5p4(objHere): objMembers = GetDataFolder(objHere, 'E3Member') for objBatch in objMembers.objectValues('Folder'): for objMember in objBatch.objectValues('E3Member'): AddProperties(objMember, ( ('NoCommercialEmails', False, 'boolean'), ('DuplicateMembership', False, 'boolean'), ('DoLaterDone', [], 'lines') ))
def NewsletterList(objHere): dictNewsletters = {} objNewsletters = GetDataFolder(objHere, 'MCINewsletter') for objNewsletter in objNewsletters.objectValues('MCINewsletter'): dictNewsletters[objNewsletter.IssueNumber] = FormatOneNewsletter(objNewsletter) strResult = "" lstIssues = dictNewsletters.keys() lstIssues.sort() for intIssue in lstIssues: strResult = strResult + dictNewsletters[intIssue] return """<span class="PageTitle2">"The Mentor Coach" - Newsletter Archive</span><br>""" + strResult