예제 #1
0
 function view($niveau, $ue = null)
 {
     $str = "ei" . $niveau;
     $cours[$str] = $this->reseau->find(array('conditions' => " net_niveau   = " . intval($niveau) . " " . (isset($ue) ? "AND net_nom = " . Functions::squote(strtolower($ue)) : ""), 'order' => 'net_options ASC'));
     $cours[$str]['nom'] = "EI" . $niveau;
     if (empty($cours)) {
         $message = Conf::DEBUG ? "Erreur [" . get_class($this) . " " . __LINE__ . "] : Un des paramètres n'est pas configuré." : "Le chemin " . $params . " n'existe pas.";
         $this->error($message);
     }
     $ue = isset($ue) ? $ue : 'algpr';
     $variables['link_cours'] = '?download/a/' . $niveau . '/' . $ue;
     $variables['cours_niveau'] = $niveau;
     $variables['cours'] = $cours;
     $this->myrender(array('menu' => 'menu', 'title' => 'Modules des EI' . strtoupper($niveau), 'view' => 'view', 'variables' => $variables));
 }
예제 #2
0
 private function receive_form($options)
 {
     if (empty($options['action'])) {
         return null;
     }
     $data['errors'] = array();
     $data['notifications'] = array();
     $data['form'] = array();
     if (!empty($this->request->data)) {
         Session::set('saveForm', $this->request->data);
         unset($this->request->data);
         switch ($options['action']) {
             case 'index':
                 $this->redirect('?home/' . $options['action']);
                 break;
             case 'groupe':
                 $this->redirect('?home/' . $options['action'] . '/' . $options['params'][0]);
                 break;
             case 'reseau':
                 $this->redirect('?home/' . $options['action'] . '/' . $options['params'][0]);
                 break;
         }
     }
     $donnees = Session::get('saveForm');
     if (!empty($donnees)) {
         Session::del('saveForm');
         $form['resume'] = PregFucntions::sanitize_string($donnees['resume']);
         $v = $donnees['visibility'];
         $n = $donnees['net'];
         $g = $donnees['gr'];
         switch ($v[0]) {
             case '0':
                 $n = 0;
                 $g = 0;
                 $form['concerne'] = 'Tous';
                 break;
             case 'r':
                 $n = substr($v, 2, strlen($v));
                 $g = 0;
                 $form['concerne'] = $n;
                 break;
             case 'g':
                 $n = 0;
                 $g = substr($v, 2, strlen($v));
                 $form['concerne'] = $g;
                 break;
         }
         if (!$this->history->add(array('tables' => 'history', 'values' => '\'\',' . $options['user']['mem_id'] . ',' . Functions::squote($form['concerne']) . ',' . Functions::squote($form['resume']) . ',' . 'NOW(),' . $n . ',' . $g))) {
             $data['errors'][] = "Le post n'a pas été  soumis correctement, veuillez ressayer plus tard.";
         } else {
             $data['notifications'][] = "Le message a correctement été envoyé.";
         }
     }
     return $data;
 }
예제 #3
0
 function inscription_reseau($query)
 {
     /* on découpe l'url controllée par controlParam() 
      * ?ajax/inscription_reseau/net_id:mem_id 
      */
     $data = explode(':', urldecode(htmlentities($this->controlParam())));
     // 0:concerne, 1:resume
     foreach ($data as $key => $value) {
         $data[$key] = intval($value);
     }
     /* On vérifie la connexion */
     if (!$this->session->islogged()) {
         return false;
     }
     /* Si la requete provient d'un autre site ou ou n'a pas de http_referer (a été directement écrite dans l'url)  */
     if ($this->request->is('no-origin')) {
         echo 'Erreur [JAX ' . __LINE__ . '] : La requête a échouée.';
         return false;
     }
     $reponse = $this->contact_membre->add(array('tables' => ' reseau_membre ', 'values' => $data[0] . "," . $data[1]));
     $files = $this->membre->findFirst(array('tables' => ' membre ', 'champs' => 'mem_login', 'conditions' => "mem_id=" . $data[1]));
     if ($reponse !== false && $user !== false) {
         //On ajoute le message à l'historique
         $this->history->add(array('tables' => 'history', 'values' => "''," . $data[1] . "," . Functions::squote("Inscription au réseau") . "," . Functions::squote(strtoupper($user->mem_login) . " vient de rejoindre le réseau") . ",NOW()," . $data[0] . ",0"));
     }
     return $reponse;
 }
