Beispiel #1
0
def GetCategoryList(objHere):
    strResult = ""
    
    objCategories = GetDataFolder(objHere, 'MCIBookCategory')
    lstIds = GetOrderedIds(objCategories, 'MCIBookCategory')
    for strId in lstIds:
        objSubCategories = objCategories.unrestrictedTraverse(strId)
        lstSubIds = GetOrderedIds(objSubCategories, 'MCIBookCategory')
        objCategory = objCategories.unrestrictedTraverse(strId)
        strResult = strResult + CategoryRow("<b>%s</b>" % objCategory.CategoryName, strId, "ListForCategory", objCategory.BooksInCategory, 0, "BookCategory")
        for strSubId in lstSubIds:
            objSubCategory = objCategory.unrestrictedTraverse(strSubId)
            strResult = strResult + CategoryRow(objSubCategory.CategoryName, strSubId, "ListForCategory", objSubCategory.BooksInCategory, 1, "BookCategory")
        strResult = strResult + """<tr><td colspan="3">&nbsp;</td></tr>"""
    return strResult        
Beispiel #2
0
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 NewObject(self, objTarget = None, strId = ''):
        if not strId:
            strId = self.NextId()
        if not objTarget:
            objTarget = GetDataFolder(self, self.id)
            if self.Batched:
                strBatchName = 'Batch%s' % str(self.CurrentBatch).zfill(3)
                try:
                    objTarget = objTarget.unrestrictedTraverse(strBatchName)
                except:
                    objTarget = AddFolder(objTarget, strBatchName)
        AddFunction = eval("objTarget.manage_addProduct['%s'].add%s" % (self.Category, self.id))
        AddFunction(strId)
#        print "Created %s in %s with id %s" % (self.id, objTarget.id, strId)
        objObject = objTarget.unrestrictedTraverse(strId)

#        if self.HasCatalogue:
#            objCatalogue = GetDataFolder(self, self.id).Catalogue
#            objCatalogue.catalog_object(objObject)

        return objObject
Beispiel #4
0
def TopPostersForWholeYear(objHere, intYear):
    objArchive = GetDataFolder(objHere, 'E3Messages')
    dictResult = {}
    for intMonth in range(1, 13):
        try:
            objMonth = objArchive.unrestrictedTraverse('%s/%s-%s' % (intYear, intYear, str(intMonth).zfill(2)))
        except:
            objMonth = None
        if objMonth:
            for objThread in objMonth.objectValues():
                strUserId = objThread.UserId
                strSubject = objThread.mailSubject.lower()
                if "[" in strSubject:
                    strSubject = strSubject[strSubject.find("["):]
                if not dictResult.has_key(strUserId):
                    dictResult[strUserId] = (0, 0)
                (intPlain, intAdv) = dictResult[strUserId]
                if "adv" in strSubject:
                    dictResult[strUserId] = (intPlain, intAdv + 1)
                else:
                    dictResult[strUserId] = (intPlain + 1, intAdv)

    lstResult = []

    for strUserId in dictResult.keys():
        lstResult.append((strUserId, dictResult[strUserId]))

    lstResult.sort(TopPoster)

    strResult = """<h1>Top posters for %s</h1>
    <ol>
    """ % intYear
    intDone = 0
    for (strUserId, (intCount, intAdverts)) in lstResult:
        objMember = GetMemberForId(objHere, strUserId)
        if objMember:
            strName = objMember.VisibleName(True)
            strEmail = objMember.EmailDeliveryAddress
            if objMember.MembershipType == None:
                strStatus = "Expired"
            else:
                strStatus = objMember.MembershipType
        else:
            strName = "unknown"
            strEmail = ""
            strStatus = ""
        strResult += """<li>%s posts (plus %s adverts) by %s (%s, %s, %s)</li>\n""" % (intCount, intAdverts, strName, strUserId, strEmail, strStatus)
        intDone += 1
        if intDone >= 20:
            strResult += "</ol>\n"
            return strResult
    strResult += "</ol>\n"
    return strResult
