webstaff: add server administration page
authorGalen Charlton <gmc@esilibrary.com>
Wed, 11 May 2016 17:17:55 +0000 (13:17 -0400)
committerMike Rylander <mrylander@gmail.com>
Thu, 18 Aug 2016 19:34:20 +0000 (15:34 -0400)
This patch adds a landing page for Server Administration and
code to embed all of the admin pages available under Serer
Administration in the XUL staff client.

TODO:

* fix the permission groups editor so that it works
  when embedded in the web staff client
* refactor admin/local/app.js and admin/server/app.js to
  unify some of the copy and pasting
* replace the embedded legacy OU editor with a new
  angular one
* fixes some CSS issues that make text hard to read in
  a few places

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Open-ILS/src/templates/staff/admin/server/index.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/admin/server/t_splash.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/navbar.tt2
Open-ILS/web/js/ui/default/staff/admin/server/app.js [new file with mode: 0644]

diff --git a/Open-ILS/src/templates/staff/admin/server/index.tt2 b/Open-ILS/src/templates/staff/admin/server/index.tt2
new file mode 100644 (file)
index 0000000..362723a
--- /dev/null
@@ -0,0 +1,15 @@
+[%
+  WRAPPER "staff/base.tt2";
+  ctx.page_title = l("Server Administration"); 
+  ctx.page_app = "egServerAdmin";
+%]
+
+[% BLOCK APP_JS %]
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/eframe.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/admin/server/app.js"></script>
+<link rel="stylesheet" href="[% ctx.base_path %]/staff/css/admin.css" />
+[% END %]
+
+<div ng-view></div>
+
+[% END %]
diff --git a/Open-ILS/src/templates/staff/admin/server/t_splash.tt2 b/Open-ILS/src/templates/staff/admin/server/t_splash.tt2
new file mode 100644 (file)
index 0000000..1431942
--- /dev/null
@@ -0,0 +1,78 @@
+
+<div class="container-fluid" style="text-align:center">
+  <div class="alert alert-info alert-less-pad strong-text-2">
+    <span>[% l('Server Administration') %]</span>
+  </div>
+</div>
+
+<div class="container admin-splash-container">
+
+[%
+    interfaces = [
+     [ l('Actor Stat Cat Sip Fields'), "./admin/server/config/actor_sip_fields" ]
+    ,[ l('Age Hold Protect Rules'), "./admin/server/config/rule_age_hold_protect" ]
+    ,[ l('Asset Stat Cat Sip Fields'), "./admin/server/config/asset_sip_fields" ]
+    ,[ l('Authority Browse Axes'), "./admin/server/cat/authority/browse_axis" ]
+    ,[ l('Authority Control Sets'), "./admin/server/cat/authority/control_set" ]
+    ,[ l('Authority Thesauri'), "./admin/server/cat/authority/thesaurus" ]
+    ,[ l('Best-Hold Selection Sort Order'), "./admin/server/config/best_hold_order" ]
+    ,[ l('Billing Types'), "./admin/server/config/billing_type" ]
+    ,[ l('Booking Resource Attribute Maps'), "./admin/server/booking/resource_attr_map" ]
+    ,[ l('Booking Resource Attribute Values'), "./admin/server/booking/resource_attr_value" ]
+    ,[ l('Booking Resource Attributes'), "./admin/server/booking/resource_attr" ]
+    ,[ l('Booking Resource Types'), "./admin/server/booking/resource_type" ]
+    ,[ l('Booking Resources'), "./admin/server/booking/resource" ]
+    ,[ l('Call Number Prefixes'), "./admin/server/config/acn_prefix" ]
+    ,[ l('Call Number Suffixes'), "./admin/server/config/acn_suffix" ]
+    ,[ l('Circulation Duration Rules'), "./admin/server/config/rule_circ_duration" ]
+    ,[ l('Circulation Limit Groups'), "./admin/server/config/circ_limit_group" ]
+    ,[ l('Circulation Matchpoint Weights'), "./admin/server/config/circ_matrix_weights" ]
+    ,[ l('Circulation Max Fine Rules'), "./admin/server/config/rule_max_fine" ]
+    ,[ l('Circulation Modifiers'), "./admin/server/config/circ_modifier" ]
+    ,[ l('Circulation Recurring Fine Rules'), "./admin/server/config/rule_recurring_fine" ]
+    ,[ l('Copy Statuses'), "./admin/server/legacy/config/copy_status" ]
+    ,[ l('Custom Org Unit Trees'), "./admin/server/actor/org_unit_custom_tree" ]
+    ,[ l('Floating Groups'), "./admin/server/config/floating_groups" ]
+    ,[ l('Global Flags'), "./admin/server/config/global_flag" ]
+    ,[ l('Hard Due Date Changes'), "./admin/server/config/hard_due_date" ]
+    ,[ l('Hold Matchpoint Weights'), "./admin/server/config/hold_matrix_weights" ]
+    ,[ l('Import Match Sets'), "./admin/server/vandelay/match_set" ]
+    ,[ l('MARC Coded Value Maps'), "./admin/server/config/coded_value_map" ]
+    ,[ l('MARC Import Remove Fields'), "./admin/server/vandelay/import_bib_trash_group" ]
+    ,[ l('MARC Record Attributes'), "./admin/server/config/record_attr_definition" ]
+    ,[ l('MARC Search/Facet Class FTS Maps'), "./admin/server/config/metabib_class_ts_map" ]
+    ,[ l('MARC Search/Facet Classes'), "./admin/server/config/metabib_class" ]
+    ,[ l('MARC Search/Facet Field FTS Maps'), "./admin/server/config/metabib_field_ts_map" ]
+    ,[ l('MARC Search/Facet Fields'), "./admin/server/config/metabib_field" ]
+    ,[ l('Org Unit Proximity Adjustments'), "./admin/server/config/org_unit_proximity_adjustment" ]
+    ,[ l('Organization Types'), "./admin/server/legacy/actor/org_unit_type" ]
+    ,[ l('Org Unit Setting Types'), "./admin/server/config/org_unit_setting_type" ]
+    ,[ l('Organizational Units'), "./admin/server/legacy/actor/org_unit" ]
+    ,[ l('Permission Groups'), "./admin/server/legacy/permission/grp_tree" ]
+    ,[ l('Permissions'), "./admin/server/legacy/permission/perm_list" ]
+    ,[ l('Remote Accounts'), "./admin/server/config/remote_account" ]
+    ,[ l('SMS Carriers'), "./admin/server/config/sms_carrier" ]
+    ,[ l('User Activity Types'), "./admin/server/config/usr_activity_type" ]
+    ,[ l('User Setting Types'), "./admin/server/config/usr_setting_type" ]
+    ,[ l('Weights Association'), "./admin/server/config/weight_assoc" ]
+    ,[ l('Z39.50 Index Field Maps'), "./admin/server/config/z3950_index_field_map" ]
+    ,[ l('Z39.50 Servers'), "./admin/server/config/z3950_source" ]
+   ];
+
+   USE table(interfaces, rows=16);
+%]
+
+[% FOREACH row = table.rows %]
+  <div class="row new-entry">
+    [% FOREACH item = row %][% IF item.1 %]
+    <div class="col-md-4">
+      <span class="glyphicon glyphicon-pencil"></span>
+      <a target="_self" href="[% item.1 %]">
+        [% item.0 %]
+      </a>
+    </div>
+    [% END %][% END %]
+  </div>
+[% END %]
+
+</div>
index c4e765b..cce234b 100644 (file)
             </a>
           </li>
           <li>
