column ordering
[osm/LW-UI.git] / userhandler / templates / user_list.html
1 {% extends "base.html" %}
2 {% load get %}
3 {% load date_tag %}
4 {% load staticfiles %}
5
6
7 {% block head_block %}
8 {{ block.super }}
9 <link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
10 <link rel="stylesheet" href="/static/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
11 {% endblock %}
12 {% block title_header_big %}
13 {{ block.super }}
14 {% endblock %}
15 {% block left_sidebar %}
16 {% include 'osm/osm_project_left_sidebar.html' %}
17 {% endblock %}
18
19
20 {% block breadcrumb_body %}
21 {{ block.super }}
22 <li><a href="#">Users</a></li>
23 {% endblock %}
24
25 {% block content_body %}
26 {{ block.super }}
27 {% include 'modal/user_details.html' %}
28 {% include 'modal/user_create.html' %}
29 {% include 'modal/user_edit.html' %}
30
31 {% csrf_token %}
32 <div class="row">
33 <div class="col-md-12">
34
35 <div class="box">
36 <div class="box-header with-border">
37 <h3 class="box-title">Users</h3>
38 <div class="box-tools">
39 <button type="button" class="btn btn-default" data-container="body"
40 onclick="javascript:openModalCreateUser({'projects_list_url': '{% url "projects:projects_list" %}'})"
41 data-toggle="tooltip" data-placement="top" title="New User">
42
43 <i class="fa fa-plus"></i> Create User
44 </button>
45
46 </div>
47 </div>
48 <div class="box-body">
49 <table id="users_table" class="table table-bordered table-striped">
50 <thead>
51 <tr>
52 <th>Name</th>
53 <th>Projects</th>
54 <th>Identifier</th>
55 <th>Modified</th>
56 <th>Created</th>
57 <th>Actions</th>
58 </tr>
59 </thead>
60 <tbody>
61 </tbody>
62 </table>
63 </div>
64 </div>
65 </div>
66
67 </div>
68 {% endblock %}
69
70 {% block resource_block %}
71 {{ block.super }}
72 <script src="/static/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
73 <script src="/static/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
74 <script src="/static/bower_components/select2/dist/js/select2.js"></script>
75 <script src="/static/src/userhandler/user_list.js"></script>
76 <script>
77 $(document).ready(function () {
78 var table = $('#users_table').DataTable({
79 responsive: true,
80 "ajax": {
81 "url": "/admin/users/list",
82 "dataSrc": function (json) {
83 return json['users'];
84 },
85 statusCode: {
86 401: function () {
87 console.log("no auth");
88 moveToLogin(window.location.pathname);
89 }
90 },
91 "error": function (hxr, error, thrown) {
92 console.log(hxr)
93 console.log(thrown)
94 console.log(error);
95 }
96
97 },
98 "columns": [
99 {
100 "render": function (data, type, row) {
101 return row["username"];
102 },
103 "targets": 0
104 },
105 {
106 "render": function (data, type, row) {
107 return row['projects'];
108 },
109 "targets": 1
110 },
111 {
112 "render": function (data, type, row) {
113 return row['_id'];
114 },
115 "targets": 2
116 },
117 {
118 "render": function (data, type, row) {
119 return moment.unix(row["_admin"]['modified']).format('YYYY-MM-DD hh:mm:ss a');
120 },
121 "targets": 3
122 },
123 {
124 "render": function (data, type, row) {
125 return moment.unix(row["_admin"]['created']).format('YYYY-MM-DD hh:mm:ss a');
126 },
127 "targets": 4
128 },
129 {
130 "render": function (data, type, row) {
131 return '<div class="btn-group">' +
132 '<button type="button" class="btn btn-default dropdown-toggle"' +
133 'data-toggle="dropdown" aria-expanded="false">Actions ' +
134 '<span class="fa fa-caret-down"></span></button> ' +
135 '<ul class="dropdown-menu">' +
136 '<li> <a href="#" onclick="javascript:openModalEditUser({user_id:\'' + row['_id'] + '\', usernarme:\'' + row['username'] + '\', projects: \'' + row['projects'] + '\'})">' +
137 '<i class="fa fa-edit"></i> Edit</a></li>' +
138 '<li> <a href="#" onclick="javascript:deleteUser(\'' + row['_id'] + '\', \'' + row['username'] + '\')"' +
139 'style="color:red"><i class="fa fa-trash"></i> Delete</a></li> </ul></div>';
140 },
141 "targets": 5,
142 "orderable": false
143 }
144 ]
145 });
146
147 var select2_groups = $('#projects_edit').select2({
148 placeholder: 'Select Projects',
149 width: '100%',
150 ajax: {
151 url: '/projects/list',
152 dataType: 'json',
153 processResults: function (data) {
154 projects = [];
155 if (data['projects']) {
156 for (d in data['projects']) {
157 var project = data['projects'][d];
158 projects.push({
159 "id": project['_id'],
160 "text": project['name']
161 });
162
163 }
164 }
165
166 return {
167 results: projects
168 };
169 }
170 }
171 });
172
173 var select2_single = $('#default_project_edit').select2({
174 placeholder: 'Select Default Project',
175 width: '100%',
176 ajax: {
177 url: '/projects/list',
178 dataType: 'json',
179 processResults: function (data) {
180 projects = [];
181 if (data['projects']) {
182 for (d in data['projects']) {
183 var project = data['projects'][d];
184 projects.push({
185 id: project['_id'],
186 text: project['name']
187 });
188 }
189 }
190
191 return {
192 results: projects
193 };
194 }
195 }
196 });
197
198 setInterval(function () {
199 table.ajax.reload();
200 }, 10000);
201
202 $("#formEditUser").submit(function (event) {
203 event.preventDefault(); //prevent default action
204 var post_url = $(this).attr("action"); //get form action url
205 var request_method = $(this).attr("method");
206 var form_data = new FormData(this); //Encode form elements for submission
207
208 $.ajax({
209 url: post_url,
210 type: request_method,
211 data: form_data,
212 headers: {
213 "Accept": 'application/json'
214 },
215 contentType: false,
216 processData: false
217 }).done(function (response, textStatus, jqXHR) {
218 $('#modal_edit_user').modal('hide');
219 table.ajax.reload();
220 bootbox.alert({
221 title: "Result",
222 message: "User modified successfully."
223 });
224
225 }).fail(function (result) {
226 var data = result.responseJSON;
227 var title = "Error " + (data.code ? data.code : 'unknown');
228 var message = data.detail ? data.detail : 'No detail available.';
229 bootbox.alert({
230 title: title,
231 message: message
232 });
233 });
234 });
235 });
236 </script>
237
238
239 {% endblock %}
240
241 {% block footer %}
242 {% include "footer.html" %}
243 {% endblock %}