ń- X śŇ‚‰š{ nśŇ„đš{VVerdana Ź„25?ËĎnPL$śŇ‚‰śÝ7ă  prefsXsites„P˜FFFF000000060001001777AA00000000005E00000000100171-7FFF6FBE1800000‚‚4800480611200-1‚0Â6‚11222FFFF0‚‚10‚‚3‚5C00001000000330000000105C40840‚‚6‚11222028E0006‚1119B0000200000061000000005C,The XML Files Tool lets you flow content from a Manila site into a folder full of XML files.00040000000A00000002015E10005000000090000000205E00006000000640000000210920‚‚ÁFFFF0‚900000 20ÂÁ ‚‚Á‚10920‚‚ÁFFFF0‚A00000 10ÂÁ ‚‚Á‚000700000019000000010Â‚20180‚Á‚0008000001320000000240,Verdana40,401C230 1040,Arial40,407D10 10000900000015000000023‚512213‚51221000A00000015000000026‚112226‚11222000B00000005000000020Â000C00000015000000015C‚‚719B0195‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,]BČ4,4,ɲĐ4,]g4,˙4,Ŕ¸4,X00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.Śš°­­.'"ÔŐŇÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸&ú@¸'ƒ\ł¸ě˜…+V¸'EšA " .H T` l˘ §śštü ĘauthorUserLand Software, Inc. authorEmailwebmaster@userland.com descriptionZ homePageUrl2http://www.thetwowayweb.com/stories/storyReader$50name theXmlFiles releaseDateversion1.1VVerdana Ź„2Ŕ¸VH…š*Verdana śÝ5śŢŻô –L2ŔLAND˙˙˙˙˙˙mac 3/20/01; 4:27:31 PM by JES Clean out the data table, and save a copy of the database. table.emptyTable (@theXmlFilesData.prefs) table.emptyTable (@theXmlFilesData.sites) fileMenu.saveMyRoot (this) target.set (this) fileMenu.saveCopy (file.getSystemDisk () + "TheXmlFiles.root") „€€€€€€š Verdana ¸1Lă¸1Lă–°ÉLAND˙˙˙˙˙˙mac 3/20/01; 8:40:28 PM by JES Created. Ask the user for the URL of a Manila site, a username and a password. Tell the server to export the site for download, download the site, open it, and export it as XML. theXmlFilesSuite.init () local (siteUrl = theXmlFilesData.prefs.lastDownloadedSite) if dialog.ask ("Enter the URL of a site to download and export...", @siteUrl) if not (string.lower (siteUrl) beginsWith "http://") siteUrl = "http://" + siteUrl if not (siteUrl endsWith "/") siteUrl = siteUrl + "/" theXmlFilesData.prefs.lastDownloadedSite = siteUrl local (username, password) if theXmlFilesSuite.getPasswordDialog (siteUrl, @username, @password) msg ("Exporting site for download...") local (downloadUrl = theXmlFilesSuite.getDownloadUrl (siteUrl, username, password)) msg ("Downloading site database...") local (adrSite = theXmlFilesSuite.downloadDatabase (downloadUrl)) local (exportFolder = theXmlFilesSuite.export (adrSite)) file.openFolder (exportFolder) else return (false) local (downloadUrl) „€€€€€€€€€€€€€€€€€€€€Bd Verdana śÝ07śŢŻÚ úwčlLAND˙˙˙˙˙˙mac 3/20/01; 4:05:16 PM by JES Ask for a downloaded site database, and export the site as XML. theXmlFilesSuite.init () local (f = theXmlFilesData.prefs.lastExportedSite) if file.getFileDialog ("Choose a site database to export as XML...", @f, 0) if not defined ([f]) fileMenu.open (f, true) local (adrSite = @[f][1]) theXmlFilesSuite.export (adrSite) „€€€€€€€€€€ˇ]$śÝ0¸1Lă  )downloadAndExportX T exportSiteXsVVerdana Ź„2ç~}ˇtŠrVerdana śÝzFśŢŻŰ|PĽLAND˙˙˙˙˙˙mac on downloadDatabase (rootUrl) 3/12/01; 11:42:39 AM by JES Download a Manila site, save the database, open it, and return the address of the site table. local (filename, folderName, f, bits) bundle // get the path to save the database local (pc = file.getPathChar ()) filename = string.nthField (rootUrl, "/", string.countFields (rootUrl, "/")) folderName = string.nthField (filename, ".", 1) f = theXmlFilesData.prefs.downloadFolder + folderName + pc + filename bundle // close older versions of the database if defined ([f]) fileMenu.close (@[f]) bundle // download the database local (bits = tcp.httpReadUrl (rootUrl)) file.sureFilePath (f) file.writeWholeFile (f, bits, 'TABL', 'LAND') fileMenu.open (f, true) return (@[f] [1]) bundle // test code workspace.userlandSamples.manilaSiteToXml.downloadSite ("http://www.someserver.com/mySite.root") €„€€€€€€€€€€€€€€€€€€„tł0 Verdana śŇśŢŻŰ y˘VLAND˙˙˙˙˙˙mac on downloadGem (adrGem, gemsFolder) 3/12/01; 2:28:24 PM by JES Created. local (f = theXmlFilesSuite.utilities.urlToFilePath (adrGem^.url, gemsFolder)) local (bits = tcp.httpReadUrl (adrGem^.url)) file.sureFilePath (f) file.writeWholeFile (f, bits) return (f) €„€€€€€łH°¸?€Verdana ¸1Lă¸1Lă´lgśLAND˙˙˙˙˙˙mac on export (adrSite) 3/12/01; 3:59:05 PM by JES Created. Changes 03/20/01; 9:16:41 PM by JES Make sure adrGems^.data is defined before attempting to export gems data. 03/20/01; 10:57:59 PM by JES Fixed a problem encoding sitePrefs->modules and sitePrefs->newsItems.departments. 03/20/01; 11:31:11 PM by JES Check to see if newsDayTemplate is defined. 03/20/01; 11:36:10 PM by JES Only export the homePageTemplate if it exists. 03/20/01; 11:39:37 PM by JES Only export the cascadingStyleSheet if it exists. 03/20/01; 11:39:37 PM by JES Only export the newsDayTemplate if it exists. 03/20/01; 11:43:30 PM by JES Fixed a bug where the plugins folder didn't exist before attempting to export plugin data. 03/21/01; 3:30:19 PM by JES Serialize stats by calling theXmlFilesSuite.serialize.stats, instead of theXmlFilesSuite.serialize.table. Don't export plugin data. 06/12/01; 12:55:53 by JES Call theXmlFilesSuite.exportPicture to export picture files. That's the correct bottleneck. theXmlFilesSuite.init () local (adrData = theXmlFilesSuite.utilities.getDataTable (adrSite)) local (adrDg = @adrSite^.["#discussionGroup"]) local (pc = file.getPathChar ()) local (folder = theXmlFilesSuite.utilities.getSiteFolder (adrSite) + "XML Files" + pc) local (dgFolder = folder + "discussionGroup" + pc) local (pictureFolder = folder + "pictures" + pc, pictureFolderExists = false) local (enclosureFolder = dgFolder + "enclosures" + pc, enclosureFolderExists = false) on needsUpdate (type, identifier, d) if not defined (adrData^.[type]) new (tableType, @adrData^.[type]) if not defined (adrData^.[type].[identifier]) adrData^.[type].[identifier] = date (0) if adrData^.[type].[identifier] < d return (true) return (false) on setLastUpdate (type, identifier, d) adrData^.[type].[identifier] = d on sureFolder (folder) file.sureFilePath (folder) file.sureFolder (folder) on exportPictureCallback (adrMsg) Export a picture to a file, and return the path to the picture on disk bundle //old code if not pictureFolderExists sureFolder (pictureFolder) local (adrImage = @adrMsg^.image) local (f, filename, extension, fileType) case string.lower (adrImage^.mimeType) "image/gif" extension = ".gif" fileType = 'GIFf' "image/jpeg" extension = ".jpeg" fileType = 'JPEG' if defined (adrImage^.url) local (ctFields = string.countFields (adrImage^.url, "/")) filename = string.nthField (adrImage^.url, "/", ctFields) else filename = string.innerCaseName (adrMsg^.subject) + extension if system.environment.isMac extension = "." + string.nthField (filename, '.', string.countFields (filename, '.')) filename = string.mid (string.popSuffix (filename), 1, 31 - sizeOf (extension)) + extension f = pictureFolder + filename file.writeWholeFile (f, adrImage^.bits, fileType, 'ogle') return (f) return (theXmlFilesSuite.exportPicture (adrmsg, pictureFolder)) on exportEnclosureCallback (adrMsg) Export an enclosure to a file, and return the path to the enclosure on disk if not (enclosureFolderExists) sureFolder (msgsFolder) local (f, filename, extension, fileType) fileType = frontier.getFileType (adrMsg^.enclosureType) extension = "." + string.lower (fileType) bundle // get the filename from the enclosureAddress local (ctFields = string.countFields (adrMsg^.enclosureAddress, '.')) filename = string.nthField (string.countFields (adrMsg^.enclosureAddress, '.', ctFields)) filename = filename + extension if system.environment.isMac filename = string.mid (string.popSuffix (filename), 1, 31 - sizeOf (extension)) + extension f = enclosureFolder + filename file.writeWholeFile (f, adrMsg^.enclosureBits, fileType, 'LAND') return (f) on deleteScripts (adr) on doVisit (adr) local (adritem, ct = sizeOf (adr^)) for i = ct downto 1 local (adritem = @adr^[i]) case (typeOf (adritem^)) tableType doVisit (adritem) scriptType delete (adritem) doVisit (adr) on exportTable (adrtable, folder, name=nil) if name == nil name = nameOf (adrtable^) if name beginsWith "#" name = string.mid (name, 2, infinity) local (f = folder + name + ".xml") local (xmltext = theXmlFilesSuite.serialize.table (adrtable, 0)) file.sureFilePath (f) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) local (flUpdateDiscussCalendar = false) bundle //export discussion group messages; exporting changed pictures and enclosures local (msgsFolder = dgFolder + "messages" + pc) sureFolder (msgsFolder) local (adrMsgs = @adrDg^.messages, adrMsg) for adrMsg in adrMsgs local (name = nameOf (adrMsg^)) local (f = msgsFolder + name + ".xml") local (xmltext) if needsUpdate ("messages", name, adrMsg^.lastUpdate) msg ("Exporting new and changed messages: " + number (name) + "...") flUpdateDiscussCalendar = true xmltext = theXmlFilesSuite.serialize.message (adrSite, adrMsg, @exportPictureCallback, @exportEnclosureCallback) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) setLastUpdate ("messages", name, adrMsg^.lastUpdate) bundle //export discussion group calendar local (f = dgFolder + "calendar.xml") if not file.exists (f) flUpdateDiscussCalendar = true if flUpdateDiscussCalendar msg ("Exporting discussion group calendar...") local (xmltext) local (adrCalendar = @adrDg^.calendar) xmltext = theXmlFilesSuite.serialize.calendar (adrCalendar) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) bundle //download gems local (adrGems = @adrSite^.["#newsSite"].gems) if defined (adrGems^) adrGems = @adrGems^.data if defined (adrGems^) local (ct = sizeOf (adrGems^)) if ct > 0 local (gemsFolder = folder + "gems" + pc) local (gemsFilesFolder = gemsFolder + "files" + pc) sureFolder (gemsFolder) for i = ct downTo 1 local (adrGem = @adrGems^[i]) local (flDeleted = false) if defined (adrGem^.flDeleted) flDeleted = adrGem^.flDeleted local (gemPath = theXmlFilesSuite.utilities.urlToFilePath (adrGem^.url, gemsFilesFolder)) if needsUpdate ("gems", adrGem^.url, adrGem^.postTime) if not flDeleted msg ("Downloading Gem: " + file.fileFromPath (gemPath) + "...") theXmlFilesSuite.downloadGem (adrGem, gemsFilesFolder) local (xmltext, f = gemsFolder + nameOf (adrGem^) + ".xml") xmltext = theXmlFilesSuite.serialize.gem (adrGem, gemPath) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) setLastUpdate ("gems", adrGem^.url, adrGem^.postTime) if not flDeleted if not file.exists (gemPath) msg ("Downloading Gem: " + file.fileFromPath (gemPath) + "...") theXmlFilesSuite.downloadGem (adrGem, gemsFilesFolder) bundle //export the glossary local (adrGloss = @adrSite^.["#glossary"]) if needsUpdate ("siteData", "glossary", timeModified (adrGloss)) msg ("Exporting shortcuts...") local (f = folder + "glossary.xml") local (xmltext = theXmlFilesSuite.serialize.glossary (adrGloss)) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) setLastUpdate ("siteData", "glossary", timeModified (adrGloss)) bundle //export site prefs/data msg ("Exporting site prefs...") on exportXml (adr, name) local (f = folder + name + ".xml") file.writeWholeFile (f, string (adr^), 'TEXT', 'Radu') local (sitePrefs = adrSite^.["#newsSite"]) bundle //add items which are stored elsewhere sitePrefs.siteUrl = adrSite^.["#ftpSite"].url new (tableType, @sitePrefs.prefs) table.copyContents (@adrSite^.["#prefs"], @sitePrefs.prefs) new (tableType, @sitePrefs.urls) table.copyContents (@adrSite^.["#urls"], @sitePrefs.urls) bundle //clean up the table delete (@sitePrefs.bulletins.htmlTemplate) delete (@sitePrefs.bulletins.plainTextTemplate) if defined (sitePrefs.cascadingStyleSheet) delete (@sitePrefs.cascadingStyleSheet) if defined (sitePrefs.checkouts) delete (@sitePrefs.checkouts) if defined (sitePrefs.editorialOutline) delete (@sitePrefs.editorialOutline) delete (@sitePrefs.emailConfirmation) if defined (sitePrefs.gems) delete (@sitePrefs.gems) if defined (sitePrefs.indexes) delete (@sitePrefs.indexes) delete (@sitePrefs.membersBoxTemplates) if defined (sitePrefs.modules) local (modules = sitePrefs.modules) new (tableType, @sitePrefs.modules) local (adr, ct=1) for adr in @modules local (adrTable = @sitePrefs.modules.["module" + string.padWithZeros (ct, 3)]) new (tableType, adrTable) adrTable^.name = nameOf (adr^) adrTable^.msgNum = adr^.msgNum ct++ if defined (sitePrefs.newsDayTemplate) delete (@sitePrefs.newsDayTemplate) if defined (sitePrefs.newsItems) if defined (sitePrefs.newsItems.all) delete (@sitePrefs.newsItems.all) if defined (sitePrefs.newsItems.template) delete (@sitePrefs.newsItems.template) if defined (sitePrefs.newsItems.departments) local (departments = sitePrefs.newsItems.departments) new (tableType, @sitePrefs.newsItems.departments) local (adr, ct=1) for adr in @departments local (adrTable = @sitePrefs.newsItems.departments.["department" + string.padWithZeros (ct, 3)]) new (tableType, adrTable) adrTable^.name = nameOf (adr^) adrTable^.createdDate = adr^.createdDate ct++ if defined (sitePrefs.pike) delete (@sitePrefs.pike) if defined (sitePrefs.prefsWizard) delete (@sitePrefs.prefsWizard) if defined (sitePrefs.preview) delete (@sitePrefs.preview) if defined (sitePrefs.signUpWizard) delete (@sitePrefs.signUpWizard) if defined (sitePrefs.slides) delete (@sitePrefs.slides.template) if defined (sitePrefs.stats) delete (@sitePrefs.stats) delete (@sitePrefs.welcomePage) local (xmltext) xmltext = theXmlFilesSuite.serialize.table (@sitePrefs, "sitePrefs") exportXml (@xmltext, "sitePrefs") exportXml (@adrSite^.["#hierarchy"].outline, "hierarchy") exportXml (@adrSite^.["#navigator"].outline, "navigator") if defined (adrSite^.["#newsSite"].prefsWizard) local (xmltext = string (adrSite^.["#newsSite"].prefsWizard.outline)) xmltext = string.replaceAll (xmltext, " ", "&nbsp;") //  isn't a valid XML entity exportXml (@xmltext, "userPrefs") bundle //export templates msg ("Exporting templates...") on exportTemplate (adr, name, extension=".html") local (f = folder + "templates" + pc + name + extension) local (fileCreator = user.html.prefs.textFileCreator) file.sureFilePath (f) file.writeWholeFile (f, string (adr^), 'TEXT', fileCreator) exportTemplate (@adrSite^.["#template"], "template") if defined (adrSite^.["#homePageTemplate"]) exportTemplate (@adrSite^.["#homePageTemplate"], "homePageTemplate") exportTemplate (@adrSite^.["#newsSite"].bulletins.htmlTemplate, "bulletinsHtmlTemplate") exportTemplate (@adrSite^.["#newsSite"].bulletins.plainTextTemplate, "bulletinsTextTemplate", ".txt") if defined (adrSite^.["#newsSite"].cascadingStyleSheet) exportTemplate (@adrSite^.["#newsSite"].cascadingStyleSheet, "styleSheet", ".css") exportTemplate (@adrSite^.["#newsSite"].emailConfirmation, "signupConfirmation", ".txt") exportTemplate (@adrSite^.["#newsSite"].membersBoxTemplates.signInBox, "joinNowMembersBox") exportTemplate (@adrSite^.["#newsSite"].membersBoxTemplates.signOutBox, "signOutMembersBox") if defined (adrSite^.["#newsSite"].newsDayTemplate) exportTemplate (@adrSite^.["#newsSite"].newsDayTemplate, "newsDayTemplate") if defined (adrSite^.["#newsSite"].newsItems) exportTemplate (@adrSite^.["#newsSite"].newsItems.template, "newsItemsTemplate") if defined (adrSite^.["#newsSite"].slides) exportTemplate (@adrSite^.["#newsSite"].slides.template, "slidesTemplate") exportTemplate (@adrSite^.["#newsSite"].welcomePage, "welcomePage") bundle //export stats msg ("Exporting stats...") local (xmltext, f = dgFolder + "stats.xml") xmltext = theXmlFilesSuite.serialize.stats (@adrSite^.["#discussionGroup"].stats) file.writeWholeFile (f, xmltext, 'TEXT', 'Radu') bundle //export membership group msg ("Exporting member data...") local (adrMembers = @adrSite^.["#membershipGroup"].users) local (f = folder + "members.xml") local (xmltext = "\r") local (adrMember) for adrMember in adrMembers xmltext = xmltext + theXmlFilesSuite.serialize.member (adrMember, 1) xmltext = xmltext + "\t\r" file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) bundle //export plugin data local (adrPlugins = @adrSite^.["#plugins"]) if defined (adrPlugins^) msg ("Exporting plug-in data...") local (pluginsFolder = folder + "plugins" + pc) local (pluginsList = {}, ct = 0) bundle // get a list of all the plugins local (adritem) if defined (adrPlugins^.data) for adritem in @adrPlugins^.data local (name = nameOf (adritem^)) pluginsList = pluginsList + name ct++ if defined (adrPlugins^.enabled) for adritem in @adrPlugins^.enabled local (name = nameOf (adritem^)) if not (pluginsList contains name) pluginsList = pluginsList + name ct++ for i = 1 to ct local (pluginData); new (tableType, @pluginData) local (name = pluginsList[i]) pluginData.name = name if defined (adrPlugins^.data) pluginData.data = adrPlugins^.data.[name] if defined (adrPlugins^.enabled.[name]) and (adrPlugins^.enabled.[name] != false) pluginData.enabled = true pluginData.websiteFragmentPath = adrPlugins^.enabled.[name] else pluginData.enabled = false pluginData.websiteFragmentPath = "" if pluginData.enabled and (sizeOf (pluginData.websiteFragmentPath) > 0) local (adrWebsiteFragment = theXmlFilesSuite.utilities.relativePathToAddress (adrSite, pluginData.websiteFragmentPath)) if defined (adrWebsiteFragment^) pluginData.websiteFragment = adrWebsiteFragment^ deleteScripts (@pluginData.websiteFragment) name = string.innerCaseName (name) local (f = pluginsFolder + name + ".xml") local (xmltext = theXmlFilesSuite.serialize.table (@pluginData, name)) file.sureFilePath (f) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) bundle //export home page calendar msg ("Exporting home page calendar...") local (flUpdateHomePageCalendar = true) local (adrCalendar = adrSite) local (adrLastDay = theXmlFilesSuite.utilities.getLastCalendarAddress (adrCalendar)) local (f = folder + "homePageCalendar.xml") bundle //determine whether the home page calendar has changed We check the last day in the calendar If the message number has changed or if the site has switched to or from news items, then we need to update the calendar. if not defined (adrData^.homepage) new (tableType, @adrData^.homepage) if not defined (adrData.homepage.calendar) new (tableType, @adrData^.homepage.calendar) if not defined (adrData^.homepage.calendar.lastDay) new (tableType, @adrData^.homepage.calendar.lastDay) local (flNewsItems = false, msgNum = 0) if defined (adrLastDay^.flNewsItems) and adrLastDay^.flNewsItems flNewsItems = true if defined (adrLastDay^.msgNum) and not flNewsItems msgNum = adrLastDay^.msgNum if flNewsItems if defined (adrData^.homepage.calendar.lastDay.flNewsItems) if flNewsItems == adrData^.homepage.calendar.lastDay.flNewsItems flUpdateHomePageCalendar = false else if defined (adrData^.homepage.calendar.lastDay.msgNum) if msgNum == adrData^.homepage.calendar.lastDay.msgNum flUpdateHomePageCalendar = false if not defined (adrData^.homepage.calendar.lastDay.flNewsItems) adrData^.homepage.calendar.lastDay.flNewsItems = flNewsItems if not defined (adrData^.homepage.calendar.lastDay.msgNum) adrData^.homepage.calendar.lastDay.msgNum = msgNum if not file.exists (f) flUpdateHomePageCalendar = true if flUpdateHomePageCalendar local (xmltext) xmltext = theXmlFilesSuite.serialize.calendar (adrCalendar) file.writeWholeFile (f, xmltext, 'TEXT', Frontier.id) msg ("") return (folder) €„„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€„€€€€€H°—&ůVerdana ¸1Lă¸1LăŒç7LAND˙˙˙˙˙˙mac on exportPicture (adrmsg, imageFolder) 3/12/01; 2:34:08 PM by JES Created. Changes: 03/24/01; 4:39:41 PM by JES Fixed a typo in the parameter list -- imageFolder was imgaeFolder 06/11/01; 7:39:50 PM by JES Fixed the way filenames are generated from message subjects. They no longer contain non-alpha-numeric characters. local (adrImage = @adrmsg^.image) local (fileType, extension, f) case string.lower (adrImage^.mimeType) // get type (mac) and extension "image/gif" fileType = 'GIFf' extension = ".gif" "image/jpeg" fileType = 'JPEG' extension = ".jpg" if defined (msg.image.url) // get the filename from the URL f = theXmlFilesSuite.utilities.urlToFilePath (adrImage^.url, imageFolder) else // no URL is defined -- base the filename on the message subject bundle //old code local (filename = msg.subject) if system.environment.isMac if sizeOf (filename) > 27 filename = string.mid (filename, 1, 27) filename = filename + extension f = imageFolder + filename local (pc = file.getPathChar) local (filename = adrmsg^.subject) for i = 1 to sizeOf (filename) if string.isAlpha (filename[i]) continue if string.isNumeric (filename[i]) continue if filename[i] == "." continue filename[i] = " " filename = string.innerCaseName (filename) if system.environment.isMac if sizeOf (filename) > 27 filename = string.mid (filename, 1, 27) if not (string.lower (filename) endsWith extension) //the extension may already be in the name filename = filename + extension if filename contains pc filename = string.replaceAll (filename, pc, "-") f = imageFolder + filename file.sureFilePath (f) file.writeWholeFile (f, adrImage^.bits, fileType, user.html.prefs.imgFileCreator) return (f) €„„€€€€€„€€€€€€€€€€€—śfŘ Verdana śÝzFśÝzFBúLAND˙˙˙˙˙˙mac on getDownloadUrl (siteUrl, username, password) 3/20/01; 6:25:14 PM by JES Created. Tells the server to export the site, and returns the download URL for the site's object database. local (params = {siteUrl, username, password}) local (server, port = 80) bundle //determine server and port from the site URL local (urlParts = string.urlSplit (siteUrl)) server = urlParts[2] if server contains ":" port = string.nthField (server, ":", 2) server = string.nthField (server, ":", 1) local (ticksToTimeout = 60 * 60 * 60) //1 hour local (downloadUrl) downloadUrl = betty.rpc.client (server, port, "manila.exportSiteForDownload", @params, ticksToTimeout:ticksToTimeout, rpcPath:"/RPC2") return (downloadUrl) €„€€€€€€€€€ś ŒŒ ˆArial šBšBšĄĂLAND˙˙˙˙˙˙mac on getPasswordDialog (siteUrl, adrUsername, adrPassword) Changes 5/13/02; 1:53:17 PM by JES Rewrite. Call manila.windowTypes.getUsernameAndPassword to get the username and password. Required for the Tool to run properly in Radio 8. 5/30/01; 2:35:59 AM by JES Cross-platform script for running a username/password dialog. Cribbed from suites.playlist.manila.getPasswordDialog. local (adrinfo, username, password) on createInfoCallback (adrinfo) if manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password) manila.windowTypes.setUsernameAndPassword (adrinfo, username, password) else bundle //don't leave stale data lying around local (adrtempinfo = @system.temp.manila.data.sites.[nameOf (adrinfo^)]) if defined (adrtempinfo^) {delete (adrtempinfo)} delete (adrinfo) return (false) if manila.windowTypes.findSiteInfo (siteUrl, @adrinfo, @createInfoCallback) manila.windowTypes.getUsernameAndPassword (adrinfo, adrUsername, adrPassword) return (true) return (false) bundle //old code local (adrprefs, prefs) try adrPrefs = playlist.manila.getSitePrefs (siteUrl) playlist.manila.initSitePrefs (siteUrl) else adrPrefs = @prefs new (tableType, adrPrefs) adrPrefs^.flSavePassword = false adrPrefs^.username = user.prefs.mailAddress if not defined (temp.playlist) new (tableType, @temp.playlist) temp.playlist.flSavePassword = adrPrefs^.flSavePassword temp.playlist.password = "" temp.playlist.username = adrPrefs^.username //12/26/00 JES if system.environment.isMac if defined (playlist) card.run (@playlist.data.cards.manilaPasswordDialog) else card.run (@theXmlFilesSuite.dialogs.cards.manilaPasswordDialog) else if defined (playlist) html.dialog.run (@playlist.data.dialogs.wizard, 5, @temp.playlist) else html.dialog.run (@theXmlFilesSuite.dialogs.wizard, 1, @temp.playlist) adrUserName^ = temp.playlist.username adrPassword^ = temp.playlist.password adrPrefs^.flSavePassword = temp.playlist.flSavePassword delete (@temp.playlist.username) delete (@temp.playlist.password) delete (@temp.playlist.flSavePassword) if (adrUserName^ == "") or (adrPassword^ == "") return (false) return (true) bundle //test code local (username, password) local (siteUrl = "http://themes.userland.com/") getPasswordDialog (siteUrl, @username, @password) dialog.alert (username + ":" + password) €„€€€€€€€€€€€€„€„ Œd˘JVerdana šAšA,)1čLAND˙˙˙˙˙˙mac Changes: 5/13/02; 2:31:00 PM by JES Updated for Radio 8: Delete theXmlFilesSuite.dialogs, if defined. 03/20/01; 8:42:34 PM by JES Init theXmlFilesData.prefs.lastDownloadedSite. 3/12/01; 11:38:41 AM by JES Created. Initialize data and prefs for exporting Manila sites local (pc = file.getPathChar ()) local (appFolder = Frontier.pathString) local (downloadedSitesFolder = appFolder + "Downloaded Manila Sites" + pc) bundle //init data if not defined (theXmlFilesData.sites) new (tableType, @theXmlFilesData.sites) bundle //init prefs if not defined (theXmlFilesData.prefs.downloadFolder) theXmlFilesData.prefs.downloadFolder = downloadedSitesFolder if not defined (theXmlFilesData.prefs.exportFolder) theXmlFilesData.prefs.exportFolder = downloadedSitesFolder if not defined (theXmlFilesData.prefs.lastExportedSite) theXmlFilesData.prefs.lastExportedSite = "" if not defined (theXmlFilesData.prefs.lastDownloadedSite) theXmlFilesData.prefs.lastDownloadedSite = "" bundle //delete obsolete objects if defined (theXmlFilesSuite.dialogs) delete (@theXmlFilesSuite.dialogs) „€€€€€€€€€€€€d­/Verdana śŇ‚ŠśŢŻÝ&?îŔLAND˙˙˙˙˙˙mac theXmlFilesSuite.commands.downloadAndExport () €­ž0Charcoal śŇ‚‰śŢ°°&?îŔLAND˙˙˙˙˙˙mac TheXmlFiles Download Site and Export as XML... €€ ~Čžp5$ßÜVerdana t ŒpśŘfVerdana śŢyߜޯÝľŽńLAND˙˙˙˙˙˙mac on calendar (adrcalendar, startyear=1999, endyear=date.year ()) 3/12/01; 2:14:53 PM by JES Created. local (xmltext, indentlevel = 0) on add (s) xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r\n" add (""); indentlevel++ local (year, adryear, adrmonth, adrday, atts) for year = startyear to endyear adryear = @adrcalendar^.[year] if defined (adryear^) add (""); indentlevel++ for adrmonth in adryear add (""); indentlevel++ for adrday in adrmonth local (day = number (nameOf (adrDay^))) if defined (adrday^.msgNum) or defined (adrday^.flNewsItems) //homepage calendar if defined (adrday^.flNewsItems) and adrday^.flNewsItems add ("") else add ("") else //discussion group calendar add (""); indentlevel++ local (adrmsg) for adrmsg in adrday add ("" + theXmlFilesSuite.utilities.encodeString (adrmsg^) + "") add (""); indentlevel-- add (""); indentlevel-- add (""); indentlevel-- add ("") return (xmltext) €„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€śŽş\Verdana ¸1Lá¸1LáDU€LAND˙˙˙˙˙˙mac on gem (adrgem, f) 3/13/01; 6:14:15 PM by JES Created. Changes: 3/24/01; 7:00:04 PM by JES If the gem doesn't have a Content-Type defined, default to application/octet-stream (binary data). local (xmltext, indentlevel = 0) on encodeString (s) return (theXmlFilesSuite.utilities.encodeString (s)) on add (s) xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r\n" add (""); indentlevel++ add ("" + encodeString (file.fileToUrl (f)) + "") add ("" + encodeString (adrgem^.url) + "") add ("" + date.netStandardString (adrgem^.postTime) + "") local (mimeType = "application/octet-stream") //default to binary data if defined (adrgem^.["Content-Type"]) mimeType = adrgem^.["Content-Type"] add ("" + mimeType + "") add ("" + encodeString (adrgem^.member) + "") local (flDeleted = false) if defined (adrgem^.flDeleted) flDeleted = adrgem^.flDeleted add ("" + flDeleted + "") add ("") return (xmltext) €„„€€€€€€€€€€€€€€€€€€€€€€ŽÚrđVerdana <śŢyߜޯŢ@ˆ'LAND˙˙˙˙˙˙mac on glossary (adrgloss) 3/16/01; 12:39:50 AM by JES Created. local (xmltext, indentlevel=0) on encodeString (s) theXmlFilesSuite.utilities.encodeString (s) on add (s) xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r\n" add (""); indentlevel++ local (adritem) for adritem in adrgloss add ("" + encodeString (nameOf (adritem^)) + "") add (""); indentlevel-- return (xmltext) €„€€€€€€€€€€€€€€€€Ú’$öVerdana ś×œޯŢ0ѐj_LAND˙˙˙˙˙˙mac on member (adrmember, indentlevel=0, adrAtts=nil) 3/16/01; 1:41:42 AM by JES Created. local (atts); new (tableType, @atts) atts.email = nameOf (adrmember^) return (theXmlFilesSuite.serialize.table (adrmember, "member", indentlevel, @atts)) €„€€€’YroVerdana ¸1Lá¸1LáIkýuLAND˙˙˙˙˙˙mac on message (adrsite, adrmsg, adrExportPictureCallback=nil, adrExportEnclosureCallback=nil) 3/12/01; 2:00:38 PM by JES Created. Changes: 3/24/01; 4:38:43 PM by JES Fixed a typo when exporting images -- the width attribute was named witdh. local (xmltext, indentlevel = 0) local (flDeleted = false, body, bodyType = "text/plain", lastUpdate = adrmsg^.postTime) if defined (adrmsg^.flDeleted) flDeleted = adrMsg^.flDeleted if defined (adrmsg^.bodyType) bodyType = adrmsg^.bodyType if defined (adrmsg^.lastUpdate) lastUpdate = adrmsg^.lastUpdate on encodeString (s) return (theXmlFilesSuite.utilities.encodeString (s)) on add (s) xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r\n" on addTag (tagname, cdata="", adrAtts=nil) local (s = "<" + tagName) if adrAtts != nil for i = 1 to sizeOf (adrAtts^) s = s + " " + adrAtts^[i].name + "=\"" + adrAtts^[i].value + "\"" if sizeOf (cdata) > 0 s = s + ">" + cdata + "" else s = s + "/>" add (s) on addToAtts (adrAtts, name, value) local (tableName = string.padWithZeros (sizeOf (adrAtts^) + 1, 2)) local (adrAtt = @adrAtts^.[tableName]) new (tableType, adrAtt) adrAtt^.name = name adrAtt^.value = value bundle //build the xml for the message local (authorName) bundle //set authorName authorName = theXmlFilesSuite.utilities.getMemberName (adrsite, adrmsg^.member) add ("") add (""); indentlevel++ addTag ("msgNum", adrmsg^.msgnum) addTag ("authorEmail", encodeString (adrmsg^.member)) addTag ("authorName", encodeString (authorName)) addTag ("inResponseTo", adrmsg^.inResponseTo) addTag ("postTime", date.netStandardString (adrmsg^.postTime)) addTag ("lastUpdate", date.netStandardString (lastUpdate)) addTag ("subject", encodeString (adrmsg^.subject)) bundle //add the body with the type attribute local (atts); new (tableType, @atts) if defined (adrmsg^.newsItem) bodyType = "text/xml" addToAtts (@atts, "type", bodyType) case string.lower (bodyType) "text/x-outline-tabbed" //outline addTag ("body", encodeString (string (adrmsg^.outline)), @atts) "text/x-opml" //opml document if false//defined (adrmsg^.opml) addTag ("body", encodeString (string (adrmsg^.opml)), @atts) else local (orphan) bundle //get an orphan address for the outline -- it's the message subject The following looks strange, but there's a method to the madness... The name of the outline is rendered as the attribute cdata by op.outlineToXml, which is kernel code, so it's not changeable. One possibility is to bash the opml after op.outlineToXml is called. A better option is to make sure that the window title is already what we want for the <title> element -- but we can't do that without opening the window... So we use an orphan address which is the title we want -- the address is the subject of the message... But there's a problem: If the subject of the message is a valid odb address, then that address would be overwritten with the below assignment or call to op.newOutlineObject... So we add some whitespace which makes it virtually impossible to overwrite an odb object, while at the same time preserving nice looking spacing in the opml. Mind you, this is a very rare case anyway, since adrmsg^.opml is nearly always defined when the bodyType is text/x-opml... but it will happen so we have to deal with it. local (tabs = string.filledString ("\t", 3)) orphan = "\r\n" + tabs + adrmsg^.subject + "\r\n" + tabs while defined ([orphan]^) // make sure adrOutline is safe for assignment orphan = orphan + " " local ([orphan]) if typeOf (adrmsg^.outline) == outlineType [orphan] = adrmsg^.outline else op.newOutlineObject (string (adrmsg^.outline), @[orphan]) local (opmltext = op.outlineToXml (@[orphan], authorName, adrmsg^.member)) addTag ("body", encodeString (opmltext), @atts) "text/xml" //news item local (xmlstruct) xml.compile (adrmsg^.body, @xmlstruct) local (adrNewsItem = xml.getAddress (@xmlstruct, "newsItem")) bundle //set flPosted, flReleased and postTime local (flPosted = false, flReleased = false, postTime = "") if defined (adrmsg^.newsItem.flPosted) flPosted = adrmsg^.newsItem.flPosted adrNewsItem^.flPosted = flPosted if defined (adrmsg^.newsItem.flReleased) flReleased = adrmsg^.newsItem.flReleased adrNewsItem^.flReleased = flReleased if defined (adrmsg^.newsItem.postTime) postTime = adrmsg^.newsItem.postTime adrNewsItem^.postTime = postTime adrNewsItem^.title = adrmsg^.newsItem.title local (body = xml.decompile (@xmlstruct)) addTag ("body", encodeString (body), @atts) "text/plain" //plain text addTag ("body", encodeString (string (adrmsg^.body)), @atts) addTag ("ctReads", adrmsg^.ctreads) bundle //serialize responses if sizeOf (adrmsg^.responses) > 0 local (item) add ("<responses>"); indentlevel++ for item in adrmsg^.responses addTag ("response", encodeString (item)) add ("</responses>"); indentlevel-- else add ("<responses/>") bundle //serialize alsoListedIn if defined (adrmsg^.alsoListedIn) and (sizeOf (adrmsg^.alsoListedIn) > 0) local (item) add ("<alsoListedIn>"); indentlevel++ for item in adrmsg^.alsoListedIn addTag ("category", encodeString (item)) add ("</alsoListedIn>"); indentlevel-- else add ("<alsoListedIn/>") bundle //deal with images local (atts); new (tableType, @atts) if defined (adrmsg^.image) local (f = adrExportPictureCallback^ (adrmsg)) addToAtts (@atts, "url", encodeString (file.fileToUrl (f))) if defined (adrmsg^.image.height) addToAtts (@atts, "height", adrmsg^.image.height) addToAtts (@atts, "width", adrmsg^.image.width) if defined (adrmsg^.image.shortcut) addToAtts (@atts, "shortcut", encodeString (adrmsg^.image.shortcut)) if defined (adrmsg^.image.url) addToAtts (@atts, "src", encodeString (adrmsg^.image.url)) addToAtts (@atts, "mimeType", adrmsg^.image.mimeType) addTag ("image", adrAtts: @atts) bundle //deal with enclosures local (atts); new (tableType, @atts) if defined (adrmsg^.enclosureType) local (f = adrExportEnclosureCallback^ (adrmsg)) addToAtts (@atts, "url", encodeString (file.fileToUrl (f))) addToAtts (@atts, "type", adrmsg^.enclosureType) addToAtts (@atts, "address", encodeString (string (adrmsg^.enclosureBits))) addTag ("enclosure", adrAtts: @atts) add ("</msg>") return (xmltext) €�����„�����������„�����������������€�����€�����€�����€�����������€�����������€�����������€�����€�����€�����€�����������€�����������������������������������������������������������€�����������������������������������€�����€�����€�����€�����������€�����€�����„�����€�����€�����€�����€�����€�����€�����€����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����€�����������������������������������������������������€�����������������������������������������������������€�����������������������������������������������������������������������������������€�����������������������������������������������€�����€�����€�������Y��P��������ę��î���Verdana��������������������������� ��������������śŇ‘śŇ‘:������Œ‰T LAND˙˙˙˙˙˙������mac ������������on plugins (adrPlugins) 3/12/01; 2:44:06 PM by JES Created. local (adrPlugins = @adrSite^.["#plugins"]) if defined (adrPlugins^) msg ("Exporting plug-in data...") local (pluginsFolder = folder + "plugins" + pc) local (pluginsList = {}, ct = 0) bundle // get a list of all the plugins local (adritem) if defined (adrPlugins^.data) for adritem in @adrPlugins^.data local (name = nameOf (adritem^)) pluginsList = pluginsList + name ct++ if defined (adrPlugins^.enabled) for adritem in @adrPlugins^.enabled local (name = nameOf (adritem^)) if not (pluginsList contains name) pluginsList = pluginsList + name ct++ for i = 1 to ct local (pluginData); new (tableType, @pluginData) local (name = pluginsList[i]) pluginData.name = name if defined (adrPlugins^.data) pluginData.data = adrPlugins^.data.[name] if defined (adrPlugins^.enabled.[name]) and (adrPlugins^.enabled.[name] != false) pluginData.enabled = true pluginData.websiteFragmentPath = adrPlugins^.enabled.[name] else pluginData.enabled = false pluginData.websiteFragmentPath = "" if pluginData.enabled and (sizeOf (pluginData.websiteFragmentPath) > 0) local (adrWebsiteFragment = relativePathToAddress (pluginData.websiteFragmentPath)) if defined (adrWebsiteFragment^) pluginData.websiteFragment = adrWebsiteFragment^ deleteScripts (@pluginData.websiteFragment) exportTable (@pluginData, pluginsFolder, string.innerCaseName (name)) €�����„�����������€�����€�����€�����€�����€�����€�����������������������������������������������������������������������������€�������������������������������������������������������������������������������������������������������������P����������ş��Ó���Verdana��������������������������� ��������������śŢzXśŢ­e������ý�<î’LAND˙˙˙˙˙˙������mac ������������on stats (adrstats) 3/21/01; 2:50:50 PM by JES Created. local (xmltext, indentlevel=0) on add (s) xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r\n" add ("<stats>"); indentlevel++ local (adrtable) for adrtable in adrstats local (name = nameOf (adrtable^)) add ("<" + name + ">"); indentlevel++ local (adritem) for adritem in adrtable local (msgnum = number (nameOf (adritem^))) local (s) s = "<msg msgNum=\"" + msgnum + "\">" case typeOf (adritem^) dateType s = s + date.netStandardString (adritem^) else s = s + adritem^ s = s + "</msg>" add (s) add ("</" + name + ">"); indentlevel-- add ("</stats>"); indentlevel-- return (xmltext) €�����„�����€�����€�����€�����€�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€���������†�������ž��P���Verdana��������������������������� ����� �������śŢśŢŻŢ������ž�]ŃÍLAND˙˙˙˙˙˙������mac ������������on table (adrTable, elementName, indentLevel=0, adrAtts=nil) 3/20/01; 1:23:22 PM by JES Created. Changes: 3/20/01; 10:39:38 PM by JES Added support for binary type objects -- needed for images in plugin-data. 3/21/01; 4:19:15 PM by JES Don't generate tags with invalid characters. Encode high-ascii characters with entities. local (xmltext) on encodeString (s) return (theXmlFilesSuite.utilities.encodeString (s)) on add (s) xmltext = xmltext + string.filledString ("\t", indentlevel) + s + "\r\n" on addScalar (name, type, value="", adrAtts=nil) local (attsString = "", ix=1) loop if not (string.isNumeric (name[ix]) or string.isAlpha (name[ix]) or (name[ix] == "_") ) name = string.replaceAll (name, name[ix], "_") continue ix++ if ix > sizeOf (name) break bundle //build attsString if adrAtts != nil local (adrAtt) for adrAtt in adrAtts attsString = attsString + " " + nameOf (adrAtt^) + "=\"" + adrAtt^ + "\"" if string.isNumeric (name[1]) name = "item" + name if sizeOf (value) == 0 add ("<" + name + " type=\"" + type + "\"" + attsString + "/>") else add ("<" + name + " type=\"" + type + "\"" + attsString + ">" + encodeString (value) + "</" + name + ">") return (true) if adrAtts != nil local (s = "<" + elementName) local (adrAtt) for adrAtt in adrAtts s = s + " " + nameOf (adrAtt^) + "=\"" + adrAtt^ + "\"" s = s + ">" add (s); indentlevel++ else add ("<" + elementName + ">"); indentlevel++ on visitTable (adrtable) local (adritem) for adritem in adrtable local (name = nameOf (adritem^)) if name beginsWith "#" name = string.mid (name, 2, infinity) if name contains "\t" //skip compiled XML structures continue case typeOf (adritem^) tableType if sizeOf (adritem^) > 0 add ("<" + name + " type=\"struct\">"); indentlevel++ visitTable (adritem) add ("</" + name + ">"); indentlevel-- else add ("<" + name + " type=\"struct\"/>") listType if sizeOf (adritem^) > 0 add ("<" + name + " type=\"array\">"); indentlevel++ for i = 1 to sizeOf (adritem^) //note: we don't handle lists of tables add ("<value>" + encodeString (adritem^[i]) + "</value>") case typeOf (adritem^[i]) stringType addScalar ("item", "string", adritem^[i]) dateType addScalar ("item", "date", date.netStandardString (adritem^[i])) booleanType addScalar ("item", "boolean", adritem^[i]) intType singleType longType addScalar ("item", "number", adritem^[i]) doubleType addScalar ("item", "float", adritem^[i]) binaryType local (binType = getBinaryType (adritem^[i])) local (atts); new (tableType, @atts) atts.["binaryType"] = string.trimWhiteSpace (binType) addScalar ("item", "base64", base64.encode (adritem^[i], 0), @atts) add ("</" + name + ">"); indentlevel-- else add ("<" + name + " type=\"array\"/>") wpTextType outlineType add ("<" + name + " type=\"string\">" + encodeString (string (adritem^)) + "</" + name + ">") scriptType continue dateType addScalar (name, "date", date.netStandardString (adritem^)) booleanType addScalar (name, "boolean", adritem^) intType singleType longType addScalar (name, "number", adritem^) doubleType addScalar (name, "float", adritem^) binaryType local (binType = getBinaryType (adritem^)) local (atts); new (tableType, @atts) atts.["binaryType"] = string.trimWhiteSpace (binType) addScalar (name, "base64", base64.encode (adritem^, 0), @atts) else if typeOf (adritem^) != unknownType addScalar (name, "string", xml.entityEncode (string (adritem^), true)) visitTable (adrTable) add ("</" + elementName + ">") return (xmltext) €�����„�����������„�����������������������������€�����€�����€�����������€�����������€�����������������������������������������������������������������������������������������������������������������������������€�����€�����������������������������������������€�����������€�����€�����€�����€�����€�����€�����������€�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������†��W�������ý���`���śŇ†ä¸1Lá�������� ���� ��� �������% ����.���: ����A���M ����U���a ����i���u ����{���‡ ����calendar����Đ��€Çgem����Đ��‡‰glossary����Đ��#member����Đ�� message����Đ��‘§plugins����Đ��° stats����Đ��ˇhtable����Đ��ťy��VVerdana��������������������������� ����������Ź�„�2�j'�ˇ������������������������W��é��������T�����Verdana��������������������������� ��������������śŇjśŇĎ������w�Ąi LAND˙˙˙˙˙˙������mac ������������on convertToString (adr) 3/12/01; 2:42:20 PM by JES Created. case typeOf (adr^) unknownType aliasType filespecType adr^ = string (adr^) addressType adr^ = string.popFileFromAddress (adr^) outlineType wpTextType table.assign (adr, string (adr^)) return (true) €�����„�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������é��ĺ��������N�����Verdana��������������������������� ��������������śŇşśŇĹ������ö�ŮlLAND˙˙˙˙˙˙������mac ������������on deleteScripts (adr) 3/12/01; 2:42:10 PM by JES Created. on doVisit (adr) local (adritem, ct = sizeOf (adr^)) for i = ct downto 1 local (adritem = @adr^[i]) case (typeOf (adritem^)) tableType doVisit (adritem) scriptType delete (adritem) doVisit (adr) €�����„�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������ĺ��Ă��������6�����Verdana��������������������������� ��������������śŇż śŇÖ!�����&?îŔLAND˙˙˙˙˙˙������mac ������������on encodeString (s) 3/12/01; 5:59:43 PM by JES Created. s = string.replaceAll (s, "&", "&") s = string.replaceall (s, "<", "<") s = string.replaceall (s, ">", ">") s = string.replaceall (s, "\"", """) s = string.replaceall (s, "'", "'") return (s) €�����„�����������€�����€�����€�����€�����€�����€�������Ă��Ü��������6��.���Verdana��������������������������� ��������������śŇß͜ޯŢ���� ´źLAND˙˙˙˙˙˙������mac ������������on getDataTable (adrSite) 3/12/01; 8:19:33 PM by JES Created. local (adrNewsSite = @adrSite^.["#newsSite"]) local (siteName = string.innerCaseName (adrNewsSite^.siteName)) local (adrData = @theXmlFilesData.sites.[siteName]) if not defined (adrData^) new (tableType, adrData) return (adrData) €�����„�����€�����€�����€�����€�����€�����������€�������Ü��q����������i���Verdana��������������������������� ��������������śÓ˙˛śÔv��� ��&?ŸßLAND˙˙˙˙˙˙������mac ������������on getLastCalendarAddress (adrcalendar) 3/13/01; 4:47:55 PM by JES Created. on error () scriptError ("Can't get the address of the last day in the calendar because the address is not the address of a valid calendar structure containing at least one day.") local (lastYear = date.year ()) for year = lastYear downTo 1900 if not defined (adrcalendar^.[year]) continue if sizeOf (adrcalendar^.[year]) == 0 continue local (month) for month = 12 downTo 1 local (monthName = string.padWithZeros (month, 2)) if not defined (adrcalendar^.[year].[monthName]) continue if sizeOf (adrcalendar^.[year].[monthName]) == 0 continue local (day) for day = 31 downTo 1 local (dayName = string.padWithZeros (day, 2)) if defined (adrcalendar^.[year].[monthName].[dayName]) return (@adrcalendar^.[year].[monthName].[dayName]) error () €�����„�����������€�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������q��ú��������<��F���Verdana��������������������������� ��������������śŇËzśŇĚŠ�����É�m‘îLAND˙˙˙˙˙˙������mac ������������on getMemberName (adrsite, member) 3/12/01; 6:55:10 PM by JES Created. local (adrUsers = @adrSite^.["#membershipGroup"].users) local (adrUser = @adrUsers^.[member]) if defined (adrUser^) if defined (adrUser^.personalInfo) if defined (adrUser^.personalInfo.name) return (adrUser^.personalInfo.name) return ("") €�����„�����������€�����€�����€�����€�����€�����€�����€�������ú��˘��������T��Ö� ��Verdana��������������������������� ��������������śÝzFśŢŻŢ�����ŢIîęLAND˙˙˙˙˙˙������mac ������������on getSiteFolder (adrSite) 3/12/01; 4:18:59 PM by JES Created. local (folderName = nameOf (adrSite^)) if folderName endsWith ("ManilaWebsite") folderName = string.mid (folderName, 1, sizeOf (folderName) - sizeOf ("ManilaWebsite")) local (pc = file.getPathChar ()) local (folder) if system.environment.isMac foldername = string.mid (foldername, 1, 31) //truncate to 31 chars folder = theXmlFilesData.prefs.exportFolder + foldername + pc return (folder) €�����„�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������˘��ó��������f�����Verdana��������������������������� ��������������śŇ‘NśŇ‘‘������ö�÷§LAND˙˙˙˙˙˙������mac ������������on relativePathToAddress (adrTable, relativePath) 3/12/01; 2:44:37 PM by JES Created. local (adr = adrTable) while (sizeOf (relativePath) > 0) relativePath = string.popLeading (relativePath, '/') relativePath = string.popTrailing (relativePath, '/') local (nextPart = string.nthField (relativePath, '/', 1)) if nextPart == "" break relativePath = string.delete (relativePath, 1, sizeOf (nextPart)) adr = @adr^.[nextPart] if not defined (adr^) return (nil) if not defined (adr^) return (nil) return (adr) €�����„�����������€�����€�����€�����€�����€�����€�����������€�����€�����€�����������€�����€�����€�������ó��O��������<��›���Verdana��������������������������� ��������������śŇ˛śŇž�������'Ĺ"LAND˙˙˙˙˙˙������mac ������������on urlToFilePath (url, folder) 3/12/01; 2:37:47 PM by JES Created. local (filename = string.nthField (url, "/", string.countFields (url, "/"))) if system.environment.isMac if sizeOf (filename) > 31 local (extension = string.nthField (filename, ".", string.countFields (filename, "."))) filename = string.mid (filename, 1, 31 - sizeOf (extension) - 1) + extension f = folder + filename return (f) €�����„�����€�����€�����€�����€�����€�����€�����€�����€�������O��Ă������i���j���śŇŞśÝzF�������� ������� ����*���6 ����C���O ����\���h �������‹ ����™���Ľ ����ł���ż ����Ő���á ����ďconvertToString����Đ��Ďn deleteScripts����Đ��Ńc encodeString����Đ��ÓT getDataTable����Đ��Ő#getLastCalendarAddress����Đ��× getMemberName����Đ��ۈ getSiteFolder����Đ��ݎrelativePathToAddress����Đ��ŕ< urlToFilePath����Đ��ă;��VVerdana��������������������������� ����������Ź�„�2?8ŐČ������������������������Ă��Ô������ ���ˆ���śŇ‚‰šB�������� ���� ��� �������+ ����<���H ����T���` ����g���s ������� ����œ���¨ ����ş���Ć ����Ë���× ����Ü���č ����ň���ţ ��� cleanRoot����x��commands����x��downloadDatabase����x��` downloadGem����x��ŕexport����x��Ÿ exportPicture����x��a[getDownloadUrl����x��iţgetPasswordDialog����x��mŔinit����x��yXmenu����x��€K serialize����x��Î utilities����x��ĺ–��V Lucida Grande��������������������������������Ž�5�= � én������������������������X�� ���Verdana��������������������������� ��������������ˇ÷9ˇ÷9���"��&?îŔLAND˙˙˙˙˙˙������mac ������������cleanRoot commands downloadDatabase downloadGem export exportPicture getDownloadUrl init menu serialize utilities convertToString deleteScripts encodeString getDataTable getLastCalendarAddress getMemberName getSiteFolder relativePathToAddress urlToFilePath €������ě”čě”Ä��������������€�����ě”čě”Ä�������������€������ě”čě”Ä��������������€������ě”čě”Ä��������������€������ě”čě”Ä��������������€������ě”čě”Ä��������������€������ě”čě”Ä��������������€������ě”čě”Ä��������������€������ě”čě”Ä��������������€�����ě”čě”Ä�������������€�����ě”čě”Ä�������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD��������������€������ě”čěJD����������������Ô��Ü�������‡���.���śŇ‚‰šc�������� ������� ����,���8 ����ItheXmlFilesData��������ţtheXmlFilesInfo�������ţtheXmlFilesSuite�������çe��V Lucida Grande��������������������������������‘�ž�?�ĆĚ)ˆ������������������������Â���Á���Verdana��������������������������� ��������������šs&šc��� ��'?ďŔLAND˙˙˙˙˙˙������mac ������������theXmlFilesData theXmlFilesInfo theXmlFilesSuite cleanRoot commands downloadDatabase downloadGem export exportPicture getDownloadUrl getPasswordDialog init menu serialize utilities €������j3h�l$ü�������������€������j3h�l$ü�������������€������j3h�l$ü�������������€�������j3h�l3p��������������€������j3h�l3p�������������€�������j3h�l3p��������������€�������j3h�l3p��������������€�������j3h�l3p��������������€�������j3h�l3p��������������€�������j3h�l3p��������������€�������j3h�l3p��������������€�������j3h�l3p��������������€�������j3h�l3p��������������€������j3h�l3p�������������€������j3h�l3p���������������Ü��ş�������íE?8ŐČChicago��������������������������?˙� ����������������˙˙˙˙˙˙˙˙Charcoal�������������������������Ň� ����������������Y��bGeneva����������������������������� ����������������]=ˇĂChicago��������������������������?˙� ����������������l.¨ŇChicago��������������������������?˙� ����������������˙˙˙˙˙˙˙˙Charcoal�������������������������Ň� ����������������������˙˙����������������������������������������������������������ş