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"> </td></tr>""" return strResult
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
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
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
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
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
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