Webstaff: implement Operator Change (and Operator Restore)
[working/Evergreen.git] / Open-ILS / web / js / ui / default / staff / services / navbar.js
1 angular.module('egCoreMod')
2
3 .directive('egNavbar', function() {
4     return {
5         restrict : 'AE',
6         transclude : true,
7         templateUrl : 'eg-navbar-template',
8         link : function(scope, element, attrs) {
9
10             // Find all eg-accesskey entries within the menu and attach
11             // hotkey handlers for each.  
12             // jqlite doesn't support selectors, so we have to 
13             // manually navigate to the elements we're interested in.
14             function inspect(elm) {
15                 elm = angular.element(elm);
16                 if (elm.attr('eg-accesskey')) {
17                     scope.addHotkey(
18                         elm.attr('eg-accesskey'),
19                         elm.attr('href'),
20                         elm.attr('eg-accesskey-desc'),
21                         elm
22                     );
23                 }
24                 angular.forEach(elm.children(), inspect);
25             }
26             inspect(element);
27         },
28
29         controller:['$scope','$window','$location','$timeout','hotkeys','egCore','$uibModal','ngToast',
30             function($scope , $window , $location , $timeout , hotkeys , egCore , $uibModal , ngToast) {
31
32                 function navTo(path) {                                           
33                     // Strip the leading "./" if any.
34                     path = path.replace(/^\.\//,'');
35                     var reg = new RegExp($location.path());
36                     $window.location.href = egCore.env.basePath + path;
37                 }       
38
39                 // adds a keyboard shortcut
40                 // http://chieffancypants.github.io/angular-hotkeys/
41                 $scope.addHotkey = function(key, path, desc, elm) {                 
42                     hotkeys.add({
43                         combo: key,
44                         allowIn: ['INPUT','SELECT','TEXTAREA'],
45                         description: desc,
46                         callback: function(e) {
47                             e.preventDefault();
48                             if (path) return navTo(path);
49                             return $timeout(function(){$(elm).trigger('click')});
50                         }
51                     });
52                 };
53
54                 $scope.retrieveLastRecord = function() {
55                     var last_record = egCore.hatch.getLocalItem("eg.cat.last_record_retrieved");
56                     if (last_record) {
57                         $window.location.href =
58                             egCore.env.basePath + 'cat/catalog/record/' + last_record;
59                     }
60                 }
61
62                 $scope.applyLocale = function(locale) {
63                     // EGWeb.pm can change the locale for us w/ the right param
64                     // Note: avoid using $location.search() to derive a new
65                     // URL, since it creates an intermediate path change.
66                     // Instead, use the ham-fisted approach of killing any
67                     // search args and applying the args we want.
68                     $window.location.href = 
69                         $window.location.href.replace(
70                             /(\?|\&).*/,
71                             '?set_eg_locale=' + encodeURIComponent(locale)
72                         );
73                 }
74
75                 $scope.changeOperatorUndo = function() {
76                         egCore.auth.opChangeUndo();
77                         $scope.op_changed = false;
78                         ngToast.create(egCore.strings.OP_CHANGE_SUCCESS);
79                 }
80
81                 $scope.changeOperator = function() {
82                     $uibModal.open({
83                         templateUrl: './share/t_opchange',
84                         controller:
85                             ['$scope', '$uibModalInstance', function($scope, $uibModalInstance) {
86                             $scope.args = {username : '', password : ''};
87                             $scope.focus = true;
88                             $scope.ok = function() { $uibModalInstance.close($scope.args) }
89                             $scope.cancel = function () { $uibModalInstance.dismiss() }
90                         }]
91                     }).result.then(function (args) {
92                         if (!args || !args.username || !args.password) return;
93                         args.workstation = egCore.auth.workstation();
94                         egCore.auth.opChange(args).then(
95                             function() {
96                                 console.log('op change success');
97                                 $scope.op_changed = true;
98                                 ngToast.create(egCore.strings.OP_CHANGE_SUCCESS);
99                             }, // note success with toast?
100                             function() {
101                                 console.log('op change failure');
102                                 ngToast.warning(egCore.strings.OP_CHANGE_FAILURE);
103                             }  // note failure with toast?
104                         );
105                     });
106                 }
107
108                 $scope.currentToken = function () {
109                     return egCore.auth.token();
110                 }
111
112                 // tied to logout link
113                 $scope.logout = function() {
114                     egCore.auth.logout();
115                     return true;
116                 };
117
118                 egCore.startup.go().then(
119                     function() {
120                         if (egCore.auth.user()) {
121                             $scope.op_changed = egCore.auth.OCtoken() ? true : false;
122                             $scope.username = egCore.auth.user().usrname();
123                             $scope.workstation = egCore.auth.workstation();
124                         }
125                     }
126                 );
127             }
128         ]
129     }
130 });
131