; +=c @s[dkZdkZdklZdklZdklZlZdkl Z dk l Z dk l Z dklZdklZd klZd klZlZlZlZlZd klZlZd klZhd d<dd<dd<dd<dd<dd<dd<dd<ddddf<dd<d d!<d"hd d#<d$d%<d&d'<d(efsN( sREQUESTsNonesselfschildrens contentValuesschildsappendssortssort_key(sselfssort_keysREQUESTschildschildren((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyschildrenys  s inReplyTocCs,|ii}|idjo|SntSdS(sE Return the object for which this object is a reply. sPostN(sselfsaq_inners aq_parentsparents meta_typesNone(sselfsparent((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys inReplyTos  s nextReplycCsC|idg}|i|ot||dtSntSdS(s7 Return the next object that is reply. sPostiN(sselfs contentIdssidsssortsgetattrsNone(sselfsids((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys nextReplys  s nextRepliescCsB|idg}|i|ot|d|SntSdS(s@ Return a sequence of objects that are replies. sPostcCs t||S(N(sgetattrsselfsx(sxsself((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyssN(sselfs contentIdssidsssortsmapsNone(sselfsids((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys nextRepliess  s nextMessagecCst|iiidg}|i|i|i}|d}|t |jot |||t Snt SdS(s; Return the next object on the same level. sPostiN( sselfsaq_inners aq_parents contentIdssidsssortsindexsgetIdsnextslensgetattrsNone(sselfsindexsidssnext((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys nextMessages  s nextMessagescCsw|iiidg}|i|i|i}|d}|t |jot |d||Snt SdS(sF Return a sequence of next objects on the same level. sPosticCs t||S(N(sgetattrsselfsx(sxsself((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyssN( sselfsaq_inners aq_parents contentIdssidsssortsindexsgetIdsnextslensmapsNone(sselfsindexsidssnext((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys nextMessagess  spreviousMessagecCsn|iiidg}|i|i|i}|d}|djot |||t Snt SdS(s? Return the previous object on the same level. sPostiiN( sselfsaq_inners aq_parents contentIdssidsssortsindexsgetIdsprevioussgetattrsNone(sselfsindexsidssprevious((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyspreviousMessages   spreviousMessagescCs{|iiidg}|i|i|i|i}|d}|djot |d||Snt SdS(sJ Return a sequence of previous objects on the same level. sPostiicCs t||S(N(sgetattrsselfsx(sxsself((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyssN( sselfsaq_inners aq_parents contentIdssidsssortsreversesindexsgetIdsprevioussmapsNone(sselfsindexsidssprevious((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyspreviousMessagess    s in_reply_tocCs2|ii}|idjo|iSndSdS(sO Return the id of the object for which this object is a reply. sPostsN(sselfsaq_inners aq_parentsparents meta_typesgetId(sselfsparent((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys in_reply_tos  schildMessageCountcCs5d}x$|iD]}||i}qW|SdS(sE Counts the number of chilren of this message, including this messageiN(scountsselfschildrensmessageschildMessageCount(sselfscountsmessage((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyschildMessageCounts  sthreadMessageCountcCs|ii}|SdS(s8 Looks at the topmost ancestor, and then counts childrenN(sselfs thread_topschildMessageCounts message_count(sselfs message_count((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pysthreadMessageCountsschildNewestMessageDatecCsK|i}x7|iD])}|i}||jo |}qqW|SdS(s; Looks through children and returns the newest message dateN(sselfscreatedsnewestschildrensmessageschildNewestMessageDates test_date(sselfsnewestsmessages test_date((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyschildNewestMessageDates    sthreadNewestMessageDatecCs|ii}|SdS(ss Looks at the topmost ancestor, and then recurses through the messages finding the last created messageN(sselfs thread_topschildNewestMessageDatesnewest(sselfsnewest((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pysthreadNewestMessageDatesshasAttachmentscCs|iddgSdS(sJ Boolean value to test if the message has any attachment. s Portal Files Portal ImageN(sselfs contentIds(sself((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pyshasAttachments ssgetAttachmentscCs|iddgSdS(s6 Return a list of attachment objects. s Portal Files Portal ImageN(sselfs contentValues(sself((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pysgetAttachmentsssaddPostsstructured-textc Cs=| ot|}nt|d|d|d|d|d|} |i || t ||} | i d|o|ioti|idd}|i} |id } t|| d d d !d jo#| id d|d|d| q| idd|d|d| n|tj o|i||SndS(sAdd a Post to its containerstitlestextsauthorsemails text_formatsPosts\is Content-TypeiisimagesImagesidsfiles content_typesFileN(sids generate_idsselfsPoststitlestextsauthorsemails text_formatsitems _setObjectsgetattrsposts_setPortalTypeNamesfilesfilenamesstringssplitsreadsbodysheaderss content_typesguess_content_types invokeFactorysREQUESTsNones manage_main( sselfsidstitlestextsauthorsemailsfilesREQUESTs text_formatsbodyspostsitems content_type((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pysaddPosts&    ! ( s__name__s __module__s meta_typesIPosts__implements__s SkinnedFoldersmanage_optionssClassSecurityInfossecuritys__init__sdeclareProtecteds ViewForums thread_tops ancestorssNoneschildrens inReplyTos nextReplys nextRepliess nextMessages nextMessagesspreviousMessagespreviousMessagess in_reply_toschildMessageCountsthreadMessageCountschildNewestMessageDatesthreadNewestMessageDateshasAttachmentssgetAttachmentssAddForumPostingsaddPost(((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pysPostPsR                    (#sGlobalssstringsForumPermissionssAddForumPostingsDateTimes OFS.ImagesFilesImagesOFS.content_typessguess_content_types AccessControlsClassSecurityInfosProducts.CMFDefault.DublinCoresDefaultDublinCoreImplsProducts.CMFCore.utilss getToolByNamesProducts.CMFDefault.DocumentsDocuments!Products.CMFDefault.SkinnedFolders SkinnedFolders#Products.CMFCore.CMFCorePermissionssViewsManagePropertiessListFolderContentssModifyPortalContentsAddPortalContents"Products.CMFForum.ForumPermissionss ViewForumsinterfaces.PostsIPostsfactory_type_informations generate_idsPostsaddPostsInitializeClass(sDateTimes SkinnedFolders ViewForums getToolByNamesDocumentsAddForumPostingsaddPostsListFolderContentssPostsstringsClassSecurityInfosModifyPortalContentsAddPortalContentsfactory_type_informationsManagePropertiessViewsDefaultDublinCoreImplsImagesGlobalss generate_idsFilesIPostsguess_content_type((s:/mnt/gmirror/ports/www/zope-cmfforum/work/CMFForum/Post.pys?s$        % N*