// Menu $template->assign_block_vars('MENU', array('LIEN' => 'index.php', 'TEXTE' => 'Accueil')); $template->assign_block_vars('MENU', array('LIEN' => 'index.php?mod=liste_projets', 'TEXTE' => 'Projets')); // Connexion if ($utilisateur->estAnonyme()) { $template->assign_block_vars('MENU2_CONN', array()); } else { $template->assign_block_vars('MENU2_DECO', array('PSEUDO' => $utilisateur->pseudo())); } // Page d'administration if ($utilisateur->autorise(PERM_MANAGE_USERS) || $utilisateur->autorise(PERM_MANAGE_PROJECT)) { $template->assign_block_vars('LIEN_ADMIN', array()); } if (in_array($mod, array('index', 'projet', 'liste_projets', 'edit_projet', 'versions', 'demande', 'liste_demandes', 'edit_demande', 'connexion', 'deconnexion', 'perso', 'admin', 'edit_user'))) { // Appel du module spécifié include 'mod/' . $mod . '.inc.php'; $template->assign_var_from_handle('ROOT_CONTENT', $mod); if ($conf['debug']) { $db->report(); } header('Content-type: text/html; charset=utf-8'); $template->pparse('root'); } else { if ($mod == 'rss') { include 'mod/' . $mod . '.inc.php'; $template->pparse($mod); } else { // Erreur : pas de module de ce nom erreur_fatale('Erreur : Module invalide !'); } }
} else { if (!isset($_GET['projet']) || intval($_GET['projet']) == 0) { erreur_fatale('Erreur : projet non spécifié'); } $st = $db->prepare('SELECT * FROM projets WHERE id=?'); $st->execute(array($_GET['projet'])); if (!($projet = $st->fetch(PDO::FETCH_ASSOC))) { erreur_fatale('Erreur : projet invalide !'); } } // Vérification des permissions if (isset($demande) && !$utilisateur->autorise(PERM_MANAGE_REQUESTS, $demande['projet']) || !isset($demande) && !$utilisateur->autorise(PERM_CREATE_REQUEST, $projet['id'])) { if (isset($demande)) { erreur_fatale("Erreur : vous n'avez pas la permission de modifier cette demande !"); } else { erreur_fatale("Erreur : vous n'avez pas la permission de créer une demande sur ce projet !"); } } //------------------------------------------------------------------------------ // Traitement des données reçues // Mise à jour if (isset($demande)) { // 0 : rien de changé // 1 : toutes modifications réussies // 2 : erreur $edited = 0; $modifs = ''; // Changement de la version cible if ($edited != 2 && isset($_POST['dem_version']) && ($_POST['dem_version'] != '0' || $demande['version'] != NULL) && $_POST['dem_version'] != $demande['version'] && check_token()) { if ($_POST['dem_version'] != '0') { $st = $db->prepare('SELECT * FROM versions WHERE projet=:projet AND id=:version');
<?php // mod/versions.inc.php : Versions du projet, avec leur description, leur état d'avancement et les demandes liées if (!isset($template)) { die; } if (isset($_GET['id']) && intval($_GET['id']) > 0) { $projet = intval($_GET['id']); } else { erreur_fatale('Erreur : projet non spécifié.'); } // Requête SQL $st = $db->prepare('SELECT * from versions WHERE projet=? ORDER BY position'); $st->execute(array($projet)); // Pas de résultat if ($st->rowCount() == 0) { $template->assign_block_vars('ZERO_VERSIONS', array()); } else { // Requête SQL : demandes associées $st2 = $db->prepare('SELECT * FROM demandes WHERE projet=:projet AND version=:version'); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { $template->assign_block_vars('VERSION', array('NOM' => htmlentities($row['nom'], ENT_COMPAT, 'UTF-8'), 'DESCR' => wikicode2html($row['description']))); // FIXME : trop de requêtes SQL ? $st2->execute(array(':projet' => $projet, ':version' => $row['id'])); // Pas de résultat if ($st2->rowCount() == 0) { $template->assign_block_vars('VERSION.ZERO_DEMANDES', array()); } else { while ($demande = $st2->fetch(PDO::FETCH_ASSOC)) { $template->assign_block_vars('VERSION.DEMANDE', array('ID' => $demande['id'], 'TITRE' => htmlentities($demande['titre'], ENT_COMPAT, 'UTF-8'), 'AUTEUR' => $demande['auteur'], 'DESCR' => $demande['description'], 'STATUT' => $demande['statut'] == 0 ? 'ferme' : 'ouvert')); }
} else { $filtres = ''; } // Lien vers le flux RSS if (isset($projet)) { $template->assign_block_vars('HEAD_BALISE', array('HTML' => '<link rel="alternate" type="application/rss+xml" href="index.php?mod=rss&projet=' . $projet . '" title="Flux RSS des demandes" />')); } else { $template->assign_block_vars('HEAD_BALISE', array('HTML' => '<link rel="alternate" type="application/rss+xml" href="index.php?mod=rss" title="Flux RSS des demandes" />')); } // Numéro de page $page = 1; if (isset($_GET['page'])) { if (intval($_GET['page']) > 0) { $page = intval($_GET['page']); } else { erreur_fatale('Erreur : numéro de page invalide'); } } // Requête SQL $nb = $conf['demandes_nb_resultats']; // FIXME : requête pas jolie. Risques d'injection ? $st = $db->query('SELECT d.id, d.titre, d.description, d.priorite, d.statut, d.creation, d.derniere_activite, d.projet AS projet_id, p.nom AS projet, v.nom AS version, u.pseudo, u.nom AS nom_auteur, u.promotion FROM demandes d INNER JOIN projets p ON d.projet=p.id LEFT OUTER JOIN versions v ON d.version=v.id LEFT OUTER JOIN utilisateurs u ON d.auteur=u.id ' . $filtres . ' ORDER BY d.priorite, d.derniere_activite DESC LIMIT ' . ($page - 1) * $nb . ', ' . ($nb + 1)); // Pas de résultat if ($st->rowCount() == 0) {
// Récupération des données du projet, si 'id' est spécifié if (isset($_GET['id'])) { // Nom et description $projet = $_GET['id']; $st = $db->prepare('SELECT * FROM projets WHERE id=?'); $st->execute(array($projet)); if (!($projet = $st->fetch(PDO::FETCH_ASSOC))) { erreur_fatale('Erreur : Projet invalide !'); } } // Vérification des permissions if (!$utilisateur->autorise(PERM_MANAGE_PROJECT, isset($projet) ? $projet['id'] : null)) { if (isset($projet)) { erreur_fatale("Erreur : vous n'avez pas la permission de modifier ce projet !"); } else { erreur_fatale("Erreur : vous n'avez pas la permission de créer un projet !"); } } //------------------------------------------------------------------------------ // Traitement des données reçues // Projet existant if (isset($projet)) { $edited_ok = true; // Ajout d'un membre if (isset($_POST['proj_mem_add_sub']) && isset($_POST['proj_mem_add']) && check_token(false)) { $new_utilisateur = intval($_POST['proj_mem_add'], 10); $admin = isset($_POST['proj_mem_add_admin']) ? intval($_POST['proj_mem_add_admin']) : 0; $st = $db->prepare('SELECT id FROM utilisateurs WHERE id=?'); $st->execute(array($new_utilisateur)); if ($st->rowCount() > 0) { $st = $db->prepare('SELECT utilisateur FROM association_utilisateurs_projets WHERE utilisateur=:utilisateur AND projet=:projet');
// mod/edit_user.inc.php : Ajoute ou modifie un utilisateur et change ses permissions if (!isset($template)) { die; } // Vérification des permissions if (!$utilisateur->autorise(PERM_MANAGE_USERS)) { erreur_fatale("Erreur : vous n'avez pas la permission de gérer les utilisateurs !"); } // Récupération des données de l'utilisateur, si 'id' est spécifié if (isset($_GET['id'])) { // Nom et description $user = $_GET['id']; $st = $db->prepare('SELECT * FROM utilisateurs WHERE id=?'); $st->execute(array($user)); if (!($user = $st->fetch(PDO::FETCH_ASSOC))) { erreur_fatale('Erreur : Projet invalide !'); } } //------------------------------------------------------------------------------ // Traitement des données reçues // Utilisateur existant if (isset($user)) { $edited_ok = true; // Changement du nom if (isset($_POST['user_nom']) && $_POST['user_nom'] != '' && htmlentities($_POST['user_nom'], ENT_COMPAT, 'UTF-8') != $user['nom'] && check_token(false)) { $st = $db->prepare('UPDATE utilisateurs SET nom=:nom WHERE id=:utilisateur'); $st->execute(array(':utilisateur' => $user['id'], ':nom' => htmlentities($_POST['user_nom'], ENT_COMPAT, 'UTF-8'))); } // Changement du pseudo if (isset($_POST['user_pseudo']) && $_POST['user_pseudo'] != '' && htmlentities($_POST['user_pseudo'], ENT_COMPAT, 'UTF-8') != $user['pseudo'] && check_token(false)) { $st = $db->prepare('SELECT * FROM utilisateurs where PSEUDO=?');
// mod/demande.inc.php : Affiche les détails d'une demande et permet de voir/ajouter des commentaires if (!isset($template)) { die; } if (!isset($_GET['id']) || intval($_GET['id']) <= 0) { erreur_fatale('Erreur : Demande invalide !'); } $st = $db->prepare('SELECT d.id, d.titre, d.auteur, d.description, d.priorite, d.statut, d.creation, p.nom AS projet_nom, p.id AS projet_id, u.pseudo AS auteur_pseudo, u.nom AS auteur_nom, v.nom AS version FROM demandes d INNER JOIN projets p ON p.id=d.projet LEFT OUTER JOIN versions v ON v.id=d.version LEFT OUTER JOIN utilisateurs u ON u.id=d.auteur WHERE d.id=?'); $st->execute(array(intval($_GET['id']))); if (!($demande = $st->fetch(PDO::FETCH_ASSOC))) { erreur_fatale('Erreur : Demande inconnue !'); } // Ajout d'un commentaire if (isset($_POST['commentaire']) && $_POST['commentaire'] != '' && check_token()) { $st = $db->prepare('INSERT INTO commentaires(auteur, demande, texte, creation, resume) VALUES(:auteur, :demande, :texte, NOW(), 0)'); $st->execute(array(':auteur' => $utilisateur->userid(), ':demande' => $demande['id'], ':texte' => $_POST['commentaire'])); $template->assign_block_vars('MSG_INFO', array('DESCR' => 'Commentaire ajouté.')); } $statut = 'inconnu'; if (is_array($conf['demande_statuts']) && isset($conf['demande_statuts'][$demande['statut']])) { $statut = $conf['demande_statuts'][$demande['statut']]; } $template->assign_vars(array('DEMANDE_ID' => $demande['id'], 'DEMANDE_TITRE' => htmlentities($demande['titre'], ENT_COMPAT, 'UTF-8'), 'AUT_PSEUDO' => $demande['auteur_pseudo'] != null ? $demande['auteur_pseudo'] : 'Inconnu', 'AUT_NOM' => $demande['auteur_nom'] != null ? $demande['auteur_nom'] : 'Anonyme', 'DESCRIPTION' => wikicode2html($demande['description']), 'PRIORITE' => $demande['priorite'], 'STATUT' => $demande['statut'] == 0 ? "ferme" : "ouvert", 'STATUT_NOM' => $statut, 'CREATION' => format_date($demande['creation']), 'PROJET' => htmlentities($demande['projet_nom'], ENT_COMPAT, 'UTF-8'), 'PROJET_ID' => $demande['projet_id'])); if (isset($demande['version'])) { $template->assign_block_vars('VERSION', array('NOM' => htmlentities($demande['version'], ENT_COMPAT, 'UTF-8'))); }
<?php // mod/perso.inc.php : Permet de modifier les préférences (mot de passe, templates) if (!isset($template)) { die; } if ($utilisateur->estAnonyme()) { erreur_fatale("Erreur : vous n'êtes pas connecté !"); } //------------------------------------------------------------------------------ // Traitement des données reçues // Changement du design if (isset($_POST['chg_tpl']) && $_POST['chg_tpl'] != $utilisateur->template() && preg_match('/^[a-zA-Z0-9_.-]+$/', $_POST['chg_tpl']) && check_token(false)) { if (($dir = @opendir('data/templates/' . $_POST['chg_tpl'])) !== false) { closedir($dir); $st = $db->prepare('UPDATE utilisateurs SET template=:template WHERE id=:utilisateur'); $st->execute(array(':utilisateur' => $utilisateur->userid(), ':template' => $_POST['chg_tpl'])); $utilisateur->update(); } else { $template->assign_block_vars('ERREUR', array('TEXTE' => 'Design inconnu')); } } // Changement de mot de passe if (isset($_POST['chg_mdp1']) && $_POST['chg_mdp1'] != '' || isset($_POST['chg_mdp2']) && $_POST['chg_mdp2'] != '' && check_token(false)) { // Confirmation du nouveau mot de passe if (!isset($_POST['chg_mdp1']) || !isset($_POST['chg_mdp2']) || $_POST['chg_mdp1'] != $_POST['chg_mdp2']) { $template->assign_block_vars('ERREUR', array('TEXTE' => 'Les mots de passe ne correspondent pas.')); } else { if (strlen($_POST['chg_mdp1']) < 4 || strlen($_POST['chg_mdp1']) > 26) { $template->assign_block_vars('ERREUR', array('TEXTE' => 'Le mot de passe choisi est invalide.')); } else {
} // Lien pour poster une nouvelle demande if ($utilisateur->autorise(PERM_CREATE_REQUEST, $projet)) { $template->assign_block_vars('NOUVELLE_DEMANDE', array()); } $st2 = $db->prepare('SELECT u.pseudo AS pseudo, u.nom AS nom, u.promotion AS promotion FROM utilisateurs u INNER JOIN association_utilisateurs_projets a ON u.id=a.utilisateur WHERE a.projet=?'); $st2->execute(array($projet)); if ($st2->rowCount() == 0) { $template->assign_block_vars('ZERO_MEMBRES', array()); } else { while ($row2 = $st2->fetch(PDO::FETCH_ASSOC)) { $template->assign_block_vars('MEMBRE', array('PSEUDO' => $row2['pseudo'], 'NOM' => $row2['nom'], 'PROMOTION' => $row2['promotion'])); } } $st2 = $db->prepare('SELECT nom, description FROM versions WHERE projet = ? ORDER BY id DESC LIMIT 0, ' . $conf['projet_nb_versions']); $st2->execute(array($projet)); if ($st2->rowCount() == 0) { $template->assign_block_vars('ZERO_VERSIONS', array()); } else { while ($row2 = $st2->fetch(PDO::FETCH_ASSOC)) { $template->assign_block_vars('VERSION', array('NOM' => htmlentities($row2['nom'], ENT_COMPAT, 'UTF-8'), 'DESCR' => wikicode2html($row2['description']))); } } // Page d'édition du projet if ($utilisateur->autorise(PERM_MANAGE_PROJECT, $projet)) { $template->assign_block_vars('ADMIN_PROJET', array()); } } else { erreur_fatale('Erreur : Ce projet n\'existe pas ou plus.'); } }