Friday, April 08, 2011 at 12:01 AM.

system.verbs.builtins.opmlEditor.init

on init () {
	<<Changes
		<<4/7/11; 8:10:31 AM by DW
			<<Init user.opmlEditor.prefs.flUpdateOpenTools.
		<<4/3/11; 4:23:17 PM by DW
			<<Init user.opmlEditor.prefs.flLocalMemberIsAdmin. If true, when the user accesses the web server from the local machine, he is the admin user. Default true. The basic idea is that if you have access to the local machine, you have full access to the database anyway. 
		<<2/26/11; 11:01:21 PM by DW
			<<Reorg security settings. Return the address of user.opmlEditor.
		<<10/7/10; 4:45:39 AM by DW
			<<Init user.opmlEditor.prefs.flRespondToServerMonitor, which is used in user.betty.rpcHandlers.pingServerMonitor.
		<<10/6/10; 9:54:24 PM by DW
			<<Init user.opmlEditor.prefs.flNightlyBackupOpenDatabases, and install the overNight script for opmlEditor.
		<<9/18/10; 11:16:14 AM by DW
			<<Move the initialization of the parts folder to opmlEditor.loadPartsFromFolder.
		<<9/18/10; 8:10:32 AM by DW
			<<Init user.opmlEditor.prefs.flLoadPartsFromFolder and user.opmlEditor.prefs.partsFolder.
		<<1/18/10; 11:21:01 AM by DW
			<<Init user.opmlEditor.prefs.flSaveDatabases (defaults true) and user.opmlEditor.prefs.ctMinutesBetwSaves (default 3) and stats for database saving. 
		<<12/28/09; 10:05:35 AM by DW
			<<Init user.opmlEditor.prefs.flScriptsFolderEnabled.
		<<12/28/09; 9:11:46 AM by DW
			<<Init user.opmlEditor.stats.runScriptsFolder table.
		<<12/28/09; 8:22:21 AM by DW
			<<Init user.opmlEditor.stats.ctEveryMinutes.
		<<5/20/09; 1:08:19 PM by DW
			<<Init user.opmlEditor.prefs.exportFolder.
		<<8/15/08; 6:11:18 AM by DW
			<<Don't try to create the desktop shortcut, it seems to be causing an error the first time people launch the app on Windows.
		<<8/8/08; 3:15:58 PM by DW
			<<Init user.opmlEditor.prefs.toolsWithPrefs and related.
		<<8/4/08; 1:20:19 PM by DW
			<<The first time we run, offer to update. We know it's the first time because user.opmlEditor is being created. Seems pretty clear to me this is the first run.
		<<8/4/08; 9:49:06 AM by DW
			<<Various initializations for the server running on port 80.
		<<8/4/08; 6:10:01 AM by DW
			<<Fixed error -- we were setting lastUpdate in the top-level of user.opmlEditor instead of in the stats table.
		<<8/2/08; 7:52:38 PM by DW
			<<Initialize user.opmlEditor.prefs.toolsToUpdate. A table with information about tools that we update along with opml.root. The tools add their own names to this table, replacing their old one-off code for updating themselves. 
		<<8/2/08; 12:18:39 PM by DW
			<<Initialize nightly code updates.
		<<7/30/08; 9:59:34 AM by DW
			<<Call scheduler2.init.
		<<7/30/08; 9:52:28 AM by DW
			<<Install opmlEditor.everyMinute.
		<<7/30/08; 9:42:10 AM by DW
			<<If user.prefs.initials is empty and user.prefs.name is not, then calculate the initials from the name.
		<<7/30/08; 9:23:27 AM by DW
			<<Create a desktop icon for the OPML app on Windows, but only do it once, if the user deletes the icon, we won't recreate it.
		<<7/28/08; 10:00:17 AM by DW
			<<Created.
	if not defined (user.opmlEditor) {
		new (tabletype, @user.opmlEditor);
		thread.callscript (@Frontier.tools.data.updateCommandScript, {true})}; //8/4/08 by DW
	bundle { //prefs
		if not defined (user.opmlEditor.prefs) {
			new (tabletype, @user.opmlEditor.prefs)};
		if not defined (user.opmlEditor.prefs.flNightlyUpdate) {
			user.opmlEditor.prefs.flNightlyUpdate = true};
		if not defined (user.opmlEditor.prefs.flUpdateOpenTools) { //4/7/11 by DW
			user.opmlEditor.prefs.flUpdateOpenTools = true};
		if not defined (user.opmlEditor.prefs.hourToUpdate) {
			user.opmlEditor.prefs.hourToUpdate = 3};
		if not defined (user.opmlEditor.prefs.toolsToUpdate) { //8/2/08 by DW
			new (tabletype, @user.opmlEditor.prefs.toolsToUpdate)};
		if not defined (user.opmlEditor.prefs.flServerOnPort80) { //8/4/08 by DW
			user.opmlEditor.prefs.flServerOnPort80 = false};
		if not defined (user.opmlEditor.prefs.ipAddressPort80) { //8/4/08 by DW
			user.opmlEditor.prefs.ipAddressPort80 = ""};
		if not defined (user.opmlEditor.prefs.toolsWithPrefs) { //8/8/08 by DW
			new (tabletype, @user.opmlEditor.prefs.toolsWithPrefs)};
		bundle { //remove any toolsWithPrefs addresses that don't exist, 8/8/08 by DW
			local (i, adr);
			for i = sizeof (user.opmlEditor.prefs.toolsWithPrefs) downto 1 {
				adr = @user.opmlEditor.prefs.toolsWithPrefs [i];
				if not defined (adr^^) {
					delete (adr)}}};
		if not defined (user.opmlEditor.prefs.serialNum) { //multi-purpose serialnum, 8/8/08 by DW
			user.opmlEditor.prefs.serialNum = 1};
		if not defined (user.opmlEditor.prefs.exportFolder) { //5/20/09 by DW
			<<See opmlEditor.menuCommands.exportObject
			user.opmlEditor.prefs.exportFolder = file.getSpecialFolderPath ("", "desktop folder", true) + "Exported Objects" + file.getpathchar ()};
		if not defined (user.opmlEditor.prefs.flScriptsFolderEnabled) {
			user.opmlEditor.prefs.flScriptsFolderEnabled = true};
		if not defined (user.opmlEditor.prefs.flSaveDatabases) { //1/18/10 by DW
			user.opmlEditor.prefs.flSaveDatabases = true};
		if not defined (user.opmlEditor.prefs.ctMinutesBetwSaves) { //1/18/10 by DW
			user.opmlEditor.prefs.ctMinutesBetwSaves = 3};
		if not defined (user.opmlEditor.prefs.flLoadPartsFromFolder) { //9/18/10 by DW
			user.opmlEditor.prefs.flLoadPartsFromFolder = false};
		if not defined (user.opmlEditor.prefs.flNightlyBackupOpenDatabases) { //10/6/10 by DW
			user.opmlEditor.prefs.flNightlyBackupOpenDatabases = false};
		if not defined (user.opmlEditor.prefs.nightlyBackupFolder) { //10/6/10 by DW
			user.opmlEditor.prefs.nightlyBackupFolder = frontier.pathstring + "Nightly Backup" + file.getpathchar ()};
		if not defined (user.opmlEditor.prefs.flRespondToServerMonitor) { //10/7/10 by DW
			user.opmlEditor.prefs.flRespondToServerMonitor = false};
		if not defined (user.opmlEditor.prefs.flLocalMemberIsAdmin) { //4/3/11 by DW
			user.opmlEditor.prefs.flLocalMemberIsAdmin = true};
		bundle { //security, 2/26/11 by DW
			if not defined (user.opmlEditor.prefs.security) {
				new (tabletype, @user.opmlEditor.prefs.security)};
			if not defined (user.opmlEditor.prefs.security.flAllowRemoteViewing) {
				if defined (config.river2.prefs.security.flAllowRemoteViewing) {
					user.opmlEditor.prefs.security.flAllowRemoteViewing = config.river2.prefs.security.flAllowRemoteViewing}
				else {
					user.opmlEditor.prefs.security.flAllowRemoteViewing = false}};
			if not defined (user.opmlEditor.prefs.security.flAllowRemotePost) {
				if defined (config.river2.prefs.security.flAllowRemotePost) {
					user.opmlEditor.prefs.security.flAllowRemotePost = config.river2.prefs.security.flAllowRemotePost}
				else {
					user.opmlEditor.prefs.security.flAllowRemotePost = false}};
			if not defined (user.opmlEditor.prefs.security.flRequireRemoteLogin) {
				if defined (config.river2.prefs.security.flRequireRemoteLogin) {
					user.opmlEditor.prefs.security.flRequireRemoteLogin = config.river2.prefs.security.flRequireRemoteLogin}
				else {
					user.opmlEditor.prefs.security.flRequireRemoteLogin = true}};
			if not defined (user.opmlEditor.prefs.security.remoteUsername) {
				if defined (config.river2.prefs.security.remoteUsername) {
					user.opmlEditor.prefs.security.remoteUsername = config.river2.prefs.security.remoteUsername}
				else {
					user.opmlEditor.prefs.security.remoteUsername = ""}};
			if not defined (user.opmlEditor.prefs.security.remotePassword) {
				if defined (config.river2.prefs.security.remotePassword) {
					user.opmlEditor.prefs.security.remotePassword = config.river2.prefs.security.remotePassword}
				else {
					user.opmlEditor.prefs.security.remotePassword = ""}};
			bundle { //delete old settings, they were in the wrong place
				if defined (user.opmlEditor.prefs.allowRemotePost) {
					delete (@user.opmlEditor.prefs.allowRemotePost)};
				if defined (user.opmlEditor.prefs.allowRemoteViewing) {
					delete (@user.opmlEditor.prefs.allowRemoteViewing)};
				if defined (user.opmlEditor.prefs.flAllowRemotePost) {
					delete (@user.opmlEditor.prefs.flAllowRemotePost)};
				if defined (user.opmlEditor.prefs.flAllowRemoteViewing) {
					delete (@user.opmlEditor.prefs.flAllowRemoteViewing)};
				if defined (user.opmlEditor.prefs.password) {
					delete (@user.opmlEditor.prefs.password)};
				if defined (user.opmlEditor.prefs.username) {
					delete (@user.opmlEditor.prefs.username)}}}};
			<<bundle //old code
				<<if not defined (user.opmlEditor.prefs.username)
					<<user.opmlEditor.prefs.username = ""
				<<if not defined (user.opmlEditor.prefs.password)
					<<user.opmlEditor.prefs.password = ""
				<<if not defined (user.opmlEditor.prefs.allowRemotePost)
					<<user.opmlEditor.prefs.allowRemotePost = false
				<<if not defined (user.opmlEditor.prefs.allowRemoteViewing)
					<<user.opmlEditor.prefs.allowRemoteViewing = false
				<<if not defined (user.opmlEditor.prefs.requireRemoteLogin)
					<<user.opmlEditor.prefs.requireRemoteLogin = false
	bundle { //stats
		if not defined (user.opmlEditor.stats) {
			new (tabletype, @user.opmlEditor.stats)};
		if defined (user.opmlEditor.whenLastUpdate) { //fix error, 8/4/08 AM by DW
			user.opmlEditor.stats.whenLastUpdate = user.opmlEditor.whenLastUpdate;
			delete (@user.opmlEditor.whenLastUpdate)};
		if not defined (user.opmlEditor.stats.whenLastUpdate) {
			user.opmlEditor.stats.whenLastUpdate = date (0)};
		if not defined (user.opmlEditor.stats.ctEveryMinutes) { //12/28/09 by DW
			user.opmlEditor.stats.ctEveryMinutes = 0};
		if not defined (user.opmlEditor.stats.runScriptsFolder) { //12/28/09 by DW
			new (tabletype, @user.opmlEditor.stats.runScriptsFolder)};
		if not defined (user.opmlEditor.stats.runScriptsFolder.lastHourlyScriptHour) {
			user.opmlEditor.stats.runScriptsFolder.lastHourlyScriptHour = date.hour ()};
		if not defined (user.opmlEditor.stats.runScriptsFolder.whenLastOverNightScriptRun) {
			user.opmlEditor.stats.runScriptsFolder.whenLastOverNightScriptRun = clock.now ()};
		if not defined (user.opmlEditor.stats.whenLastDatabaseSave) { //1/18/10 by DW
			user.opmlEditor.stats.whenLastDatabaseSave = date (0)};
		if not defined (user.opmlEditor.stats.ctDatabaseSaves) { //1/18/10 by DW
			user.opmlEditor.stats.ctDatabaseSaves = 0}};
	bundle { //flags
		if not defined (user.opmlEditor.flags) {
			new (tabletype, @user.opmlEditor.flags)}};
		<<if not defined (user.opmlEditor.flags.winDesktopShortcutCreated) //7/30/08 by DW
			<<if system.environment.isWindows
				<<local (fdesktop = file.getSpecialFolderPath ("", "desktop", true) + "OPML.lnk")
				<<if not file.exists (fdesktop)
					<<winshell.createshortcut (fdesktop, frontier.getprogrampath ())
			<<user.opmlEditor.flags.winDesktopShortcutCreated = clock.now ()
	bundle { //temp table
		if not defined (system.temp.opmlEditor) {
			new (tabletype, @system.temp.opmlEditor)};
		if not defined (system.temp.newsRiver) { //this is used in the prefs system, weird
			new (tabletype, @system.temp.newsRiver)};
		if not defined (system.temp.opmlEditor.port80) { //8/4/08 by DW
			new (tabletype, @system.temp.opmlEditor.port80)};
		if not defined (system.temp.opmlEditor.port80.flStarted) { //8/4/08 by DW
			system.temp.opmlEditor.port80.flStarted = false}};
	bundle { //make Preferences website real
		if not defined (user.webserver.responders.websiteFramework.data.docTree.opmlEditor) {
			user.webserver.responders.websiteFramework.data.docTree.opmlEditor = @system.verbs.builtins.opmlEditor.website}};
	bundle { //misc initializations
		scheduler2.init (); //7/30/08 by DW
		if user.prefs.initials == "" { //7/30/08 by DW
			local (s = string.trimwhitespace (user.prefs.name));
			if s != "" {
				local (i, flprevwasblank = false, ch);
				user.prefs.initials = string.upper (s [1]);
				for i = 1 to sizeof (s) {
					ch = s [i];
					if flprevwasblank and (not string.ispunctuation (ch)) {
						user.prefs.initials = user.prefs.initials + string.upper (s [i])};
					flprevwasblank = (ch == ' ') or string.ispunctuation (ch)}}};
		if not defined (user.scheduler2.everyMinute.opmlEditor) { //7/30/08 by DW
			user.scheduler2.everyMinute.opmlEditor = @opmlEditor.everyMinute};
		if not defined (user.scheduler2.everyMinute.saveOpenDatabases) { //1/18/10 by DW
			user.scheduler2.everyMinute.saveOpenDatabases = @opmlEditor.saveOpenDatabases};
		if not defined (user.scheduler2.overNight.opmlEditor) { //10/6/10 by DW
			user.scheduler2.overNight.opmlEditor = @opmlEditor.everyNight};
		try {opmlEditor.initServerOnPort80 ()}}; //8/4/08 by DW
	return (@user.opmlEditor)}; //2/26/11 by DW
bundle { //test code
	init ()}



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.