Changeset 13754


Ignore:
Timestamp:
04/12/16 15:28:19 (6 years ago)
Author:
jlodewyc
Message:

#2582 User management done, start resource calendar

Location:
branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager
Files:
35 added
17 edited

Legend:

Unmodified
Added
Removed
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Controllers/JobController.cs

    r13740 r13754  
    4545        /// initializes the connection for the right user. Not constructor because httpcontext is needed.
    4646        /// </summary>
    47         private void init()
     47        private bool init()
    4848        {
    4949            var u = HttpContext.Session.GetString("UserId");
    5050            if (u == null || u == "" || Guid.Parse(u) == Guid.Empty)
    5151            {
    52                 userId = Guid.Empty;
    53                 serviceLocator = new HiveServiceLocatorWeb();
    54                 serviceClient = serviceLocator.getHiveServiceClient();
    55                 clientWeb = new HiveClientWeb(serviceLocator, userId);
     52                return false;
    5653            }
    5754            else
     
    6158                serviceClient = serviceLocator.getHiveServiceClient();
    6259                clientWeb = weblog.getClientWeb(userId);
     60                return serviceLocator.CheckLogin();
    6361            }
    6462        }
     
    7169        public IActionResult Index()
    7270        {
    73             try
    74             {
    75                 init();
     71            if (init())
     72            {
    7673                clientWeb.Refresh();
    7774                vm.userJobs = clientWeb.Jobs.ToList();
    78             }
    79             catch (Exception e)
    80             {
    81                 if (e is MessageSecurityException || e is InvalidOperationException)
    82                 {
    83                     return RedirectToAction("Index", "Home");
    84                 }
    85                 throw;
    86             }
    87             ViewBag.SessionId = HttpContext.Session.GetString("UserId");
    88             ViewBag.Title = "Jobs";
    89             return View(vm);
     75
     76                ViewBag.SessionId = HttpContext.Session.GetString("UserId");
     77                ViewBag.Title = "Jobs";
     78                return View(vm);
     79            }
     80            else
     81            {
     82                return RedirectToAction("Index", "Home");
     83            }
    9084        }
    9185        /// <summary>
     
    9690        public IActionResult Selected(Guid id)
    9791        {
    98             init();
    99             if (serviceLocator.CheckLogin())
     92            if (init())
    10093            {
    10194                clientWeb.Refresh();
     
    129122        public IActionResult Delete(Guid id)
    130123        {
    131             init();
    132             if (serviceLocator.CheckLogin())
     124            if (init())
    133125            {
    134126
     
    155147        public IActionResult Uploads()
    156148        {
    157             init();
    158             if (serviceLocator.CheckLogin())
     149            if (init())
    159150            {
    160151                UploadedJobViewModel upper = new UploadedJobViewModel();
     
    176167        public IActionResult UploadDir(int index)
    177168        {
    178             init();
    179             if (serviceLocator.CheckLogin())
     169            if (init())
    180170            {
    181171                UploadedJobViewModel upper = new UploadedJobViewModel();
    182172                fillUploadsPaths(upper, index);
    183                 if(index != -1)
     173                if (index != -1)
    184174                    ViewBag.Title = upper.DisplayDatePaths[index] + " - Uploads";
    185175                else
     
    209199                    tempdex = -1;
    210200                }
    211                 else {
     201                else
     202                {
    212203                    vm.FullDatePaths.Add(dir);
    213204                    var temp = dir.Split('\\');
     
    235226        public IActionResult DeleteFile(int index, int filedex)
    236227        {
    237             init();
    238             if (serviceLocator.CheckLogin())
     228            if (init())
    239229            {
    240230                UploadedJobViewModel upper = new UploadedJobViewModel();
     
    263253        public IActionResult OpenFile(int index, int filedex)
    264254        {
    265             init();
    266             if (serviceLocator.CheckLogin())
     255            if (init())
    267256            {
    268257                UploadedJobViewModel upper = new UploadedJobViewModel();
     
    305294        public IActionResult AddToHive()
    306295        {
    307             init();
    308             if (serviceLocator.CheckLogin())
     296            if (init())
    309297            {
    310298                var job = weblog.getFileOpener(userId).AddCurrentModelToHive();
     
    364352        public async Task<IActionResult> Uploader(ICollection<IFormFile> files, string directory)
    365353        {
    366             init();
    367             UploadedJobViewModel upper = new UploadedJobViewModel();
    368             var uploads = Path.Combine(_environment.WebRootPath, "uploads", serviceClient.ClientCredentials.UserName.UserName,
    369                 directory);
    370             Directory.CreateDirectory(uploads);
    371             foreach (var file in files)
    372             {
    373                 if (file.Length > 0)
    374                 {
    375                     var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
    376                     await file.SaveAsAsync(Path.Combine(uploads, fileName));
    377                     // var ioptimizer = ContentManager.Load(Path.Combine(uploads, fileName));
    378                     //OptimizerHiveTask task = new OptimizerHiveTask((IOptimizer)ioptimizer);
    379                     //upper.Tasks.Add(task);
    380                 }
    381             }
    382             ViewBag.Title = "Upload complete - Uploads";
    383             return RedirectToAction("Uploads", "Job");
    384 
     354            if (init())
     355            {
     356                UploadedJobViewModel upper = new UploadedJobViewModel();
     357                var uploads = Path.Combine(_environment.WebRootPath, "uploads", serviceClient.ClientCredentials.UserName.UserName,
     358                    directory);
     359                Directory.CreateDirectory(uploads);
     360                foreach (var file in files)
     361                {
     362                    if (file.Length > 0)
     363                    {
     364                        var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
     365                        await file.SaveAsAsync(Path.Combine(uploads, fileName));
     366                        // var ioptimizer = ContentManager.Load(Path.Combine(uploads, fileName));
     367                        //OptimizerHiveTask task = new OptimizerHiveTask((IOptimizer)ioptimizer);
     368                        //upper.Tasks.Add(task);
     369                    }
     370                }
     371                ViewBag.Title = "Upload complete - Uploads";
     372                return RedirectToAction("Uploads", "Job");
     373            }
     374            else
     375            {
     376                return RedirectToAction("Index", "Home");
     377            }
    385378        }
    386379        #endregion
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Controllers/ResourceController.cs

    r13740 r13754  
    1 using HeuristicLab.Clients.Hive.WebJobManager.Services;
     1using HeuristicLab.Clients.Access.Administration;
     2using HeuristicLab.Clients.Hive.WebJobManager.Services;
    23using Microsoft.AspNet.Hosting;
    34using Microsoft.AspNet.Http;
     
    1516        private WebLoginService weblog;
    1617        private HiveServiceLocatorWeb serviceLocator;
    17         private HiveServiceClient serviceClient;
    18         private HiveClientWeb clientWeb;
     18        private AccessAdministrationClient accessClient;
    1919        private Guid userId;
    2020
     
    2626            _environment = env;
    2727        }
    28         private void init()
     28        private bool init()
    2929        {
    3030            var u = HttpContext.Session.GetString("UserId");
    3131            if (u == null || u == "" || Guid.Parse(u) == Guid.Empty)
    3232            {
    33                 userId = Guid.Empty;
    34                 serviceLocator = new HiveServiceLocatorWeb();
    35                 serviceClient = serviceLocator.getHiveServiceClient();
    36                 clientWeb = new HiveClientWeb(serviceLocator, userId);
     33                return false;
    3734            }
    3835            else
     
    4037                userId = Guid.Parse(u);
    4138                serviceLocator = weblog.getServiceLocator(userId);
    42                 serviceClient = serviceLocator.getHiveServiceClient();
    43                 clientWeb = weblog.getClientWeb(userId);
     39                accessClient = weblog.getAccessAdminClient(userId);
     40                return serviceLocator.CheckLogin();
     41
    4442            }
    4543        }
    4644        public IActionResult Index()
    4745        {
    48             init();
    49             if (serviceLocator.CheckLogin())
     46           
     47            if (init())
    5048            {
    51 
     49                ViewBag.SessionId = HttpContext.Session.GetString("UserId");
    5250                ViewBag.Title = "Resources";
    5351                return View("Index");
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Controllers/UserController.cs

    r13742 r13754  
    2727            _environment = env;
    2828        }
    29         private void init()
     29        private bool init()
    3030        {
    3131            var u = HttpContext.Session.GetString("UserId");
    3232            if (u == null || u == "" || Guid.Parse(u) == Guid.Empty)
    3333            {
    34                 userId = Guid.Empty;
    35                 serviceLocator = new HiveServiceLocatorWeb();
     34                return false;
    3635            }
    3736            else
     
    4039                serviceLocator = weblog.getServiceLocator(userId);
    4140                accessClient = weblog.getAccessAdminClient(userId);
     41                return serviceLocator.CheckLogin();
     42                 
    4243            }
    4344        }
     
    4647        public IActionResult Index()
    4748        {
    48             init();
    49             if (serviceLocator.CheckLogin())
    50             {
    51 
     49            if (init())
     50            {
    5251                ViewBag.Title = "Users";
    53                 UserViewModel vm = new UserViewModel(accessClient).refreshUsers();
     52                UserViewModel vm = new UserViewModel(accessClient).refreshAll() ;
    5453                ViewBag.SessionId = HttpContext.Session.GetString("UserId");
    5554                return View("Index", vm);
     
    6362        public IActionResult SelectUser(string id)
    6463        {
    65             init();
    66             if (serviceLocator.CheckLogin())
     64            ;
     65            if (init())
    6766            {
    6867                Guid curr = Guid.Parse(id);
    69                
    70                 UserViewModel vm = new UserViewModel(accessClient).refreshUsers();
     68
     69                UserViewModel vm = new UserViewModel(accessClient).refreshAll();
    7170                if (curr == Guid.Empty)
    7271                {
     
    7776                    vm.SelectedUser = vm.getUserById(curr);
    7877                    vm.SelectedUserSubscriptions = accessClient.getSubscribedGroups(curr);
     78                    vm.SelectedUserRoles = accessClient.getRoles(vm.SelectedUser);
    7979                    ViewBag.title = vm.SelectedUser.UserName;
    8080                }
     
    8989        }
    9090        [HttpPost]
    91         public IActionResult saveUser(string inpusername, string inpfullname, string inpemail, string u)
    92         {
    93             init();
    94             var uid = Guid.Parse(u);
    95             Access.User user;
    96             if (uid == Guid.Empty)
    97                 user = new Access.User();
    98             else
     91        public IActionResult saveUser(string inpusername, string inpfullname, string inpemail, string u, string[] rolestoadd, string[] groupstoadd)
     92        {
     93
     94            if (init())
     95            {
     96                var uid = Guid.Parse(u);
     97                Access.User user;
     98                if (uid == Guid.Empty)
     99                    user = new Access.User();
     100                else
     101                    user = accessClient.Users.Find(x => x.Id == uid);
     102
     103
     104                user.FullName = inpfullname;
     105                user.Email = inpemail;
     106
     107
     108                if (uid == Guid.Empty)
     109                {
     110                    user.UserName = inpusername;
     111                    uid = accessClient.addUser(user);
     112                    ViewBag.Title = user.UserName + " added - User";
     113                }
     114                else
     115                {
     116                    accessClient.updateUser(user);
     117                    ViewBag.Title = user.UserName + " updated - User";
     118                }
     119                accessClient.RefreshUsers();
    99120                user = accessClient.Users.Find(x => x.Id == uid);
    100 
    101            
    102             user.FullName = inpfullname;
    103             user.Email = inpemail;
    104 
    105 
    106             if (uid == Guid.Empty)
    107             {
    108                 user.UserName = inpusername;
    109                 uid = accessClient.addUser(user);
    110                 ViewBag.Title = user.UserName + " added - User";
    111             }
    112             else
    113             {
    114                 accessClient.updateUser(user);
    115                 ViewBag.Title = user.UserName + " updated - User";
    116             }
    117 
    118             return RedirectToAction( "SelectUser", new {  id =  uid.ToString()});
     121                foreach (var s in rolestoadd)
     122                {
     123                    var role = accessClient.Roles.Find(x => x.Name == s);
     124
     125                    accessClient.addRoleToUser(user, role);
     126                }
     127                accessClient.RefreshUserGroups();
     128                foreach(var g in groupstoadd)
     129                {
     130                    var gid = Guid.Parse(g);
     131                    var group = accessClient.Groups.Find(x => x.Id == gid);
     132                    accessClient.addMember(user, group);
     133                }
     134                return RedirectToAction("SelectUser", new { id = uid.ToString() });
     135            }
     136            else
     137            {
     138                return RedirectToAction("Index", "Home");
     139            }
    119140
    120141        }
    121142        public IActionResult deleteUser(string id)
    122143        {
    123             init();
    124             var uid = Guid.Parse(id);
    125             UserViewModel vm = new UserViewModel(accessClient).refreshUsers();
    126            
    127             if (uid == Guid.Empty)
    128             {
    129                 vm.message = "Something went wrong, user is not deleted";
    130                 return View("Index", vm);
    131             }
    132             else
    133             {
     144            if (init())
     145            {
     146                var uid = Guid.Parse(id);
     147                UserViewModel vm = new UserViewModel(accessClient).refreshUsers();
     148
     149                if (uid == Guid.Empty)
     150                {
     151                    vm.message = "Something went wrong, user is not deleted";
     152                    return View("Index", vm);
     153                }
     154                else
     155                {
     156                    var user = vm.getUserById(uid);
     157                    vm.message = user.UserName + " (" + user.FullName + ") has been deleted";
     158                    accessClient.DeleteUser(user);
     159                    vm.refreshAll();
     160                    ViewBag.Title = "Users";
     161                    return View("Index", vm);
     162                }
     163            }
     164            else
     165            {
     166                return RedirectToAction("Index", "Home");
     167            }
     168
     169        }
     170
     171        public IActionResult deleteUserRole(string id, string role)
     172        {
     173            if (init())
     174            {
     175                var uid = Guid.Parse(id);
     176                UserViewModel vm = new UserViewModel(accessClient).refreshAll();
     177
    134178                var user = vm.getUserById(uid);
    135                 vm.message = user.UserName + " ("+user.FullName+") has been deleted";
    136                 accessClient.DeleteUser(user);
    137                 vm.refreshUsers();
    138                 return View("Index", vm);
    139             }
    140 
    141         }
    142 
     179                var r = vm.getRoleByName(role);
     180                accessClient.deleteUserRole(user, r);
     181                return RedirectToAction("SelectUser", new { id = id });
     182            }
     183            else
     184            {
     185                return RedirectToAction("Index", "Home");
     186            }
     187        }
     188        public IActionResult deleteUserGroup(string id, string group)
     189        {
     190            if (init())
     191            {
     192                var gid = Guid.Parse(group);
     193                var mid = Guid.Parse(id);
     194                UserViewModel vm = new UserViewModel(accessClient).refreshGroups().refreshUsers();
     195
     196                var user = vm.getUserById(mid);
     197                var gr = vm.getGroupById(gid);
     198                accessClient.deleteMember(user, gr);
     199                return RedirectToAction("SelectUser", new { id = id});
     200            }
     201            else
     202            {
     203                return RedirectToAction("Index", "Home");
     204            }
     205
     206        }
    143207        #endregion
    144208
     
    146210        public IActionResult Groups()
    147211        {
    148             init();
    149             if (serviceLocator.CheckLogin())
     212            if (init())
    150213            {
    151214
     
    161224        public IActionResult SelectGroup(string id)
    162225        {
    163             init();
    164             if (serviceLocator.CheckLogin())
     226            if (init())
    165227            {
    166228                Guid curr = Guid.Parse(id);
     
    190252        public IActionResult saveGroup(string inpgroupname, string u, string[] userstoadd, string[] groupstoadd)
    191253        {
    192             init();
    193             var uid = Guid.Parse(u);
    194             var vm = new UserViewModel(accessClient).refreshGroups().refreshUsers();
    195 
    196             Access.UserGroup group;
    197            
    198             if (uid == Guid.Empty)
    199                 group = new Access.UserGroup();
    200             else
    201                 group = accessClient.Groups.Find(x => x.Id == uid);
    202 
    203             group.Name = inpgroupname;
    204 
    205             if (uid == Guid.Empty)
    206             {
    207                 uid = accessClient.addGroup(group);
    208                 ViewBag.Title = group.Name + " added - Group";
    209             }
    210             else
    211             {
    212                 accessClient.updateGroup(group);
    213                 ViewBag.Title = group.Name + " updated - Group";
    214             }
    215             vm.refreshGroups();
    216             group = vm.getGroupById(uid);
    217             foreach(var s in userstoadd)
    218             {
    219                 var tempid = Guid.Parse(s);
    220                 var member = vm.getUserById(tempid);
    221                 accessClient.addMember(member, group);
    222             }
    223             foreach (var g in groupstoadd)
    224             {
    225                 var tempid = Guid.Parse(g);
    226                 var member = vm.getGroupById(tempid);
    227                 accessClient.addMember(member, group);
    228             }
    229 
    230             return RedirectToAction("SelectGroup", new { id = uid.ToString() });
    231 
     254            if (init())
     255            {
     256                var uid = Guid.Parse(u);
     257                var vm = new UserViewModel(accessClient).refreshGroups().refreshUsers();
     258
     259                Access.UserGroup group;
     260
     261                if (uid == Guid.Empty)
     262                    group = new Access.UserGroup();
     263                else
     264                    group = accessClient.Groups.Find(x => x.Id == uid);
     265
     266                group.Name = inpgroupname;
     267
     268                if (uid == Guid.Empty)
     269                {
     270                    uid = accessClient.addGroup(group);
     271                    ViewBag.Title = group.Name + " added - Group";
     272                }
     273                else
     274                {
     275                    accessClient.updateGroup(group);
     276                    ViewBag.Title = group.Name + " updated - Group";
     277                }
     278                vm.refreshGroups();
     279                group = vm.getGroupById(uid);
     280                foreach (var s in userstoadd)
     281                {
     282                    var tempid = Guid.Parse(s);
     283                    var member = vm.getUserById(tempid);
     284                    accessClient.addMember(member, group);
     285                }
     286                foreach (var g in groupstoadd)
     287                {
     288                    var tempid = Guid.Parse(g);
     289                    var member = vm.getGroupById(tempid);
     290                    accessClient.addMember(member, group);
     291                }
     292
     293                return RedirectToAction("SelectGroup", new { id = uid.ToString() });
     294            }
     295            else
     296            {
     297                return RedirectToAction("Index", "Home");
     298            }
    232299        }
    233300        public IActionResult deleteGroup(string id)
    234301        {
    235             init();
    236             var uid = Guid.Parse(id);
    237             UserViewModel vm = new UserViewModel(accessClient).refreshGroups();
    238 
    239             if (uid == Guid.Empty)
    240             {
    241                 vm.message = "Something went wrong, group is not deleted";
    242                 return View("Groups", vm);
    243             }
    244             else
    245             {
    246                 var group = vm.getGroupById(uid);
    247                 vm.message = group.Name + " has been deleted";
    248                 accessClient.deleteUserGroup(group);
    249                 vm.refreshGroups();
    250                 return View("Groups", vm);
     302            if (init())
     303            {
     304                var uid = Guid.Parse(id);
     305                UserViewModel vm = new UserViewModel(accessClient).refreshGroups();
     306
     307                if (uid == Guid.Empty)
     308                {
     309                    vm.message = "Something went wrong, group is not deleted";
     310                    return View("Groups", vm);
     311                }
     312                else
     313                {
     314                    var group = vm.getGroupById(uid);
     315                    vm.message = group.Name + " has been deleted";
     316                    accessClient.deleteUserGroup(group);
     317                    vm.refreshGroups();
     318                    return View("Groups", vm);
     319                }
     320            }
     321            else
     322            {
     323                return RedirectToAction("Index", "Home");
    251324            }
    252325
     
    254327        public IActionResult deleteMember(string g, string m)
    255328        {
    256             init();
    257             var gid = Guid.Parse(g);
    258             var mid = Guid.Parse(m);
    259             UserViewModel vm = new UserViewModel(accessClient).refreshGroups().refreshUsers() ;
    260 
    261             if (gid == Guid.Empty || mid == Guid.Empty)
    262             {
    263                 vm.message = "Something went wrong, member is not deleted";
    264                 return View("Groups", vm);
    265             }
    266             else
    267             {
    268                 var group = vm.getGroupById(gid);
    269                 Access.UserGroupBase member = vm.getUserById(mid);
    270                 if(member == null)
    271                 {
    272                     member = vm.getGroupById(mid);
    273                 }
    274                 vm.message = " Member deleted";
    275                 accessClient.deleteMember(member,group);
    276                 vm.refreshGroups();
    277                 return RedirectToAction("SelectGroup", new { id = g });
     329            if (init())
     330            {
     331                var gid = Guid.Parse(g);
     332                var mid = Guid.Parse(m);
     333                UserViewModel vm = new UserViewModel(accessClient).refreshGroups().refreshUsers();
     334
     335                if (gid == Guid.Empty || mid == Guid.Empty)
     336                {
     337                    vm.message = "Something went wrong, member is not deleted";
     338                    return View("Groups", vm);
     339                }
     340                else
     341                {
     342                    var group = vm.getGroupById(gid);
     343                    Access.UserGroupBase member = vm.getUserById(mid);
     344                    if (member == null)
     345                    {
     346                        member = vm.getGroupById(mid);
     347                    }
     348                    vm.message = " Member deleted";
     349                    accessClient.deleteMember(member, group);
     350                    vm.refreshGroups();
     351                    return RedirectToAction("SelectGroup", new { id = g });
     352                }
     353            }
     354            else
     355            {
     356                return RedirectToAction("Index", "Home");
    278357            }
    279358
     
    284363        public IActionResult Roles()
    285364        {
    286             init();
    287             if (serviceLocator.CheckLogin())
     365            if (init())
    288366            {
    289367
    290368                ViewBag.Title = "Roles";
    291                 // accessClient.RefreshUsers();
    292 
    293                 return View("Roles");
     369                UserViewModel vm = new UserViewModel(accessClient).refreshRoles();
     370
     371                return View("Roles", vm);
     372            }
     373            else
     374            {
     375                return RedirectToAction("Index", "Home");
     376            }
     377        }
     378        public IActionResult SelectRole(string name)
     379        {
     380            if (init())
     381            {
     382
     383                UserViewModel vm = new UserViewModel(accessClient).refreshRoles();
     384                if (name == "" || name == null)
     385                {
     386                    ViewBag.Title = "Add Role";
     387                }
     388                else
     389                {
     390                    vm.SelectedRole = vm.getRoleByName(name);
     391                    vm.SelectedRoleEnrolled = accessClient.getEnrolled(vm.SelectedRole);
     392
     393                    ViewBag.title = vm.SelectedRole.Name;
     394                }
     395                ViewBag.Title += " - Roles";
     396                return View("Roles", vm);
     397            }
     398            else
     399            {
     400                return RedirectToAction("Index", "Home");
     401            }
     402        }
     403        [HttpPost]
     404        public IActionResult saveRole(string inprolename)
     405        {
     406            if (init())
     407            {
     408                Access.Role role = accessClient.Roles.Find(x => x.Name == inprolename);
     409                if (role == null)
     410                {
     411                    role = new Access.Role();
     412                    role.Name = inprolename;
     413                    accessClient.addRole(role);
     414                }
     415
     416                accessClient.RefreshRoles();
     417                return RedirectToAction("SelectRole", new { name = inprolename });
     418            }
     419            else
     420            {
     421                return RedirectToAction("Index", "Home");
     422            }
     423        }
     424        public IActionResult deleteRole(string name)
     425        {
     426            if (init())
     427            {
     428                accessClient.deleteRole(name);
     429                return RedirectToAction("Roles");
     430            }
     431            else
     432            {
     433                return RedirectToAction("Index", "Home");
     434            }
     435        }
     436        public IActionResult deleteRoleUser(string id, string role)
     437        {
     438            if (init())
     439            {
     440                var uid = Guid.Parse(id);
     441                UserViewModel vm = new UserViewModel(accessClient).refreshAll();
     442
     443                var user = vm.getUserById(uid);
     444                var r = vm.getRoleByName(role);
     445                vm.message = role + " role has been deleted from " + user.FullName;
     446                accessClient.deleteUserRole(user, r);
     447                return RedirectToAction("SelectRole", new { name = role });
    294448            }
    295449            else
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/HeuristicLab.Clients.Hive.WebJobManager.xproj.user

    r13656 r13754  
    33  <PropertyGroup>
    44    <ActiveDebugProfile>web</ActiveDebugProfile>
     5    <ShowAllFiles>true</ShowAllFiles>
    56  </PropertyGroup>
    67  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/AccessAdministrationClient.cs

    r13742 r13754  
    251251             CallAccessService(s => s.UpdateUser(u));
    252252        }
     253        public List<Role> getRoles(User u)
     254        {
     255            return CallAccessService(s => s.GetUserRoles(u));
     256        }
     257        public void addRoleToUser(User u, Role r)
     258        {
     259            CallAccessService(s => s.AddUserToRole(r, u));
     260        }
     261        public void deleteUserRole(User u, Role r)
     262        {
     263            CallAccessService(s => s.RemoveUserFromRole(r, u));
     264        }
    253265        #endregion
    254266
     
    331343        }
    332344        #endregion
     345
     346        #region Roles
     347        public Role addRole(Access.Role r)
     348        {
     349            return CallAccessService(s => s.AddRole(r));
     350        }
     351        public void deleteRole(string name)
     352        {
     353            Role r = Roles.Find(x => x.Name == name);
     354            CallAccessService(s => s.DeleteRole(r));
     355        }
     356
     357        public List<UserGroupBase> getEnrolled(Role r)
     358        {
     359            var enroll = new List<UserGroupBase>();
     360            RefreshUsers();
     361            foreach(var us in users)
     362            {
     363                var temp = CallAccessService(s => s.GetUserRoles(us));
     364                if (temp.Contains(r))
     365                    enroll.Add(us);               
     366            }
     367
     368            return enroll;
     369        }
     370        #endregion
     371
    333372
    334373        #region Helpers
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/WebLoginService.cs

    r13740 r13754  
    2121        private List<FileOpeningService> fileopeners;
    2222        private List<AccessAdministrationClient> accessclients;
     23        private List<HiveAdminClientWeb> adminclients;
    2324        /// <summary>
    2425        /// Service instance that keeps all the information per user seperated. Data is in  different lists so
     
    4748            fileopeners = new List<FileOpeningService>();
    4849            accessclients = new List<AccessAdministrationClient>();
     50            adminclients = new List<HiveAdminClientWeb>();
    4951        }
    5052        /// <summary>
     
    6971            var temp3 = new AccessAdministrationClient(log.userId);
    7072            accessclients.Add(temp3);
     73            var temp4 = new HiveAdminClientWeb(log.userId);
     74            adminclients.Add(temp4);
    7175        }
    7276        /// <summary>
     
    124128            return accessclients.Find(x => x.userId == id);
    125129        }
     130        public HiveAdminClientWeb getAdminClient(Guid id)
     131        {
     132            return adminclients.Find(x => x.userId == id);
     133        }
    126134        /// <summary>
    127135        /// Removes all traces from the logged in user.
     
    135143            fileopeners.RemoveAll(x => x.UserId == id);
    136144            accessclients.RemoveAll(x => x.userId == id);
     145            adminclients.RemoveAll(x => x.userId == id);
    137146            loggedIn.RemoveAll(x => x.userId == id);
     147
    138148        }
    139149    }
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/ViewModels/User/UserViewModel.cs

    r13742 r13754  
    1818        public Access.User SelectedUser { get; set; }
    1919        public List<Access.UserGroup> SelectedUserSubscriptions { get; set; }
     20        public List<Access.Role> SelectedUserRoles { get; set; }
    2021        public Access.UserGroup SelectedGroup { get; set; }
    2122        public List<Access.UserGroupBase> SelectedGroupMembers { get; set; }
     23        public Access.Role SelectedRole { get; set; }
     24        public List<Access.UserGroupBase> SelectedRoleEnrolled { get; set; }
    2225
    2326        public UserViewModel(AccessAdministrationClient ac)
     
    2528            users = new List<Access.User>();
    2629            accessClient = ac;
     30
    2731            SelectedUser = new Access.User();
    2832            SelectedGroup = new Access.UserGroup();
     33            SelectedRole = new Access.Role();
     34            SelectedRole.Name = "";
     35
    2936            SelectedUserSubscriptions = new List<Access.UserGroup>();
     37            SelectedUserRoles = new List<Access.Role>();
    3038            SelectedGroupMembers = new List<Access.UserGroupBase>();
    3139           
    3240           
     41        }
     42        public UserViewModel refreshAll()
     43        {
     44            refreshUsers();
     45            refreshGroups();
     46            refreshRoles();
     47            return this;
    3348        }
    3449        public UserViewModel refreshUsers()
     
    5873            return ugroups.Find(x => x.Id == id);
    5974        }
     75        public Access.Role getRoleByName(string name)
     76        {
     77            return roles.Find(x => x.Name == name);
     78        }
    6079    }
    6180}
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Job/Index.cshtml

    r13742 r13754  
    135135
    136136                        </div>
    137                         <script src="~/js/scripts/graphs/graphdatacollector.min.js"></script>
    138                         <script src="~/js/scripts/graphs/graphhubber.min.js"></script>
     137                        <script src="~/js/hubs/graphhubber.js"></script>
    139138                        <div class="row" style="text-align:center">
    140139                            @Html.Partial("_Graphlegend")
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Job/OpenFile.cshtml

    r13742 r13754  
    181181    </nav>
    182182
    183     <script src="~/js/scripts/hubber.min.js"></script>
     183    <script src="~/js/hubs/progresshubber.js"></script>
    184184   
    185185    <script>
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Job/OpenFilePartials/_Algorithm.cshtml

    r13735 r13754  
    99    </div>
    1010    <div class="row" style="text-align:center">
    11         <h1 data-toggle="tooltip" title="@Model.SelectedTask.ItemTask.ItemName
    12             @Model.SelectedTask.ItemTask.Description">
     11        <h1>
    1312            <span class="label label-primary">Algorithm: @Model.SelectedTask.ItemTask.Name</span>
    1413        </h1>
     
    7170    </div>
    7271   
    73    
    74     <script type="text/javascript">
    75         $(document).ready(function () {
    76             $('[data-toggle="tooltip"]').tooltip();
    77         });
    78     </script>
    7972
    8073</div>
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Job/OpenFilePartials/_BatchRun.cshtml

    r13735 r13754  
    99         style="text-align:center">
    1010        <h1
    11             data-toggle="tooltip"
    12             title="@Model.SelectedTask.ItemTask.ItemName
    13             @Model.SelectedTask.ItemTask.Description ">
     11            >
    1412            <span class="label label-warning "
    1513                  style="text-shadow:2px 2px black;">
     
    6664        }
    6765    </div>
    68 
    69     <script type="text/javascript">
    70 
    71         $(document).ready(function () {
    72             $('[data-toggle="tooltip"]').tooltip();
    73         });
    74     </script>
    7566</div>
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Job/OpenFilePartials/_Experiment.cshtml

    r13735 r13754  
    1010    <div class="row" style="text-align:center">
    1111        <h1
    12             data-toggle="tooltip"
    13             title=" @Model.SelectedTask.ItemTask.ItemName
    14             @Model.SelectedTask.ItemTask.Description ">
     12            >
    1513            <span class="label label-danger"
    1614                  style="text-shadow:2px 2px black;">
     
    6563        }
    6664    </div>
    67 
    68     <script type="text/javascript">
    69 
    70         $(document).ready(function () {
    71             $('[data-toggle="tooltip"]').tooltip();
    72         });
    73     </script>
    7465</div>
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Resource/Index.cshtml

    r13733 r13754  
    11
    2 <div>
     2<div ng-app="wjm" ng-controller="resourceCtrl" data-ng-init="init()">
     3    <div id="userId" style="display:none">@ViewBag.SessionId</div>
    34
    45    @Html.Partial("Navbar", new HeuristicLab.Clients.Hive.WebJobManager.ViewModels.NavbarViewModel("Resource"))
    56
     7    <p>Alert: {{alertMessage}} {{treeview.currentNode.Name}}</p>
    68
     9    <div class="col-sm-4">
     10        <div data-angular-treeview="true"
     11             data-tree-id="treeview"
     12             data-tree-model="tree"
     13             data-node-id="Id"
     14             data-node-label="Name"
     15             data-node-children="children">
     16        </div>
     17    </div>
     18    <div ng-if="treeview.currentNode" class="col-sm-8 panel  panel-primary">
     19        <div  class="row panel-heading" >
     20            <h3>{{treeview.currentNode.Name}} <span ng-if="treeview.currentNode.IsDisposable === undefined"> - Client group</span></h3>
     21            <table class="table">
     22                <tbody>
     23                    <tr>
     24                        <td>Heartbeat</td>
     25                        <td>Every {{treeview.currentNode.HbInterval}} sec
     26                         <span ng-if="treeview.currentNode.IsDisposable !== undefined">
     27                              - Last beat {{treeview.currentNode.LastHeartbeat | date:'HH:mm dd/MM/yyyy' }}
     28                            </span>
     29                        </td>
     30                    </tr>
     31                    <tr>
     32                        <td>Name</td>
     33                        <td>{{treeview.currentNode.Name}}</td>
     34                    </tr>
     35                    <tr>
     36                        <td>Id</td>
     37                        <td>{{treeview.currentNode.Id}}</td>
     38                    </tr>
     39                    <tr>
     40                        <td>Disposable</td>
     41                        <td><input type="checkbox" ng-checked="treeview.currentNode.IsDisposable" /></td>
     42                    </tr>
     43                </tbody>
     44                <tbody ng-if="treeview.currentNode.IsDisposable !== undefined">
     45                    <tr>
     46                        <td>Cores (free/total)</td>
     47                        <td>{{treeview.currentNode.FreeCores}} | {{treeview.currentNode.Cores}}</td>
     48                       
     49                       
     50                    </tr>
     51                    <tr>
     52                        <td>Memory (free/total)</td>
     53                        <td>{{treeview.currentNode.FreeMemory}} MB | {{treeview.currentNode.Memory}} MB</td>
     54                    </tr>
     55 
     56                </tbody>
     57            </table>
     58        </div>
     59        <div class="panel-body row" style="text-align:center">
     60            <i ng-if="currentcal.length  === 0" class="fa fa-cog fa-5x fa-spin" ></i>
     61            <div ng-if="currentcal.length != 0"
     62                 ui-calendar="uiConfig.calendar"
     63                 id="resourcecalendar"
     64                 class="span8 calendar"
     65                 ng-model="currentcal.down"></div>
     66        </div>
     67       
     68        <div class="row panel-footer">
     69
     70        </div>
     71    </div>
     72    <script src="~/js/hubs/calendarhubber.js"></script>
    773</div>
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/Shared/_Layout.cshtml

    r13740 r13754  
    44<head>
    55    <meta name="viewport" content="width=device-width" />
    6     <title>@ViewBag.Title - Heuristic Lab Hive WJM</title>
    7     <environment names="Development">
    8         <link asp-href-include="~/css/*.css" rel="stylesheet"/>
    9     </environment>
    10     <environment names="Staging, Production">
    11         <link href="~/css/min/site.min.css" rel="stylesheet" />
    12     </environment>
     6    <title>@ViewBag.Title - HeuristicLab HiveWeb</title>
     7
     8    <link href="~/css/site.min.css" rel="stylesheet" />
     9
    1310    <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.0/css/bootstrap-toggle.min.css" rel="stylesheet">
    1411    <link rel="shortcut icon" type="image/x-icon" href="~/favicon.ico" />
    1512    <link rel="stylesheet" href="//rawgithub.com/Caged/d3-tip/master/examples/example-styles.css">
    1613</head>
    17 <body >
     14<body>
    1815    <div>
    1916        <nav class="navbar navbar-default navbar-static-top"
    2017             role="navigation" style="margin-bottom: 0">
    21             <div class="navbar-header" >
    22                 <img alt="Heuristic Lab Hive" src="~/img/HeuristicLabBanner.png" style="margin-bottom:15px; margin-top:15px"/>
     18            <div class="navbar-header">
     19                <img alt="Heuristic Lab Hive" src="~/img/HeuristicLabBanner.png" style="margin-bottom:15px; margin-top:15px" />
    2320            </div>
    2421        </nav>
    2522
    26         <script src="~/js/jquery-2.1.1.min.js"></script>
    27         <script src="~/js/bootstrap.min.js"></script>
    28         <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.0/js/bootstrap-toggle.min.js"></script>
    29         <script src="~/js/jquery.signalr-2.1.2.min.js"></script>
     23        <script src="~/js/app.js"></script>
    3024        <script src='~/signalr/js'></script>
    31         <script src="~/js/plotly.min.js"></script>
    32         <script src="~/js/d3.v3.min.js"></script>
    33         <script src="~/js/d3-gantt-jobstatus.js"></script>
    34         <script src="~/js/d3-tip.min.js"></script>
     25
    3526        @RenderBody()
    3627    </div>
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/User/Groups.cshtml

    r13742 r13754  
    2626            <a asp-controller="User"
    2727               asp-action="Roles">
    28                 <i class="fa fa-sitemap"></i> Roles
     28                <i class="fa fa-gavel"></i> Roles
    2929            </a>
    3030        </li>
     
    129129                            </div>
    130130
    131                             <div class="form-group">
    132                                 <label class="col-sm-3 control-label">
    133                                     Group id
    134                                 </label>
    135                                 <label class="col-sm-8 control-label" style="text-align:left">
    136                                     @Model.SelectedGroup.Id
    137                                 </label>
    138                                 <input type="text"
    139                                        style="display:none"
    140                                        id="u"
    141                                        name="u"
    142                                        value="@Model.SelectedGroup.Id" />
    143                             </div>
     131
    144132                            @if (Model.SelectedGroup.Id != Guid.Empty)
    145133                            {
    146                                 <div style="padding-left:20px">
    147                                     <h3>@Model.SelectedGroupMembers.Count Member@(Model.SelectedGroupMembers.Count != 1 ? "s" : "")</h3>
    148                                     @foreach (var member in Model.SelectedGroupMembers)
    149                                     {
    150                                         <p>
    151                                             <a class="btn btn-danger"
    152                                                asp-controller="User"
    153                                                asp-action="deleteMember"
    154                                                asp-route-g="@Model.SelectedGroup.Id"
    155                                                asp-route-m="@member.Id"
    156                                                onclick="showDeleter()">
    157                                                 <i class="fa fa-trash-o"></i>
    158                                             </a>
    159                                             @if (member is User)
    160                                             {
    161                                                 var umember = (User)member;
    162                                                 <i class="fa fa-user"></i> @(umember.UserName + "(" + umember.FullName + ")")
    163 
    164 
    165                                             }
    166                                             else if (member is UserGroup)
    167                                             {
    168                                                 var gmember = (UserGroup)member;
    169                                                 <i class="fa fa-group"></i> @(gmember.Name)
    170 
    171                                             }
    172 
    173                                         </p>
    174                                     }
    175                                     @if (Model.SelectedGroupMembers.Count == 0)
    176                                     {
    177                                         <p>This group currently has no members</p>
    178 
    179                                     }
     134                                <div class="form-group">
     135                                    <label class="col-sm-3 control-label">
     136                                        Group id
     137                                    </label>
     138                                    <label class="col-sm-8 control-label" style="text-align:left">
     139                                        @Model.SelectedGroup.Id
     140                                    </label>
     141                                    <input type="text"
     142                                           style="display:none"
     143                                           id="u"
     144                                           name="u"
     145                                           value="@Model.SelectedGroup.Id" />
     146                                </div>
     147                                <div class="form-group">
     148                                    <label class="col-sm-3 control-label">
     149                                        Members
     150                                    </label>
     151                                    <div class="col-sm-8 control-label" >
     152
     153                                        @foreach (var member in Model.SelectedGroupMembers)
     154                                        {
     155                                            <div class="row">
     156                                                <p class="col-sm-10" style="text-align:left">
     157
     158                                                    @if (member is User)
     159                                                    {
     160                                                        var umember = (User)member;
     161                                                        <i class="fa fa-user"></i> @(umember.UserName + "(" + umember.FullName + ")")
     162
     163
     164                                                    }
     165                                                    else if (member is UserGroup)
     166                                                    {
     167                                                        var gmember = (UserGroup)member;
     168                                                        <i class="fa fa-group"></i> @(gmember.Name)
     169
     170                                                    }
     171
     172                                                </p>
     173                                                <p class="col-sm-2">
     174                                                    <a class="btn btn-danger"
     175                                                       asp-controller="User"
     176                                                       asp-action="deleteMember"
     177                                                       asp-route-g="@Model.SelectedGroup.Id"
     178                                                       asp-route-m="@member.Id"
     179                                                       onclick="showDeleter()">
     180                                                        <i class="fa fa-trash-o"></i>
     181                                                    </a>
     182                                                </p>
     183                                            </div>
     184                                        }
     185                                        @if (Model.SelectedGroupMembers.Count == 0)
     186                                        {
     187                                            <p style="text-align:left">This group currently has no members</p>
     188
     189                                        }
     190                                    </div>
    180191                                </div>
    181192                            }
     
    196207                                            <p>
    197208                                                <i class="fa fa-user"></i> Users
    198                                                 <button class="btn btn-sm btn-default" 
     209                                                <button class="btn btn-sm btn-default"
    199210                                                        type="button"
    200                                                         onclick="selectAll('userstoadd'); triggerSave()">Select all</button>
     211                                                        onclick="selectAll('userstoadd'); triggerSave()">
     212                                                    Select all
     213                                                </button>
    201214                                                <button class="btn btn-sm btn-default"
    202                                                          type="button"
    203                                                         onclick="deselectAll('userstoadd'); triggerSave()">Deselect all</button>
     215                                                        type="button"
     216                                                        onclick="deselectAll('userstoadd'); triggerSave()">
     217                                                    Deselect all
     218                                                </button>
    204219                                            </p>
    205220                                        </div>
     
    223238                                    <div class="panel panel-primary col-sm-6" style="padding:0px">
    224239                                        <div class="panel-heading">
    225                                             <p><i class="fa fa-group"></i> Groups
    226                                            
     240                                            <p>
     241                                                <i class="fa fa-group"></i> Groups
     242
    227243                                                <button class="btn btn-sm btn-default"
    228244                                                        type="button"
     
    234250                                                        onclick="deselectAll('groupstoadd'); triggerSave()">
    235251                                                    Deselect all
    236                                                 </button> 
     252                                                </button>
    237253                                            </p>
    238254                                        </div>
     
    244260                                                        <input type="checkbox"
    245261                                                               name="groupstoadd"
    246                                                                @(Model.SelectedGroupMembers.Contains(group) ? "checked disabled" : "")
     262                                                               @(Model.SelectedGroupMembers.Contains(group) ||
     263                                                                    Model.SelectedGroup.Id == group.Id ? "checked disabled" : "")
    247264                                                               value="@group.Id"
    248265                                                               onclick="triggerSave()">
    249                                                         @group.Name
     266                                                        @group.Name @( Model.SelectedGroup.Id == group.Id ? "(selected group)" : "")
    250267                                                    </label>
    251268                                                </div>
     
    338355        function selectAll(name) {
    339356            checkboxes = document.getElementsByName(name);
    340             for(var i=0, n=checkboxes.length;i<n;i++) {
     357            for (var i = 0, n = checkboxes.length; i < n; i++) {
    341358                checkboxes[i].checked = true;
    342359            }
     
    345362            checkboxes = document.getElementsByName(name);
    346363            for (var i = 0, n = checkboxes.length; i < n; i++) {
    347                 if(checkboxes[i].disabled == false)
    348                 checkboxes[i].checked = false;
     364                if (checkboxes[i].disabled == false)
     365                    checkboxes[i].checked = false;
    349366            }
    350367        }
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/User/Index.cshtml

    r13742 r13754  
    2525            <a asp-controller="User"
    2626               asp-action="Roles">
    27                 <i class="fa fa-sitemap"></i> Roles
     27                <i class="fa fa-gavel"></i> Roles
    2828            </a>
    2929        </li>
     
    101101                 id="content"
    102102                 style="padding:5px; padding-left:10px;">
    103                 @if (Model.SelectedUser != null)
    104                 {
    105                     <div class="panel panel-default"
    106                          style="border-width:2px!important;padding:17px;
     103                <div class="panel panel-default"
     104                     style="border-width:2px!important;padding:17px;
    107105                        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);">
    108                         <div class="row">
    109                             <h2 style="padding-left:20px">
     106                    <div class="row">
     107                        <h2 style="padding-left:20px">
     108                            @if (Model.SelectedUser.Id != Guid.Empty)
     109                            {
     110                                <i class="fa fa-user "></i> @Model.SelectedUser.UserName;
     111                            }
     112                            else
     113                            {
     114                                <i class="fa fa-user-plus "></i> @("Add new user")
     115
     116                            }
     117                        </h2>
     118                        <form class="form-horizontal"
     119                              method="post"
     120                              asp-action="saveUser"
     121                              asp-controller="User"
     122                              enctype="multipart/form-data"
     123                              onsubmit="showSaver()">
     124                            <div class="form-group" style="@(Model.SelectedUser.Id == Guid.Empty ? "" : "display:none")">
     125                                <label for="inpusername"
     126                                       class="col-sm-3 control-label">
     127                                    Username
     128                                </label>
     129                                <div class="col-sm-8">
     130                                    <input type="text"
     131                                           class="form-control"
     132                                           id="inpusername"
     133                                           name="inpusername"
     134                                           placeholder="Username"
     135                                           onkeydown="triggerSave()"
     136                                           value="@Model.SelectedUser.UserName">
     137                                </div>
     138                            </div>
     139                            <div class="form-group">
     140                                <label for="inpfullname"
     141                                       class="col-sm-3 control-label">
     142                                    Full name
     143                                </label>
     144                                <div class="col-sm-8">
     145                                    <input type="text"
     146                                           class="form-control"
     147                                           id="inpfullname"
     148                                           name="inpfullname"
     149                                           placeholder="Full name"
     150                                           onkeydown="triggerSave()"
     151                                           value="@Model.SelectedUser.FullName">
     152                                </div>
     153                            </div>
     154                            <div class="form-group">
     155                                <label for="inpemail"
     156                                       class="col-sm-3 control-label">
     157                                    Email
     158                                </label>
     159                                <div class="col-sm-8">
     160                                    <input type="email"
     161                                           class="form-control"
     162                                           id="inpemail"
     163                                           name="inpemail"
     164                                           placeholder="Email"
     165                                           onkeydown="triggerSave()"
     166                                           value="@Model.SelectedUser.Email">
     167                                </div>
     168                            </div>
     169                            <input type="text"
     170                                   style="display:none"
     171                                   id="u"
     172                                   name="u"
     173                                   value="@Model.SelectedUser.Id" />
     174                            @if (Model.SelectedUser.Id != Guid.Empty)
     175                            {
     176                                <div class="form-group">
     177                                    <label class="col-sm-3 control-label">
     178                                        User id
     179                                    </label>
     180                                    <label class="col-sm-8 control-label" style="text-align:left">
     181                                        @Model.SelectedUser.Id
     182                                    </label>
     183                                   
     184                                </div>
     185                                <div class="form-group">
     186                                    <label class="col-sm-3 control-label">
     187                                        User created
     188                                    </label>
     189                                    <label class="col-sm-8 control-label" style="text-align:left">
     190                                        @Model.SelectedUser.CreationDate.AddHours(2).ToString();
     191                                    </label>
     192                                </div>
     193                                <div class="form-group">
     194                                    <label class="col-sm-3 control-label">
     195                                        Last activity
     196                                    </label>
     197                                    <label class="col-sm-8 control-label" style="text-align:left">
     198                                        @Model.SelectedUser.LastActivityDate.AddHours(2).ToString()
     199                                    </label>
     200                                </div>
     201                                <div class="form-group">
     202                                    <label class="col-sm-3 control-label">
     203                                        Password
     204                                    </label>
     205                                    <div id="inppassreset" class="col-sm-8">
     206                                        Last change: @Model.SelectedUser.LastPasswordChangedDate.ToShortDateString()
     207                                        <button type="button"
     208                                                onclick="resetPass('@(Model.SelectedUser.Id)')"
     209                                                class="btn btn-default">
     210                                            <i class="fa fa-unlock"></i> Reset password
     211                                        </button>
     212                                    </div>
     213                                </div>
     214
     215                                <div class="form-group">
     216                                    <label class="col-sm-3 control-label">
     217                                        Member of
     218                                    </label>
     219                                    <div class="col-sm-8 control-label" style="text-align:left">
     220                                        @if (Model.SelectedUserSubscriptions.Count > 0)
     221                                        {
     222                                            @foreach (var g in Model.SelectedUserSubscriptions)
     223                                            {
     224                                                <div class="row">
     225                                                    <p class="col-sm-10"><i class="fa fa-group"></i> @g.Name</p>
     226                                                    <p class="col-sm-2">
     227                                                        <a class="btn btn-danger pull-right"
     228                                                           asp-controller="User"
     229                                                           asp-action="deleteUserGroup"
     230                                                           asp-route-id="@Model.SelectedUser.Id"
     231                                                           asp-route-group="@g.Id"
     232                                                           onclick="showDeleter()">
     233                                                            <i class="fa fa-trash-o"></i>
     234                                                        </a>
     235                                                    </p>
     236                                                </div>
     237                                            }
     238                                        }
     239                                        else
     240                                        {
     241                                            <p>Not a member of any groups</p>
     242                                        }
     243                                    </div>
     244                                </div>
     245                            }
     246
     247                            <div class="row" style="margin-left:10px;margin-right:10px;margin-top:-10px">
     248                                <a class="btn btn-primary col-sm-3"
     249                                   data-toggle="collapse"
     250                                   href="#addgroups"
     251                                   aria-expanded="false"
     252                                   aria-controls="addgroups"
     253                                   style="margin:10px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
     254                            text-shadow:2px 2px black;">
     255                                    @(Model.SelectedUser.Id == Guid.Empty ? "Set groups" : "Add groups")
     256                                </a>
     257                                <div class="collapse col-sm-12"
     258                                     id="addgroups">
     259                                    <div class="panel panel-primary" style="padding:0px">
     260                                        <div class="panel-heading">
     261                                            <p>
     262                                                <i class="fa fa-group"></i> Groups
     263                                            </p>
     264                                        </div>
     265                                        <div class="panel-body">
     266                                            @foreach (var group in Model.ugroups)
     267                                            {
     268                                                <div class="checkbox">
     269                                                    <label>
     270                                                        <input type="checkbox"
     271                                                               name="groupstoadd"
     272                                                               @(Model.SelectedUserSubscriptions.Contains(group) ? "checked disabled" : "")
     273                                                               value="@group.Id"
     274                                                               onclick="triggerSave()">
     275                                                        @group.Name
     276                                                    </label>
     277                                                </div>
     278
     279                                            }
     280                                        </div>
     281                                    </div>
     282                                </div>
     283                            </div>
     284
     285                            @if (Model.SelectedUser.Id != Guid.Empty)
     286                            {
     287                                <div class="form-group">
     288                                    <label class="col-sm-3 control-label">
     289                                        Roles
     290                                    </label>
     291                                    <div class="col-sm-8 control-label" style="text-align:left">
     292                                        @if (Model.SelectedUserRoles.Count > 0)
     293                                        {
     294                                            @foreach (var r in Model.SelectedUserRoles)
     295                                            {
     296                                                <div class="row">
     297                                                   
     298                                                    <p class="col-sm-10"><i class="fa fa-gavel"></i> @r.Name</p>
     299                                                    <p class="col-sm-2">
     300                                                        <a class="btn btn-danger pull-right"
     301                                                           asp-controller="User"
     302                                                           asp-action="deleteUserRole"
     303                                                           asp-route-id="@Model.SelectedUser.Id"
     304                                                           asp-route-role="@r.Name"
     305                                                           onclick="showDeleter()">
     306                                                            <i class="fa fa-trash-o"></i>
     307                                                        </a>
     308                                                    </p>
     309                                                </div>
     310                                            }
     311                                        }
     312                                        else
     313                                        {
     314                                            <p>User has no roles</p>
     315                                        }
     316                                    </div>
     317                                </div>
     318                            }
     319                            <div class="row" style="margin-left:10px;margin-right:10px;">
     320                                <a class="btn btn-primary col-sm-3"
     321                                   data-toggle="collapse"
     322                                   href="#addroles"
     323                                   aria-expanded="false"
     324                                   aria-controls="addroles"
     325                                   style="margin:10px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
     326                            text-shadow:2px 2px black;">
     327                                    @(Model.SelectedUser.Id == Guid.Empty ? "Set roles" : "Add roles")
     328                                </a>
     329                                <div class="collapse col-sm-12"
     330                                     id="addroles">
     331                                    <div class="panel panel-primary" style="padding:0px">
     332                                        <div class="panel-heading">
     333                                            <p>
     334                                                <i class="fa fa-gavel"></i> Roles
     335                                            </p>
     336                                        </div>
     337                                        <div class="panel-body">
     338                                            @foreach (var role in Model.roles)
     339                                            {
     340                                                <div class="checkbox">
     341                                                    <label>
     342                                                        <input type="checkbox"
     343                                                               name="rolestoadd"
     344                                                               @(Model.SelectedUserRoles.Contains(role) ? "checked disabled" : "")
     345                                                               value="@role.Name"
     346                                                               onclick="triggerSave()">
     347                                                        @role.Name
     348                                                    </label>
     349                                                </div>
     350
     351                                            }
     352                                        </div>
     353                                    </div>
     354                                </div>
     355                            </div>
     356                            <div class="form-group">
     357                                <div class="col-sm-offset-3 col-sm-3">
     358                                    <button type="submit"
     359                                            id="inpsaver"
     360                                            disabled
     361                                            class="btn btn-default"
     362                                            >
     363                                        <i class="fa fa-save"></i>
     364                                        @(Model.SelectedUser.Id != Guid.Empty ? "Save changes" : "Add user")
     365                                    </button>
     366                                </div>
    110367                                @if (Model.SelectedUser.Id != Guid.Empty)
    111368                                {
    112                                     <i class="fa fa-user "></i> @Model.SelectedUser.UserName;
     369                                    <div class="col-sm-5">
     370                                        <a class="btn btn-danger pull-right"
     371                                           asp-controller="User"
     372                                           asp-action="deleteUser"
     373                                           asp-route-id="@Model.SelectedUser.Id"
     374                                           onclick="showDeleter()">
     375                                            <i class="fa fa-trash-o"></i> Delete user
     376                                        </a>
     377                                    </div>
    113378                                }
    114                                 else
    115                                 {
    116                                     <i class="fa fa-user-plus "></i> @("Add new user")
     379                            </div>
     380
     381
     382
     383
     384                            <script type="text/javascript">
     385                                function triggerSave() {
     386                                    if ($("#inpfullname").val() != "" &&
     387                            $("#inpemail").val() != "") {
     388                                        document.getElementById("inpsaver").className = "btn btn-lg btn-success";
     389                                        document.getElementById("inpsaver").disabled = false;
     390                                    }
     391                                    else {
     392                                        document.getElementById("inpsaver").className = "btn btn-default";
     393                                        document.getElementById("inpsaver").disabled = true;
     394
     395                                    }
    117396
    118397                                }
    119                             </h2>
    120                             <form class="form-horizontal"
    121                                   method="post"
    122                                   asp-action="saveUser"
    123                                   asp-controller="User" enctype="multipart/form-data">
    124                                 <div class="form-group" style="@(Model.SelectedUser.Id == Guid.Empty ? "" : "display:none")">
    125                                     <label for="inpusername"
    126                                            class="col-sm-3 control-label">
    127                                         Username
    128                                     </label>
    129                                     <div class="col-sm-8">
    130                                         <input type="text"
    131                                                class="form-control"
    132                                                id="inpusername"
    133                                                name="inpusername"
    134                                                placeholder="Username"
    135                                                onkeydown="triggerSave()"
    136                                                value="@Model.SelectedUser.UserName">
    137                                     </div>
    138                                 </div>
    139                                 <div class="form-group">
    140                                     <label for="inpfullname"
    141                                            class="col-sm-3 control-label">
    142                                         Full name
    143                                     </label>
    144                                     <div class="col-sm-8">
    145                                         <input type="text"
    146                                                class="form-control"
    147                                                id="inpfullname"
    148                                                name="inpfullname"
    149                                                placeholder="Full name"
    150                                                onkeydown="triggerSave()"
    151                                                value="@Model.SelectedUser.FullName">
    152                                     </div>
    153                                 </div>
    154                                 <div class="form-group">
    155                                     <label for="inpemail"
    156                                            class="col-sm-3 control-label">
    157                                         Email
    158                                     </label>
    159                                     <div class="col-sm-8">
    160                                         <input type="email"
    161                                                class="form-control"
    162                                                id="inpemail"
    163                                                name="inpemail"
    164                                                placeholder="Email"
    165                                                onkeydown="triggerSave()"
    166                                                value="@Model.SelectedUser.Email">
    167                                     </div>
    168                                 </div>
    169                                 <div class="form-group">
    170                                     <label class="col-sm-3 control-label">
    171                                         User id
    172                                     </label>
    173                                     <label class="col-sm-8 control-label" style="text-align:left">
    174                                         @Model.SelectedUser.Id
    175                                     </label>
    176                                     <input type="text"
    177                                            style="display:none"
    178                                            id="u"
    179                                            name="u"
    180                                            value="@Model.SelectedUser.Id" />
    181                                 </div>
    182                                 <div class="form-group">
    183                                     <label class="col-sm-3 control-label">
    184                                         Last login
    185                                     </label>
    186                                     <label class="col-sm-8 control-label" style="text-align:left">
    187                                         @Model.SelectedUser.LastLoginDate.AddHours(2).ToString()
    188                                     </label>
    189                                 </div>
    190                                 <div class="form-group">
    191                                     <label class="col-sm-3 control-label">
    192                                         Last activity
    193                                     </label>
    194                                     <label class="col-sm-8 control-label" style="text-align:left">
    195                                         @Model.SelectedUser.LastActivityDate.AddHours(2).ToString()
    196                                     </label>
    197                                 </div>
    198                                 @if (Model.SelectedUser.Id == Guid.Empty)
    199                                 {
    200                                     <div class="form-group">
    201                                         <div class="col-sm-offset-3 col-sm-9">
    202                                             <button type="submit"
    203                                                     id="inpsaver"
    204                                                     disabled
    205                                                     class="btn btn-default"
    206                                                     onclick="showSaver()">
    207                                                 <i class="fa fa-plus-square-o"></i> Add user
    208                                             </button>
    209                                         </div>
    210                                     </div>
    211 
    212 
    213                                 }
    214                                 else
    215                                 {
    216                                     <div class="form-group">
    217                                         <label class="col-sm-3 control-label">
    218                                             Password
    219                                         </label>
    220                                         <div id="inppassreset" class="col-sm-8">
    221                                             <button type="button"
    222                                                     onclick="resetPass('@(Model.SelectedUser.Id)')"
    223                                                     class="btn btn-default">
    224                                                 <i class="fa fa-unlock"></i> Reset password
    225                                             </button>
    226                                         </div>
    227                                     </div>
    228 
    229                                     <div class="form-group">
    230                                         <label class="col-sm-3 control-label">
    231                                             Member of
    232                                         </label>
    233                                         <div class="col-sm-8">
    234                                             @if (Model.SelectedUserSubscriptions.Count > 0)
    235                                             {
    236                                                 @foreach (var g in Model.SelectedUserSubscriptions)
    237                                                 {
    238                                                     <p><i class="fa fa-group"></i> @g.Name</p>
    239                                                 }
    240                                             }
    241                                             else
    242                                             {
    243                                                 <p>Not a member of any groups</p>
    244                                             }
    245                                         </div>
    246                                     </div>
    247                                     <div class="form-group">
    248                                         <div class="col-sm-offset-3 col-sm-3">
    249                                             <button type="submit"
    250                                                     id="inpsaver"
    251                                                     disabled
    252                                                     class="btn btn-default"
    253                                                     onclick="showSaver()">
    254                                                 <i class="fa fa-save"></i> Save changes
    255                                             </button>
    256                                         </div>
    257                                         <div class="col-sm-5">
    258                                             <a class="btn btn-danger pull-right"
    259                                                asp-controller="User"
    260                                                asp-action="deleteUser"
    261                                                asp-route-id="@Model.SelectedUser.Id"
    262                                                onclick="showDeleter()">
    263                                                 <i class="fa fa-trash-o"></i> Delete user
    264                                             </a>
    265                                         </div>
    266                                     </div>
    267 
    268 
    269 
    270                                 }
    271                                 <script type="text/javascript">
    272                                     function triggerSave() {
    273                                         if ($("#inpfullname").val() != "" &&
    274                                             $("#inpemail").val() != "") {
    275                                             document.getElementById("inpsaver").className = "btn btn-lg btn-success";
    276                                             document.getElementById("inpsaver").disabled = false;
    277                                         }
    278                                         else {
    279                                             document.getElementById("inpsaver").className = "btn btn-default";
    280                                             document.getElementById("inpsaver").disabled = true;
    281 
    282                                         }
    283 
    284                                     }
    285                                 </script>
    286                             </form>
    287 
    288                         </div>
     398                            </script>
     399                        </form>
     400
    289401                    </div>
    290402
    291                 }
     403                </div>
     404
    292405
    293406
     
    298411    </div>
    299412
    300     <script src="~/js/scripts/userinfohubber.js" type="text/javascript"></script>
     413    <script src="~/js/hubs/userinfohubber.js"></script>
    301414    <script type="text/javascript">
    302415        function showSaver() {
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Views/User/Roles.cshtml

    r13740 r13754  
    11@using HeuristicLab.Clients.Hive.WebJobManager.ViewModels.User;
    2 
     2@using HeuristicLab.Clients.Access;
     3@model UserViewModel
    34
    45<div>
     
    1112            <a asp-controller="User"
    1213               asp-action="Index">
    13                 Users
     14                <i class="fa fa-user"></i> Users
    1415            </a>
    1516        </li>
     
    1819            <a asp-controller="User"
    1920               asp-action="Groups">
    20                 Groups
     21                <i class="fa fa-users"></i> Groups
    2122            </a>
    2223        </li>
     
    2526            <a asp-controller="User"
    2627               asp-action="Roles">
    27                 Roles
     28                <i class="fa fa-gavel"></i> Roles
    2829            </a>
    2930        </li>
     
    3132    <div class="row"
    3233         style="text-align:center">
    33         Model.message
     34        @Model.message
    3435    </div>
    3536    <div class="row"
    3637         style="padding:10px; margin-right:0px!important">
    3738
     39        <div class="col-sm-4">
     40            <div class="btn-group-vertical btn-block">
     41                <a class="btn btn-info btn-lg btn-block disabled"
     42                   style="box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
     43                            text-shadow:2px 2px black;">
     44                    <i class="fa fa-gavel"></i> @Model.roles.Count Role@(Model.roles.Count != 1 ? "s" : "")
     45                </a>
     46                <a class="btn btn-success btn-block
     47                       @(Model.SelectedRole.Name == "" ? "active" : "")
     48                       "
     49                   asp-controller="User"
     50                   asp-action="SelectRole"
     51                   asp-route-name=""
     52                   onclick="showRole()"
     53                   style="box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
     54                            text-shadow:2px 2px black;">
     55                    <i class="fa fa-plus-circle"></i> Add new role
     56                </a>
     57                @foreach (var role in Model.roles)
     58                {
     59                    <a class="btn  btn-default @( role.Name == Model.SelectedRole.Name ? "active" : "" )"
     60                       style="box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);"
     61                       asp-controller="User"
     62                       asp-action="SelectRole"
     63                       asp-route-name="@role.Name"
     64                       onclick="showRole()">
     65                        @role.Name
     66                    </a>
     67                }
     68            </div>
     69        </div>
     70        <p style="display:none"
     71           id="saver"
     72           class="text-center">
     73            <br /><br /><br /><br /><br /><br /><br />
     74            <i class="fa fa-save fa-spin fa-5x" id="spinner">
     75            </i>
     76        </p>
     77        <p style="display:none"
     78           id="role"
     79           class="text-center">
     80            <br /><br /><br /><br /><br /><br /><br />
     81            <i class="fa fa-gavel fa-spin fa-5x" id="spinner">
     82            </i>
     83        </p>
     84        <p style="display:none"
     85           id="deleter"
     86           class="text-center">
     87            <br /><br /><br /><br /><br /><br /><br />
     88            <i class="fa fa-trash-o fa-spin fa-5x" id="spinner">
     89            </i>
     90        </p>
     91        <div class="col-sm-8"
     92             id="content"
     93             style="padding:5px; padding-left:10px;">
     94            <div class="panel panel-default"
     95                 style="border-width:2px!important;padding:17px;
     96                        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);">
     97                <div class="row">
     98                    <h2 style="padding-left:20px">
     99                        @if (Model.SelectedRole.Name != "")
     100                        {
     101                            <i class="fa fa-gavel "></i> @Model.SelectedRole.Name;
     102                        }
     103                        else
     104                        {
     105                            <i class="fa fa-plus-circle "></i> @("Add new role")
     106
     107                        }
     108                    </h2>
     109                    <form class="form-horizontal"
     110                          method="post"
     111                          asp-action="saveRole"
     112                          asp-controller="User" enctype="multipart/form-data">
     113                        <div class="form-group">
     114                            <label class="col-sm-3 control-label">
     115                                Role name
     116                            </label>
     117                            <label class="col-sm-8 control-label"
     118                                   style="text-align:left; @(Model.SelectedRole.Name == "" ? "display:none" : "")">
     119                                @Model.SelectedRole.Name
     120                            </label>
     121                            <div class="col-sm-8"
     122                                 style="@(Model.SelectedRole.Name == "" ? "" : "display:none")">
     123                                <input type="text"
     124                                       class="form-control"
     125                                       id="inprolename"
     126                                       name="inprolename"
     127                                       placeholder="Role name"
     128                                       value="@Model.SelectedRole.Name"
     129                                       onkeydown="triggerSave()" />
     130                            </div>
     131                        </div>
     132
     133                        @if (Model.SelectedRole.Name == "")
     134                        {
     135                            <div class="form-group">
     136                                <div class="col-sm-offset-3 col-sm-9">
     137                                    <button type="submit"
     138                                            id="inpsaver"
     139                                            disabled
     140                                            class="btn btn-default"
     141                                            onclick="showSaver()">
     142                                        <i class="fa fa-plus-square-o"></i> Add role
     143                                    </button>
     144                                </div>
     145                            </div>
     146
     147
     148                        }
     149                        else
     150                        {
     151
     152                            <div class="form-group">
     153                                <label class="col-sm-3 control-label">
     154                                    Users
     155                                </label>
     156                                <div class="col-sm-8 control-label" style="text-align:left">
     157                                    @foreach (var us in Model.SelectedRoleEnrolled)
     158                                    {
     159                                        <div class="row">
     160                                            <p class="col-sm-10">
     161                                                <i class="fa fa-user"></i> @(((User)us).UserName) (@(((User)us).FullName))
     162                                            </p>
     163                                            <p class="col-sm-2">
     164                                                <a class="btn btn-danger pull-right"
     165                                                   asp-controller="User"
     166                                                   asp-action="deleteRoleUser"
     167                                                   asp-route-id="@us.Id"
     168                                                   asp-route-role="@Model.SelectedRole.Name"
     169                                                   onclick="showDeleter()">
     170                                                    <i class="fa fa-trash-o"></i>
     171                                                </a>
     172                                            </p>
     173                                           
     174                                        </div>
     175                                    }
     176                                   @if (Model.SelectedRoleEnrolled.Count == 0)
     177                                   {
     178                                    <p>
     179                                        There are currently no users who have this role
     180                                    </p>
     181
     182                                   }
     183                                </div>
     184                            </div>
     185                            <div class="form-group">
     186                                <div class="col-sm-offset-3 col-sm-3">
     187                                    <button type="submit"
     188                                            id="inpsaver"
     189                                            disabled
     190                                            class="btn btn-default"
     191                                            onclick="showSaver()">
     192                                        <i class="fa fa-save"></i> Save changes
     193                                    </button>
     194                                </div>
     195                                <div class="col-sm-5">
     196                                    <a class="btn btn-danger pull-right"
     197                                       asp-controller="User"
     198                                       asp-action="deleteRole"
     199                                       asp-route-name="@Model.SelectedRole.Name"
     200                                       
     201                                       onclick="showDeleter()">
     202                                        <i class="fa fa-trash-o"></i> Delete role
     203                                    </a>
     204                                </div>
     205                            </div>
     206
     207
     208
     209                        }
     210                        <script type="text/javascript">
     211                            function triggerSave() {
     212                                if ($("#inprolename").val() != "") {
     213                                    document.getElementById("inpsaver").className = "btn btn-lg btn-success";
     214                                    document.getElementById("inpsaver").disabled = false;
     215                                }
     216                                else {
     217                                    document.getElementById("inpsaver").className = "btn btn-default";
     218                                    document.getElementById("inpsaver").disabled = true;
     219
     220                                }
     221
     222                            }
     223                        </script>
     224                    </form>
     225                </div>
     226            </div>
     227        </div>
    38228    </div>
     229    <script type="text/javascript">
     230        function showSaver() {
     231            document.getElementById("content").style.display = "none";
     232            document.getElementById("saver").style.display = "";
     233
     234        }
     235        function showRole() {
     236            document.getElementById("content").style.display = "none";
     237            document.getElementById("role").style.display = "";
     238
     239        }
     240        function showDeleter() {
     241            document.getElementById("content").style.display = "none";
     242            document.getElementById("deleter").style.display = "";
     243        }
     244    </script>
    39245</div>
Note: See TracChangeset for help on using the changeset viewer.