Beispiel #5
0
def TopPostersForMonth(objHere, intYear, intMonth):
    objArchive = GetDataFolder(objHere, 'E3Messages')
    dictResult = {}
    try:
        objMonth = objArchive.unrestrictedTraverse('%s/%s-%s' % (intYear, intYear, str(intMonth).zfill(2)))
    except:
        return ""
    for objThread in objMonth.objectValues():
        strUserId = objThread.UserId
        strSubject = objThread.mailSubject.lower()
        if "[" in strSubject:
            strSubject = strSubject[strSubject.find("["):]
        if not dictResult.has_key(strUserId):
            dictResult[strUserId] = (0, 0)
        (intPlain, intAdv) = dictResult[strUserId]
        if "adv" in strSubject:
            dictResult[strUserId] = (intPlain, intAdv + 1)
        else:
            dictResult[strUserId] = (intPlain + 1, intAdv)
    lstResult = []

    for strUserId in dictResult.keys():
        lstResult.append((strUserId, dictResult[strUserId]))

    lstResult.sort(TopPoster)

    strResult = """<h1>Top posters for %s %s</h1>
    <ol>
    """ % (MonthName(intMonth), intYear)
    intDone = 0
    for (strUserId, (intCount, intAdverts)) in lstResult:
        objMember = GetMemberForId(objHere, strUserId)
        if objMember:
            strName = objMember.VisibleName(True)
        else:
            strName = "unknown"
        strResult += """<li>%s posts (plus %s adverts) by %s (%s)</li>\n""" % (intCount, intAdverts, strName, strUserId)
        intDone += 1
        if intDone >= 10:
            strResult += "</ol>\n"
            return strResult
    strResult += "</ol>\n"
    return strResult
Beispiel #6
0
def CountAllMessages(objHere):
    """Counts number of messages by month/year, stores in E3Messages.MessageCount"""
    dtmNow = datetime.datetime.today()
    objMessages = GetDataFolder(objHere, 'E3Messages')
    lstLines = []
    for intYear in range(dtmNow.year, 1996, -1):
        strLine = str(intYear)
        for intMonth in range(1, 13):
            intCount = 0
            try:
                objMonth = objMessages.unrestrictedTraverse('%s/%s-%s' % (intYear, intYear, str(intMonth).zfill(2)))
            except:
                objMonth = None
            if objMonth:
                for objThread in objMonth.objectValues():
                    intCount = intCount + 1 + len(objThread.objectValues('Folder'))

            strLine = strLine + " " + str(intCount)
        lstLines.append(strLine)
    objMessages.MessageCount = lstLines
Beispiel #7
0
def ListRecent(objHere, intCount, fnFunction, blnLongFormat = False):
    """Returns most <intCount> most recent messages, either
        - Discussion (not advert, at least 2 sub-messages)
        - Message (not advert, maximum 1 sub-message)
        - Advert
        Either in long format (used within the page contents) or
        in short format (used in side bar)"""
    # Any message which has at least 2 replies
#    if intCount > 3:
#        if not IsLoggedIn(objHere):
#            return "<p>Members only</p>"
#        if not IsFullMember(objHere):
#            return "<p>Current members only</p>"
    lstFound = []
    dtmNow = datetime.datetime.today()
    intMonth = dtmNow.month
    intYear = dtmNow.year
    objMessages = GetDataFolder(objHere, 'E3Messages')
    if not objMessages:
        return "Message folder not found"
    # They might not come out in order, so instead just grab whole month's worth of messages until at least enough, then sort
    if not blnLongFormat:
        blnFullMember = True
    else:
        blnFullMember = IsFullMember(objHere)
    while len(lstFound) < intCount * 3 and intYear > 1996:
        try:
            objMonth = objMessages.unrestrictedTraverse('%s/%s-%s' % (intYear, intYear, str(intMonth).zfill(2)))
        except:
            objMonth = None
