;ò lû>c@sÖdZddd!ZdkZdklZdklZlZlZlZdk l Z dk l Z l Z d klZd klZlZlZlZd klZd klZd klZdklZdklZdkl Z dk!l"Z"dk#l$Z$dk%l&Z&l'Z'dk(l)Z)l*Z*l+Z+l,Z,l-Z-l.Z.l/Z/l0Z0l1Z1l2Z2l3Z3l4Z4l/Z/l5Z5l6Z6l7Z7dk8l9Z9l:Z:l;Z;l<Z<dk=l=Z=dk>l>Z>de$i$fd„ƒYZ?ee?ƒdS(s=Squishdot - a web-based news publishing and discussion systems$Revision: 1.46 $i iþÿÿÿN(stime(sstripsjoinsatoisreplace(sunquote(sLOGsERROR(sClassSecurityInfo(sPersistentMappingsHTMLFiles MessageDialogsInitializeClass(saq_base(sIOBTree(sIISet(s html_quote(shtml_with_references(sDocument(s REPLACEABLE(sZCatalog(s html2safehtmls html2text(sCRLFstagRegexs file_pathssamedays doAddPostingsgetitemsaddDTMLsaddImagesaddTablesaddArtsaddFilesaddTextsaddDTMLsaddPythonScriptsstx_minsstx_max(sManageSquishdotsModeratePostingss AddPostingssView(s Squishfile(sArticles SquishSitec BsH tZdZdZdZeƒZeiedfƒeie dfƒeie ddfƒeie ddfƒdZ dZ dZhdd<d d <d d „Z+eied?ƒd@„Z,ei'dAƒdB„Z-eidCƒdD„Z.eie dEƒe/Z0ei'dFƒdG„Z1eie dHƒdI„Z2eie dJƒdK„Z3eie dLƒdM„Z4eie dNƒdO„Z5eie dPƒdQ„Z6eiedRƒdS„Z7eiedTƒdde)e)dU„Z8eiedVƒge)dW„Z9eie dXƒdY„Z:eie dZƒd[„Z;ei'd\ƒdd]„Z<ei'd^ƒd_„Z=ei'd`ƒda„Z>ei'dbƒdc„Z?eie ddƒde„Z@ei'dfƒdg„ZAeie dhƒdi„ZBei'djƒdk„ZCei'dlƒdm„ZDeie dnƒdo„ZEei'dpƒdq„ZFeie drƒdds„ZGei'dtƒdu„ZHeie dvƒdw„ZIeie dxƒdy„ZJeie dzƒd{„ZKeie d|ƒd}„ZLeie d~ƒd„ZMeie d€ƒd„ZNeie d‚ƒdƒ„ZOeie d„ƒd…„ZPeid†d‡ƒdˆ„ZQei'd‰ƒdŠ„ZReie d‹ƒdŒ„ZSeie dƒde)e)ddŽ„ZTeie dƒd„ZUeied‘ƒe)dddd’„ZVeie d“ƒge)d”„ZWeie d•ƒge)d–„ZXeie d—ƒe)e)e)d˜„ZYeie d™ƒdš„ZZeie d›ƒdœ„Z[ei'dƒddž„Z\eie dŸƒd „Z]eie d¡ƒe)dd¢„Z^eie d£ƒd¤„Z_e`Zaei'd¥ƒe)d¦„ZbRS(§sTA Squishdot Site is a self contained web-based news publishing and discussion systemsSquishdot SitesManagers Anonymoussmisc_/Squishdot/squishdot_imgismisc_/Squishdot/squishlogosidstitlestypesstringsmodeswsHTMLiiÿÿÿÿslabelsContentssiconsactions manage_mainstargetsViewss index_htmlsPostingssmanage_postingss Moderationsmanage_moderationsSubjectssmanage_subjectssOptionssmanage_editForms Propertiessmanage_propertiesFormsSecuritys manage_accesssUndosmanage_UndoFormsSquishdot_manage_postingssSquishdot_manage_moderationsmoderateArticlesSquishdot_editFormsSquishdot_manage_subjectssAboutsaboutsReadmes README.txts__name__sCreditss Credits.txtsLicenses License.txtsChangess Changes.txtsVersions version.txts_buildIndexingcCst|dƒ otii|||ƒnx!|iƒD]}|i|ƒq8Wxcddfddfddfddfddfd dfd dfgD]\}}|i ||ƒq•Wx!|i ƒD]}|i |ƒqÂWx6d dd d ddd dgD]}|i |dƒqøWdS(Ns_catalogs meta_types FieldIndexsauthors textToSearchs TextIndexstitlessubjectsreviewedsdatesids reply_cnts thread_paths date_postedssummarys(shasattrsselfsZCatalogs__init__sidstitlesindexessnamesdelIndexs index_typesaddIndexsschemas delColumns addColumn(sselfsidstitlesnames index_type((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys_buildIndexingqs F  supdateIndexingcCs'|i|i|iƒ|i|ƒdS(sV A a ZCatalog and appropriate indexes to this SquishSite if they aren't there already N(sselfs_buildIndexingsidstitlesrecatalogPostingssREQUEST(sselfsREQUEST((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysupdateIndexingssrecatalogPostingscCsc|iiƒx*|iiƒD]}|i|ƒiƒqW|t j o|i i |dƒSndS(s4 Clear the Catalog and then Index all the postings. s HTTP_REFERERN( sselfs_catalogsclearsdataskeyssidsget_wrapped_postingsindexsREQUESTsNonesRESPONSEsredirect(sselfsREQUESTsid((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysrecatalogPostings“s  smanage_afterAddcCs2y|iƒWntj o|iƒnXdS(N(sselfsrecatalogPostingssAttributeErrorsupdateIndexing(sselfsitems container((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysmanage_afterAddss__init__c Cs# |i||ƒ|i| ƒ} tƒ}||_ ||_ ||_ ||_||_| |_d|_d|_|djod|_d|_n$|djod|_d|_n|o ||_n d|_tƒ|_tƒ|_tƒ|_t|ddƒt|ddd ƒt|iƒ}|ihd d <d d <dd<ƒ|ihd d<d d <dd<ƒ|ihd d<d d <dd<ƒ|ihd d<d d <dd<ƒt |ƒ|_|i!ddƒ|i!ddƒ|i!d dƒ|i!d|ƒt|dddƒ|djoœt|dddƒt|dddƒt|ddd ƒt|d!d"d#ƒt|d$d%d&ƒt|d'd(d)ƒt|d*d+d*ƒt|d,d-d.ƒn|d/jp |d0jo1t|ddd1ƒt|ddd2ƒ|i#}t$|ƒo |ƒ}nd}xE|D]=}|d3d4jo d5}n|d3d6jo d7}PqDqDW|o=t'| |d8d9ƒt'| |d:d;ƒt'| |d<d=ƒnt|ddd>ƒt|d!d"d?ƒt|d$d%d@ƒt|d'd(dAƒt|d*d+dBƒt|dCdDdEƒt|dFdGdHƒt|d,d-dIƒ|i(dJdJƒ|i(dKdLƒ|i(dMdNƒ|i(dOdPƒt)|dMƒ}t|dQdQdRƒt|dSdTdUƒt|dVdVdWƒt)|dOƒ}t|dXdYdZƒ}t|d[d\d]ƒ}t|d^d_d`ƒ} t|dadbdcƒ}t|dddedfƒ}t)|dJƒ}t0|dgdhƒt0|didjƒt0|dkdlƒt0|dmdnƒt0|dodpƒt0|dqdrƒt0|dsdtƒt0|dudvƒt)|dKƒ}t0|dwdxƒt0|dydzƒt0|d{d|ƒt0|d}d~ƒt0|dd€ƒt0|dd‚ƒt0|dƒd„ƒt0|d…d†ƒt0|d‡dˆƒt|iƒ}|ihd d‰<d d <dd<ƒ|ihd dŠ<d d <dd<ƒ|ihd d‹<d d <dd<ƒ|ihd dŒ<d d <dd<ƒ|ihd d<d d <dd<ƒ|ihd dŽ<d d <dd<ƒ|ihd d<d d<dd<ƒ|ihd d‘<d d<dd<ƒ|ihd d’<d d <dd<ƒ|ihd d“<d d <dd<ƒ|ihd d”<d d<dd<ƒ|ihd d•<d d<dd<ƒ|ihd d–<d d <dd<ƒt |ƒ|_|i!d‰d—ƒ|i!dŠd˜ƒ|d/jo$|i!d‹d™ƒ|i!dŒdšƒn!|i!d‹d›ƒ|i!dŒdœƒ|i!ddƒ|i!dŽdžƒ|i!ddƒ|i!d‘dƒ|i!d’dŸƒ|i!d“d ƒ|i!d”d¡ƒ|i!d•d¢ƒ|i!ddƒ|i!d–d£ƒ|i!ddŸƒ|i1d¤d¥ƒ|i1d¦d§ƒ|i1d¨d©ƒ|i1dªd«ƒ|i1d d¬ƒ|i1d­d®ƒ|i1d¯d°ƒ|i1d±d²ƒ|i1d³d´ƒh}x1t2d¡ddµƒD]}t4| d¶|ƒ||+s(smapsNonesselfsidssrlistsfiltersreverse(sselfsrlist((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys rev_id_list(s s item_listcCs)ttƒƒ}|i|i|ƒƒSdS(N(sintstimescurrtimesselfsdata_mapsid_list(sselfscurrtime((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys item_list0ssid_listcCs›|iƒ}|i}|d}t|ƒ}||jonX|i|ƒ}t|ƒ}||jo|| }n"||jo|| }n|}|SdS(Ni( sselfs rev_id_listsrlists max_itemlistsmaxsminslensrlens date_id_listscurrtimes today_liststlen(sselfscurrtimesrlistsminsmaxsrlenstlens today_list((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysid_list6s        s other_id_listcCsW|i|ƒ}t|ƒ}|i|ƒ}t|ƒ}||jo ||SngSdS(N( sselfs date_id_listscurrtimes today_listslenstlensid_lists curr_listsclen(sselfscurrtimesclenstlens today_lists curr_list((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys other_id_listKs    s other_listcCs)ttƒƒ}|i|i|ƒƒSdS(N(sintstimescurrtimesselfsdata_maps other_id_list(sselfscurrtime((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys other_listWss date_id_listcCs#|iƒ}t|d„|ƒSdS(NcCs t||ƒS(N(ssamedaysxsp(sxsp((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys`s(sselfs rev_id_listsrlistsfilterscurrtime(sselfscurrtimesrlist((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys date_id_list]s s date_listcCs1ttƒƒd|}|i|i|ƒƒSdS(Ni€Q(sintstimesdayscurrtimesselfsdata_maps date_id_list(sselfsdayscurrtime((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys date_listcss site_id_listc Cs¯|i|ƒ}h}g}t|ƒ}d}xw||jot|ƒdjoV||}|i |}|i |i ƒon|||i <|i|ƒ|d}q0W|SdS(Niii(sselfsid_listscurrtimesiliststdictstlistslensilenscntsidsdatasitemshas_keyssubjectsappend( sselfscurrtimescntsitemsidstdictsiliststlistsilen((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys site_id_listis      ssite_item_listcCs)ttƒƒ}|i|i|ƒƒSdS(N(sintstimescurrtimesselfsdata_maps site_id_list(sselfscurrtime((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pyssite_item_list}sstpIdcCs |iSdS(N(sselfsid(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pystpId„sstpURLcCs |iSdS(N(sselfsid(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pystpURLˆssthiscCs|SdS(N(sself(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysthisŒsssitecCs |fSdS(N(sself(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pyssitesssite_urlcCs|iƒSdS(N(sselfs absolute_url(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pyssite_url”ss has_itemscCst|iƒSdS(N(slensselfsids(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys has_items™ss item_countcCst|iƒSdS(N(slensselfsdata(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys item_countssAdd Squishdot Sitess mailhost_listcCs&y|idfƒSWn gSnXdS(Ns Mail Host(sselfs superValues(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys mailhost_list¡ss expire_itemscCs§|io•|i}ttƒ|idƒ}g}x9|iƒD]+}||i |jo|i |ƒq@q@Wx-|D]!}y|i |ƒWqvqvXqvWndSdS(Nf86400.0s( sselfsexpiresdatasdsintstimestsidsskeyssidsmodifiedsappendsdelItem(sselfsdsidsstsid((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys expire_items§s    s dummyPostingcCs tdgddƒi|ƒSdS(s7 returns a dummy posting for the previewPosting method iiN(sArticles__of__sself(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys dummyPosting¶ss addPostingc Cs/t||||dddddtd|ƒSdS(s add an article s moderatedsmessagesYour article has been postedsklasssindexN(s doAddPostingsselfsfilesREQUESTsRESPONSEsArticlesindex(sselfsfilesREQUESTsRESPONSEsindex((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys addPosting»s ssearchcCs³|idƒo|do|id|dƒn|idƒo|ddjo|iddƒn|iddƒ|i|ƒ}t|ƒ}|i||d |d |ƒSd S( s fulfill a search request sbodys textToSearchsopsarticless meta_typesArticlesreviewedissearch_resultss result_countN( sREQUESTshas_keyssetsselfs__call__ssrslensrcsshowSearchResults(sselfsREQUESTssrsrc((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pyssearchÄs! s manage_editc Cs9|ot|ƒ}nd}|oByt||ƒ} Wqftddddd|ddƒSqfXn||_ ||_||_ ||_ |d jod |_ d |_ nG|d jod |_ d|_ n$|d jod|_ d|_ n|o ||_n d |_|tj o|ii|dƒSndS(s edit SquishDot options istitlesInvalid Mail Hostsmessages Cannot find the named mail host!sactionsURLs /manage_mainsbothisarticlessnoneis HTTP_REFERERN(sexpsatoisexpiresmailhostsgetattrsselfsvs MessageDialogsREQUESTs mail_hosts mail_articless mail_repliess moderateds mod_comments max_itemlistsNonesRESPONSEsredirect( sselfsexpsexpires moderateds max_itemlistsREQUESTs mail_articless mail_repliessmailhostsv((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys manage_editÔs:                 s manage_deletecCsVtt|ƒ}x|D]}|i|ƒqW|tj o|ii |dƒSndS(s0 delete selected articles from a Squishdot site s HTTP_REFERERN( smapsatoisidssidsselfsdelItemsREQUESTsNonesRESPONSEsredirect(sselfsidssREQUESTsid((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys manage_deleteús s manage_reviewcCs_tt|ƒ}x$|D]}|i|i|ƒƒqW|tj o|i i |dƒSndS(s1 approve selected articles from a Squishdot site s HTTP_REFERERN( smapsatoisidssidsselfs set_reviewedsget_wrapped_postingsREQUESTsNonesRESPONSEsredirect(sselfsidssREQUESTsid((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys manage_reviews smoderation_processcCsg|o|i|d|ƒn|o|i|d|ƒn|tj o|ii|dƒSndS(s6 do the processing for things from the moderation tab sapprovesdeletes HTTP_REFERERN( sapprovesselfs manage_reviewsREQUESTsdeletes manage_deletesNonesRESPONSEsredirect(sselfsapprovesdeletesREQUEST((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysmoderation_process s ssuggest_authorcCsJd}y|iid}WnnX|ot|ƒ}n|ptSdS(Nss_suggest_author(sauthorsselfsREQUESTscookiessunquotesNone(sselfsauthor((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pyssuggest_authorss suggest_emailcCsJd}y|iid}WnnX|ot|ƒ}n|ptSdS(Nss_suggest_email(semailsselfsREQUESTscookiessunquotesNone(sselfsemail((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys suggest_emailss set_reviewedcCs¯t|ƒ}||ijo||_|djo d}n!|djo d}n td‚x>|iD]3}|i|}|i ||_ |i ||_ qfW|i ƒndS(Niiiÿÿÿÿsunexpected value for reviewed( sintsreviewedsitemsmods RuntimeErrorsthreadstsselfsdatasobjsrevsubs reply_cntsindex(sselfsitemsreviewedsobjstsmod((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys set_reviewed(s         sunmoderated_postingscCs/t|ihdd<ƒƒt|iƒjSdS(Nsreviewedi(slensselfs searchResultssdata(sself((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysunmoderated_postings<ss__call__cKs;t|i|f|ƒ}|otd„|ƒSn|SdS(NcCs |iƒS(N(sxs getObject(sx((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysFs(sapplysselfs searchResultssREQUESTskwsbrainssinternalsmap(sselfsREQUESTsinternalskwsbrains((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys__call__CssrendercCs | odSn|djottt|ƒdƒSnb|djot|dƒSnD|djo6tttt|dƒddƒdd ƒƒtt !Snd SdS( NssPlains
sHTMLs sSTXs slevelisInvalid Format!( s storedLinessformatsjoinsmaps html_quotesstrshtml_with_referencessreplacesstx_minsstx_max(sselfs storedLinessformat((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pysrenderMs   6s sendEmailc CsžyU|ioGt||iƒ}|i||d|d|d|ƒ}|i |ƒnWnBt dt dd|i ƒ|iƒ|ifdtiƒƒnXdS(NsnewItemsemails manage_notifys Squishdots Error sending notification emails URL: %s%s/%sserror(sselfs mail_hostsgetattrsmhosts mail_htmlsREQUESTsmsgsaddresss manage_notifysmailssendsLOGsERRORs absolute_urls thread_pathsidssyssexc_info(sselfsmsgsaddresssREQUESTs manage_notifysmhostsmail((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys sendEmail[s $(cs__name__s __module__s__doc__s meta_types descriptionsClassSecurityInfossecurityssetPermissionDefaultsManageSquishdotsModeratePostingss AddPostingssViewsiconsroots squishlogos _propertiessencodings mail_articless mail_repliesslevelsthreadsmanage_optionssdeclareProtectedsHTMLFilesglobalssmanage_postingssmanage_moderationsmoderateArticlesmanage_editFormsmanage_subjectss declarePublicsAboutsDocumentsaddTextsReadmesCreditssLicensesChangessVersionsdeclarePrivates_buildIndexingsNonesupdateIndexingsrecatalogPostingssmanage_afterAdds__init__s__len__sgetitems __getitem__sget_wrapped_postings dupStrings striptagss html2texts html2safehtmls has_subjectss subject_counts add_subjectsdelete_subjectss subjects_lists subject_imagessetItemsdelItemscreateIdsdata_maps postingValuess rev_id_lists item_listsid_lists other_id_lists other_lists date_id_lists date_lists site_id_listssite_item_liststpIdstpURLsthisssitessite_urls has_itemss item_counts mailhost_lists expire_itemss dummyPostings addPostingssearchs manage_edits manage_deletes manage_reviewsmoderation_processssuggest_authors suggest_emails set_reviewedsunmoderated_postingss__call__srenders REPLACEABLEsrender__replaceable__s sendEmail(((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys SquishSite*s0  $ÿf              Ø               9                               %        (@s__doc__s __version__ssysstimesstringsstripsjoinsatoisreplacesurllibsunquoteszLOGsLOGsERRORs AccessControlsClassSecurityInfosGlobalssPersistentMappingsHTMLFiles MessageDialogsInitializeClasss Acquisitionsaq_basesBTrees.IOBTreesIOBTreesBTrees.IIBTreesIISetsDocumentTemplate.DT_Utils html_quotesStructuredTextshtml_with_referencess OFS.DocumentsDocumentsOFS.ObjectManagers REPLACEABLEsProducts.ZCatalogsZCatalogs stripograms html2safehtmls html2textsUtilitysCRLFstagRegexs file_pathssamedays doAddPostingsgetitemsaddDTMLsaddImagesaddTablesaddArtsaddFilesaddTextsaddPythonScriptsstx_minsstx_maxsSquishPermissionssManageSquishdotsModeratePostingss AddPostingssViews SquishfilesArticles SquishSite(0sunquotes html2safehtmlsLOGsreplacesaddImagesPersistentMappingsstripsViewsDocumentsModeratePostingssaq_basesaddPythonScripts AddPostingss SquishSitesIISetsaddDTMLssamedaysArticleshtml_with_referencess__doc__s doAddPostingsstx_maxsManageSquishdotsaddTextsIOBTreesstx_minsClassSecurityInfosInitializeClassssyssatoisCRLFsERRORs MessageDialogsZCatalogs Squishfiles __version__sjoinsaddTablesaddFilesHTMLFiles REPLACEABLEstagRegexs file_paths html2textsaddArtsgetitemstimes html_quote((s=/mnt/gmirror/ports/www/squishdot/work/Squishdot/SquishSite.pys? s4             g  ÿÿÿC