Monday, November 08, 2010 at 12:00 AM.
scripting2Suite.server.saveOutlineFromUrl
on saveOutlineFromUrl (username, url, opmltext) {
<<Changes
<<8/1/10; 5:58:30 PM by DW
<<Run the text through the replaceTable to change special characters to their proper XML equivalent.
<<7/16/10; 8:08:11 PM by DW
<<Added logging.
<<6/27/10; 9:34:08 AM by DW
<<See comment at the head of scripting2Suite.server.getOutlineFromUrl.
<<6/12/10; 7:06:11 AM by DW
<<When saving the blogroll or a template, rebuild the home page. When saving the stylesheet upload it immediately, don't wait for synching.
<<6/11/10; 10:32:03 PM by DW
<<Created.
local (adrdata = scripting2suite.inituser (username), startticks = clock.ticks (), type, adrstory, flbuild = false);
local (lowerurl = string.lower (url), now = clock.now ());
bundle { //run opmltext through the replaceTable, 8/1/10 by DW
opmltext = string.multiplereplaceall (opmltext, @xml.rss.data.replaceTable, false)};
if lowerurl beginswith "http://" {
scripting2Suite.server.urlToStory (username, url, @type, @adrstory);
if type == "stories" {
adrstory^.opmltext = opmltext;
xml.compile (opmltext, @adrstory^.xstruct);
if defined (adrstory^.textCache) {
delete (@adrstory^.textCache)};
bundle { //bump counter
if not defined (adrstory^.ctSaveFromUrls) {
adrstory^.ctSaveFromUrls = 0};
adrstory^.ctSaveFromUrls++;
adrstory^.whenLastSaveFromUrl = now}}}
else {
case lowerurl {
<<"stories"
<<adrstory^.opmltext = opmltext
<<xml.compile (opmltext, @adrstory^.xstruct)
<<if defined (adrstory^.textCache)
<<delete (@adrstory^.textCache)
<<bundle //bump counter
<<if not defined (adrstory^.ctSaveFromUrls)
<<adrstory^.ctSaveFromUrls = 0
<<adrstory^.ctSaveFromUrls++
<<adrstory^.whenLastSaveFromUrl = now
"blogroll" {
local (adrblogroll = @adrdata^.prefs.blogroll);
op.xmltooutline (opmltext, adrblogroll);
adrdata^.stats.urlBlogroll = scripting2Suite.server.saveSpecialOutline (username, adrblogroll);
flbuild = true};
"hometemplate" {
local (adroutline = @adrdata^.prefs.homeTemplate);
op.xmltooutline (opmltext, adroutline);
if adrdata^.prefs.flShareTemplates {
adrdata^.stats.urlHomeTemplate = scripting2Suite.server.saveSpecialOutline (username, adroutline, flText:true)};
flbuild = true};
"storytemplate" {
local (adroutline = @adrdata^.prefs.storyTemplate);
op.xmltooutline (opmltext, adroutline);
if adrdata^.prefs.flShareTemplates {
adrdata^.stats.urlStoryTemplate = scripting2Suite.server.saveSpecialOutline (username, adroutline, flText:true)};
flbuild = true};
"stylesheet" {
op.xmltooutline (opmltext, @adrdata^.prefs.stylesheet);
thread.callscript (@scripting2Suite.server.saveStylesheet, {username, true})};
"instantoutline" {
adrdata^.prefs.instantoutline.opmltext = opmltext;
adrdata^.prefs.instantoutline.ctsaves++;
adrdata^.prefs.instantoutline.whenLastSave = now;
bundle { //push a realtime update
local (htmltext = "User \"" + username + "\" updated his or her instant outline.");
scripting2Suite.server.pushRealtimeUpdate (htmltext, "instantOutline", username, opmltext)}}};
bundle { //save opmltext in folder structure
local (folder = adrdata^.prefs.opmlfolder + url + file.getpathchar () + file.getdatepath (theDate:now), f);
bundle { //set f
local (day, month, year, hour, minute, second);
date.get (now, @day, @month, @year, @hour, @minute, @second);
hour = string.padwithzeros (hour, 2);
minute = string.padwithzeros (minute, 2);
second = string.padwithzeros (second, 2);
f = folder + hour + "-" + minute + "-" + second + ".opml"};
file.surefilepath (f);
file.writewholefile (f, opmltext)};
bundle { //logging
local (htmltext = "Updated the " + url + " for user \"" + username + ".\"");
scripting2Suite.server.addToLog (scripting2Info.name, "Save", htmltext, startticks)}};
if flbuild {
thread.callscript (@scripting2Suite.server.buildHomePage, {username})}} //6/12/10 by DW
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.