views.php 8.13 KB
Newer Older
1 2 3
<?php

class Views {
4

5 6 7 8 9 10 11 12 13 14 15 16 17 18
    private $admin;
    private $utclogin;
    private $surname;
    private $firstname;

    public function __construct ($admin, $utclogin, $surname, $firstname) {
      $this->admin=$admin;
      $this->utclogin=$utclogin;
      $this->surname=$surname;
      $this->firstname=$firstname;
    }

    public function isActive() {
      return $this->admin->isActive();
19 20
    }

Stephane Crozat's avatar
Stephane Crozat committed
21
    public function printHtmlBegin($admin) {
22 23 24 25 26 27 28
    echo '<html>';
    echo '<head>';
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>';
    echo '<title>Api Sub</title>';
    echo '<link href="css/main.css" type="text/css" rel="stylesheet"/>';
    echo '</head>';
    echo '<body>';
Stephane Crozat's avatar
Stephane Crozat committed
29
    echo '<h1>Foire aux Api '.$admin->activeSemester().$admin->activeYear().'</h1>';
30 31
    }

32
    public function printInstructions($row) {
Stephane Crozat's avatar
Stephane Crozat committed
33
        echo '<hr/>';
34 35
        echo '<h2>Catalogue</h2>';
        echo '<p>Les Api sont décrites ici : <b><a href="https://apint.utc.fr/cat">https://apint.utc.fr/cat</a></b>. Veillez à avoir bien lu la fiche avant de vous inscrire (pré-requis, dates...).</p>';
36
        echo '<h2>Instructions</h2>';
37 38 39
        echo '<ul>';
        echo '<li>Les Api sont ajoutées au fil du semestre par les responsables des Api. Dès qu\'une Api est ouverte, les étudiants peuvent commencer à s\'inscrire.';
        echo '<li><b>Règle d\'or : dès qu\'un responsable d\'Api a validé une inscription, celle-ci est irréversible (ni l\'enseignant ni l\'étudiant ne peuvent l\'annuler).</b> Si un étudiant était inscrit à d\'autres Api la même semaine, ces inscriptions sont annulées.</li>';
Stephane Crozat's avatar
Stephane Crozat committed
40 41
        echo '<li>Un étudiant peut s\'inscrire à plusieurs Api la même semaine, mais il ne pourra en suivre qu\'une seule. Il peut librement se désinscrire tant que l\'inscription n\'est pas validée.</li>';
        echo '<li>Si un reponsable d\'Api commence à valider des inscriptions, alors l\'Api sera nécessairement ouverte.</li>';
42
        echo '</ul>';
43 44
    }

45
    public function printUser($isResp, $isAdmin) {
Stephane Crozat's avatar
Stephane Crozat committed
46 47
        echo "<div class='user'><span class='name'>$this->firstname $this->surname</span> (<span class='login'>$this->utclogin</span>)</div>";
        echo "<div class='menu'>";
48
        if ($isResp) {
49
          echo '<a href="index.php?mode=resp">[Gérer ses Api]</a> ';
50 51
        }
        if ($isAdmin) {
52 53 54
          echo '<a href="index.php?mode=admin">[Super-pouvoirs]</a> ';
        }
        if ($isResp || $isAdmin) {
55
          echo '<a href="index.php">[Inscriptions]</a>';
56
        }
Stephane Crozat's avatar
Stephane Crozat committed
57
        echo "</div>";
Stephane Crozat's avatar
Stephane Crozat committed
58 59
    }

60
    private function printApi($row) {
61 62 63 64 65
      return "$row[normcode] - $row[name] (du $row[normdbegin] au $row[normdend]) [Demandes $row[nbask] | Inscriptions $row[nbval]/$row[size]]";
    }

