;ò )äHEc@s8dkTdkZdkZdkZdklZlZlZdkl Z dk l Z l Z dk lZlZdklZdklZdklZd klZdkZd klZlZlZlZlZd klZd k l!Z!l"Z"l#Z#l$Z$l%Z%l&Z&d fd„ƒYZ'ee'ƒddd„Z(dS((s*N(sjoinssplitsstrip(sclock(sgetSecurityManagersClassSecurityInfo(s package_homesInitializeClass(s CopyError(s DTMLMethod(sDateTime(s_(sget_transactionsBLATHERsformattedTracebacksDateTimeSyntaxErrors callHooks(sPAGE_TYPE_UPGRADES(s PAGE_METADATAs TEXTINDEXESs FIELDINDEXESsKEYWORDINDEXESs DATEINDEXESs PATHINDEXESsPageAdminSupportcBs0tZdZeƒZeidƒdded„Zgaei e i dƒed„Z d„Z gaei e i dƒed „Zei d d ƒed „Zei d d ƒed „Zei d dƒed„Zei d dƒed„Zei d dƒedd„Zddd„Zd„ZRS(sP This mix-in class provides some utilities to ease wiki administration. s upgradeAlliic CsÚ|iti|iƒƒ odtdƒtdƒ‚nt|ƒ}|ot dƒn t dƒt ƒ}d|i ƒf\}} |iddƒxý|iƒD]ï}|d7}y|i|ƒ|i|ƒ|iƒ|o|id dƒd }nd }|id dƒt d ||| |iƒfƒWn*t d|| |iƒtƒfƒnX|o||djot dƒtƒiƒq£q£W|iƒ|iƒt ƒ}t d||||||fƒdS(sB Update, upgrade, pre-render and re-index all pages and data structures. Normally individual pages are upgraded and pre-rendered on demand, when viewed. An administrator may want to do this for all pages ahead of time, particularly after a zwiki upgrade, to ensure all pages have the latest properties and have been rendered by the latest code, minimizing delay and possible problems later on. Also installs a wiki catalog if not present, re-indexes each page, validates page parents, and rebuilds the wiki outline cache. Also installs the index_html and standard_error_message dtml methods. XXX split ? You can set render=0 to skip the page pre-rendering part, completing much faster on large wikis. The optional batch argument forces a commit every N pages. This may be useful to get a complete run in large/busy wikis, which can be difficult due to conflict errors or memory usage. Requires 'Manage properties' permission on the folder. s Unauthorizeds,You are not authorized to upgrade all pages.s(folder -> Manage properties)s-upgrading/reindexing/pre-rendering all pages:supgrading/reindexing all pages:isreindexis clear_cachesupgraded and pre-rendered pages upgraded pageslogs %s %d/%d %ss#failed to upgrade page %d/%d %s: %ss committings7upgrade complete, %d pages processed in %fs, %f pages/sN( sselfscheckPermissions Permissionssmanage_propertiessfolders_sintsbatchsrendersBLATHERsclocks starttimes pageCountsnstotals setupCatalogs pageObjectsspsupgradesREQUESTs upgradeIdsfixPageEncodings preRendersmsgs index_objectsidsformattedTracebacksget_transactionscommitsupdateWikiOutlinessetupDtmlMethodssendtime( sselfsrendersbatchsREQUESTsendtimesnsps starttimesmsgstotal((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pys upgradeAllsB          $'    s upgradeIdcCs…tt|ƒp |iƒ}y#|i|ddddd|ƒWn?tj o3td|iƒ|i ƒ|i |ƒfƒnXdS(s' Make sure a page's id conforms with its title (may also change title!) See also canonicalIdFrom, http://zwiki.org/HowZwikiTitleAndIdWorks . Does not leave a placeholder, so may break incoming links. Does update backlinks, because it's less work than fixing up links by hand afterward. This makes it too slow to use in auto-upgrade, though, so people must call this manually or more usually via upgradeAll. With legacy pages (or manually renamed pages), it may happen that there's a clash between two similarly-named pages mapping to the same canonical id. In this case we just log the error and move on. The tracker plugin modifies this to also rename old IssueNoNNNN pages to the new #NNNN style. supdatebacklinksissendmailisREQUESTs8upgradeId for "%s" (%s) failed - does %s already exist ?N( s callHookssupgradeId_hookssselfspageNamesnamesrenamesREQUESTs CopyErrorsBLATHERsgetIdscanonicalIdFrom(sselfsREQUESTsname((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pys upgradeIdes #cCsti||iƒƒSdS(sS Find the best modern equivalent for some arbitrary old page type. N(sPAGE_TYPE_UPGRADESsgets oldpagetypeidsselfsdefaultPageType(sselfs oldpagetypeid((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pysnewPageTypeIdForssupgradec CsLd}t|idƒo|i|_|`d}n|iƒ}|ti ƒjo*|i |i |ƒƒ|i ƒd}n|i o|iƒiƒ|_ d}n…t|i ƒtj o|i iƒ|_ d}nSt|i ƒdjo<y"t|i ƒiƒ|_ d}Wq,tj oq,Xn|i on…t|iƒtj o|iiƒ|_d}nSt|iƒdjo<y"t|iƒiƒ|_d}Wq¿tj oq¿XnxKdddfD]:}t|i|ƒo!t||ƒ|i ƒd}qÏqÏWhdhd d<d d <<}hd hd d <d d <d d<<dhd d<d d <d d<<dhd d<d d <d d<<dhd d<d d <d d<<dhd d<d d <d d<<dhd d<d d <d d<<dhd d<d d <d d<<dhd d<d d<d d<<}td„|iƒ}x%|i ƒD]}||joqvqvWxC|i ƒD]5}||j o!|i||f|_d}qžqžW|iƒo d}ntt |ƒo d}n|ot!d|i"ƒƒn|i#|ƒ|i%ƒ|i&ƒdS(s Upgrade an old page instance (and possibly the folder as well). Called on every page view (set AUTO_UPGRADE=0 in Default.py to prevent this). You could also call this on every page in your wiki to do a batch upgrade. Affects bobobase_modification_time. If you later downgrade zwiki, the upgraded pages may not work so well. is_st_dataiis _wikilinkss_linkss _prelinkeds page_typesidstypesstringscreatorsmodesrs creator_ips creation_times last_editorslast_editor_ipslast_edit_timeslast_logs NOT_CATALOGEDsbooleanswcCs|dS(Nsid(sx(sx((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pysþss upgraded N('schangedshasattrsselfsaq_bases_st_datasraws pageTypeIdspagetypesPAGE_TYPE_UPGRADESskeyss setPageTypesnewPageTypeIdFors clearCacheslast_edit_timesbobobase_modification_timesISOstypes StringTypeslensDateTimesDateTimeSyntaxErrors creation_timesasdelattrsoldpropssnewpropssmaps _propertiesspropsspsensureParentsPropertyIsLists callHookss upgrade_hookssBLATHERsidsupgradeCommentssREQUESTs_upgradeSubscriberss wikiOutline( sselfsREQUESTsasnewpropsschangedspsoldpropsspropsspagetype((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pysupgrades|                  !ÿ'        sManage propertiess setupPagesc Csattƒƒtidtid}ti|ƒ}x|D]ý} | ddjoq;ti d| ƒ}|oÉ|i dƒ|i dƒf\}}|i|ƒ ot|ti| dƒiƒ}tid |ƒ}|i dƒo"tt|i dƒƒd ƒ}ng}|i d ƒ}|i|d |ƒq8q;q;W|o|ii|iƒƒnd S(sM Install some default wiki pages to help get a wiki started. swikissbasiciûÿÿÿs.dtmls (.+)\.(.+)iisrs(?si)(^#parents:(.*?)\n)?(.*)s,istextN(s package_homesglobalssosssepsdirslistdirs filenamessfilenamesressearchsmsgroupsnamestypesselfs pageWithNamesopensreadstextsmatchssplitsstripsparentsscreatesREQUESTsRESPONSEsredirectspageUrl( sselfsREQUESTsnamesms filenamesstextsdirstypesparentssfilename((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pys setupPages$s(%$ "c CsLtiittƒƒddƒ}ti|ƒ}xô|D]ì} t i d| ƒ}|oÍ|i dƒ|i dƒf\}}|i|ƒ o”ttii|| ƒdƒiƒ}t id|ƒ}|i dƒo"tt|i dƒƒdƒ}ng}|i d ƒ}|i|d |ƒq#q7q7W|o|ii|iƒƒnd S( sü Install the DTML page implementations of some standard views. This facilitates easy tweaking and development. It doesn't check if dtml is enabled in the wiki, just creates the pages with the default page type. sskinsszwikis (.+)\.(.+)iisrs(?si)(^#parents:(.*?)\n)?(.*)s,istextN(sosspathsjoins package_homesglobalssdirslistdirs filenamessfilenamesressearchsmsgroupsnamestypesselfs pageWithNamesopensreadstextsmatchssplitsstripsparentsscreatesREQUESTsRESPONSEsredirectspageUrl( sselfsREQUESTsnamesms filenamesstextsdirstypesparentssfilename((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pyssetupDtmlPages>s$!$$"ssetupDtmlMethodsc Cstiittƒƒddƒ}gi}ti|ƒD](}|i dƒo||d ƒq8q8~}|i ƒiƒ}x`|D]X}||joEt|i ƒ|dddttii||dƒdƒiƒƒq‚q‚W|o|ii|iƒƒnd S( s) Install some default DTML methods to make wikis work better. These include: index_html - redirects to the wiki's front page standard_error_message - handles 404s to enable fuzzy urls etc. Existing objects with the same name won't be overwritten. swikissbasics.dtmliûÿÿÿstitlessfilesrN(sosspathsjoins package_homesglobalssdsappends_[1]slistdirsfsendswiths dtmlmethodssselfsfolders objectIdssidssms addDTMLMethodsopensreadsREQUESTsRESPONSEsredirectspageUrl(sselfsREQUESTsdsfsmsidss_[1]s dtmlmethods((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pyssetupDtmlMethodsXs !H  4ssetupPropertiescCs%|o|ii|iƒƒndS(s¯ Install some of the optional Zwiki properties on this wiki folder. Calling this should not change the wiki's behaviour, but puts some of the properties in place so that people don't have to look up QuickReference. XXX But actually, we may want to avoid pre-installing properties before they're needed since they increase complexity for the wiki admin. Need this ? N(sREQUESTsRESPONSEsredirectsselfspageUrl(sselfsREQUEST((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pyssetupPropertiesqs s setupCatalogc Cs]|iƒdjo!|iƒididdƒn|iƒ}|iƒ|iƒf\} } |id} x-t D]%}|| j o| i |ƒqrqrWx-tD]%}|| j o| i|ƒq¢q¢Wx-tD]%}|| j o| i|ƒqÒqÒWx-tD]%}|| j o| i|ƒqqWx-tD]%}|| j o| i|ƒq2q2Wx-tD]%}|| j o|i|ƒqbqbW|o¦d}|iƒiƒ}xy|iƒD]k}|d}y1td||i ƒ|fƒ|i!d dƒWq·td ||i ƒt"ƒfƒq·Xq·Wtd |ƒn|o|i$i%|i&ƒƒnd S( sð Create and/or configure a catalog for this wiki. Safe to call more than once; will ignore any already existing items. For simplicity we install all metadata for plugins (like Tracker) here as well. sNONEsZCatalogsCatalogss PluginIndexesiisindexing page %d %s in %sslogsfailed to index page %d %s: %ss%indexing complete, %d pages processedN('sselfs catalogIdsfoldersmanage_addProductsmanage_addZCatalogscatalogsindexessschemascatalogindexesscatalogmetadatas PluginIndexess TEXTINDEXESsismanage_addTextIndexs FIELDINDEXESsmanage_addFieldIndexsKEYWORDINDEXESsmanage_addKeywordIndexs DATEINDEXESsmanage_addDateIndexs PATHINDEXESsmanage_addPathIndexs PAGE_METADATAsmsmanage_addColumnsreindexsnsgetIdscids pageObjectsspsBLATHERsids index_objectsformattedTracebacksREQUESTsRESPONSEsredirectspageUrl( sselfsREQUESTsreindexscidsismsnspscatalogscatalogmetadatascatalogindexess PluginIndexes((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pys setupCatalog‚sX!    (s iso8859-1sutf-8cCsÏy2t|iƒ|ƒ}t|iƒ|ƒ}tSWn–tj oŠd|iƒ||f}t |ƒ|i t|iƒ|ƒi |ƒdt ƒ|it|iƒ|ƒi |ƒdddt ƒtSnXdS(så Try to fix any character encoding problems in this page's name or text. FROM is the encoding that we will try to convert from if there is trouble TO is the encoding we prefer to use in this wiki s$converting %s from %s to %s encodingsREQUESTssendmailiN(sunicodesselfspageNamesTOststextsFalsesUnicodeDecodeErrorsFROMslogsBLATHERssetTextsencodesREQUESTsrenamesTrue(sselfsFROMsTOslogst((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pysfixPageEncoding±s +1cCs?x|iƒD]}t|ƒq W|iii|idƒdS(NsURL1(sselfs pageObjectsspsfixPageEncodingsREQUESTsRESPONSEsredirect(sselfsp((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pysfixAllPagesEncodingËs (s__name__s __module__s__doc__sClassSecurityInfossecuritys declarePublicsNones upgradeAllsupgradeId_hookssdeclareProtecteds PermissionssViews upgradeIdsnewPageTypeIdFors upgrade_hookssupgrades setupPagesssetupDtmlPagesssetupDtmlMethodsssetupPropertiess setupCatalogsfixPageEncodingsfixAllPagesEncoding(((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pysPageAdminSupports2   D   ”    /scCsrt|ƒ}t|ƒ}td|d|ƒ}||_tƒiƒiƒ}|i |dgƒ|i ||ƒdS(Ns source_strings__name__sOwner( sstrsidstitles DTMLMethodsfilesobsgetSecurityManagersgetUsers getUserNamesusernamesmanage_addLocalRolessselfs _setObject(sselfsidstitlesfilesusernamesob((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pys addDTMLMethodÖs   ()stypessossresos.pathsstringsjoinssplitsstripstimesclocks AccessControlsgetSecurityManagersClassSecurityInfosGlobalss package_homesInitializeClasssOFS.CopySupports CopyErrorsOFS.DTMLMethods DTMLMethodsDateTimesI18ns_s PermissionssUtilssget_transactionsBLATHERsformattedTracebacksDateTimeSyntaxErrors callHookss pagetypessPAGE_TYPE_UPGRADESsDefaultss PAGE_METADATAs TEXTINDEXESs FIELDINDEXESsKEYWORDINDEXESs DATEINDEXESs PATHINDEXESsPageAdminSupports addDTMLMethod(sPAGE_TYPE_UPGRADESsformattedTracebacks DTMLMethodsDateTimes PATHINDEXESsPageAdminSupportsstrips TEXTINDEXESsclocksressplitsDateTimeSyntaxErrors addDTMLMethodsClassSecurityInfosInitializeClasssget_transactions DATEINDEXESs callHookss FIELDINDEXESs_sBLATHERsjoinsgetSecurityManagers CopyErrors PAGE_METADATAsKEYWORDINDEXESs Permissionssoss package_home((s5/mnt/gmirror/ports/www/zope-zwiki/work/ZWiki/Admin.pys?s"      % +ÿ»