Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into fibre
[myslice.git] / portal / templates / management-tab-requests.html
1 <script type="text/javascript">
2         $(document).ready(function() {
3                 $("li#nav-request").addClass("active");
4                 $('table.requests').dataTable({
5                     "sDom": "frtiS",
6             "bScrollCollapse": true,
7             "bStateSave": true,
8             "bPaginate": false,
9             "bLengthChange": false,
10             "bFilter": false,
11             "bSort": true,
12             "bInfo": false,
13             "bAutoWidth": true,
14             "bAutoHeight": false,
15                 });
16         });
17         function on_click_event() {
18                 var ids = []; 
19                 $('.portal__validate__checkbox').each(function(i, el) {
20                         if ($(el).prop('checked')) {
21                                 // portal__validate__checkbox__slice__2
22                                 var id_array = $(el).attr('id').split('__');
23                                 // push(slice__2)
24                                 ids.push(id_array[3] + '__' + id_array[4]);
25                         }
26                 });
27                 if (ids.length > 0) {
28                         var id_str = ids.join('/');
29
30                         // XXX spinner
31
32                         $.getJSON('/portal/validate_action/' + id_str,
33                                 function(status) {
34                                         $.each(status, function(request_type__id, request_status) {
35                                                 // request_status: NAME -> dict (status, description)
36                                                 var status_str = '';
37                                                 $.each(request_status, function(name, result) {
38                                                         if (status_str != '')
39                                                                 status_str += ' -- ';
40
41                                                         if (result.status) {
42                                                                 status_str += '<font color="green">OK</font>';
43                                                                 $('#portal__validate__checkbox__' + request_type__id).hide();
44                                                         } else {
45                                                                 status_str += '<font color="red">ERROR: ' + result.description + '</font>';
46                                                         }
47                                                 });
48                                                 $('#portal__status__' + request_type__id).html(status_str);
49
50
51                                         });
52                                 }
53                         );
54                 }
55      };
56      function showMore(buttonId, divId){
57           var element = document.getElementById(buttonId);
58           var div_element = document.getElementById(divId);
59           if (element.value === '(+)'){
60             element.value = '(-)';
61             $('#'+divId).slideDown('fast');
62           }
63           else {
64             element.value = '(+)';
65             $('#'+divId).slideUp('fast');
66           }
67           return false;
68      }
69          function on_click_reject() {
70                 var ids = []; 
71                 $('.portal__validate__checkbox').each(function(i, el) {
72                         if ($(el).prop('checked')) {
73                                 // portal__validate__checkbox__slice__2
74                                 var id_array = $(el).attr('id').split('__');
75                                 // push(slice__2)
76                                 ids.push(id_array[3] + '__' + id_array[4]);
77                         }
78                 });
79                 if (ids.length > 0) {
80                         var id_str = ids.join('/');
81
82                         // XXX spinner
83
84                         $.getJSON('/portal/reject_action/' + id_str,
85                                 function(status) {
86                                         $.each(status, function(request_type__id, request_status) {
87                                                 // request_status: NAME -> dict (status, description)
88                                                 var status_str = '';
89                                                 $.each(request_status, function(name, result) {
90                                                         if (status_str != '')
91                                                                 status_str += ' -- ';
92
93                                                         if (result.status) {
94                                                                 status_str += '<font color="green">Rejected</font>';
95                                                                 $('#portal__validate__checkbox__' + request_type__id).hide();
96                                                         } else {
97                                                                 status_str += '<font color="red">ERROR: ' + result.description + '</font>';
98                                                         }
99                                                 });
100                                                 $('#portal__status__' + request_type__id).html(status_str);
101
102
103                                         });
104                                 }
105                         );
106                 }
107         }
108 </script>
109
110 <div class="container-fluid">
111 <div class="col-md-12">
112         <h2>From your authorities</h2>
113 </div>
114 {% if my_authorities %}
115 <div class="col-md-12">
116         <table class="table requests">
117             <thead>
118         <tr>
119             <th>ID</th>
120             <th></th>
121             <th>Type</th>
122             <th>Authority</th>
123             <th>Info</th>
124             <th>Date</th>
125             <th>Status</th>
126         </tr>
127         </thead>
128         <tbody>
129         {% for authority, requests in my_authorities.items %}
130         {% if authority == pi_authority or authority == "fibre" %}
131
132 <!--
133         <div class="col-md-12">
134                 <h2>{{authority}}</h2>
135                 <table class="table">
136                               <th>
137                                 <td>Type</td>
138                                 <td>Id</td>
139                                 <td>Details</td>
140                                 <td>Timestamp</td>
141                                 <td>Status</td>
142                               </th>
143                         {% for request in requests %} 
144                                 <tr>
145                                         {% if request.object_auth == pi_authority %}
146                                                 <td>
147                                                 {% if request.allowed == 'allowed' %}
148                                                 <input class='portal__validate__checkbox' id='portal__validate__checkbox__{{request.type}}__{{request.id}}' type='checkbox'/>
149                                                 {% else %}
150                                                         {% if request.allowed == 'expired' %}
151                                                                 expired
152                                                         {% else %} {# denied #}
153                                                                 denied
154                                                         {% endif %}
155                                                 {% endif %}
156                                                 </td>
157                                                 <td>{{ request.type }}</td>
158                                                 <td>{{ request.id }}</td>
159                                                 <td>
160                                                 {% if request.type == 'user' %}
161                                                         Login: {{request.login}} - First name: {{request.first_name}} - Last name: {{request.last_name}} - Email: {{request.email}}
162                                                         <input type = "button" id = "moreBtn_{{request.id}}" value = "(+)" onclick = "showMore('moreBtn_{{request.id}}','reasons_{{request.id}}')" style="color:blue; padding:0; border:none; background:none">
163                                                         <div id="reasons_{{request.id}}" style="display:none"> Reasons for Applying:<br> {{request.reasons}} </div> 
164                                                 {% else %}
165                                                 {% if request.type == 'slice' %}
166                                                                 Slice name: {{request.slice_name}} - User_hrn: {{ request.user_hrn }} - Number of nodes: {{request.number_of_nodes}} - Type of nodes: {{request.type_of_nodes}} - Purpose: {{request.purpose}}
167                                                         {% else %} {# authority #}
168                                                                 Authority name: {{request.site_name}} - authority_hrn: {{request.site_authority}} - City: {{request.address_city}} - Country: {{request.address_country}}
169                                                 {% endif %}
170                                                 {% endif %}
171                                                 </td>
172                                                 <td>{{ request.timestamp }}</td>
173                                         
174                                                 <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
175
176                             <!- <div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> 
177                                 {% endif %}
178                                 </tr>
179                         {% endfor %}
180                 </table>
181         </div>
182         {% endif %}
183 -->
184         
185         {% for request in requests %}
186         
187         {% if request.type == 'user' %}
188         <tr>
189         {% elif request.type == 'slice' %}
190         <tr class="info">
191         {% else %}
192         <tr class="active">
193         {% endif %}
194             <td><span class="gray small">{{ request.id }}</span></td>
195             <td>
196             {% if request.allowed == 'allowed' %}
197             <input class='portal__validate__checkbox' id='portal__validate__checkbox__{{request.type}}__{{request.id}}' type='checkbox'/>
198             {% else %}
199                 {% if request.allowed == 'expired' %}expired{% else %}denied{% endif %}
200             {% endif %}
201             </td>
202             <td><span class="type">{{ request.type }}</span></td>
203             <td><i>{{authority}}{{request.site_authority}}</i></td>
204                 <td>
205             {% if request.type == 'user' %}
206                 <b>{{request.first_name}} {{request.last_name}}</b> &lt;<a href="mailto:{{request.email}}">{{request.email}}</a>&gt;
207                         <input type = "button" id = "moreBtn_{{request.id}}" value = "(+)" onclick = "showMore('moreBtn_{{request.id}}','reasons_{{request.id}}')" style="color:blue; padding:0; border:none; background:none">
208                 <div id="reasons_{{request.id}}" style="display:none"> Reasons for Applying:<br> {{request.reasons}} </div> 
209
210             {% elif request.type == 'slice' %}
211             <b>{{request.slice_name}}</b> -- Number of nodes: {{request.number_of_nodes}} -- Type of nodes: {{request.type_of_nodes}} -- Purpose: {{request.purpose}}
212             {% else %}
213             <b>{{request.site_name}}</b> ({{request.site_authority}}) -- {{request.address_city}}, {{request.address_country}}
214             {% endif %}
215                 </td>
216                 <td>{{ request.timestamp }}</td>
217                 
218                 <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
219     
220         <!--<div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> -->
221           </tr>
222     
223         {% endfor %}
224         
225         {% endfor %}
226            </tbody>
227     </table>
228    </div>
229 {% else %}
230         <div class="col-md-12">
231                 <i>There is no pending request waiting for validation.</i>
232         </div>
233 {% endif %}
234 </div>
235
236
237 <br />
238 <div class="col-md-12">
239         <h2>From your sub-authorities</h2>
240 </div>
241 {% if sub_authorities %}
242         
243         {% for authority, requests in sub_authorities.items %}
244         {% if authority == pi_authority or authority == 'fibre'%}
245                 <div class="col-md-12">
246                 <h3>{{authority}}</h3>
247                     <table class="table">
248                       <th>
249                         <td>Type</td>
250                         <td>Id</td>
251                         <td>Details</td>
252                         <td>Timestamp</td>
253                         <td>Status</td>
254                       </th>
255                     {% for request in requests %}
256                           <tr>
257                                 {% if request.object_auth == pi_authority %}
258                                 <td>
259                                 {% if request.allowed == 'allowed' %}
260                                 <input class='portal__validate__checkbox' id='portal__validate__checkbox__{{request.type}}__{{request.id}}' type='checkbox'/>
261                                 {% else %}
262                                         {% if request.allowed == 'expired' %}
263                                                 expired
264                                         {% else %} {# denied #}
265                                                 denied
266                                         {% endif %}
267                                 {% endif %}
268                                 </td>           
269                                 <td>{{ request.type }}</td>
270                                 <td>{{ request.id }}</td>
271                                 <td>
272                         {% if request.type == 'user' %}
273                         Login: {{request.login}} -- First name: {{request.first_name}} -- Last name: {{request.last_name}} -- Email: {{request.email}}
274                         {% else %}
275                             {% if request.type == 'slice' %}
276                         Slice name: {{request.slice_name}} -- Number of nodes: {{request.number_of_nodes}} -- Type of nodes: {{request.type_of_nodes}} -- Purpose: {{request.purpose}}
277                             {% else %} {# authority #}
278                         Authority name: {{request.site_name}} -- authority_hrn: {{request.site_authority}} -- City: {{request.address_city}} -- Country: {{request.address_country}}
279                             {% endif %}
280                         {% endif %}
281                                 </td>
282                                 <td>{{ request.timestamp }}</td>
283                                 
284                                 <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
285                 
286             <!--<div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> -->
287                         {% endif %}
288                           </tr>
289                     {% endfor %}
290                     </table>
291                 </div>
292         {% endif %}
293         {% endfor %}
294 {% else %}
295 <div class="col-md-12">
296         <i>There is no pending request waiting for validation.</i>
297 </div>
298 {% endif %}
299 <br />
300 <div class="col-md-12">
301         <h2>From your authorities with delegation</h2>
302 </div>
303
304 {% if delegation_authorities %}
305         
306         {% for authority, requests in delegation_authorities.items %}
307         {% if authority == pi_authority  or authority == 'fibre'%}
308         <div class="col-md-12">
309                 <h3>{{authority}}</h3>
310                     <table class="table">
311                       <th>
312                         <td>Type</td>
313                         <td>Id</td>
314                         <td>Details</td>
315                         <td>Timestamp</td>
316                         <td>Status</td>
317                       </th>
318                     {% for request in requests %}
319                           <tr>
320                                 {% if request.object_auth == pi_authority %}
321                                 <td>
322                                 {% if request.allowed == 'allowed' %}
323                                 <input class='portal__validate__checkbox' id='portal__validate__checkbox__{{request.type}}__{{request.id}}' type='checkbox'/>
324                                 {% else %}
325                                         {% if request.allowed == 'expired' %}
326                                                 expired
327                                         {% else %} {# denied #}
328                                                 denied
329                                         {% endif %}
330                                 {% endif %}
331                                 </td>
332                                 <td>{{ request.type }}</td>
333                                 <td>{{ request.id }}</td>
334                                 <td>
335                         {% if request.type == 'user' %}
336                         Login: {{request.login}} -- First name: {{request.first_name}} -- Last name: {{request.last_name}} -- Email: {{request.email}}
337                         {% else %}
338                             {% if request.type == 'slice' %}
339                         Slice name: {{request.slice_name}} -- Number of nodes: {{request.number_of_nodes}} -- Type of nodes: {{request.type_of_nodes}} -- Purpose: {{request.purpose}}
340                             {% else %} {# authority #}
341                         Authority name: {{request.site_name}} -- authority_hrn: {{request.site_authority}} -- City: {{request.address_city}} -- Country: {{request.address_country}}
342                             {% endif %}
343                        {% endif %}
344                                 </td>
345                                 <td>{{ request.timestamp }}</td>
346                         
347                                 <td><span id='portal__status__{{request.type}}__{{request.id}}'></span></td>
348         
349             <!--<div class='portal_validate_request {{request.type}} {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}'> -->
350                         {% endif %}
351                           </tr>
352                     {% endfor %}
353                     </table>
354         </div>
355         {% endif %}
356         {% endfor %}
357 {% else %}
358 <div class="col-md-12">
359         <i>There is no pending request waiting for validation.</i>
360 </div>
361 {% endif %}
362 <br />
363 <div class="col-md-12">
364         <button class="btn btn-onelab" type="button" id="portal__validate" onclick="on_click_event();"><span class="glyphicon glyphicon-ok"></span> Validate</button>
365         <button class="btn btn-danger" type="button" id="portal__reject" onclick="on_click_reject();"><span class="glyphicon glyphicon-remove"></span> Reject</button>
366 </div>