+            <a href="./admin/server/index" target="_self">
+              <span class="glyphicon glyphicon-briefcase"></span>
+              [% l('Server Administration') %]
+            </a>
+          </li>
+          <li>
             <a href="./admin/local/index" target="_self">
               <span class="glyphicon glyphicon-picture"></span>
               [% l('Local Administration') %]
diff --git a/Open-ILS/web/js/ui/default/staff/admin/server/app.js b/Open-ILS/web/js/ui/default/staff/admin/server/app.js
new file mode 100644 (file)
index 0000000..a28987a
--- /dev/null
@@ -0,0 +1,80 @@
+angular.module('egServerAdmin',
+    ['ngRoute', 'ui.bootstrap', 'egCoreMod','egUiMod'])
+
+.config(['$routeProvider','$locationProvider','$compileProvider', 
+ function($routeProvider , $locationProvider , $compileProvider) {
+
+    $locationProvider.html5Mode(true);
+    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|blob):/); 
+    var resolver = {delay : function(egStartup) {return egStartup.go()}};
+
+    var eframe_template = 
+        '<eg-embed-frame url="server_admin_url" handlers="funcs"></eg-embed-frame>';
+
+    // old-style Confiy
+    $routeProvider.when('/admin/server/legacy/:schema/:page', {
+        template: eframe_template,
+        controller: 'EmbedOldConifyCtl',
+        resolve : resolver
+    });
+   
+    // Conify page handler (some authority admin interfaces live
+    // under global/cat/authority/)
+    $routeProvider.when('/admin/server/:module/:schema/:page', {
+        template: eframe_template,
+        controller: 'EmbedConifyCtl',
+        resolve : resolver
+    });
+
+    // Conify page handler
+    $routeProvider.when('/admin/server/:schema/:page', {
+        template: eframe_template,
+        controller: 'EmbedConifyCtl',
+        resolve : resolver
+    });
+
+    // default page 
+    $routeProvider.otherwise({
+        templateUrl : './admin/server/t_splash',
+        resolve : resolver
+    });
+}])
+
+.controller('EmbedConifyCtl', 
+       ['$scope','$routeParams','$location','egCore',
+function($scope , $routeParams , $location , egCore) {
+
+    $scope.funcs = {
+        ses : egCore.auth.token(),
+    }
+    var conify_path = '/eg/conify/global/' +
+        (angular.isDefined($routeParams.module) ? ($routeParams.module + '/') : '') +
+        $routeParams.schema + '/' + $routeParams.page;
+
+    // embed URL must include protocol/domain or it will be loaded via
+    // push-state, resulting in an infinitely nested pages.
+    $scope.server_admin_url = 
+        $location.absUrl().replace(/\/eg\/staff.*/, conify_path);
+
+    console.log('Loading server admin URL: ' + $scope.server_admin_url);
+
+}])
+
+.controller('EmbedOldConifyCtl', 
+       ['$scope','$routeParams','$location','egCore',
+function($scope , $routeParams , $location , egCore) {
+
+    $scope.funcs = {
+        ses : egCore.auth.token(),
+    }
+    var conify_path = '/conify/global/' +
+        $routeParams.schema + '/' + $routeParams.page + '.html';
+
+    // embed URL must include protocol/domain or it will be loaded via
+    // push-state, resulting in an infinitely nested pages.
+    $scope.server_admin_url = 
+        $location.absUrl().replace(/\/eg\/staff.*/, conify_path);
+
+    console.log('Loading server admin URL: ' + $scope.server_admin_url);
+
+}])