Exemple #1
0
// 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 !');
    }
}
Exemple #2
0
} 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');
Exemple #3
0
<?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'));
            }
Exemple #4
0
} 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) {
Exemple #5
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');
Exemple #6
0
// 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=?');
Exemple #7
0
// 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')));
}
Exemple #8
0
<?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 {
Exemple #9
0
        }
        // 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.');
    }
}