#            print "Not found", intYear, intMonth
        if objMonth:
            lstFound = lstFound + fnFunction(objMonth, blnFullMember)
        intMonth = intMonth - 1
        if intMonth == 0:
            intMonth = 12
            intYear = intYear - 1

    dictFound = {}
    for objThread in lstFound:
        dictFound[objThread.mailDate] = objThread

    lstDates = dictFound.keys()

    lstDates.sort(ReverseSort)

    intDone = 0
    if blnLongFormat:
        strResult = u""
    else:
        strResult = u"<ul>\n"

    blnEvenRow = False
    for dtmDate in lstDates:
        objThread = dictFound[dtmDate]
        if intDone < intCount:
            if blnLongFormat:
                strToAdd = FormatOneThread(objThread, blnEvenRow, blnFullMember)
                blnEvenRow = not blnEvenRow
            else:
                strToAdd = ShortFormatMessage(objThread)
            strToAdd = ToUnicode(strToAdd)
            strResult += strToAdd
        intDone = intDone + 1

    if not blnLongFormat:
        strResult = strResult + u"</ul>\n"

    strResult = ToUnicode(strResult)
    return strResult
Beispiel #8
0
def GetListForMonth(objHere, intYear, intMonth, intDate, intOffset, intMaxMessages = 20):
    """Get a list of messages, nicely formatted in row format,
        for the specified intYear/intMonth and optionally intDate"""
    blnFullMember = IsFullMember(objHere)
    strResult = ""
    objArchive = GetDataFolder(objHere, 'E3Messages')
    try:
        objMonth = objArchive.unrestrictedTraverse('%s/%s-%s' % (intYear, intYear, str(intMonth).zfill(2)))
    except:
        return "<p>No messages found for this month</p>"

    dictThreads = {}
    intMessages = 0
    intPublicMessages = 0
    for objThread in objMonth.objectValues():
        if not intDate or objThread.mailDate.day() == intDate:
            intPublicMessages += 1
            if blnFullMember or not objThread.Private:
                dictThreads[objThread.mailDate] = objThread
        for objMessage in objThread.objectValues('Folder'):
            if not intDate or objMessage.mailDate.day() == intDate:
                intPublicMessages += 1
                if blnFullMember or not objMessage.Private:
                    dictThreads[objThread.mailDate] = objMessage

    strURL = '/Archive/ViewMonth'
    intThreads = len(dictThreads)
#    intThreads = len(dictThreads.keys())
    if blnFullMember:
        strPublic = ""
    else:
        strPublic = " public "
    if intThreads == 0:
        return """<p class="Message">No %s messages found</p>""" % strPublic
#    if not intDate:
#        intMessages = MessageCountForMonth(objHere, intYear, intMonth)
    intFirstThread = intOffset + 1
    intLastThread = intOffset + intMaxMessages
    if intLastThread > intThreads:
        intLastThread = intThreads
#    strNavigation = """<p>%(Messages)s message%(MessagesPlural)s found in %(Threads)s thread%(ThreadsPlural)s""" % {'Messages': intMessages,
#            'MessagesPlural': IsPlural(intMessages),
#            'Threads': intThreads,
#            'ThreadsPlural': IsPlural(intThreads)}

    strNavigation = """<p>%(Messages)s %(Public)s message%(MessagesPlural)s found""" % {'Messages': intThreads,
        'MessagesPlural': IsPlural(intThreads),
        'Public': strPublic}

    if intMaxMessages < intThreads:
        strLink = strURL + "?Year=%s&Month=%s" % (intYear, intMonth)
        if intDate:
            strLink = strLink + "&Date=%s" % intDate
        strLink = strLink + "&Offset=%s"

        strNavigation = strNavigation + "<br />" + BuildPagingList(intMaxMessages, intThreads, intFirstThread, intLastThread, strLink, intOffset)

    strNavigation = strNavigation + "</p>"

    lstDates = dictThreads.keys()
    lstDates.sort()

    blnEvenRow = False
    for intI in range(intOffset, intOffset + intMaxMessages + 1):
        if intI < len(lstDates):
            strOneThread = FormatOneThread(dictThreads[lstDates[intI]], blnEvenRow, blnFullMember)
            strOneThread = ToUnicode(strOneThread)
            strResult = strResult + strOneThread
            blnEvenRow = not blnEvenRow

    strResult = strNavigation + strResult + "<p>%s</p>" % strNavigation
    strResult = ToUnicode(strResult)
    return strResult