Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.userland.createDefaultIspSite
on createDefaultIspSite (siteName="createASiteManilaWebsite", password=nil, serverName=nil, displaySiteName=nil, tagline=nil, theme=nil) { <<Create the default Manila site if it doesn't already exist. <<Return true if it gets created, return false if it already exists and thus doesn't get created. <<This is a wrapper for manilaSuite.clone. It's called from userland.finishInstall, when the user has elected to turn on the webserver. <<10/26/99; 6:22:28 PM by PBS bundle { //set up ISP prefs in config.root if not defined (config.manila.hosting) { new (tableType, @config.manila.hosting)}; if not defined (config.manila.hosting.sites) { new (tableType, @config.manila.hosting.sites)}; if not defined (config.manila.hosting.sites.default) { new (tableType, @config.manila.hosting.sites.default)}; config.manila.hosting.sites.default.baseDomain = serverName; config.manila.hosting.sites.default.canonicalSiteName = siteName; //"createASiteManilaWebsite" if not defined (config.manila.hosting.sites.default.flEditorsOnlyCreateSites) { config.manila.hosting.sites.default.flEditorsOnlyCreateSites = false}; if not defined (config.manila.hosting.sites.default.flSubSites) { config.manila.hosting.sites.default.flSubSites = true}}; if not defined (config.manila.prefs.hostingGdbName) { config.manila.prefs.hostingGdbName = "manilaWebsites.root"}; local (gdbName = config.manila.prefs.hostingGdbName); local (gdbPath = Frontier.getSubFolder ("www") + gdbName); if not (defined ([gdbPath])) { //is it already open? if file.exists (gdbPath) { fileMenu.open (gdbPath, true)} //it does, open it else { fileMenu.new (gdbPath); window.hide (@[gdbPath])}}; <<fileMenu.save (gdbPath) bundle { //add hosting gdb to user.databases local (adrTable = @user.databases.[gdbName]); if not defined (adrtable^) { new (tableType, adrTable)}; if not defined (adrTable^.f) { adrTable^.f = gdbPath}; if not defined (adrTable^.openOnStartup) { adrTable^.openOnStartup = true}; if not defined (adrTable^.runStartupScript) { adrTable^.runStartupScript = false}; if not defined (adrTable^.supportsIndexing) { adrTable^.supportsIndexing = true}; if not defined (adrTable^.supportsSubscribe) { adrTable^.supportsSubscribe = false}}; if file.exists (Frontier.getSubFolder ("www") + siteName + ".root") { //does the file exist? return (false)}; //the file exists local (dgName = siteName + "Discuss"); local (groupName = siteName + "Members"); local (sysopName = user.prefs.name); local (sysopEmail = user.prefs.mailAddress); local (sysopPassword); if password == nil { //create a new password local (i); for i = 1 to 12 { sysopPassword = sysopPassword + char (random ('A', 'Z'))}} else { sysopPassword = password}; if serverName == nil { //figure out the server name serverName = tcp.dns.getMyDomainName (); if not (serverName contains ".") { serverName = tcp.myDottedId ()}}; local (siteUrl = "http://" + serverName + "/"); if theme == nil { //default to ISP theme theme = "ISP"}; local (siteInfo); siteInfo = manilaSuite.clone (siteName, groupName, dgName, sysopEmail, sysopPassword, sysopName, siteUrl, false, true, true, gdbName, siteName, theme, false); //JES 4/12/02: Pass in siteName instead of "createASiteManilaWebsite" for the canonicalSiteName parameter <<siteInfo.adrSite^.["#newsSite"].siteName = "Home" <<siteInfo.adrSite^.["#newsSite"].flFirstTimeVisitAfterInstall = true delete (@siteInfo.adrSite^.["#navigator"].structure); bundle { //tag line, siteName, dg access local (adrSite = siteInfo.adrSite); if displaySiteName == nil { displaySiteName = canonicalSiteName}; if tagline == nil { tagline = ""}; wp.newTextObject (tagline, @adrSite^.["#newsSite"].tagLine); adrSite^.["#newsSite"].siteName = displaySiteName; try {delete (@adrSite^.discuss.edit.["#members"])}; adrSite^.discuss.["#members"] = adrSite^.["#prefs"].defaultMembershipGroup}; <<bundle //set up an It Worked! message <<local (adrSite = siteInfo.adrSite) <<local (adrNewsSite = @adrSite^.["#newsSite"]) <<local (dgName = adrSite^.["#prefs"].discussionRoot) <<local (homePageMsgNum = adrNewsSite^.discussLinks.homePageMsgNum) <<local (adrRoot = [system.temp.mainResponder.discussRootFile].[dgName]) << <<Home page. <<local (adrMsgTable = mainResponder.discuss.getMessageTable (homePageMsgNum, adrRoot:adrRoot)) <<adrMsgTable^.subject = userland.defaultPages.homeTitle <<adrMsgTable^.body = string (userland.defaultPages.home) << <<FAQ page. <<local (faqMsgNum = adrNewsSite^.discussLinks.faqMsgNum) <<adrMsgTable = mainResponder.discuss.getMessageTable (faqMsgNum, adrRoot:adrRoot) <<adrMsgTable^.subject = userland.defaultPages.faqTitle <<adrMsgTable^.body = string (userland.defaultPages.faq) << <<Feedback page. <<local (emailMsgNum = adrNewsSite^.discussLinks.emailMsgNum) <<adrMsgTable = mainResponder.discuss.getMessageTable (emailMsgNum, adrRoot:adrRoot) <<adrMsgTable^.subject = userland.defaultPages.feedbackTitle <<adrMsgTable^.body = string (userland.defaultPages.feedback) << <<Make sure the managing editor gets the cookie in a minute. <<adrNewsSite^.flFirstTimeVisitAfterInstall = true bundle { //set up the domain for this site local (domainMinusPort = string.popSuffix (serverName, ':')); local (adrDomain = @config.mainResponder.domains.[domainMinusPort]); if not defined (adrDomain^) { //don't delete existing domain configurations new (tableType, adrDomain); new (tableType, @adrDomain^.siteTree); new (tableType, @adrDomain^.siteTree.directory); local (s = "<siteTree>\r\t<site address=\"" + siteName + "\"/>\r\t</siteTree>"); wp.newTextObject (s, @adrDomain^.siteTree.directory.outline)}}; if not defined (temp.installer) { new (tableType, @temp.installer)}; temp.installer.urlToOpen = siteInfo.adrSite^.["#ftpSite"].url; <<temp.installer.urlToOpen = siteInfo.adrSite^.["#ftpSite"].url + "controlPanel/" //PBS 06/23/00: Open the Control Panel, not the hosting site return (true)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.