예제 #4
0
 function load($age, $eix, $ue, $dir = null, $paramtoken = null)
 {
     if (!$this->session->islogged()) {
         $this->redirect("?membre/login");
     }
     if (!isset($paramtoken)) {
         $message = "Vous tentez d'accéder à un répertoire inexistant.";
         $this->error($message);
         exit;
     }
     $dir = urldecode(str_replace('~', '/', $dir));
     $path = $age == 'a' ? 'filesOld' : 'files';
     //a ancien
     $path .= strtolower(DS . 'ei' . $eix . DS . $ue . DS . (!empty($dir) ? $dir != 'dir' ? $dir . DS : '' : ''));
     //$file = BASE_URL.DS.$path.Session::getReverseToken($paramtoken);
     if ($age == 'a') {
         $token = Session::getReverseToken($paramtoken);
         $filename = $token;
     } elseif ($age == 'n') {
         $get = $this->document->findFirst(array('conditions' => " doc_code = " . Functions::squote($paramtoken)));
         $path = $get->doc_path;
         $filename = $get->doc_name;
     }
     $file = '..' . DS . $path . $filename;
     if (file_exists($file)) {
         $size = filesize($file);
         $erreurs = $this->force_telechargement(array('filename' => $filename, 'type' => 'application/octet-stream', 'size' => $size, 'dir' => $path, 'complete_name' => $file));
         if ($erreurs[0] && $age == 'a') {
             Session::delToken($token);
             Session::addToken($token);
             $tmpFile = $this->document->findFirst(array('tables' => " openu_oldfiles ", 'conditions' => " path LIKE '%" . $file . "%'", 'fecthMethod' => PDO::FETCH_ASSOC));
             // enregistrement du nombre de téléchargement
             if (!empty($tmpFile)) {
                 $this->document->upDate(array('tables' => " openu_oldfiles ", 'affectations' => "hits = hits+1", 'conditions' => " path LIKE '%" . $file . "%'", 'fecthMethod' => PDO::FETCH_ASSOC));
             }
             /**
             Enregistrement de l'activité sur les OldFiles
             */
             //l'activité est créée automatiquement à la connexion
             $this->document->upDate(array('tables' => 'activite_membre', 'affectations' => "nb_down = nb_down+1", 'conditions' => ' id_user = '******'membre']['mem_id']));
         } else {
             $this->error($erreurs[1]);
             return false;
         }
     }
     $list = Script::_multi_script(array(array('action' => 'ready', 'element' => 'body', 'name' => 'body', 'code' => "setTimeout('self.close()',10000);")));
     /*Les champs obligatoires pour le type _query : toReload, "query, #element, #reponse , "method, "url*/
     $variables['mesScripts'] = $list['s'];
     //définitions des fonctions => dans le header
     $variables['mesScriptsFunc'] = $list['d'];
     $variables['file'] = $file;
     $this->myrender(array('menu' => 'menu', 'title' => 'Telechargement de la ressource en cours', 'view' => 'load', 'variables' => $variables));
 }
