Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/27/16 16:48:35 (8 years ago)
Author:
jlodewyc
Message:

#2582 Bugfixing, email setup password and code commenting

Location:
branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Scripts
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Scripts/Hubs/CalendarHubber.js

    r13795 r13805  
    1212               var hubber = $.connection.calendarHub;
    1313
    14                vm.alertMessage = "No alerts";
    15                vm.currentcal = [];
    16                $scope.permission = false;
    17                vm.selectedEventId = -1;
    18                vm.groups = [];
    19                vm.clients = [];
     14               vm.currentcal = [];//Reference to current calendar (treeview.currentNode.calendar)
     15               $scope.permissionview = false;//Show permissions or not
     16               $scope.resaddview = false;//Show add resources or not
     17               vm.selectedEventId = -1;//Selected downtime (-1 for none)
     18               vm.groups = []; //All resource groups
     19               vm.clients = []; //All resources
    2020               vm.init = function () {
    21 
    22                    //  $.connection.hub.logging = true;
    23 
    2421
    2522                   var v = document.getElementById("userId").innerHTML;
    2623                   $.connection.hub.qs = { 'userid': v };
     24                   //Connection string set to identify the unique session ID for the user
    2725                   $.connection.hub.start().done(function () {
    28                        hubber.server.requestInfo();
    29                    });
     26                       hubber.server.requestInfo();//initial data request
     27                   });
     28
     29                   //Process all initial data needed (heavy load)
    3030                   hubber.client.processData = function (data, users, groups) {
    3131                       vm.data = JSON.parse(data);
     
    3636                       $scope.$apply();
    3737                   };
     38
     39                   //Saving from current graph is done -> refresh it
    3840                   hubber.client.savingCurrentDone = function () {
    3941                       vm.calendarSaver = false;
     
    4143                       $scope.$apply();
    4244                   };
     45
     46                   //Saving all graphs done -> clear everything
    4347                   hubber.client.savingAllDone = function () {
    4448                       vm.calendarSaver = false;
     
    4650                       $scope.$apply();
    4751                   };
     52
     53                   //Dispose toggle refresh for current
    4854                   hubber.client.processDispose = function (disp) {
    4955                       vm.treeview.currentNode.IsDisposable = disp;
     
    5157                       $scope.$apply();
    5258                   }
     59
     60                   //Permissions refresh for specific resource
    5361                   hubber.client.processPermissions = function (id, perm) {
    5462                       var json = JSON.parse(perm);
     
    5967                       $scope.$apply();
    6068                   }
     69
     70                   //Process downtimes for a resource. Data conversion
    6171                   hubber.client.processDowntime = function (id, down) {
    6272                       var json = JSON.parse(down);
     
    98108                   }
    99109
     110                   //Initial function to build the resource tree
     111                   $scope.buildTree = function () {
     112                       vm.tree = [];
     113                       vm.temptree = [];
     114                       vm.top = false;
     115                       var ungrouped = {
     116                           children: [],
     117                           Name: 'Ungrouped'
     118                       }
     119                       for (; vm.data.length > 0;) {
     120
     121                           if (vm.data[0].ParentResourceId == null && vm.data[0].IsDisposable !== undefined) {
     122                               var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
     123                               vm.clients.push(curr);
     124                               ungrouped.children.push(curr);
     125                           }
     126                           else if (vm.data[0].ParentResourceId == null) {
     127                               var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
     128                               vm.groups.push(curr);
     129                               vm.tree.push(curr);
     130                           }
     131                           else {
     132                               var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
     133                               if (curr.IsDisposable !== undefined)
     134                                   vm.clients.push(curr);
     135                               else
     136                                   vm.groups.push(curr);
     137                               vm.temptree.push(curr);
     138                           }
     139                       }
     140                       vm.tree.push(ungrouped);
     141
     142                   };//End for hubber init
     143
     144                   //menu navigation
     145                   $scope.menuchange = function (i) {
     146                       switch (i) {
     147                           case 0:
     148                               $scope.permissionview = false;
     149                               $scope.resaddview = false;
     150                               break;
     151                           case 1:
     152                               $scope.permissionview = true;
     153                               $scope.resaddview = false;
     154                               break;
     155                           case 2:
     156                               $scope.permissionview = false;
     157                               $scope.resaddview = true;
     158                               break;
     159                       }
     160                   }
     161
     162                   //Seeks for children, used recursively for building the treeview
     163                   $scope.seekChildren = function (current) {
     164                       current.calendar = [];
     165                       current.children = [];
     166                       current.todelete = [];
     167                       current.changes = false;
     168                       current.collapsed = true;
     169                       for (var t = 0; t < vm.temptree.length;) {
     170                           if (current.Id == vm.temptree[t].ParentResourceId) {
     171                               current.children.push(vm.temptree.splice(t, 1)[0]);
     172                           }
     173                           else {
     174                               t++;
     175                           }
     176                       }
     177                       var childc = current.children.length;//Remembers count of children received from temp tree;
     178                       for (var t = 0; t < vm.data.length;) {
     179                           if (current.Id == vm.data[t].ParentResourceId) {
     180                               if (vm.data[t].IsDisposable !== undefined)
     181                                   vm.clients.push(vm.data[t]);
     182                               else
     183                                   vm.groups.push(vm.data[t]);
     184                               current.children.push(vm.data.splice(t, 1)[0]);
     185                           }
     186                           else {
     187                               t++;
     188                           }
     189                       }
     190                       for (var t = childc; t < current.children.length; t++) {
     191                           current.children[t] = $scope.seekChildren(current.children[t]);
     192                       }
     193                       return current;
     194                   }
     195
     196                   //Change to another resource
    100197                   $scope.$watch("treeview.currentNode", function (newValue, oldValue) {
    101198                       $scope.currentcal = [];
     199                       $scope.resaddview = false;
    102200                       $(".selected.ng-binding").addClass('loaded');
    103201                       $scope.selectedEventId = -1;
    104202                       
     203                       //Check if resource already has downtime data loaded
    105204                       if ($scope.treeview.currentNode != null && $scope.treeview.currentNode.Id != undefined) {
    106205                           if ($scope.treeview.currentNode.calendar.length === 0) {
     206                               //Reach out to server to receive resource data
    107207                               hubber.server.requestPermissions(vm.treeview.currentNode.Id);
    108208                               hubber.server.requestDownTime(vm.treeview.currentNode.Id);
     
    112212                               $timeout(function () {
    113213                                   refreshPermissions();
     214                                   //set previously loaded data
    114215                                   $scope.currentcal = $scope.treeview.currentNode.calendar;
    115216                               }, 0);
    116217
    117218                           }
    118                        }
    119 
    120                    });
    121                }
     219                           $scope.refreshAdds();
     220                       }
     221
     222                   });
     223               }
     224
     225               //Resets the add resources menu
     226               $scope.refreshAdds = function() {
     227                   for (var i = 0; i < $scope.clients.length; i++) {
     228                       $scope.clients[i].add = false;
     229                       for (var j = 0; j < $scope.treeview.currentNode.children.length; j++) {
     230                           if ($scope.clients[i].Id === $scope.treeview.currentNode.children[j].Id)
     231                               $scope.clients[i].add = true;
     232                       }
     233                   }
     234               }
     235
     236               //Resets the permissions menu
    122237               function refreshPermissions() {
    123238                   for (var i = 0; i < $scope.permUsers.length; i++){
     
    136251                   }
    137252               }
     253
     254               //Add resource group show by clearing the tree
    138255               $scope.clearTreeSelect = function () {
    139256                   if (vm.treeview.currentNode != undefined) {
     
    143260                   }
    144261               }
    145                $scope.buildTree = function () {
    146                    vm.tree = [];
    147                    vm.temptree = [];
    148                    vm.top = false;
    149                    var ungrouped = {
    150                        children: [],
    151                        Name: 'Ungrouped'
    152                    }
    153                    for (; vm.data.length > 0;) {
    154 
    155                        if (vm.data[0].ParentResourceId == null && vm.data[0].IsDisposable !== undefined) {
    156                            var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
    157                            vm.clients.push(curr);
    158                            ungrouped.children.push(curr);
    159                        }
    160                        else if (vm.data[0].ParentResourceId == null) {
    161                            var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
    162                            vm.groups.push(curr);
    163                            vm.tree.push(curr);
    164                        }
    165                        else {
    166                            var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
    167                            if (curr.IsDisposable !== undefined)
    168                                vm.clients.push(curr);
    169                            else
    170                                vm.groups.push(curr);
    171                            vm.temptree.push(curr);
    172                        }
    173                    }
    174                    vm.tree.push(ungrouped);
    175 
    176                };
    177 
    178                $scope.seekChildren = function (current) {
    179                    current.calendar = [];
    180                    current.children = [];
    181                    current.todelete = [];
    182                    current.changes = false;
    183                    current.collapsed = true;
    184                    for (var t = 0; t < vm.temptree.length;) {
    185                        if (current.Id == vm.temptree[t].ParentResourceId) {
    186                            current.children.push(vm.temptree.splice(t, 1)[0]);
    187                        }
    188                        else {
    189                            t++;
    190                        }
    191                    }
    192                    var childc = current.children.length;//Remembers count of children received from temp tree;
    193                    for (var t = 0; t < vm.data.length;) {
    194                        if (current.Id == vm.data[t].ParentResourceId) {
    195                            if (vm.data[t].IsDisposable !== undefined)
    196                                vm.clients.push(vm.data[t]);
    197                            else
    198                                vm.groups.push(vm.data[t]);
    199                            current.children.push(vm.data.splice(t, 1)[0]);
    200                        }
    201                        else {
    202                            t++;
    203                        }
    204                    }
    205                    for (var t = childc; t < current.children.length; t++) {
    206                        current.children[t] = $scope.seekChildren(current.children[t]);
    207                    }
    208                    return current;
    209                }
     262
     263               //Reach out to server to toggle disposable for current calendar
    210264               $scope.toggleDisposable = function () {
    211265                   $scope.calendarDispose = true;
    212266                   hubber.server.toggleDisposable(vm.treeview.currentNode.Id);
    213267               }
     268
     269               //Pushes permissions to server
    214270               $scope.pushPermissions = function () {
    215271                   var perms = [];
     
    226282                   hubber.server.changePermissions(perms, node.Id);
    227283               }
     284
     285               //Collects all data from a single resource to save to the server
    228286               function collectInfoToSave(node, refresh, last) {
    229287                   var arr = node.calendar.down[0];
     
    233291                   for (var i = 0; i < arr.length; i++) {
    234292                       if (arr[i].id === '00000000-0000-0000-0000-000000000000') {
     293                           //NEW DOWNTIME
    235294                           var t = arr[i].allDay.toString();
    236295                           toadd.push([
     
    250309                       }
    251310                       else if (arr[i].changed === true) {
     311                           //EDIT EXISTING DOWNTIME
    252312                           var t = arr[i].allDay.toString();
    253313                           toupd.push([
     
    269329                   hubber.server.saveCalendar(node.Id, todel, toadd, toupd, refresh, last);
    270330               }
     331
     332               //Save current calendar
    271333               $scope.saveCurrentCalendar = function () {
    272334                   vm.calendarSaver = true;
    273                    collectInfoToSave(vm.treeview.currentNode, true, false);
     335                   collectInfoToSave(vm.treeview.currentNode, true, false);//true for refresh, false for save all
    274336                   //true for refresh, false for showing it's only one calendar saved.
    275337               }
     338
     339               //Save all changed calendars
    276340               $scope.saveAllCalendars = function () {
    277341
     
    289353                   }).then(function (success) {
    290354                       vm.calendarSaver = true;
     355
    291356                       for (var i = 0; i < $scope.allSave.length; i++) {
    292357                           if (i >= $scope.allSave.length - 1)
     
    299364
    300365               }
     366
     367               //Checks treeview for edits and builds new array containing these (recurse for children)
    301368               function createSaveRequests(node) {
    302369                   if (node.changes === true)
     
    306373                   }
    307374               }
     375
     376               //Clears and refreshes calendar for current resource (delete current changes)
    308377               $scope.clearCurrentCalendar = function () {
    309378
     
    319388
    320389               }
     390
     391               //Clears all calendars and refreshes current (Deletes all changes)
    321392               $scope.clearAllCalendars = function () {
    322393                   ngDialog.openConfirm({
     
    333404
    334405               }
     406
     407               //Function that clears all calendar (separate so dialog is not called when saveAll is finished)
    335408               function clearAllCalendarsFunc() {
    336409                   $(".ng-binding.changed").removeClass('changed');
     
    347420                   $(".selected.ng-scope").addClass('loaded');
    348421               }
     422
     423               //Recurse trough tree view
    349424               function clearCalendarsRecurse(node) {
    350425
     
    356431                   }
    357432               }
     433
     434               //Delete all downtimes from current resource
    358435               $scope.deleteAllEvents = function () {
    359436                   vm.calendarDeleter = true;
     
    373450                   });
    374451               }
     452
     453               //Delete all past events
    375454               $scope.deleteAllPreviousEvents = function () {
    376455                   vm.calendarDeleter = true;
     
    395474               }
    396475
    397 
     476               //Sets the status of a downtime AND the current resource to changed
    398477               $scope.setChanged = function (id) {
    399478                   if (id != -1) {
     
    408487                   $(".selected").addClass('changed');
    409488               }
    410                //*Add event by click
     489
     490               //Adds event by click on empty space
    411491               $scope.calendarClick = function (date, jsEvent, view) {
    412492
     
    418498                   end.setHours(dat.getHours() + 2);
    419499                   vm.treeview.currentNode.calendar.down[0].push({
    420                        id: '00000000-0000-0000-0000-000000000000',
     500                       id: '00000000-0000-0000-0000-000000000000',//Makes it recognizable as new for the server
    421501                       title: 'Unavailable',
    422502                       start: dat,
     
    440520
    441521               }
     522
     523               //Finds array index for specific _id
    442524               function checkId(id) {
    443525                   for (var i = 0; i < vm.treeview.currentNode.calendar.down[0].length ; i++) {
     
    447529                   return -1;
    448530               }
    449                /* alert on eventClick */
     531               //Set selected downtime
    450532               $scope.eventClick = function (date, jsEvent, view) {
    451533                   vm.selectedEventId = checkId(date._id);
    452534               };
     535               //Sets selected downtime by clicking on the button at bottom on the page, moves to date
    453536               $scope.eventClickBtn = function (id) {
    454537                   vm.selectedEventId = checkId(id);
    455538                   vm.goToDate();
    456539               };
    457                /* alert on Drop */
     540
     541               //Drag and drop downtime
    458542               $scope.dragandDrop = function (event, delta, revertFunc, jsEvent, ui, view) {
    459543                   vm.selectedEventId = checkId(event._id);
     
    474558                   vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].end = new Date(event.end);
    475559               };
    476                /* alert on Resize */
     560               //Resize downtime
    477561               $scope.resizeEvent = function (event, delta, revertFunc, jsEvent, ui, view) {
    478562                   vm.selectedEventId = checkId(event._id);
     
    482566               };
    483567
    484                /* remove event */
     568               //Removes a downtime from client (existing downtime gets referenced in todelete
    485569               $scope.remove = function (index) {
    486570                   vm.selectedEventId = -1;
     
    493577
    494578               };
     579               //Remove trough list view at bottom
    495580               $scope.removeList = function (id) {
    496581                   var index = checkId(id);
     
    504589
    505590               };
    506 
     591               //Check if start is before end AND start is after now (recursion)
    507592               $scope.checkDateStartEnd = function () {
    508593                   if ($scope.currentcal.down[0][vm.selectedEventId].rec.start > $scope.currentcal.down[0][vm.selectedEventId].rec.end ||
     
    515600                       $scope.currentcal.down[0][vm.selectedEventId].rec.start = new Date();
    516601               }
    517                //pushes all changes to other recurs
     602               //pushes all changes to other existing recurs and creates new downtimes where needed
    518603               $scope.pushRecurChanges = function (recid) {
    519604                   ngDialog.openConfirm({
     
    526611                       plain: true
    527612                   }).then(function (success) {
     613
    528614                       var arr = vm.treeview.currentNode.calendar.down[0];
     615                       //Deep copy of downtime for referencing
    529616                       var ob = $.extend(true, {}, arr[vm.selectedEventId]);
    530                        for (var i = 0; i < arr.length;) {
     617
     618                       for (var i = 0; i < arr.length;) {//Go trough downtimes and find all recurrences
    531619                           if (arr[i].rec.recid === recid) {
    532620                               if (new Date(arr[i].start) < new Date(ob.rec.start) ||
    533621                                        new Date(arr[i].end) > new Date(ob.rec.end) ||
    534622                                        !ob.rec.days[new Date(arr[i].start).getDay()]) {
    535                                    vm.remove(i);
     623                                   //Downtime is out of recurrence boundaries
     624                                   //Before start date OR After end date OR Not on right day of the week
     625                                   vm.remove(i);//NO I++ -> REMOVE SPLICES ARRAY
    536626                                   vm.selectedEventId = -1;
    537627
    538628                               }
    539629                               else {
    540 
     630                                   //Edit downtime when it is within the bounds
    541631                                   arr[i].start.setHours(ob.start.getHours(), ob.start.getMinutes());
    542632                                   arr[i].end.setHours(ob.end.getHours(), ob.end.getMinutes());
     
    551641                               i++;
    552642                       }
     643                       //init for new downtimes.
    553644                       var start = new Date(ob.rec.start);
    554                        start.setHours(2, 0, 0, 0);
     645                       start.setHours(2, 0, 0, 0);//Beginning of the day + time conversion +02
    555646                       var end = new Date(ob.rec.end);
    556                        end = new Date(end.setHours(24, 0, 0, 0) + 1000 * 3600 * 2);
    557 
    558                        loop1:
     647                       end = new Date(end.setHours(24, 0, 0, 0) + 1000 * 3600 * 2);//End of the day + time conversion +02
     648
     649                       loop1: //Loop start to end with single day increment
    559650                           for (var d = (start.getTime()) ; d < (end.getTime()) ;) {
    560651                               var tog = ob.rec.days[new Date(d).getDay()];
     652                               //Check if day of the week is included in recursion
    561653                               if (tog) {
    562                                    loop2:
     654                                   loop2://Loop checking existing downtime array to see if day is already filled or not
    563655                                       for (var i = 0; i < arr.length; i++) {
    564656
     
    567659                                               if (arr[i].start.getTime() >= d &&
    568660                                                   arr[i].end.getTime() <= dend) {
    569                                                    d += (1000 * 3600 * 24);
    570                                                    continue loop1;
     661                                                   d += (1000 * 3600 * 24);//add day to loop 1
     662                                                   continue loop1;//breaks out of loop2 and skips to next day
    571663                                               }
    572664                                           }
    573665                                       }
    574 
     666                                   //Made it here = new event needed: init
    575667                                   var ts = new Date(d);
    576668                                   ts.setHours(new Date(ob.start).getHours(), new Date(ob.start).getMinutes());
     
    589681                               }
    590682
    591                                d += (1000 * 3600 * 24);// 1 day
    592 
    593                            }
    594                    });
    595                }
     683                               d += (1000 * 3600 * 24);// adds one day
     684
     685                           }
     686                   });
     687               }
     688
     689               //Delete all bound recurrences
    596690               $scope.deleteAllRecurrences = function (recid) {
    597691                   ngDialog.openConfirm({
     
    614708               }
    615709
     710               //Moves calendar to selected date
    616711               $scope.goToDate = function () {
    617712                   $("#resourcecalendar").fullCalendar('gotoDate', vm.currentcal.down[0][vm.selectedEventId].start);
    618713               }
    619                /* Render Tooltip */
     714               /* Renders Tooltip */
    620715               $scope.eventRender = function (event, element, view) {
    621716                   element.attr({
     
    625720                   //$compile(element)($scope);
    626721               };
    627                /* config object */
     722               //Calendar configuration
    628723               $scope.uiConfig = {
    629724                   calendar: {
     
    650745               };
    651746
     747               
     748
    652749
    653750
    654751           }).filter('disp', function () {
    655                return function (input) {
     752               return function (input) {//Filter boolean to string
    656753                   return input ? 'Disposable' : 'Not disposable';
    657754               }
    658755           }).directive('animateOnChange', function ($timeout) {
    659                return function (scope, element, attr) {
     756               return function (scope, element, attr) {//Animation on downtime info to show change
    660757                   scope.$watch(attr.animateOnChange, function (nv, ov) {
    661758
     
    665762                               $timeout(function () {
    666763                                   element.removeClass('changed');
    667                                }, 250); // Could be enhanced to take duration as a parameter
     764                               }, 250);
    668765                           }
    669766                           else {
     
    671768                               $timeout(function () {
    672769                                   element.removeClass('changedshut');
    673                                }, 250); // Could be enhanced to take duration as a parameter
     770                               }, 250);
    674771                           }
    675772                       }
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Scripts/Hubs/UserInfoHubber.js

    r13754 r13805  
    22
    33$(function () {
    4     $.connection.hub.logging = true;
     4    //$.connection.hub.logging = true;
    55    var v = document.getElementById("userId").innerHTML;
    66    console.log(v);
     
    88    $.connection.hub.start();
    99    hubber.client.showNewPass = function (pass) {
    10         $("#inppassreset").html("<label class=' control-label' style='text-align:left'>New password: " + pass + "</label>");
     10        $("#inppassreset").html("<label class=' control-label' style='text-align:left'>New pass: " + pass + ". An email has been sent to the user containing the new password</label>");
    1111                                     
    1212    };
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Scripts/Styling/angular.treeview.css

    r13795 r13805  
    6161
    6262    div[data-tree-model] li.selected {
    63         box-shadow:  2px 3px 5px rgba(0,0,0,0.6), inset 1px 10px 300px 51px rgba(143,201,58,1)!important;
     63        box-shadow:  2px 3px 5px rgba(0,0,0,0.6), inset 1px 10px 300px 51px #5cb85c!important;
    6464    }
    6565    div[data-tree-model] span.selected {
Note: See TracChangeset for help on using the changeset viewer.