<?php

/******************************************************************************

  Accès à la zone d'administration

******************************************************************************/

require_once("include/config.php");
include_once("include/fonctions.php");
include_once("include/fonctions_admin.php");

// Démarrage de la session
if (! demarrer_session_admin()) exit;

// Vérification de la validité de la session
if (! verifier_cle_session()) {
  if (isset($_COOKIE[ADM_NOM_SESSION])) {
    // La session fournie n'est pas valide : il faut changer l'identifiant de session (sécurité)
    if (version_compare(PHP_VERSION, "4.3.3", ">=")) {
      if (! session_regenerate_id(true)) exit;
    }
  }
  $_SESSION = array();
  initialiser_cle_session();
}

// Initialement, la lecture d'un cryptogramme n'est pas nécessaire pour se connecter
$admModeSecurise = false;

if (isset($_GET['logout'])) {
  if (isset($_SESSION[ADM_ETAT_CONNEXION])) {
    unset($_SESSION[ADM_ETAT_CONNEXION]);         // Ferme la connexion
    supprimer_cle_session();
  }
  header("location: index.php");                  // Revient à la page d'accueil
}

elseif (!isset($_SESSION[ADM_ETAT_CONNEXION])) {  // Si la connexion est fermée

  // Lecture du fichier d'erreurs de connexion
  lire_fichier_erreurs_connexion();


//-----------------------------------------------------------------------------
// Vérification d'une tentative de connexion
//-----------------------------------------------------------------------------

  if (isset($_POST['connecter'])) {

    $login = isset($_POST['admin_login']) ? decode_gpc($_POST['admin_login']) : '';
    $pass = isset($_POST['admin_pass']) ? decode_gpc($_POST['admin_pass']) : '';

    $mdpMode = "compatible";
    require("include/admin/mdp.php");
    if ($mdpMode == "compatible") $mdp = md5($mdp);

    $testCrypto = (mode_securise() or isset($_POST['code']));

    // Validation de l'identifiant, du mot de passe, et éventuellement du code du cryptogramme

    if ( $login == $cfgAdministrateur[3] and md5($pass) == $mdp and
        ( !$testCrypto or
          ( isset($_SESSION['cryptcode']) and isset($_POST['code']) and
            $_SESSION['cryptcode'] == md5(strtoupper($_POST['code'])) and !isset($_SESSION['cryptreload'])
          )
        ) ) {

      // Création d'un nouvel identifiant pour la connexion à ouvrir
      if (version_compare(PHP_VERSION, "4.3.3", ">=")) session_regenerate_id(true);

      // Création d'une clé à usage unique
      initialiser_cle_session(2);

      $_SESSION[ADM_ETAT_CONNEXION] = 1;    // Ouvre la connexion

      // Restauration, à partir de la session, des informations passées au script
      if (isset($_SESSION['admin_get'])) $_GET = $_SESSION['admin_get'];
      if (isset($_SESSION['admin_post'])) $_POST = $_SESSION['admin_post'];
      if (isset($_SESSION['admin_request'])) $_REQUEST = $_SESSION['admin_request'];
      unset($_SESSION['admin_get'], $_SESSION['admin_post'], $_SESSION['admin_request']);

      if ($mdp == md5("pass")) {   // Si le mot de passe par défaut n'a pas été changé

        // Affichage du message de rappel de changement de mot de passe.
        // Les constantes définies ci-dessous sont utilisées par hpage.inc

        define("HPAGE_HEADER", '
        <script type="text/javascript">
          function pwdReminder()
          {
            alert("Vous utilisez le mot de passe par défaut.\n\n" +
              "N\'oubliez pas de le changer dès que possible.\n\n" +
              "Pour cela, cliquez sur l\'icône \"Mot de passe\" dans cette page.");
            return;
          }
        </script>');

        define("HPAGE_BODY_ATTRIBUTES", 'onload="pwdReminder()"');
      }
    }
    else {
      // La validation identifiant/mot de passe[/cryptogramme] a échoué

      $_SESSION['cryptreload'] = true;

      // Ajout de la tentative dans la liste des erreurs de connexion
      ajouter_erreur_connexion();
    }

    unset($mdp, $pass);
  }

//-----------------------------------------------------------------------------

  else {
    // Sauvegarde, dans la session, des informations passées au script
    $_SESSION['admin_get'] = $_GET;
    $_SESSION['admin_post'] = $_POST;
    $_SESSION['admin_request'] = $_REQUEST;
  }

  // Ecriture des erreurs de connexion dans le fichier
  ecrire_fichier_erreurs_connexion();

  // Si le nombre d'erreurs de connexion dépasse la limite autorisée, on passe en mode sécurisé
  $admModeSecurise = mode_securise();
}

unset($_POST['admin_login'], $_POST['admin_pass'], $_REQUEST['admin_login'], $_REQUEST['admin_pass']);
if (isset($HTTP_POST_VARS)) unset($HTTP_POST_VARS['admin_login'], $HTTP_POST_VARS['admin_pass']);


if (isset($_SESSION[ADM_ETAT_CONNEXION])) {       // Si la connexion est ouverte


//-----------------------------------------------------------------------------
// Chargement des pages de la zone d'administration
//-----------------------------------------------------------------------------

  $pg = isset($_GET['pg']) ? decode_gpc($_GET['pg']) : '';
  $skin = isset($_GET['skin']) ? decode_gpc($_GET['skin']) : '';

  if (!empty($pg)) {

    // Pages d'administration

    $nfPageAdmin = "include/admin/".basename($pg).".inc";
    if (file_exists($nfPageAdmin)) include($nfPageAdmin);
    else header("location: admin.php");
  }

  elseif (!empty($skin)) {

    // Configuration des thèmes administrables

    $nfAdminSkin = "skin/".basename($skin)."/admin/admin.inc";
    if (file_exists($nfAdminSkin)) include($nfAdminSkin);
    else header("location: admin.php");
  }

  else {


//-----------------------------------------------------------------------------
// Affichage des icônes de la zone d'administration
//-----------------------------------------------------------------------------

    include("include/hpage.inc");

    htable("Admin - S&eacute;lectionnez une option", "100%");

    if (file_exists("include/admin/upgrade.inc")) include("include/admin/upgrade.inc");

    // Définition des icônes d'administration
    $iconesAdmin = array(

    // Syntaxe :
    // array( url_lien, url_image, titre_icone )
    //
    // Dans le titre de l'icône, \n permet de passer à la ligne.

      array("admin.php?pg=homepage",    "graphics/admin/homepage.png",    "Page d'accueil"),
      array("admin.php?pg=pages",       "graphics/admin/pages.png",       "Pages centrales"),
      array("admin.php?pg=articles",    "graphics/admin/article.png",     "Articles"),
      array("admin.php?pg=nouvelles",   "graphics/admin/nouvelle.png",    "Nouvelles"),
      array("admin.php?pg=citations",   "graphics/admin/citation.png",    "Citations"),
      array("admin.php?pg=upload",      "graphics/admin/upload.png",      "Envoyer sur\nle serveur"),
      array("admin.php?pg=downloads",   "graphics/admin/download.png",    "Téléchargements"),
      array("admin.php?pg=liens",       "graphics/admin/lien.png",        "Liens"),
      array("admin.php?pg=banniere",    "graphics/admin/banniere.png",    "Bannière"),
      array("admin.php?pg=special",     "graphics/admin/special.png",     "Spécial !"),
      array("admin.php?pg=info",        "graphics/admin/info.png",        "Infos site"),
      array("admin.php?pg=sondage",     "graphics/admin/sondage.png",     "Sondage"),
      array("admin.php?pg=livre",       "graphics/admin/guestbook.gif",   "Livre d'Or"),
      array("admin.php?pg=tag",         "graphics/admin/tag-board.png",   "Tag-Board"),
      array("admin.php?pg=forum",       "graphics/admin/forum.png",       "Forum"),
      array("admin.php?pg=config2",     "graphics/admin/config2.png",     "Configuration\ndu site"),
      array("admin.php?pg=footer",      "graphics/admin/footer.png",      "Pied de page"),
      array("admin.php?pg=stats",       "graphics/admin/stats.png",       "Statistiques"),
      array("admin.php?pg=password",    "graphics/admin/password.png",    "Mot de passe"),
      array("admin.php?pg=config1",     "graphics/admin/config1.png",     "Configuration\ngénérale"),
    );

    echo '
    <p style="text-align: center"><b>Bienvenue dans la zone d\'administration&nbsp;!</b></p>
    <p style="text-align: center">C\'est l&agrave; que vous pouvez modifier votre site&nbsp;:<br />
    changer les couleurs, ajouter ou supprimer des articles, cr&eacute;er des liens ...<br />
    Pour revenir sur cette page, cliquez sur "Retour admin".</p>
    ';

    $icones = $iconesAdmin;

    // Recherche des modules optionnels administrables dans le dossier "modules"
    // Le fichier "icone_admin.inc" doit exister dans le sous-dossier "modules/xxx/"

    $dossier_modules = opendir("modules");
    while ($fichier_module = readdir($dossier_modules)) {
      if (is_dir("modules/".$fichier_module) && $fichier_module != "." &&
        $fichier_module != ".." && file_exists("modules/".$fichier_module."/icone_admin.inc")) {

        unset($iconeAdmin);

        // Inclusion de la définition de l'icône du module administrable
        include("modules/".$fichier_module."/icone_admin.inc");

        // Ajout de l'icône à la liste
        if (!empty($iconeAdmin)) $icones[] = $iconeAdmin;
      }
    }
    closedir($dossier_modules);


    // Ajoute une icône d'importation si le dossier "import" n'est pas vide

    if ($dossier_import = @opendir("import")) {
      while ($entree_rep = readdir($dossier_import)) {
        if ($entree_rep != "." && $entree_rep != ".." &&
            $entree_rep != "index.php" && $entree_rep != ".htaccess") {

          // Ajout de l'icône d'importation à la liste
          $icones[] = array("admin.php?pg=import_130", "graphics/admin/import.png", "Importation\nPhortail 1.3");
          break;
        }
      }
      closedir($dossier_import);
    }


    // Affichage de toutes les icônes

    echo '
    <div class="center">
    <table cellspacing="0" cellpadding="5" border="0"
      style="margin-top: 5px; margin-bottom: 5px">
    ';

    $largeurTableau = 5;    // Nombre d'icônes par ligne dans le tableau

    $nColonne = 0;

    foreach ($icones as $icone) {

      if ($nColonne >= $largeurTableau) {     // Fin de la ligne courante
        echo '</tr>'."\n";
        $nColonne = 0;
      }
      if ($nColonne == 0) echo '<tr>'."\n";   // Début d'une nouvelle ligne

      echo '<td style="text-align: center; vertical-align: baseline;'.
        'white-space: nowrap"><p style="margin: 0px">'."\n";

      if (preg_match("/^javascript:/i", $icone[0])) $lien = $icone[0];
      else $lien = conv_url($icone[0]);

      echo '<a href="'.$lien.'" style="display: block">'.
        '<img src="'.conv_url($icone[1]).'" alt="" width="32" height="32" style="border: 0px" />'.
        '<br />'.conv_sauts_ligne(conv_html($icone[2])).'</a>'."\n";

      echo '</p></td>'."\n";
      $nColonne++;
    }

    if ($nColonne > 0) echo '</tr>'."\n";       // Fin de la dernière ligne

    echo '
    </table>
    </div>

    <p style="text-align: center"><b><a href="admin.php?logout=1">D&Eacute;CONNEXION</a></b></p>
    ';

    btable();

    include("include/bpage.inc");

//-----------------------------------------------------------------------------

  }
}

else {          // Si la connexion est fermée


//-----------------------------------------------------------------------------
// Formulaire de saisie de l'identifiant et du mot de passe
//-----------------------------------------------------------------------------

  define("HPAGE_HEADER", '
  <script type="text/javascript">
    function setfocus()
    {
      if (document.getElementById) {
        document.getElementById("admin_login").focus();
      }
    }
  </script>');

  define("HPAGE_BODY_ATTRIBUTES", 'onload="setfocus()"');


  include("include/hpage.inc");

  htable("Admin - Entrez votre identifiant et votre mot de passe", "100%");

  $query_string = isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : '';

  echo '

  <p>&nbsp;</p>
  <form action="'.conv_url('admin.php'.$query_string).'" method="post">
  <div class="center">
  <input type="hidden" name="connecter" value="1" />

  <table cellspacing="0" cellpadding="0" border="0">
  <tr>
    <td><p><b>Identifiant&nbsp;:</b></p></td>
    <td><input type="text" id="admin_login" name="admin_login" size="20" maxlength="30" /></td>
  </tr>
  <tr><td><p>&nbsp;</p></td></tr>
  <tr>
    <td><p><b>Mot de passe&nbsp;:</b></p></td>
    <td><input type="password" name="admin_pass" size="20" maxlength="30" /></td>
  </tr>
  </table>

  <p style="text-align: center; margin: 0">
  <br />
  ';

  // En mode sécurisé, on affiche le cryptogramme

  if ($admModeSecurise) {
    $timestamp = md5(microtime());  // Force la regénération du cryptogramme à chaque appel

    echo '
    <br /><b>En raison d\'un nombre important de tentatives de connexion<br />
     infructueuses, la s&eacute;curit&eacute; a &eacute;t&eacute; temporairement renforc&eacute;e.</b><br /><br />
    <b>Recopiez le mot&nbsp;</b>
    <img src="'.conv_url("extensions/cryptographp/cryptographp.php?config=config.admin.inc.php&t=".$timestamp).'" alt="" style="vertical-align: middle" />
    <b>ici</b>&nbsp;:&nbsp;<input type="text" name="code" size="6" />
    <br />
    ';
  }

  echo '
  <br />
  <input type="submit" value="Connexion" />
  </p>
  </div>
  </form>
  <p>&nbsp;</p>
  <p style="text-align: center"><b>Attention !</b> La connexion se fait jusqu\'&agrave; la fermeture du navigateur.<br />
  Il est possible de se d&eacute;connecter dans la zone d\'administration.</p>
  ';

  btable();

  include("include/bpage.inc");

//-----------------------------------------------------------------------------

}

?>