예제 #5
0
 function parrainer()
 {
     if (!$this->session->islogged()) {
         $this->redirect("?membre/login");
     }
     $erreurs = array();
     $notifications = array();
     $soumis = $this->request->data ? $this->request->data : null;
     $form = array('mail' => '');
     if (Session::getToken('parrainage') === false) {
         Session::addToken(array('name' => 'parrainage', 'limit_time' => 10 * 60, 'time' => time()));
     }
     $token = Session::getToken('parrainage');
     if ($soumis) {
         // à ce niveau, le formulaire a été envoyé.
         /* Si la requete provient d'un autre site ou n'a pas de http_referer (a été directement écrite dans l'url)
          * on la rejette illico
          */
         //on rejette les requetes extérieures ou tapées dans l'url ou par un autre moyen que post
         if ($this->request->is('no-origin') || !Session::isValidToken('parrainage')) {
             $message = conf::DEBUG ? 'Erreur [MEM ' . __LINE__ . '] : La requête a échouée. Veuillez réactualiser la page.' : 'Le jeton CRSF a expiré. Veuillez réactualiser la page.';
             $this->error($message);
             return false;
         }
         //on vérifie aussi que le token enregistré et celui envoyé sont les mêmes
         if ($token['value'] !== $soumis['token']) {
             $this->redirect('?membre/parrainer/');
         }
         if (empty($erreurs)) {
             $_SESSION['saveform'] = $soumis;
             unset($soumis);
             $this->redirect('?membre/parrainer/');
         }
     }
     if (isset($_SESSION['saveform'])) {
         $soumis = $_SESSION['saveform'];
         unset($_SESSION['saveform']);
         if (!Session::isValidToken('parrainage')) {
             $this->error("Le temps de soumission est dépassé. Veuillez recharger la page.");
             return false;
         }
         $form = array('mail' => PregFucntions::sanitize_string($soumis['mail']));
         //on s'assure que le mail est inexistant dans la table des membres
         $find = $this->membre->find(array('conditions' => 'mem_mail = ' . $form['mail'], 'fecthMethod' => PDO::FETCH_ASSOC));
         if ($find) {
             $erreurs[] = "Le mail est déjà utilisé.";
         }
         if (!(substr($form['mail'], strrpos($form['mail'], '@')) === '@eleves.ec-nantes.fr')) {
             $erreurs[] = "Vous n'êtes pas de l'école Centrale. Il vous faut un mail du type xxx@eleves.ec-nantes.fr";
         }
         if (empty($erreurs)) {
             // ajout à la table parrainage
             $token_de_validation = Session::genereToken();
             $this->membre->add(array('tables' => ' parrainage ', 'values' => " " . Functions::squote($_SESSION['membre']['mem_id']) . ",'-1'" . "," . Functions::squote($form['mail']) . "," . "NOW()" . ",'0'" . "," . Functions::squote($token_de_validation)));
             //Envoyer le mail au fillot
             if ($this->mail(array('config' => 'nacder.net', 'destinataire' => $form['mail'], 'expediteur' => Conf::$mail['default']['no-reply'], 'aliasExpediteur' => constant('site_i_name'), 'objet' => "[" . constant('site_i_name') . "] - Confirmez votre parrainage", 'message' => Mail::_messageParrainage(array('parrain_login' => $_SESSION['membre']['mem_login'], 'parrain_mail' => $_SESSION['membre']['mem_mail'], 'fillot_mail' => $form['mail'], 'mem_token' => $token_de_validation, 'logo' => Conf::$mail['default']['logo']))))) {
                 $notifications[] = "Votre requête a été transmise.";
             } else {
                 $erreurs[] = "La requête n'a pas pu être envoyée à l'adresse donnée.";
             }
         }
         Session::addToken(array('name' => 'parrainage', 'limit_time' => 10 * 60, 'time' => time()));
     }
     $variables['soumis'] = $soumis;
     $variables['erreurs'] = $erreurs;
     $variables['notifications'] = $notifications;
     $form['token'] = $token['value'];
     $variables['form'] = $form;
     $this->myrender(array('menu' => 'menu', 'title' => 'Espace Parrainage', 'view' => 'parrainage', 'variables' => $variables));
 }
예제 #6
0
 public static function _query($options)
 {
     //require #toReload, "query, #element, #reponse , "method, "url
     if (!isset($options['query']) || !isset($options['element']) || !isset($options['reponse']) || !isset($options['method']) || !isset($options['url'])) {
         return null;
     }
     //if(!isset($options['time'])) $options['time'] = '1000';
     $form = '';
     $method = 0;
     if (strtolower(trim($options['method'])) == 'post') {
         $method = 1;
         if (!isset($options['formID'])) {
             return null;
         }
         $form .= '$form = $("#' . $options['formID'] . '");';
         $form .= 'var $inputs = $form.find("input, select, button, textarea");';
         $form .= 'var serializedData = $form.serialize();';
         $form .= '$inputs.prop("disabled", true);';
         $options['query'] = 'serializedData';
     }
     $form .= "\$.ajax({";
     $form .= "type : " . Functions::squote($options['method']) . ",";
     $form .= "url : " . Functions::squote($options['url']) . ",";
     $form .= "data : " . ($method == 0 ? Functions::squote($options['query']) : $options['query']) . ",";
     $form .= "success : function(server_response){";
     if (isset($options['toReload'])) {
         $form .= "\$('" . $options['toReload'] . "').load(" . Functions::squote($options['url']) . ");";
     }
     if (isset($options['reponse'])) {
         if (!isset($options['time'])) {
             $form .= "\$('" . $options['reponse'] . "').html(server_response).fadeIn(2000);";
         } else {
             $form .= "\$('" . $options['reponse'] . "').html(server_response).fadeIn(2000).fadeOut(" . $options['time'] . ");";
         }
     }
     $form .= "}";
     $form .= "});";
     $options['code'] = $form . $options['code'];
     if ($method == 1) {
         $options['code'] .= ' $inputs.prop("disabled", false);';
     }
     return self::_script($options);
 }
