|
|
@@ -26,158 +26,204 @@ ${commonheader("Hue Users", "useradmin", "100px")}
|
|
|
${layout.menubar(section='users')}
|
|
|
|
|
|
<div class="container-fluid">
|
|
|
- <h1>Hue Users</h1>
|
|
|
- <div class="well hueWell">
|
|
|
- <p class="pull-right">
|
|
|
- %if user.is_superuser == True:
|
|
|
- <a id="addUserBtn" href="#" class="btn">Add user</a>
|
|
|
- %endif
|
|
|
- </p>
|
|
|
- <form class="form-search">
|
|
|
- Filter: <input id="filterInput" class="input-xlarge search-query" placeholder="Search for username, name, e-mail, etc...">
|
|
|
- </form>
|
|
|
- </div>
|
|
|
- <table class="table table-striped datatables">
|
|
|
- <thead>
|
|
|
- <tr>
|
|
|
- <th>${_('Username')}</th>
|
|
|
- <th>${_('First Name')}</th>
|
|
|
- <th>${_('Last Name')}</th>
|
|
|
- <th>${_('E-mail')}</th>
|
|
|
- <th>${_('Groups')}</th>
|
|
|
- <th>${_('Last Login')}</th>
|
|
|
- <th> </th>
|
|
|
- </tr>
|
|
|
- </thead>
|
|
|
- <tbody>
|
|
|
+ <h1>Hue Users</h1>
|
|
|
+ <div class="well hueWell">
|
|
|
+ <div class="btn-group pull-right">
|
|
|
+ %if user.is_superuser == True:
|
|
|
+ <a id="addUserBtn" href="#" class="btn">Add user</a>
|
|
|
+ <a id="addLdapUserBtn" href="#" class="btn">Add/sync LDAP user</a>
|
|
|
+ <a id="syncLdapBtn" href="#" class="btn">Sync LDAP users/groups</a>
|
|
|
+ %endif
|
|
|
+ </div>
|
|
|
+ <form class="form-search">
|
|
|
+ Filter: <input id="filterInput" class="input-xlarge search-query" placeholder="Search for username, name, e-mail, etc...">
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ <table class="table table-striped datatables">
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th>${_('Username')}</th>
|
|
|
+ <th>${_('First Name')}</th>
|
|
|
+ <th>${_('Last Name')}</th>
|
|
|
+ <th>${_('E-mail')}</th>
|
|
|
+ <th>${_('Groups')}</th>
|
|
|
+ <th>${_('Last Login')}</th>
|
|
|
+ <th> </th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
% for listed_user in users:
|
|
|
- <tr class="userRow" data-search="${listed_user.username}${listed_user.first_name}${listed_user.last_name}${listed_user.email}${', '.join([group.name for group in listed_user.groups.all()])}">
|
|
|
- <td>${listed_user.username}</td>
|
|
|
- <td>${listed_user.first_name}</td>
|
|
|
- <td>${listed_user.last_name}</td>
|
|
|
- <td>${listed_user.email}</td>
|
|
|
- <td>${', '.join([group.name for group in listed_user.groups.all()])}</td>
|
|
|
- <td>${date(listed_user.last_login)} ${time(listed_user.last_login).replace("p.m.","PM").replace("a.m.","AM")}</td>
|
|
|
- <td class="right">
|
|
|
- %if user.is_superuser == True:
|
|
|
- <a title="Edit ${listed_user.username}" class="btn small editUserBtn" data-url="${ url('useradmin.views.edit_user', username=urllib.quote(listed_user.username)) }" data-name="${listed_user.username}">Edit</a>
|
|
|
- <a title="Delete ${listed_user.username}" class="btn small confirmationModal" alt="Are you sure you want to delete ${listed_user.username}?" href="javascript:void(0)" data-confirmation-url="${ url('useradmin.views.delete_user', username=urllib.quote_plus(listed_user.username)) }">Delete</a>
|
|
|
- %else:
|
|
|
- %if user.username == listed_user.username:
|
|
|
- <a title="Edit ${listed_user.username}" class="btn small editUserBtn" data-url="${ url('useradmin.views.edit_user', username=urllib.quote(listed_user.username)) }" data-name="${listed_user.username}">Edit</a>
|
|
|
- %else:
|
|
|
-
|
|
|
- %endif
|
|
|
- %endif
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- % endfor
|
|
|
- </tbody>
|
|
|
- </table>
|
|
|
-
|
|
|
- <div id="addUser" class="modal hide fade userModal">
|
|
|
- <div class="modal-header">
|
|
|
- <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
- <h3>Add user</h3>
|
|
|
- </div>
|
|
|
- <div id="addUserBody" class="modal-body">
|
|
|
- <iframe id="addUserFrame" class="scroll" frameBorder="0"></iframe>
|
|
|
- </div>
|
|
|
- <div class="modal-footer">
|
|
|
- <button id="addUserSaveBtn" class="btn primary">Save</button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div id="editUser" class="modal hide fade userModal">
|
|
|
- <div class="modal-header">
|
|
|
- <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
- <h3>Edit user <span class="username"></span></h3>
|
|
|
- </div>
|
|
|
- <div id="editUserBody" class="modal-body">
|
|
|
- <iframe id="editUserFrame" class="scroll" frameBorder="0"></iframe>
|
|
|
- </div>
|
|
|
- <div class="modal-footer">
|
|
|
- <button id="editUserSaveBtn" class="btn primary">Save</button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div id="deleteUser" class="modal hide fade userModal">
|
|
|
- <form id="deleteUserForm" action="" method="POST">
|
|
|
- <div class="modal-header">
|
|
|
- <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
- <h3 id="deleteUserMessage">Confirm action</h3>
|
|
|
- </div>
|
|
|
- <div class="modal-footer">
|
|
|
- <input type="submit" class="btn primary" value="Yes"/>
|
|
|
- <a href="#" class="btn secondary" data-dismiss="modal">No</a>
|
|
|
- </div>
|
|
|
- </form>
|
|
|
- </div>
|
|
|
+ <tr class="userRow" data-search="${listed_user.username}${listed_user.first_name}${listed_user.last_name}${listed_user.email}${', '.join([group.name for group in listed_user.groups.all()])}">
|
|
|
+ <td>${listed_user.username}</td>
|
|
|
+ <td>${listed_user.first_name}</td>
|
|
|
+ <td>${listed_user.last_name}</td>
|
|
|
+ <td>${listed_user.email}</td>
|
|
|
+ <td>${', '.join([group.name for group in listed_user.groups.all()])}</td>
|
|
|
+ <td>${date(listed_user.last_login)} ${time(listed_user.last_login).replace("p.m.","PM").replace("a.m.","AM")}</td>
|
|
|
+ <td class="right">
|
|
|
+ %if user.is_superuser == True:
|
|
|
+ <a title="Edit ${listed_user.username}" class="btn small editUserBtn" data-url="${ url('useradmin.views.edit_user', username=urllib.quote(listed_user.username)) }" data-name="${listed_user.username}">Edit</a>
|
|
|
+ <a title="Delete ${listed_user.username}" class="btn small confirmationModal" alt="Are you sure you want to delete ${listed_user.username}?" href="javascript:void(0)" data-confirmation-url="${ url('useradmin.views.delete_user', username=urllib.quote_plus(listed_user.username)) }">Delete</a>
|
|
|
+ %else:
|
|
|
+ %if user.username == listed_user.username:
|
|
|
+ <a title="Edit ${listed_user.username}" class="btn small editUserBtn" data-url="${ url('useradmin.views.edit_user', username=urllib.quote(listed_user.username)) }" data-name="${listed_user.username}">Edit</a>
|
|
|
+ %else:
|
|
|
+
|
|
|
+ %endif
|
|
|
+ %endif
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ % endfor
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+
|
|
|
+ <div id="addUser" class="modal hide fade userModal">
|
|
|
+ <div class="modal-header">
|
|
|
+ <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
+ <h3>Add user</h3>
|
|
|
+ </div>
|
|
|
+ <div id="addUserBody" class="modal-body">
|
|
|
+ <iframe id="addUserFrame" class="scroll" frameBorder="0"></iframe>
|
|
|
+ </div>
|
|
|
+ <div class="modal-footer">
|
|
|
+ <button id="addUserSaveBtn" class="btn primary">Save</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div id="addLdapUser" class="modal hide fade userModal">
|
|
|
+ <div class="modal-header">
|
|
|
+ <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
+ <h3>Add or Sync a LDAP user</h3>
|
|
|
+ </div>
|
|
|
+ <div id="addLdapUserBody" class="modal-body">
|
|
|
+ <iframe id="addLdapUserFrame" class="scroll" frameBorder="0"></iframe>
|
|
|
+ </div>
|
|
|
+ <div class="modal-footer">
|
|
|
+ <button id="addLdapUserSaveBtn" class="btn primary">Save</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div id="syncLdap" class="modal hide fade userModal">
|
|
|
+ <div class="modal-header">
|
|
|
+ <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
+ <h3>Sync LDAP users and groups</h3>
|
|
|
+ </div>
|
|
|
+ <div id="syncLdapBody" class="modal-body">
|
|
|
+ <iframe id="syncLdapFrame" class="scroll" frameBorder="0"></iframe>
|
|
|
+ </div>
|
|
|
+ <div class="modal-footer">
|
|
|
+ <button id="syncLdapSaveBtn" class="btn primary">Sync</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div id="editUser" class="modal hide fade userModal">
|
|
|
+ <div class="modal-header">
|
|
|
+ <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
+ <h3>Edit user <span class="username"></span></h3>
|
|
|
+ </div>
|
|
|
+ <div id="editUserBody" class="modal-body">
|
|
|
+ <iframe id="editUserFrame" class="scroll" frameBorder="0"></iframe>
|
|
|
+ </div>
|
|
|
+ <div class="modal-footer">
|
|
|
+ <button id="editUserSaveBtn" class="btn primary">Save</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div id="deleteUser" class="modal hide fade userModal">
|
|
|
+ <form id="deleteUserForm" action="" method="POST">
|
|
|
+ <div class="modal-header">
|
|
|
+ <a href="#" class="close" data-dismiss="modal">×</a>
|
|
|
+ <h3 id="deleteUserMessage">Confirm action</h3>
|
|
|
+ </div>
|
|
|
+ <div class="modal-footer">
|
|
|
+ <input type="submit" class="btn primary" value="Yes"/>
|
|
|
+ <a href="#" class="btn secondary" data-dismiss="modal">No</a>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
- <script type="text/javascript" charset="utf-8">
|
|
|
- $(document).ready(function(){
|
|
|
- $(".datatables").dataTable({
|
|
|
- "bPaginate": false,
|
|
|
- "bLengthChange": false,
|
|
|
- "bInfo": false,
|
|
|
- "bFilter": false,
|
|
|
- "aoColumns": [
|
|
|
- null,
|
|
|
- null,
|
|
|
- null,
|
|
|
- null,
|
|
|
- null,
|
|
|
- null,
|
|
|
- { "sType": "date" }
|
|
|
- ]
|
|
|
- });
|
|
|
- $(".dataTables_wrapper").css("min-height","0");
|
|
|
- $(".dataTables_filter").hide();
|
|
|
-
|
|
|
- $(".confirmationModal").click(function(){
|
|
|
- var _this = $(this);
|
|
|
- $.getJSON(_this.attr("data-confirmation-url"), function(data){
|
|
|
- $("#deleteUserForm").attr("action", data.path);
|
|
|
- $("#deleteUserMessage").text(_this.attr("alt"));
|
|
|
- });
|
|
|
- $("#deleteUser").modal("show");
|
|
|
- });
|
|
|
-
|
|
|
- $("#filterInput").keyup(function(){
|
|
|
- $.each($(".userRow"), function(index, value) {
|
|
|
- if($(value).data("search").toLowerCase().indexOf($("#filterInput").val().toLowerCase()) == -1 && $("#filterInput").val() != ""){
|
|
|
- $(value).hide(250);
|
|
|
- }else{
|
|
|
- $(value).show(250);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- });
|
|
|
-
|
|
|
- $("#addUserBtn").click(function(){
|
|
|
- $("#addUserFrame").css("height","300px").attr("src","${ url('useradmin.views.edit_user') }");
|
|
|
- $("#addUser").modal("show");
|
|
|
- });
|
|
|
-
|
|
|
- $("#addUserSaveBtn").click(function(){
|
|
|
- $("#addUserFrame").contents().find('form').submit();
|
|
|
- });
|
|
|
-
|
|
|
- $(".editUserBtn").click(function(){
|
|
|
- $("#editUser").find(".username").text($(this).data("name"));
|
|
|
- $("#editUserFrame").css("height","300px").attr("src", $(this).data("url"));
|
|
|
- $("#editUser").modal("show");
|
|
|
- });
|
|
|
-
|
|
|
- $("#editUserSaveBtn").click(function(){
|
|
|
- $("#editUserFrame").contents().find('form').submit();
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- });
|
|
|
- </script>
|
|
|
+ <script type="text/javascript" charset="utf-8">
|
|
|
+ $(document).ready(function(){
|
|
|
+ $(".datatables").dataTable({
|
|
|
+ "bPaginate": false,
|
|
|
+ "bLengthChange": false,
|
|
|
+ "bInfo": false,
|
|
|
+ "bFilter": false,
|
|
|
+ "aoColumns": [
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ { "sType": "date" }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+ $(".dataTables_wrapper").css("min-height","0");
|
|
|
+ $(".dataTables_filter").hide();
|
|
|
+
|
|
|
+ $(".confirmationModal").click(function(){
|
|
|
+ var _this = $(this);
|
|
|
+ $.getJSON(_this.attr("data-confirmation-url"), function(data){
|
|
|
+ $("#deleteUserForm").attr("action", data.path);
|
|
|
+ $("#deleteUserMessage").text(_this.attr("alt"));
|
|
|
+ });
|
|
|
+ $("#deleteUser").modal("show");
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#filterInput").keyup(function(){
|
|
|
+ $.each($(".userRow"), function(index, value) {
|
|
|
+ if($(value).data("search").toLowerCase().indexOf($("#filterInput").val().toLowerCase()) == -1 && $("#filterInput").val() != ""){
|
|
|
+ $(value).hide(250);
|
|
|
+ }else{
|
|
|
+ $(value).show(250);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#addUserBtn").click(function(){
|
|
|
+ $("#addUserFrame").css("height","300px").attr("src","${ url('useradmin.views.edit_user') }");
|
|
|
+ $("#addUser").modal("show");
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#addUserSaveBtn").click(function(){
|
|
|
+ $("#addUserFrame").contents().find('form').submit();
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#addLdapUserBtn").click(function(){
|
|
|
+ $("#addLdapUserFrame").css("height","150px").attr("src","${ url('useradmin.views.add_ldap_user') }");
|
|
|
+ $("#addLdapUser").modal("show");
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#addLdapUserSaveBtn").click(function(){
|
|
|
+ $("#addLdapUserFrame").contents().find('form').submit();
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#syncLdapBtn").click(function(){
|
|
|
+ $("#syncLdapFrame").css("height","150px").attr("src","${ url('useradmin.views.sync_ldap_users_groups') }");
|
|
|
+ $("#syncLdap").modal("show");
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#syncLdapSaveBtn").click(function(){
|
|
|
+ $("#syncLdapFrame").contents().find('form').submit();
|
|
|
+ });
|
|
|
+
|
|
|
+ $(".editUserBtn").click(function(){
|
|
|
+ $("#editUser").find(".username").text($(this).data("name"));
|
|
|
+ $("#editUserFrame").css("height","300px").attr("src", $(this).data("url"));
|
|
|
+ $("#editUser").modal("show");
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#editUserSaveBtn").click(function(){
|
|
|
+ $("#editUserFrame").contents().find('form').submit();
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ });
|
|
|
+ </script>
|
|
|
|
|
|
${commonfooter()}
|