Beispiel #1
0
def u30to31StorePastStats(objContext, blnSkip = False):
    """ Done as upgrade from 3.0 to 3.1
        Gather data that is easy and reliable accessible:
        * Payments
        * Messages sent (advert/non-advert)
        * Expiries
        * Members joining"""
    # Create empty dictionary (date:eventtype:count)
    # Go through members, count events found
    # Go through messages, count them
    # Store results
    #  (notes: some records may already exists, if so add new properties, otherwise create new record)
    if blnSkip:
        print "Skipped: Get and store past statistics"
        return

    print "Get and store past statistics"
    dictStats = {}

    objMembers = GetDataFolder(objContext, 'E3Member')
    for objBatch in objMembers.objectValues('Folder'):
        for objMember in objBatch.objectValues('E3Member'):
            # Check starting date
            if objMember.ImportedFromMailman:
                for objPeriod in objMember.FromMailman.objectValues('E3Period'):
                    if objPeriod.PeriodType == "Free":
                        AddPastStat(dictStats, objPeriod.GetStartDate(), "JoinedYesterday")
            else:
                AddPastStat(dictStats, objMember.GetCreatedDate(), "JoinedYesterday")
            # Get payments
            for objPayment in objMember.Historic.objectValues("E3Payment"):
                AddPastStat(dictStats, objPayment.GetDate(), "PaymentYesterday")
            for objEvent in objMember.Historic.objectValues("E3Event"):
                if objEvent.EventType == "ExpiryMessageSent":
                    AddPastStat(dictStats, objEvent.GetDate(), "ExpiredYesterday")

    # Now do the message count
    objMessages = GetDataFolder(objContext, 'E3Messages')
    for objYear in objMessages.objectValues('Folder'):
        print objYear.id
        for objMonth in objYear.objectValues('Folder'):
            print objMonth.id
            for objMessage in objMonth.objectValues('Folder'):
                dtmDate = date(year = objMessage.mailDate.year(), month = objMessage.mailDate.month(), day = objMessage.mailDate.day())
                if 'adv' in objMessage.mailSubject.lower():
                    AddPastStat(dictStats, dtmDate, "AdvertPostedYesterday")
                else:
                    AddPastStat(dictStats, dtmDate, "NonAdvertPostedYesterday")

    SaveStats(objContext, dictStats)
Beispiel #2
0
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)
Beispiel #3
0
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
Beispiel #4
0
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")
Beispiel #5
0
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
Beispiel #6
0
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")
Beispiel #7
0
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
Beispiel #8
0
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"
Beispiel #9
0
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
Beispiel #10
0
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")
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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')))
Beispiel #14
0
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
Beispiel #15
0
def CategoryNamesSelected(objHere, objQuery):
    lstResult = []
    objCategories = GetDataFolder(objHere, 'MCIBookCategory')
    for objCategory in objCategories.objectValues():
        if objQuery.has_key('BookCategory' + objCategory.id):
            lstResult.append(objCategory.CategoryName)
        for objSubCategory in objCategory.objectValues():
            if objQuery.has_key('BookCategory' + objSubCategory.id):
                lstResult.append(objSubCategory.CategoryName)
    
    objReaderCategories = GetDataFolder(objHere, 'MCIReaderCategory')
    for objReaderCategory in objReaderCategories.objectValues():
        if objQuery.has_key('ReaderCategory' + objReaderCategory.id):
            lstResult.append(objReaderCategory.CategoryName)

    strResult = ", ".join(lstResult)
    return strResult
Beispiel #16
0
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
Beispiel #17
0
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")
Beispiel #18
0
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))
Beispiel #19
0
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
Beispiel #20
0
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)
Beispiel #21
0
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>"
Beispiel #22
0
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
Beispiel #23
0
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
Beispiel #24
0
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)
Beispiel #25
0
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
Beispiel #26
0
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
Beispiel #27
0
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')
                ))
Beispiel #28
0
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
Beispiel #29
0
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">&quot;The Mentor Coach&quot; - Newsletter Archive</span><br>""" + strResult
Beispiel #30
0
def FindTodaysWnE(objHere):
    dtmNow = datetime.date.today()
    strResult = ""
    objMembers = GetDataFolder(objHere, 'E3Member')
    for objBatch in objMembers.objectValues('Folder'):
        for objMember in objBatch.objectValues('E3Member'):
            for objEvent in objMember.Historic.objectValues('E3Event'):
                print ".",
                if objEvent.GetDate() == dtmNow :
                    strResult += "%s; " % objMember.PreferredEmailAddress()
    print
    return strResult