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
+$button>
+
+
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
+
+<$list filter="[prefix[$:/state/multiwikiserver/bags/]]">
+-
+<$text text={{!!bag-name}}/>
+
+$list>
+
+
\ 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
+
+
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) {