admin: add wchoices in team_history.json
authorPierre-Olivier Mercier <nemunaire@nemunai.re>
Sun, 9 Dec 2018 18:26:34 +0000 (19:26 +0100)
committerPierre-Olivier Mercier <nemunaire@nemunai.re>
Sun, 9 Dec 2018 23:31:29 +0000 (00:31 +0100)
admin/index.go
admin/static/index.html
admin/static/views/team-edit.html
libfic/team_history.go

index d0a334e..0461bec 100644 (file)
@@ -18,10 +18,13 @@ const indextpl = `<!DOCTYPE html>
       white-space: nowrap;
     }
     .bg-mfound {
-      background-color: #7bcfd0;
+      background-color: #7bcfd0 !important;
     }
     .bg-ffound {
-      background-color: #7bdfc0;
+      background-color: #7bdfc0 !important;
+    }
+    .bg-wchoices {
+      background-color: #c07bdf !important;
     }
     </style>
     <base href="{{.urlbase}}">
index 3ea5b0a..359b58c 100644 (file)
       white-space: nowrap;
     }
     .bg-mfound {
-      background-color: #7bcfd0;
+      background-color: #7bcfd0 !important;
     }
     .bg-ffound {
-      background-color: #7bdfc0;
+      background-color: #7bdfc0 !important;
+    }
+    .bg-wchoices {
+      background-color: #c07bdf !important;
     }
     </style>
     <base href="/admin/">
index 401a090..f79baa5 100644 (file)
@@ -96,7 +96,7 @@
 <div class="col-lg-4">
   <table ng-controller="TeamHistoryController" class="table table-hover table-striped table-bordered bg-primary text-light">
     <tbody>
-      <tr ng-repeat="row in history" ng-class="{'bg-ffound': row.kind == 'flag_found', 'bg-mfound': row.kind == 'mcq_found', 'bg-success': row.kind == 'solved', 'bg-info': row.kind == 'hint', 'bg-warning': row.kind == 'key_found'}">
+      <tr ng-repeat="row in history" ng-class="{'bg-ffound': row.kind == 'flag_found', 'bg-mfound': row.kind == 'mcq_found', 'bg-wchoices': row.kind == 'wchoices', 'bg-success': row.kind == 'solved', 'bg-info': row.kind == 'hint', 'bg-warning': row.kind == 'tries'}">
        <td>
          <nobr>{{ row.time | date:"mediumTime" }}</nobr><br>{{ row.kind }}
        </td>
index e57db12..b7bf484 100644 (file)
@@ -8,7 +8,13 @@ import (
 func (t Team) GetHistory() ([]map[string]interface{}, error) {
        hist := make([]map[string]interface{}, 0)
 
-       if rows, err := DBQuery(`SELECT id_team, "tries" AS kind, time, E.id_exercice, E.title, NULL, NULL FROM exercice_tries T INNER JOIN exercices E ON E.id_exercice = T.id_exercice WHERE id_team = ? UNION SELECT id_team, "solved" AS kind, time, E.id_exercice, E.title, coefficient, NULL FROM exercice_solved S INNER JOIN exercices E ON E.id_exercice = S.id_exercice WHERE id_team = ? UNION SELECT id_team, "hint" AS kind, time, E.id_exercice, E.title, H.id_hint, H.title FROM team_hints T INNER JOIN exercice_hints H ON H.id_hint = T.id_hint INNER JOIN exercices E ON E.id_exercice = H.id_exercice WHERE id_team = ? UNION SELECT id_team, "flag_found" AS kind, time, E.id_exercice, E.title, K.id_flag, K.type FROM flag_found F INNER JOIN exercice_flags K ON K.id_flag = F.id_flag INNER JOIN exercices E ON K.id_exercice = E.id_exercice WHERE id_team = ? UNION SELECT id_team, "mcq_found" AS kind, time, E.id_exercice, E.title, Q.id_mcq, Q.title FROM mcq_found F INNER JOIN exercice_mcq Q ON Q.id_mcq = F.id_mcq INNER JOIN exercices E ON Q.id_exercice = E.id_exercice WHERE id_team = ? ORDER BY time DESC`, t.Id, t.Id, t.Id, t.Id, t.Id); err != nil {
+       if rows, err := DBQuery(`SELECT id_team, "tries" AS kind, time, E.id_exercice, E.title, NULL, NULL FROM exercice_tries T INNER JOIN exercices E ON E.id_exercice = T.id_exercice WHERE id_team = ? UNION
+                                 SELECT id_team, "solved" AS kind, time, E.id_exercice, E.title, coefficient, NULL FROM exercice_solved S INNER JOIN exercices E ON E.id_exercice = S.id_exercice WHERE id_team = ? UNION
+                                 SELECT id_team, "hint" AS kind, time, E.id_exercice, E.title, H.id_hint, H.title FROM team_hints T INNER JOIN exercice_hints H ON H.id_hint = T.id_hint INNER JOIN exercices E ON E.id_exercice = H.id_exercice WHERE id_team = ? UNION
+                                 SELECT id_team, "wchoices" AS kind, time, E.id_exercice, E.title, F.id_flag, F.type FROM team_wchoices W INNER JOIN exercice_flags F ON F.id_flag = W.id_flag INNER JOIN exercices E ON E.id_exercice = F.id_exercice WHERE id_team = ? UNION
+                                 SELECT id_team, "flag_found" AS kind, time, E.id_exercice, E.title, K.id_flag, K.type FROM flag_found F INNER JOIN exercice_flags K ON K.id_flag = F.id_flag INNER JOIN exercices E ON K.id_exercice = E.id_exercice WHERE id_team = ? UNION
+                                 SELECT id_team, "mcq_found" AS kind, time, E.id_exercice, E.title, Q.id_mcq, Q.title FROM mcq_found F INNER JOIN exercice_mcq Q ON Q.id_mcq = F.id_mcq INNER JOIN exercices E ON Q.id_exercice = E.id_exercice WHERE id_team = ?
+                                 ORDER BY time DESC`, t.Id, t.Id, t.Id, t.Id, t.Id, t.Id); err != nil {
                return nil, err
        } else {
                defer rows.Close()
@@ -64,6 +70,14 @@ func (t Team) DelHistoryItem(kind string, h time.Time, primary *int64, secondary
                } else {
                        return nb, err
                }
+       } else if kind == "wchoices" && primary != nil {
+               if res, err := DBExec("DELETE FROM team_wchoices WHERE id_team = ? AND time = ? AND id_flag = ?", t.Id, h, *secondary); err != nil {
+                       return 0, err
+               } else if nb, err := res.RowsAffected(); err != nil {
+                       return 0, err
+               } else {
+                       return nb, err
+               }
        } else if kind == "flag_found" && secondary != nil {
                if res, err := DBExec("DELETE FROM flag_found WHERE id_team = ? AND time = ? AND id_flag = ?", t.Id, h, *secondary); err != nil {
                        return 0, err