    private function printWeek($row) {
      return "$row[year] Semaine $row[week]";
66
    }
67

68 69
    private function printStudent($row) {
      if (!$row['surname']) {
Stephane Crozat's avatar
Stephane Crozat committed
70
        return "$row[utclogin] $row[level]  <a href='mailto:$row[utclogin]@etu.utc.fr'>[mail]</a> <a href='https://demeter.utc.fr/portal/pls/portal30/portal30.get_photo_utilisateur?username=$row[utclogin]'>[photo]</a>";
71 72
      }
      else {
Stephane Crozat's avatar
Stephane Crozat committed
73
        return "$row[firstname] $row[surname] $row[level] <a href='mailto:$row[email]'>[mail]</a> <a href='https://demeter.utc.fr/portal/pls/portal30/portal30.get_photo_utilisateur?username=$row[utclogin]'>[photo]</a>";
74 75 76
      }
    }

77
    public function printSubList($list) {
78
      #KNOWN_BUB #TODO Il est possible de ses déinscrire en utilisant directement l'URL
79
      if ($list) {
Stephane Crozat's avatar
Stephane Crozat committed
80
        echo '<hr/>';
81
        echo '<h2>Vos inscriptions</h2>';
82
        $week = '';
83
        foreach ($list as $row) {
84 85 86 87
          if ($row['week'] != $week) {
            $week = $row['week'];
            echo "<h3>".$this->printWeek($row)."</h3>";
          }
88
          echo '<p>';
89
          if ($this->isActive()) {
90 91 92 93
            if ($row['validation']) {
              echo "<span class='validation'>[validé]</span> ";
            }
            else {
Stephane Crozat's avatar
Stephane Crozat committed
94
              echo "<a href='index.php?action=unsub&api=$row[id]' class='unsub'>[désinscription]</a> ";
95
            }
96
          }
97
          echo $this->printApi($row);
98 99 100 101 102 103 104
          echo '</p>';
        }
      }
      else {
        echo '<h2>Aucune inscription</h2>';
      }
    }
105

106
  public function printApiList($list) {
107
    if ($list) {
Stephane Crozat's avatar
Stephane Crozat committed
108
      echo '<hr/>';
109
      echo '<h2>Liste des Api</h2>';
110
      $week = '';
111
      foreach ($list as $row) {
112 113 114 115
        if ($row['week'] != $week) {
          $week = $row['week'];
          echo "<h3>".$this->printWeek($row)."</h3>";
        }
116
        echo '<p>';
117
        if ($this->isActive()) {
118
          if ($row['open'] && $row['is_available']) {
Stephane Crozat's avatar
Stephane Crozat committed
119
            echo "<a href='index.php?action=sub&api=$row[id]' class='sub'>[inscription]</a> ";
120 121
          }
          elseif (! $row['is_available']) {
122
            echo "[indisponible] ";
123 124 125 126
          }
          else {
            echo '[complet] ';
          }
127
        }
128
        echo $this->printApi($row);
129 130 131 132 133 134 135
        echo '</p>';
      }
    }
    else {
      echo '<h2>Aucune Api</h2>';
    }
  }
Stephane Crozat's avatar
Stephane Crozat committed
136

137
  public function respValidation ($listsub) {
138
    // #KNOWN_BUG Si un resp a plusieurs Api, il peut changer un inscrit entre ses deux Api en modifiant l'URL (pas via l'interface)
Stephane Crozat's avatar
Stephane Crozat committed
139 140 141 142 143 144 145 146

    echo '<h1>Interface Responsable d\'Api</h1>';
    echo '<hr/>';
    echo '<h2>Rappel</h2>';
    echo '<ul>';
    echo '<li>La validation d\'une inscription entraîne la confirmation de l\'ouverture de l\'Api.</li>';
    echo '<li>Toute inscription validée est irréversible.</li>';
    echo '</ul>';
147 148 149 150 151
    if ($listsub) {
      $api = '';
      foreach ($listsub as $sub) {
        if ($api != $sub['id']) {
          $api = $sub['id'];
Stephane Crozat's avatar
Stephane Crozat committed
152
          echo '<hr/>';
153
          echo "<h2><a href='api.php?api=$api'>".$this->printApi($sub).' 📷</a></h2>';
154
        }
155 156 157
        if ($sub['utclogin']) {
          if ($sub['validation']) {
            // Subscription already validated
158
            echo '<p><b>[validé] </b>'.$this->printStudent($sub).'</p>';
159 160 161
          }
          else if (is_null($sub['validation'])) {
            // At least one waiting subscription
Stephane Crozat's avatar
Stephane Crozat committed
162
            echo "<p> <a href='index.php?action=validate&api=$sub[id]&login=$sub[utclogin]&mode=resp' class='valid'>[valider]</a> ".$this->printStudent($sub)." <span>Exclusivité : $sub[indicator]%</span></p>";
163 164 165 166 167 168 169 170 171
          }
          else {
            // validation = FALSE lignes ignored
          }
        }
        else {
          // Not yet any subscription for this Api (LEFT JOIN might have add null student line)
          echo "<p>Aucune inscription à gérer</p>";
        }
172 173 174 175 176
      }
    }
    else {
      echo "<p>Aucune Api à gérer</p>";
    }
177 178
  }

Stephane Crozat's avatar
Stephane Crozat committed
179 180 181
  public function apiStudents($students) {
    echo "<hr/>";
    if (isset($students[0])) {
182
      // Api Title
Stephane Crozat's avatar
Stephane Crozat committed
183
      echo '<h2>'.$this->printApi($students[0]).'</h2>';
184
      // Api mailing list
185 186 187 188
      $mailinglist='mailto:';
      foreach ($students as $s) {
        $mailinglist = $mailinglist."$s[email],";
      }
189 190 191 192 193 194 195 196 197
      // Api CSV data (for JavaScript function)
      echo '<script src="js/main.js"></script>';
      echo "<script>var csvstudents = [['Nom','Prénom','Niveau','Mail','Login'],";
      foreach ($students as $s) {
        echo "['$s[surname]','$s[firstname]','$s[level]','$s[email]','$s[utclogin]'],";
      }
      echo "];</script>";
      // Api Menu
      echo "<div class='menu'><a href='$mailinglist'>[Mailing list]</a> <a id='csvlink' onclick='download_csv(csvstudents)' href=''>[Fichier CSV]</a></div>";
198
      echo "<hr/>";
Stephane Crozat's avatar
Stephane Crozat committed
199 200
    }
    else {
201
      echo '<h2>Aucun inscrit validé</h2>';
Stephane Crozat's avatar
Stephane Crozat committed
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
    }
    foreach ($students as $s) {
      echo "<div class='student'>
        <img  src='https://demeter.utc.fr/portal/pls/portal30/portal30.get_photo_utilisateur?username=$s[utclogin]'
              height='100px'
              width='100px'/>
        <span class='name'>$s[surname] $s[firstname] | $s[level] | <a href='mailto:$s[email]'>$s[email]</a> ($s[utclogin])</span>
        </div>";
    }
  }

  public function apiStudentsCsv($students) {
    //TODO
    foreach ($students as $s) {
        echo "$s[surname];$s[firstname];$s[level];$s[email];$s[utclogin]\n";
    }
  }

220
  public function adminFunction ($utclogin) {
221
    echo "<p>Je dois vérifier que $utclogin a vraiment des super-pouvoirs...</p>";
222
  }
223
}