diff --git a/wwwroot/default.htm b/wwwroot/default.htm
index 43fb8b1..48db6dd 100644
--- a/wwwroot/default.htm
+++ b/wwwroot/default.htm
@@ -70,6 +70,7 @@
+
diff --git a/wwwroot/js/app.ops.js b/wwwroot/js/app.ops.js
new file mode 100644
index 0000000..0db3831
--- /dev/null
+++ b/wwwroot/js/app.ops.js
@@ -0,0 +1,102 @@
+/*jslint browser : true, continue : true,
+ devel : true, indent : 2, maxerr : 50,
+ newcap : true, nomen : true, plusplus : true,
+ regexp : true, sloppy : true, vars : false,
+ white : true
+*/
+
+/*global $, app */
+
+app.ops = (function() {
+ "use strict";
+ //---------------- BEGIN MODULE SCOPE VARIABLES --------------
+ var stateMap = {},
+ configModule,
+ //onChangePassword,
+ initModule;
+ //----------------- END MODULE SCOPE VARIABLES ---------------
+
+ //------------------- BEGIN UTILITY METHODS ------------------
+ //-------------------- END UTILITY METHODS -------------------
+
+ //------------------- BEGIN EVENT HANDLERS -------------------
+
+ ///////////////////////////////
+ //ONUPDATE
+ //
+// onChangePassword = function(event) {
+// event.preventDefault();
+// $.gevent.publish("app-clear-error");
+// //get form data
+// var formData = $("form").serializeArray({
+// checkboxesAsBools: true
+// });
+
+// var submitData = app.utilB.objectifyFormDataArray(formData);
+
+// app.api.create(
+// "user/" + app.shell.stateMap.user.id + "/changepassword",
+// submitData,
+// function(res) {
+// if (res.error) {
+// $.gevent.publish("app-show-error", res.msg);
+// } else {
+// page("#!/logout");
+// }
+// }
+// );
+
+// return false; //prevent default?
+// };
+ //-------------------- END EVENT HANDLERS --------------------
+
+ //------------------- BEGIN PUBLIC METHODS -------------------
+ //CONFIGMODULE
+ //
+ configModule = function(context) {
+ stateMap.context = context.context;
+ if (stateMap.context.params.id) {
+ stateMap.id = stateMap.context.params.id;
+ }
+ };
+
+ //INITMODULE
+ //
+ initModule = function($container) {
+ if (typeof $container === "undefined") {
+ $container = $("#app-shell-main-content");
+ }
+ $container.html(Handlebars.templates["app.ops"]({}));
+
+ // bind actions
+ // $("#btn-change-password").bind("click", onChangePassword);
+
+ //Context menu
+ app.nav.contextClear();
+
+ app.api.get("ops/status/", function(res) {
+ if (res.error) {
+ $.gevent.publish("app-show-error", res.msg);
+ } else {
+ $("#about").append(
+ "
Ops status response: " +
+ res +
+ "
"
+ );
+ }
+ });
+
+
+//{"mailMirrorOK":true,"forumOK":true,"ayaNovaWebsiteOK":true,"apiWebsiteOK":true,"contactFormOK":true,"requestFormOK":true,"requestLiteFormOK":true,"subversionOK":true,"devOpsOK":true,"backupOK":true,"opsCheckMessage":""}
+
+ ////app.nav.setContextTitle("Search");
+ };
+
+ //PUBLIC METHODS
+ //
+ return {
+ configModule: configModule,
+ initModule: initModule
+ };
+ //------------------- END PUBLIC METHODS ---------------------
+})();
diff --git a/wwwroot/js/app.shell.js b/wwwroot/js/app.shell.js
index bf47286..3ed427d 100644
--- a/wwwroot/js/app.shell.js
+++ b/wwwroot/js/app.shell.js
@@ -237,6 +237,7 @@ app.shell = (function () {
page('/rfcases', rfcases);
page('/rfcaseEdit/:id', rfcaseEdit);
page('/rfsettings', rfsettings);
+ page('/ops', ops);
page('*', notFound);
page({
hashbang: true
@@ -539,7 +540,13 @@ app.shell = (function () {
app.rfsettings.initModule();
}
-
+ var ops = function (ctx) {
+ app.nav.setSelectedMenuItem('ops');
+ app.ops.configModule({
+ context: ctx
+ });
+ app.ops.initModule();
+ }
var notFound = function (ctx) {
diff --git a/wwwroot/js/templates/app.ops.handlebars b/wwwroot/js/templates/app.ops.handlebars
new file mode 100644
index 0000000..3b42508
--- /dev/null
+++ b/wwwroot/js/templates/app.ops.handlebars
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/wwwroot/js/templates/app.shell.handlebars b/wwwroot/js/templates/app.shell.handlebars
index 3f49e97..805c6b8 100644
--- a/wwwroot/js/templates/app.shell.handlebars
+++ b/wwwroot/js/templates/app.shell.handlebars
@@ -28,6 +28,10 @@
Cases
+
+ Server Ops
+
+
Settings
diff --git a/wwwroot/js/templates/templates.js b/wwwroot/js/templates/templates.js
index a88ed43..dbc7ff1 100644
--- a/wwwroot/js/templates/templates.js
+++ b/wwwroot/js/templates/templates.js
@@ -1,2 +1,2 @@
-!function(){var n=Handlebars.template,e=Handlebars.templates=Handlebars.templates||{};e["app.authenticate"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n
Login \n
\n
'},useData:!0}),e["app.customerEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.customers"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n
Active\n \n \n
\n
Lapsed\n \n \n
\n\n\n
\n Inactive\n \n \n\n
+ \n\n\n
\n
'},useData:!0}),e["app.customerSiteEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n
\n
\n
\n\n
\n State / Province \n \n
\n
\n
\n
\n \n \n Networked \n
\n
\n
\n
\n Database type \n \n
\n
\n
\n
\n
\n Server bits \n \n
\n
\n
\n
\n
\n
\n Hosting start \n \n
\n
\n
\n
\n Hosting end \n \n
\n
\n
\n \n
\n\n \n Save \n Delete \n
\n\n \n
'},useData:!0}),e["app.customerSites"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.fourohfour"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return"\n
404 NOT FOUND 404 \n"},useData:!0}),e["app.inbox"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.license"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n\n\n
\n\n
\n
\n \n AyaNova LITE \n
\n
\n
\n
\n License type \n \n New \n Renewal / Add-on \n Licensed trial \n Web requested trial \n \n
\n
\n
\n
\n Registered to \n \n
\n
\n\n\n
\n\n
\n
\n Email address \n \n
\n
\n\n\n
\n
\n Users \n \n 1 \n 5 \n 10 \n 15 \n 20 \n 50 \n 999 \n \n
\n
\n
\n\n
\n Support expires \n \n
\n
\n
\n
\n
\n\n
\n\n\n\n
\n
\n
\n
\n
\n
\n
\n\n
\n\n
\n\n\n\n\n\n \n\n
\n \n
'},useData:!0}),e["app.licenseRequestEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n\n
\n
\n
\n Greeting message \n \n
\n
\n
\n
\n Keycode message \n \n
\n
\n\n
\n \n
'},useData:!0}),e["app.licenses"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.licenseTemplates"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n\n \n\n
\n
FULL KEY \n\n
\n New \n \n
\n
\n
\n
\n
\n Licensed Trial \n \n
\n
\n
\n
Full trial greeting \n\n
\n Greeting \n \n
\n\n
\n
\n\n
LITE KEY \n\n
\n Lite New \n \n
\n
\n
\n
\n Lite Add-On \n \n
\n
\n
\n
\n Lite Licensed Trial \n \n
\n
\n
\n
Lite trial greeting \n\n
\n Lite Greeting \n \n
\n
\n\n\n\n
\n\n\n \n Save \n
\n\n \n
'},useData:!0}),e["app.licenseView"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.mailEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n Message \n \n
\n\n \n Send to \n \n
\n \n\n\n \n
'},useData:!0}),e["app.purchaseEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n\n
\n
\n Product name \n \n
\n
\n
\n
\n Product code \n \n
\n
\n
\n
\n Sales order number \n \n
\n
\n
\n
\n
\n
\n \n \n Renew notice sent \n
\n
\n
\n
\n Subscription expire \n \n
\n
\n
\n
\n Cancel date \n \n
\n
\n
\n
\n Coupon code \n \n
\n
\n
\n
\n ShareIt Order \n \n
\n
\n\n\n\n
\n \n Save \n Delete \n Renew \n
\n \n
'},useData:!0}),e["app.purchases"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.reportData"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.reportDataExpires"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n'},useData:!0}),e["app.reportDataProdEmail"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n
\n
Note: this will fetch all support and admin email addresses \n \n\n
\n Include \'Do not contact\' emails \n \n
\n\n
\n Products: \n
\n \n\n
\n\n
\n\n
\n\n \n
'},useData:!0}),e["app.rfcaseEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){
-return'\n
\n \n \n \n
\n\n \n\n
\n\n
\n\n\n
\n
\n Priority \n \n 1 \n 2 \n 3 \n 4 \n 5 \n \n
\n
\n\n\n
\n\n
\n\n
\n
\n Released in version \n \n
\n
\n\n
\n
\n Release notes \n \n
\n
\n\n\n\n\n\n\n
\n\n
\n\n \n Save \n Delete \n
\n\n \n\n\n\n
\n \n \n
Upload attachments:
\n
\n
\n \n \n\n
'},useData:!0}),e["app.rfcases"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n
\n\n\n
\n\n
\n\n
\n
\n Priority \n \n All \n 1 \n 2 \n 3 \n 4 \n 5 \n \n
\n
\n\n
\n\n
\n
\n \n\n\n'},useData:!0}),e["app.rfsettings"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.search"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.shell"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n \n \n \n\n \n \n\n\n\n'},useData:!0}),e["app.subnotify"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n'},useData:!0}),e["app.subscription"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.templateEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n\n \n\n \n Save \n Delete \n
\n\n \n
'},useData:!0}),e["app.templates"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0})}();
+!function(){var n=Handlebars.template,e=Handlebars.templates=Handlebars.templates||{};e["app.authenticate"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.customerEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.customers"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n
Active\n \n \n
\n
Lapsed\n \n \n
\n\n\n
\n Inactive\n \n \n\n
+ \n\n\n
\n
'},useData:!0}),e["app.customerSiteEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n
\n
\n
\n\n
\n State / Province \n \n
\n
\n
\n
\n \n \n Networked \n
\n
\n
\n
\n Database type \n \n
\n
\n
\n
\n
\n Server bits \n \n
\n
\n
\n
\n
\n
\n Hosting start \n \n
\n
\n
\n
\n Hosting end \n \n
\n
\n
\n \n
\n\n \n Save \n Delete \n
\n\n \n
'},useData:!0}),e["app.customerSites"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.fourohfour"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return"\n
404 NOT FOUND 404 \n"},useData:!0}),e["app.inbox"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.license"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n\n\n
\n\n
\n
\n \n AyaNova LITE \n
\n
\n
\n
\n License type \n \n New \n Renewal / Add-on \n Licensed trial \n Web requested trial \n \n
\n
\n
\n
\n Registered to \n \n
\n
\n\n\n
\n\n
\n
\n Email address \n \n
\n
\n\n\n
\n
\n Users \n \n 1 \n 5 \n 10 \n 15 \n 20 \n 50 \n 999 \n \n
\n
\n
\n\n
\n Support expires \n \n
\n
\n
\n
\n
\n\n
\n\n\n\n
\n
\n
\n
\n
\n
\n
\n\n
\n\n
\n\n\n\n\n\n \n\n
\n \n
'},useData:!0}),e["app.licenseRequestEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n\n
\n
\n
\n Greeting message \n \n
\n
\n
\n
\n Keycode message \n \n
\n
\n\n
\n \n
'},useData:!0}),e["app.licenses"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.licenseTemplates"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n\n \n\n
\n
FULL KEY \n\n
\n New \n \n
\n
\n
\n
\n
\n Licensed Trial \n \n
\n
\n
\n
Full trial greeting \n\n
\n Greeting \n \n
\n\n
\n
\n\n
LITE KEY \n\n
\n Lite New \n \n
\n
\n
\n
\n Lite Add-On \n \n
\n
\n
\n
\n Lite Licensed Trial \n \n
\n
\n
\n
Lite trial greeting \n\n
\n Lite Greeting \n \n
\n
\n\n\n\n
\n\n\n \n Save \n
\n\n \n
'},useData:!0}),e["app.licenseView"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.mailEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n Message \n \n
\n\n \n Send to \n \n
\n \n\n\n \n
'},useData:!0}),e["app.ops"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.purchaseEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n\n
\n
\n Product name \n \n
\n
\n
\n
\n Product code \n \n
\n
\n
\n
\n Sales order number \n \n
\n
\n
\n
\n
\n
\n \n \n Renew notice sent \n
\n
\n
\n
\n Subscription expire \n \n
\n
\n
\n
\n Cancel date \n \n
\n
\n
\n
\n Coupon code \n \n
\n
\n
\n
\n ShareIt Order \n \n
\n
\n\n\n\n
\n \n Save \n Delete \n Renew \n
\n \n
'},useData:!0}),e["app.purchases"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.reportData"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.reportDataExpires"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n'},useData:!0}),e["app.reportDataProdEmail"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n \n
\n
Note: this will fetch all support and admin email addresses \n \n\n
\n Include \'Do not contact\' emails \n \n
\n\n
\n Products: \n
\n \n\n
\n\n
\n\n
\n\n \n
'},useData:!0}),e["app.rfcaseEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){
+return'\n
\n \n \n \n
\n\n \n\n
\n\n
\n\n\n
\n
\n Priority \n \n 1 \n 2 \n 3 \n 4 \n 5 \n \n
\n
\n\n\n
\n\n
\n\n
\n
\n Released in version \n \n
\n
\n\n
\n
\n Release notes \n \n
\n
\n\n\n\n\n\n\n
\n\n
\n\n \n Save \n Delete \n
\n\n \n\n\n\n
\n \n \n
Upload attachments:
\n
\n
\n \n \n\n
'},useData:!0}),e["app.rfcases"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n
\n\n\n
\n\n
\n\n
\n
\n Priority \n \n All \n 1 \n 2 \n 3 \n 4 \n 5 \n \n
\n
\n\n
\n\n
\n
\n \n\n\n'},useData:!0}),e["app.rfsettings"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.search"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.shell"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n \n \n \n\n \n \n\n\n\n'},useData:!0}),e["app.subnotify"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n'},useData:!0}),e["app.subscription"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0}),e["app.templateEdit"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n
\n\n \n\n \n Save \n Delete \n
\n\n \n
'},useData:!0}),e["app.templates"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return''},useData:!0})}();