diff --git a/plugins/tiddlywiki/multiwikiserver/admin-ui/AdminLayout.tid b/plugins/tiddlywiki/multiwikiserver/admin-ui/AdminLayout.tid new file mode 100644 index 000000000..ff1c2c19f --- /dev/null +++ b/plugins/tiddlywiki/multiwikiserver/admin-ui/AdminLayout.tid @@ -0,0 +1,16 @@ +title: $:/MultiWikiServer/AdminLayout +tags: $:/tags/Layout +name: MultiWikiServer +description: Admin Layout +icon: $:/favicon.ico + +\import [subfilter{$:/core/config/GlobalImportFilter}] +
+{{MultiWikiServer Administration}} +
+<$button> +<$action-setfield $tiddler="$:/layout" text="$:/core/ui/PageTemplate"/> +Switch to TiddlyWiki default user interface + +
+
diff --git a/plugins/tiddlywiki/multiwikiserver/admin-ui/DefaultTiddlers.tid b/plugins/tiddlywiki/multiwikiserver/admin-ui/DefaultTiddlers.tid new file mode 100644 index 000000000..243895326 --- /dev/null +++ b/plugins/tiddlywiki/multiwikiserver/admin-ui/DefaultTiddlers.tid @@ -0,0 +1,2 @@ +title: $:/DefaultTiddlers +text: [[MultiWikiServer Administration]] diff --git a/plugins/tiddlywiki/multiwikiserver/admin-ui/MultiWikiServer Administration.tid b/plugins/tiddlywiki/multiwikiserver/admin-ui/MultiWikiServer Administration.tid new file mode 100644 index 000000000..03f55e883 --- /dev/null +++ b/plugins/tiddlywiki/multiwikiserver/admin-ui/MultiWikiServer Administration.tid @@ -0,0 +1,22 @@ +title: MultiWikiServer Administration + +
+

Recipes

+ +

Bags

+ +
\ No newline at end of file diff --git a/plugins/tiddlywiki/multiwikiserver/admin-ui/SideBarSegment.tid b/plugins/tiddlywiki/multiwikiserver/admin-ui/SideBarSegment.tid new file mode 100644 index 000000000..ec677b034 --- /dev/null +++ b/plugins/tiddlywiki/multiwikiserver/admin-ui/SideBarSegment.tid @@ -0,0 +1,10 @@ +title: $:/MultiWikiServer/SideBarSegment +tags: $:/tags/SideBarSegment +list-before: $:/core/ui/SideBarSegments/page-controls + +
+<$button> +<$action-setfield $tiddler="$:/layout" text="$:/MultiWikiServer/AdminLayout"/> +Switch back to ~MultiWikiServer administration user interface + +
diff --git a/plugins/tiddlywiki/multiwikiserver/admin-ui/Styles.tid b/plugins/tiddlywiki/multiwikiserver/admin-ui/Styles.tid new file mode 100644 index 000000000..07ac4d1ed --- /dev/null +++ b/plugins/tiddlywiki/multiwikiserver/admin-ui/Styles.tid @@ -0,0 +1,5 @@ +title: $:/MultiWikiServer/Styles +tags: $:/tags/Stylesheet + +\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock + diff --git a/plugins/tiddlywiki/multiwikiserver/admin-ui/layout.tid b/plugins/tiddlywiki/multiwikiserver/admin-ui/layout.tid new file mode 100644 index 000000000..72a28d2e4 --- /dev/null +++ b/plugins/tiddlywiki/multiwikiserver/admin-ui/layout.tid @@ -0,0 +1,2 @@ +title: $:/layout +text: $:/MultiWikiServer/AdminLayout diff --git a/plugins/tiddlywiki/multiwikiserver/modules/sql-tiddler-store.js b/plugins/tiddlywiki/multiwikiserver/modules/sql-tiddler-store.js index 9fb886c7d..4274c3690 100644 --- a/plugins/tiddlywiki/multiwikiserver/modules/sql-tiddler-store.js +++ b/plugins/tiddlywiki/multiwikiserver/modules/sql-tiddler-store.js @@ -13,11 +13,14 @@ Functions to perform basic tiddler operations with a sqlite3 database Create a tiddler store. Options include: databasePath - path to the database file (can be ":memory:" to get a temporary database) +adminWiki - reference to $tw.Wiki object into which entity state tiddlers should be saved */ function SqlTiddlerStore(options) { options = options || {}; + this.adminWiki = options.adminWiki || $tw.wiki; + this.entityStateTiddlerPrefix = "$:/state/multiwikiserver/"; + // Create the database var databasePath = options.databasePath || ":memory:"; - // Create our database this.db = new $tw.sqlite3.Database(databasePath,{verbose: undefined && console.log}); } @@ -50,6 +53,10 @@ SqlTiddlerStore.prototype.runStatements = function(sqlArray) { } }; +SqlTiddlerStore.prototype.saveEntityStateTiddler = function(tiddler) { + this.adminWiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.entityStateTiddlerPrefix + tiddler.title})); +}; + SqlTiddlerStore.prototype.createTables = function() { this.runStatements([` -- Bags have names and access control settings @@ -110,6 +117,15 @@ SqlTiddlerStore.prototype.logTables = function() { } }; +SqlTiddlerStore.prototype.listBags = function() { + const rows = this.runStatementGetAll(` + SELECT bag_name, accesscontrol + FROM bags + ORDER BY bag_name + `); + return rows; +}; + SqlTiddlerStore.prototype.createBag = function(bagname) { // Run the queries this.runStatement(` @@ -126,6 +142,20 @@ SqlTiddlerStore.prototype.createBag = function(bagname) { bag_name: bagname, accesscontrol: "[some access control stuff]" }); + this.saveEntityStateTiddler({ + title: "bags/" + bagname, + "bag-name": bagname, + text: "" + }); +}; + +SqlTiddlerStore.prototype.listRecipes = function() { + const rows = this.runStatementGetAll(` + SELECT recipe_name + FROM recipes + ORDER BY recipe_name + `); + return rows; }; SqlTiddlerStore.prototype.createRecipe = function(recipename,bagnames) { @@ -154,6 +184,12 @@ SqlTiddlerStore.prototype.createRecipe = function(recipename,bagnames) { recipe_name: recipename, bag_names: JSON.stringify(bagnames) }); + this.saveEntityStateTiddler({ + title: "recipes/" + recipename, + "recipe-name": recipename, + text: "", + list: $tw.utils.stringifyList(bagnames) + }); }; SqlTiddlerStore.prototype.saveTiddler = function(tiddlerFields,bagname) {