예제 #7
0
 function index()
 {
     if (!$this->session->islogged()) {
         $this->redirect("?membre/login");
     }
     //on crée le jeton s'il n'existe pas
     if (Session::getToken('uploadDefichier') === false) {
         Session::addToken(array('name' => 'uploadDefichier', 'limit_time' => 10 * 60, 'time' => time()));
     }
     $soumis = null;
     $erreurs = array();
     $notifications = array();
     /* petite manipulation pour éviter les soumissions multiples de formulaire ...
      * le souci avec cette méthode c'est qu'elle ne préserve pas le fichier téléchargé après la redirection
      * il faut donc le sauvegarder avant de rediriger. La sauvegarde s'effectue dans un fichier temporaire
      * sous condition que le fichier soit valide
      */
     if ($this->request->data) {
         $soumis = $this->request->data;
         $soumisfile = $this->request->datafile;
         /* à ce niveau, le formulaire a été envoyé.
          * Si la requete provient d'un autre site ou n'a pas de http_referer (a été directement écrite dans l'url)
          * on la rejette illico
          */
         if ($this->request->is('external') || $this->request->is('no-origin') || !Session::isValidToken('uploadDefichier')) {
             $message = 'Erreur [DLU ' . __LINE__ . '] : La requête a échouée. Veuillez réactualiser la page.';
             $this->error($message);
             return false;
         }
         $t = Session::getToken('uploadDefichier');
         if ($t['value'] !== $soumis['token']) {
             $erreurs[] = "Le formulaire n'est plus valide.";
         }
         // on sauvegarde le fichier avec les seuls droits de lecture si la taille est bonne et aucune erreur détectée
         $upload_max_file = PregFucntions::return_bytes(ini_get('upload_max_filesize'));
         $size = filesize($soumisfile['fichier']['tmp_name']);
         if (empty($erreurs) && $size <= $upload_max_file) {
             $valid = $this->anyErrorFile($soumisfile['fichier']['error']);
             if ($valid) {
                 $name = $soumisfile['fichier']['name'];
                 $path = UPLOADS . DS . $soumisfile['fichier']['name'];
                 if ($this->moveFile($soumisfile['fichier']['tmp_name'], $path, 0444)) {
                     $_SESSION['saveform'] = $soumis;
                     $_SESSION['saveformfile'] = $path;
                     unset($soumis);
                     unset($soumisfile);
                     header('Location: ' . Router::url('?upload/index/'));
                     exit;
                 } else {
                     $erreurs[] = "Une erreur est survenue.";
                     $erreurs[] = "Il se pourrait que votre fichier ne respecte pas les règles de sécurité.";
                 }
             } else {
                 $erreurs[] = $valid;
             }
         } else {
             $erreurs[] = "La limite autorisée est de " . ini_get('upload_max_filesize') . "o";
         }
     }
     // ... suite de la manipulation et déplacement du fichier vers sa destination finale
     if (isset($_SESSION['saveform'])) {
         // à ce niveau, il ne sert à rien de continuer si le jeton est invalide. D'ailleurs on le supprime
         if (!Session::isValidToken('uploadDefichier')) {
             $message = "Le temps de soumission est dépassé. Veuillez recharger la page.";
             $this->error($message);
             return false;
         }
         //récupération des données et suppression des varibles de session
         $soumis = $_SESSION['saveform'];
         $soumisfile = $_SESSION['saveformfile'];
         unset($_SESSION['saveform']);
         unset($_SESSION['saveformfile']);
         //on récupère les données du formulaire
         $form = array('year' => $soumis['year'], 'ue' => $soumis['ue'], 'catg' => strtolower($soumis['catg']), 'name' => basename($soumisfile), 'size' => filesize($soumisfile), 'path' => 'files/ei' . $soumis['year'] . '/' . $soumis['ue'] . '/' . $soumis['catg'] . '/', 'code' => Session::genereToken(), 'valid' => 0);
         // On s'assure que le token généré est unique dans la base de données
         while ($this->document->find(array('conditions' => 'doc_code=\'' . $form['code'] . '\'', 'fecthMethod' => PDO::FETCH_ASSOC))) {
             $form['code'] = Session::genereToken();
         }
         //on s'assure que le cours corrsepond à l'année Ex: algpr => ei1
         $find = $this->reseau->find(array('conditions' => 'net_niveau = ' . $form['year'] . ' AND net_nom = ' . Functions::squote($form['ue']) . ' ', 'fecthMethod' => PDO::FETCH_ASSOC));
         if ($find) {
             //On place les fichiers au bon endroit
             $path = DWLOADS_short . DS . $form['path'] . $form['name'];
             if ($this->renameFile($soumisfile, $path)) {
                 /* Puisque le fichier a déjà été contrôlé, on l'ajoute aisément dans la base de données puis dans le 
                  * bon répertoire, mais avec le statut non approuvé par l'admin, soit mem_etat = 0 
                  */
                 if ($this->document->add(array('values' => " ''," . Functions::squote($form['name']) . "," . Functions::squote($form['path']) . "," . $form['size'] . "," . $form['year'] . "," . Functions::squote($form['ue']) . "," . Functions::squote($form['catg']) . "," . Functions::squote($form['code']) . ",0,NOW()")) === true) {
                     $notifications[] = "Votre fichier a bien été uploadé sous le nom : " . $form['name'];
                     $notifications[] = "Votre fichier a bien été uploadé et attend d'être validé. ";
                 } else {
                     $erreurs[] = "[1] Une erreur est survenue lors de la migration des fichiers.";
                 }
             } else {
                 $erreurs[] = "[2] Une erreur est survenue lors de la migration des fichiers.";
             }
         } else {
             $erreurs[] = "Le module mentionné ne correspond pas à l'année choisie.";
             chmod($soumisfile, 0777);
             unlink($soumisfile);
         }
         //Une fois le formulaire soumis, on génère un nouveau jeton, et ce quelque soit l'issue (formulaire validé ou non, envoyé ou non)
         Session::addToken(array('name' => 'uploadDefichier', 'limit_time' => 10 * 60, 'time' => time(), 'erase' => true));
     }
     $list_ue['ei1'] = $this->reseau->find(array('conditions' => 'net_niveau=1', 'fecthMethod' => PDO::FETCH_ASSOC));
     $list_ue['ei2'] = $this->reseau->find(array('conditions' => 'net_niveau=2', 'fecthMethod' => PDO::FETCH_ASSOC));
     $list_ue['ei3'] = $this->reseau->find(array('conditions' => 'net_niveau=3', 'fecthMethod' => PDO::FETCH_ASSOC));
     $list_catg = array('ds' => 'Enoncés de Devoirs Surveillés', 'dsc' => 'Corrigés de Devoirs Surveillés', 'ta' => 'Travaux en Autonomie', 'tp' => 'Travaux Pratiques');
     if (empty($list_ue)) {
         $message = Conf::DEBUG ? "Erreur [" . get_class($this) . " " . __LINE__ . "]." : "Erreur [ DLU " . __LINE__ . " ] : un problème est survenu lors du chargement de la page.";
         $this->error($message);
     }
     $variables['soumis'] = $soumis;
     $variables['erreurs'] = $erreurs;
     $variables['notifications'] = $notifications;
     $variables['list_ue'] = $list_ue;
     $variables['list_catg'] = $list_catg;
     $this->myrender(array('menu' => 'menu', 'title' => 'Espace Upload', 'view' => 'index', 'variables' => $variables));
     unset($soumis);
     unset($soumisfile);
 }