AEOS Calvarium v0.1a

This commit is contained in:
OverSu 2026-08-26 17:21:47 +02:00
commit 2ee190de31
56 changed files with 2081 additions and 0 deletions

524
admin/base.php Normal file
View file

@ -0,0 +1,524 @@
<body>
<div id="general">
<div id="header">
<h1><?php echo $SITE_NOM; ?></h1>
<p><?php echo $SITE_DESC; ?></p>
<ul class="menu">
<li><a href="../"><img src="../themes/defaut/images/icones/return_left.png" alt="icone" class="icon" />Retour au site</a></li>
<?php
if(!isset($_GET['pid'])){$pid=1;} else {$pid=$_GET['pid'];}
$menuItems = array(NULL, 'Général', 'Pages', 'Modules', 'Thèmes', 'Configuration', 'Corbeille', 'Déconnexion');
$menuImages = array(NULL, 'general', 'page', 'module', 'design_red', 'config', 'corbeille', 'logout');
for ($i=1; $i<count($menuItems); $i++)
{
echo "<li>";
if($pid==$i){ echo "<b>";}
echo "<a href='index.php?pid=".$i."'><img src='../themes/defaut/images/icones/".$menuImages[$i].".png' alt='icone' class='icon' />".$menuItems[$i]."</a>";
if($pid==$i){ echo "</b>";}
echo "</li>";
}
?>
</ul>
</div>
<div id="corps">
<div id="contentG">
<?php
switch ($pid){
case 1: // Page général
if(isset($_POST['nom_site']) || isset($_POST['descdusite']))
{
ecriture_xml('../data/config.xml', 'nom_site', $_POST['nom_site']);
ecriture_xml('../data/config.xml', 'description_site', $_POST['description_site']);
if (@$_POST['maintenance']=="on"){$maintenance="on";} else {$maintenance="off";}
ecriture_xml('../data/config.xml', 'maintenance', $maintenance);
ecriture_xml('../data/config.xml', 'message', nl2br($_POST['message']));
echo "<span class='valide'>Mise à jour réussie.</span>";
// Permet le rafraichissement instantané
include('../lib/config.lib.php');
} ?>
<form action="index.php?pid=1" method="post">
<div class="gauche50">
Nom du site:<br />
<input type="text" name="nom_site" class="input_text" value="<?php echo $SITE_NOM; ?>" id="text_input" /><br /><br />
Description du site:<br />
<textarea name="description_site" class="area_text" rows="0" cols="0"><?php echo $SITE_DESC; ?></textarea><br /><br />
</div>
<div class="gauche">
Site en maintenance:
<input type="checkbox" name="maintenance" <?php if($SITE_MAINTENANCE=="on"){echo "checked";} ?>/><br />
<textarea name="message" class="area_text" cols="0" rows="0"><?php echo br2nl($SITE_MESSAGE); ?></textarea><br /><br />
<input type="submit" value="Mise à jour" class="input" />
</div>
</form>
<?php
if (@$_GET['suppresion']=="install")
{
removeFolder("../install/");
?>
<div class="gauche">
<p class="valide">Le dossier INSTALL a été effacé avec succés !</p>
</div>
<?php
}
elseif (file_exists("../install"))
{
?>
<form action="index.php?pid=1&amp;suppresion=install" method="post">
<div class="gauche">
<p class="erreur">Le dossier INSTALL est encore en ligne. ce dossier est dorénavant inutile et peut causer un risque pour la sécurité de votre site. Vous pouvez cliquer sur le bouton ci-dessous afin de l'effacer.</p>
<input type="submit" value="Effacer le dossier INSTALL" class="input" />
</div>
</form>
<?php
}
?>
<?php
break;
case 2: // Page pages
switch(@$_GET['action'])
{
case 'accueil':
ecriture_xml('../data/config.xml', 'accueil', $_GET['id']);
echo "<span class='valide'>Page d'accueil changée.</span>";
break;
case 'affichage':
if ($_GET['aff']=="on")
{
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'etat', '1');
}
else
{
if ($_GET['id']==1) echo "<span class='erreur'>Impossible de désafficher la page d'accueil !</span>";
else ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'etat', '0');
}
break;
case 'ordreplus':
$new=$_GET['id']-1;
$page = lecture_xml("../data/pages/".$_GET['id'].".xml");
if ($page['page']['etat']['#text']==0 && $_GET['id']==2)
{
echo "<span class='erreur'>Vous ne pouvez mettre en page d'accueil, une page non affichée !</span>";
}
else
{
rename ("../data/pages/".$_GET['id'].".xml", "../data/pages/-1.xml");
// 2 devient -1
rename ("../data/pages/".$new.".xml", "../data/pages/".$_GET['id'].".xml");
// 1 devient 2
rename ("../data/pages/-1.xml", "../data/pages/".$new.".xml");
// -1 devient 1
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'ordre', $_GET['id']);
// 2 -> 2
ecriture_xml('../data/pages/'.$new.'.xml', 'ordre', $new);
// 1 -> 1
echo "<span class='valide'>Ordre modifié</span>";
}
break;
case 'ordremoins':
$new=$_GET['id']+1;
$page = lecture_xml("../data/pages/".$new.".xml");
if ($page['page']['etat']['#text']==0 && $_GET['id']==1)
{
echo "<span class='erreur'>Vous ne pouvez pas mettre en page d'accueil une page non affichée.</span>";
}
else
{
rename ("../data/pages/".$_GET['id'].".xml", "../data/pages/-1.xml");
rename ("../data/pages/".$new.".xml", "../data/pages/".$_GET['id'].".xml");
rename ("../data/pages/-1.xml", "../data/pages/".$new.".xml");
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'ordre', $_GET['id']);
ecriture_xml('../data/pages/'.$new.'.xml', 'ordre', $new);
echo "<span class='valide'>Ordre modifié</span>";
}
break;
case 'ajouter':
if ($_POST['type']=="none") echo "<span class='erreur'>Veuillez choisir un type de page.</span>";
else include("../modules/".$_POST['type']."/edition.php");
break;
case 'modifier':
$page = lecture_xml("../data/pages/".$_GET['id'].".xml");
include("../modules/".strtolower($page['page']['type']['#text'])."/edition.php");
break;
case 'supprimer':
$apres=$_GET['id']+1;
$avant=$_GET['id']-1;
if($_GET['id']==1)
{
echo "<span class='erreur'>Vous ne pouvez pas supprimer la page d'accueil.</span>";
}
else
{
$list=listing_dossier($data_pages);
$nb = sizeof($list); $nb++;
$dateT = date("d-m-Y G\hi\ms\s");
$titre = donnee_xml('../data/pages/'.$_GET['id'].'.xml', 'nom');
rename ("../data/pages/".$_GET['id'].".xml", "../data/corbeille/".$dateT."_".$_GET['id'].".xml");
for ($i=$apres;$i<$nb;$i++)
{
$j=$i-1;
rename ("../data/pages/".$i.".xml", "../data/pages/".$j.".xml");
ecriture_xml('../data/pages/'.$j.'.xml', 'ordre', $j);
}
echo "<span class='valide'>La page \"".$titre."\" a été déplacé dans le dossier corbeille</span>";
}
break;
}
?>
<form action="index.php?pid=2&amp;action=ajouter" method="post">
<p>
<input type="submit" value="Ajouter une page de type:" id="add_but"/>
<select name="type" class="option">
<option value="none">Choisir un type</option>
<option value="none">----------------------</option><?php
$list = listing_dossier("../modules/");
foreach ($list as $pages)
{ ?>
<option value="<?php echo $pages; ?>"><?php echo ucfirst($pages);?></option><?php
} ?>
</select>
</p>
</form>
<table id="tableau" width="100%">
<tr id="en_tete">
<td style="width:35%">Nom de la page</td>
<td style="width:18%">Type de page</td>
<td style="width:8%;" align="center">Modification</td>
<td style="width:8%" align="center">Suppresion</td>
<td style="width:7%" align="center">Ordre</td>
<td style="width:8%" align="center">Affichage</td>
</tr>
<?php
$list=listing_dossier($data_pages);
foreach ($list as &$pages) {
$page = lecture_xml($data_pages.$pages); ?>
<tr>
<td><?php echo $page['page']['nom']['#text']; ?></td>
<td><?php echo ucfirst($page['page']['type']['#text']); ?></td>
<td align="center"><a href="index.php?pid=2&amp;action=modifier&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/edit.png" alt="edit" /></a></td>
<td align="center"><a href="index.php?pid=2&amp;action=supprimer&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/delete.png" alt="delete" /></a></td>
<td align="center"><?php
if ($pages==1)
{
?><a href="index.php?pid=2&amp;action=ordremoins&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/little_down.png" alt="little_down" /></a><?php
} elseif ($pages==end($list)) {
?><a href="index.php?pid=2&amp;action=ordreplus&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/little_up.png" alt="little_up" /></a><?php
} else { ?>
<a href="index.php?pid=2&amp;action=ordremoins&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/little_down.png" alt="little_down" /></a>
<a href="index.php?pid=2&amp;action=ordreplus&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/little_up.png" alt="little_up" /></a><?php
} ?>
</td>
<td align="center"><?php
if ($page['page']['etat']['#text']==1){ ?>
<a href="index.php?pid=2&amp;action=affichage&amp;aff=off&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/on.png" alt="aff" /></a><?php
} else { ?>
<a href="index.php?pid=2&amp;action=affichage&amp;aff=on&amp;id=<?php echo $page['page']['ordre']['#text']; ?>"><img src="../themes/defaut/images/icones/off.png" alt="aff" /></a><?php
} ?>
</td>
</tr><?php
} ?>
</table><?php
break;
case 3: // Page modules
switch(@$_GET['action'])
{
case 'ajouter':
if(@$_FILES["zip_file"]["name"])
upload_unzip($_FILES["zip_file"], "../modules/", "modules"); ?>
<form enctype="multipart/form-data" method="post" action="index.php?pid=3&amp;action=ajouter">
<p>
<input type="file" name="zip_file" />
<input type="submit" name="submit" value="Installer" />
</p>
</form><?php
break;
case 'modifier':
include("../modules/".$_GET['dossier']."/edition.php");
break;
case 'supprimer':
if (isset($_GET['del']))
{
removeFolder("../modules/".$_GET['dossier']);
echo "<span class='valide'>Module supprimé avec succés.</span>";
}
else
{
echo "Voulez-vous vraiment supprimer ce module ?"; ?>
<a href="index.php?pid=3&amp;action=supprimer&amp;dossier=<?php echo $_GET['dossier']; ?>&amp;del"><img src="../themes/defaut/images/icones/apply.png" class="icon"/></a>
<a href="index.php?pid=3"><img src="../themes/defaut/images/icones/delete.png" /></a><?php
}
break;
} ?>
<p><a href="index.php?pid=3&amp;action=ajouter" class="link"><img src="../themes/defaut/images/icones/ajout.png" alt="Ajout" /> Ajouter un module</a></p>
<table id="tableau" width="100%">
<tr id="en_tete">
<td style="width:25%">Nom du module</td>
<td style="width:18%">Description</td>
<td style="width:18%">Auteur(s)</td>
<td style="width:8%" align="center">Version</td>
<td style="width:8%" align="center">Modifier</td>
<td style="width:7%" align="center">Supprimer</td>
</tr>
<?php
$list=listing_dossier("../modules/");
foreach ($list as &$pages) {
$page = lecture_xml("../modules/".$pages."/config.xml");
?>
<tr>
<td><?php echo $page['configuration']['nom']['#text']; ?></td>
<td><?php echo $page['configuration']['description']['#text']; ?></td>
<td><?php echo $page['configuration']['auteurs']['#text']; ?></td>
<td align="center"><?php echo $page['configuration']['version']['#text']; ?></td><?php
if (is_file("../themes/".$pages."/modification.xml"))
{ ?>
<td align="center"><a href="index.php?pid=3&amp;action=modifier&amp;dossier=<?php echo $page['configuration']['dossier']['#text']; ?>"><img src="../themes/defaut/images/icones/edit.png" alt="edit" /></a></td><?php
}
else
{ ?>
<td align="center"><img src="../themes/defaut/images/icones/edit_off.png" alt="edit" /></td><?php
} ?>
<td align="center"><a href="index.php?pid=3&amp;action=supprimer&amp;dossier=<?php echo $page['configuration']['dossier']['#text']; ?>"><img src="../themes/defaut/images/icones/delete.png" alt="delete" /></a></td>
</tr><?php
} ?>
</table>
<?php
break;
case 4: // Page thèmes
switch(@$_GET['action'])
{
case 'choix':
ecriture_xml('../data/config.xml', 'theme', $_GET['dossier']);
header ('Location: index.php?pid=4');
break;
case 'supprimer':
if (isset($_GET['del']))
{
removeFolder("../themes/".$_GET['dossier']);
echo "<span class='valide'>Thème supprimé avec succés.</span>";
}
else
{
if ($config['configuration']['theme']['#text']==$_GET['dossier'])
{
echo "<span class='erreur'>Vous ne pouvez pas supprimer le thème utilisé actuellement.</span>";
} else {
echo "Voulez-vous vraiment supprimer ce thème ?"; ?>
<a href="index.php?pid=4&amp;action=supprimer&amp;dossier=<?php echo $_GET['dossier']; ?>&amp;del"><img src="../themes/defaut/images/icones/apply.png" class="icon"/></a>
<a href="index.php?pid=4"><img src="../themes/defaut/images/icones/delete.png" /></a><?php
}
}
break;
case 'ajouter':
if(@$_FILES["zip_file"]["name"])
upload_unzip($_FILES["zip_file"], "../themes/", "thème"); ?>
<form enctype="multipart/form-data" method="post" action="index.php?pid=4&amp;action=ajouter">
<p>
<input type="file" name="zip_file" />
<input type="submit" name="submit" value="Installer" />
</p>
</form><?php
break;
case 'modifier':
include("../themes/".$_GET['dossier']."/edition.php");
break;
} ?>
<p><a href="index.php?pid=4&amp;action=ajouter" class="link"><img src="../themes/defaut/images/icones/ajout.png" alt="Ajout" /> Ajouter un thème</a></p>
<table id="tableau" width="100%">
<tr id="en_tete">
<td style="width:35%">Nom du thème</td>
<td style="width:18%">Auteur(s)</td>
<td style="width:8%" align="center">Version</td>
<td style="width:8%" align="center">Modifier</td>
<td style="width:7%" align="center">Supprimer</td>
<td style="width:8%" align="center">Choix</td>
</tr>
<?php
$list=listing_dossier("../themes/");
foreach ($list as &$pages) {
$page = lecture_xml("../themes/".$pages."/config.xml");
?>
<tr>
<td><?php echo $page['configuration']['nom']['#text']; ?></td>
<td><?php echo $page['configuration']['auteurs']['#text']; ?></td>
<td align="center"><?php echo $page['configuration']['version']['#text']; ?></td><?php
if (is_file("../themes/".$pages."/modification.xml"))
{ ?>
<td align="center"><a href="index.php?pid=4&amp;action=modifier&amp;dossier=<?php echo $page['configuration']['dossier']['#text']; ?>"><img src="../themes/defaut/images/icones/edit.png" alt="edit" /></a></td><?php
}
else
{ ?>
<td align="center"><img src="../themes/defaut/images/icones/edit_off.png" alt="edit" /></td><?php
} ?>
<td align="center"><a href="index.php?pid=4&amp;action=supprimer&amp;dossier=<?php echo $page['configuration']['dossier']['#text']; ?>"><img src="../themes/defaut/images/icones/delete.png" alt="delete" /></a></td>
<td align="center"><?php
if ($config['configuration']['theme']['#text']==$page['configuration']['dossier']['#text'])
{ ?>
<img src="../themes/defaut/images/icones/on.png" alt="aff" /><?php
}
else
{ ?>
<a href="index.php?pid=4&amp;action=choix&amp;dossier=<?php echo $page['configuration']['dossier']['#text']; ?>"><img src="../themes/defaut/images/icones/off.png" alt="aff" /></a><?php
} ?>
</td>
</tr><?php
} ?>
</table><?php
break;
case 5: // Configuration
if(isset($_POST['login']) || isset($_POST['email']) || isset($_POST['mot_de_passe_ex']))
{
if (md5($_POST['mot_de_passe_ex'])==$config['configuration']['mdp_admin']['#text'])
{
if ($_POST['mot_de_passe_new']==$_POST['mot_de_passe_conf'])
{
ecriture_xml('../data/config.xml', 'login_admin', $_POST['login']);
ecriture_xml('../data/config.xml', 'email_admin', $_POST['email']);
ecriture_xml('../data/config.xml', 'mdp_admin', md5($_POST['mot_de_passe_new']));
echo "<span class='valide'>Mise à jour réussie.</span>";
}
else
{
echo "<span class='erreur'>Les mots de passe ne sont pas identiques.</span>";
}
}
elseif ($_POST['mot_de_passe_ex']==NULL)
{
ecriture_xml('../data/config.xml', 'login_admin', $_POST['login']);
ecriture_xml('../data/config.xml', 'email_admin', $_POST['email']);
echo "<span class='valide'>Mise à jour réussie.</span>";
}
else
{
echo "<span class='erreur'>Ancien mot de passe incorrect.</span>";
}
}
include('../lib/config.lib.php');
?>
<form action="index.php?pid=5" method="post">
<p>
Login de l'administrateur:<br />
<input type="text" name="login" class="input_text" value="<?php echo $ADMIN_LOG; ?>" style="width:250px;" /><br /><br />
Email de l'administrateur:<br />
<input type="text" name="email" class="input_text" value="<?php echo $ADMIN_EMAIL; ?>" style="width:250px;" /><br /><br />
Mot de passe de l'administrateur<br />
Ancien MDP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Nouveau MDP&nbsp;&nbsp;
Confirmer MDP<br />
<input type="password" name="mot_de_passe_ex" class="input_text_mini" value="" />
<input type="password" name="mot_de_passe_new" class="input_text_mini" value="" />
<input type="password" name="mot_de_passe_conf" class="input_text_mini" value="" /><br /><br />
<input type="submit" value="Mise à jour" class="input" />
</p>
</form>
<?php
break;
case 6: // Page corbeille
switch(@$_GET['action'])
{
case 'retour':
$list=listing_dossier($data_pages);
$nb = sizeof($list); $nb=$nb+1;
$ancienFichier = "../data/corbeille/".$_GET['fichier'];
$nouveauFichier = "../data/pages/".$nb.".xml";
copy($ancienFichier, $nouveauFichier);
unlink($ancienFichier);
ecriture_xml($nouveauFichier, 'etat', '0');
echo "<span class='valide'>Page restaurée avec succés.</span>";
break;
case 'vider':
clearFolder("../data/corbeille/");
echo "<span class='valide'>La corbeille a été vidé.</span>";
break;
case 'supprimer':
if (isset($_GET['del']))
{
unlink ("../data/corbeille/".$_GET['fichier']);
echo "<span class='valide'>Page supprimée avec succés.</span>";
}
else
{
echo "Voulez-vous vraiment supprimer cette page?"; ?>
<a href="index.php?pid=6&amp;action=supprimer&amp;fichier=<?php echo $_GET['fichier']; ?>&amp;del"><img src="../themes/defaut/images/icones/apply.png" class="petit_decalage"/></a>
<a href="index.php?pid=6"><img src="../themes/defaut/images/icones/delete.png" /></a><?php
}
break;
}?>
<p><a href="index.php?pid=6&amp;action=vider" class="link"><img src="../themes/defaut/images/icones/corbeille_vide.png" alt="Vider" /> Vider la Corbeille</a></p>
<table id="tableau" width="100%">
<tr id="en_tete">
<td style="width:35%;">Titre de la page</td>
<td style="width:18%">Date de suppresion</td>
<td style="width:8%" align="center">Type</td>
<td style="width:8%" align="center">Restaurer</td>
<td style="width:7%" align="center">Supprimer</td>
</tr>
<?php
$list=listing_dossier("../data/corbeille/");
if ($list==TRUE)
{
foreach ($list as &$pages)
{
$page = lecture_xml("../data/corbeille/".$pages);
$fichier_date = explode('_', $pages); ?>
<tr>
<td><?php echo $page['page']['nom']['#text']; ?></td>
<td><?php echo $fichier_date[0]; ?></td>
<td align="center"><?php echo $page['page']['type']['#text']; ?></td>
<td align="center"><a href="index.php?pid=6&amp;action=retour&amp;fichier=<?php echo $fichier_date[0]."_".$fichier_date[1]; ?>"><img src="../themes/defaut/images/icones/retour.png" alt="retour" /></a></td>
<td align="center"><a href="index.php?pid=6&amp;action=supprimer&amp;fichier=<?php echo $fichier_date[0]."_".$fichier_date[1]; ?>"><img src="../themes/defaut/images/icones/delete.png" alt="delete" /></a></td>
</tr><?php
}
} ?>
</table><?php
break;
case 7: // Page déconnexion
session_destroy();
header('Location: ../index.php');
break;
} ?>
</div>
</div>
<div id="footer">
<p>
AEOS v<?php echo $SITE_VERSION; ?> - <?php echo round(microtime(true)-$execTime, 3)."s<br />".$SITE_FOOTER; ?>
</p>
</div>
</div>
</body>

97
admin/index.php Normal file
View file

@ -0,0 +1,97 @@
<?php
ob_start();
session_start();
// Inclusion des librairie
require_once ('../lib/aeos.lib.php');
require_once ('../lib/var.lib.php');
$password = $ADMIN_MDP;
$login = $ADMIN_LOG;
$email = $ADMIN_EMAIL;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title><?php echo $SITE_NOM; ?></title>
<meta name="description" content="<?php echo $SITE_DESC; ?>" />
<?php
// Detection du navigateur. Si iPhone ou non.
if(preg_match("/iphone/i", $_SERVER["HTTP_USER_AGENT"])) {?>
<link rel="stylesheet" type="text/css" media="screen" href="../themes/<?php echo $SITE_THEME; ?>/styles_mobile.css" /><?php } else { ?>
<link rel="stylesheet" type="text/css" media="screen" href="../themes/<?php echo $SITE_THEME; ?>/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="tinyeditor/style.css" />
<script type="text/javascript" src="tinyeditor/packed.js"></script>
<link rel="icon" type="image/png" href="../themes/<?php echo $SITE_THEME; ?>/images/favicon_aeos.ico" /><?php } ?>
</head>
<?php if(!isset($_SESSION['_login']) || !isset($_SESSION['_pass'])){ ?>
<body>
<div id="content">
<div id="center">
<div id="left">NNSPROD LOGO</div>
<h6><img src="../themes/<?php echo $SITE_THEME; ?>/images/icones/logout.png" alt="Logout" class="icon" />Administration - AEOS</h6>
<?php
if (@$_GET['action']=="mdpperdu")
{
if(isset($_POST['login']) && isset($_POST['email']))
{
if(($login == $_POST['login']) && (strtolower($email) == strtolower($_POST['email'])))
{
$mdp = generer_mdp(12);
sendMail($SITE_NOM, $email, "Récupération de mot de passe", "Ce mail provient de ".$SITE_NOM.".\nVous avez fait une demande de nouveau mot de passe.\n\nVoici votre nouveau mot de passe: ".$mdp);
ecriture_xml('../data/config.xml', 'mdp_admin', md5($mdp));
echo "<span class='valide'>Un email vous a été envoyé.</span>";
}
else
{
echo "<span class='erreur'>Login ou email incorrect.</span>";
}
}
?>
<form action="index.php?action=mdpperdu" method="post">
<p>
Login<br /><input type="text" name="login" class="input" value="" /><br /><br />
Email<br /><input type="text" name="email" class="input" value="" /><br /><br />
<input type="submit" value="Renvoyer un mot de passe" class="input" />
</p>
</form>
<p><a href="index.php" class="link">Retour</a></p>
<?php
}
else
{
if(isset($_POST['login']) && isset($_POST['mdp']))
{
if(($login == $_POST['login']) && ($password == md5($_POST['mdp'])))
{
$_SESSION['_login'] = $login;
$_SESSION['_pass'] = $password;
header('Location: index.php');
}
else
{
echo "<p class='decalageBas'><span class='erreur'>Login ou mot de passe incorrect.</span></p>";
}
}
?>
<form action="index.php" method="post">
<p>
Login<br /><input type="text" name="login" class="input" value="" /><br /><br />
Mot de passe<br /><input type="password" name="mdp" class="input" value="" /><br /><br />
<input type="submit" value="Connexion" class="input" />
</p>
</form>
<p><a href="index.php?action=mdpperdu" class="link">Mot de passe perdu ?</a></p>
<?php
}
?>
</div>
</div>
</body>
<?php } else {require_once('base.php');} ?>
</html>
<?php ob_end_flush(); ?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 B

257
admin/tinyeditor/packed.js Normal file
View file

@ -0,0 +1,257 @@
TINY={};
function T$(i)
{
return document.getElementById(i)
}
function T$$$()
{
return document.all?1:0
}
TINY.editor=function()
{
var c=[],offset=-30;
c['cut']=[1,'Couper','a','cut',1];
c['copy']=[2,'Copier','a','copy',1];
c['paste']=[3,'Coller','a','paste',1];
c['bold']=[4,'Gras','a','bold'];
c['italic']=[5,'Italique','a','italic'];
c['underline']=[6,'Souligner','a','underline'];
c['strikethrough']=[7,'Rayer','a','strikethrough'];
c['subscript']=[8,'Indice','a','subscript'];
c['superscript']=[9,'Exposant','a','superscript'];
c['orderedlist']=[10,'Numérotation','a','insertorderedlist'];
c['unorderedlist']=[11,'Puce','a','insertunorderedlist'];
c['outdent']=[12,'Diminuer retrait','a','outdent'];
c['indent']=[13,'Augmenter retrait','a','indent'];
c['leftalign']=[14,'Alignement gauche','a','justifyleft'];
c['centeralign']=[15,'Alignement centre','a','justifycenter'];
c['rightalign']=[16,'Alignement droite','a','justifyright'];
c['blockjustify']=[17,'Justification','a','justifyfull'];
c['undo']=[18,'Annuler','a','undo'];
c['redo']=[19,'Rétablir','a','redo'];
c['image']=[20,'Inserer une image','i','insertimage','Enter Image URL:','http://'];
c['hr']=[21,'Inserer une barre horizontale','a','inserthorizontalrule'];
c['link']=[22,'Inserer un lien','i','createlink','Enter URL:','http://'];
c['unlink']=[23,'Retirer un lien','a','unlink'];
c['unformat']=[24,'Retirer la mise en page','a','removeformat'];
c['print']=[25,'Imprimer','a','print'];
//c['color']=[26,'Color','a','color'];
function edit(n,a)
{
this.n=n;
window[n]=this;
this.t=T$(a.id);
this.obj=a;
this.xhtml=a.xhtml;
var p=document.createElement('div'),w=document.createElement('div'),h=document.createElement('div'),l=a.controls.length,i=0;
this.i=document.createElement('iframe');
this.i.frameBorder=0;
this.i.width=a.width||'500';
this.i.height=a.height||'250';
this.ie=T$$$();
h.className='teheader';
p.className=a.cssclass||'te';
p.style.width=this.i.width+'px';
p.appendChild(h);
for(i;i<l;i++)
{
var b=a.controls[i];
if(b=='n')
{
h=document.createElement('div');
h.className=a.rowclass||'teheader';
p.appendChild(h)
}
else if(b=='|')
{
var d=document.createElement('div');
d.className=a.dividerclass||'tedivider';
h.appendChild(d)
}
else if(b=='font')
{
var g=document.createElement('select'),fonts=a.fonts||['Verdana','Arial','Georgia'],fl=fonts.length,x=0;
g.className='tefont';
g.onchange=new Function(this.n+'.ddaction(this,"fontname")');
g.options[0]=new Option('Font','');
for(x;x<fl;x++)
{
var j=fonts[x];
g.options[x+1]=new Option(j,j)
}
h.appendChild(g)
}
else if(b=='size')
{
var g=document.createElement('select'),sizes=a.sizes||[1,2,3,4,5,6,7],sl=sizes.length,x=0;
g.className='tesize';
g.onchange=new Function(this.n+'.ddaction(this,"fontsize")');
for(x;x<sl;x++)
{
var k=sizes[x];
g.options[x]=new Option(k,k)
}
h.appendChild(g)
}
else if(b=='style')
{
var g=document.createElement('select'),styles=a.styles||[['Style',''],['Paragraph','<p>'],['Header 1','<h1>'],['Header 2','<h2>'],['Header 3','<h3>'],['Header 4','<h4>'],['Header 5','<h5>'],['Header 6','<h6>']],sl=styles.length,x=0;
g.className='testyle';
g.onchange=new Function(this.n+'.ddaction(this,"formatblock")');
for(x;x<sl;x++)
{
var o=styles[x];
g.options[x]=new Option(o[0],o[1])
}
h.appendChild(g)
}
else if(c[b])
{
var q=document.createElement('div'),x=c[b],func=x[2],ex,pos=x[0]*offset;
q.className=a.controlclass;q.style.backgroundPosition='0px '+pos+'px';
q.title=x[1];
ex=func=='a'?'.action("'+x[3]+'",0,'+(x[4]||0)+')':'.insert("'+x[4]+'","'+x[5]+'","'+x[3]+'")';
q.onclick=new Function(this.n+(b=='print'?'.print()':ex));
q.onmouseover=new Function(this.n+'.hover(this,'+pos+',1)');
q.onmouseout=new Function(this.n+'.hover(this,'+pos+',0)');
h.appendChild(q);
if(this.ie)
{
q.unselectable='on'
}
}
}
this.t.parentNode.insertBefore(p,this.t);
this.t.style.width=this.i.width+'px';
w.appendChild(this.t);
w.appendChild(this.i);
p.appendChild(w);
this.t.style.display='none';
if(a.footer)
{
var f=document.createElement('div');
f.className=a.footerclass||'tefooter';
if(a.toggle)
{
var r=a.toggle,ts=document.createElement('div');
ts.className=r.cssclass||'toggle';
ts.innerHTML=a.toggletext||'source';
ts.onclick=new Function(this.n+'.toggle(0,this);return false');
f.appendChild(ts)
}
if(a.resize)
{
var s=a.resize,rs=document.createElement('div');
rs.className=s.cssclass||'resize';
rs.onmousedown=new Function('event',this.n+'.resize(event);return false');
rs.onselectstart=function(){return false};
f.appendChild(rs)
}
p.appendChild(f)
}
this.e=this.i.contentWindow.document;
this.e.open();
var m='<html><head>',bodyid=a.bodyid?" id=\""+a.bodyid+"\"":"";
if(a.cssfile)
{
m+='<link rel="stylesheet" href="'+a.cssfile+'" />'
}
if(a.css)
{
m+='<style type="text/css">'+a.css+'</style>'
}
m+='</head><body'+bodyid+'>'+(a.content||this.t.value);
m+='</body></html>';this.e.write(m);
this.e.close();
this.e.designMode='on';
this.d=1;
if(this.xhtml)
{
try
{
this.e.execCommand("styleWithCSS",0,0)
}
catch(e)
{
try
{
this.e.execCommand("useCSS",0,1)
}
catch(e){}
}
}
};
edit.prototype.print=function()
{
this.i.contentWindow.print()},edit.prototype.hover=function(a,b,c){a.style.backgroundPosition=(c?'34px ':'0px ')+(b)+'px'},edit.prototype.ddaction=function(b,a){var i=b.selectedIndex,v=b.options[i].value;
this.action(a,v)},edit.prototype.action=function(a,b,c){if(c&&!this.ie){alert('Your browser does not support this function.')}else{this.e.execCommand(a,0,b||null)}},edit.prototype.insert=function(a,b,c){var d=prompt(a,b);
if(d!=null&&d!=''){this.e.execCommand(c,0,d)}},edit.prototype.setfont=function(){execCommand('formatblock',0,hType)},edit.prototype.resize=function(e){if(this.mv){this.freeze()}this.i.bcs=TINY.cursor.top(e);
this.mv=new Function('event',this.n+'.move(event)');
this.sr=new Function(this.n+'.freeze()');
if(this.ie){document.attachEvent('onmousemove',this.mv);
document.attachEvent('onmouseup',this.sr)}else{document.addEventListener('mousemove',this.mv,1);
document.addEventListener('mouseup',this.sr,1)}},edit.prototype.move=function(e){var a=TINY.cursor.top(e);
this.i.height=parseInt(this.i.height)+a-this.i.bcs;this.i.bcs=a},edit.prototype.freeze=function(){if(this.ie){document.detachEvent('onmousemove',this.mv);
document.detachEvent('onmouseup',this.sr)}else{document.removeEventListener('mousemove',this.mv,1);
document.removeEventListener('mouseup',this.sr,1)}},edit.prototype.toggle=function(b,c){if(!this.d){var v=this.t.value;if(c){c.innerHTML=this.obj.toggletext||'source'}if(this.xhtml&&!this.ie){v=v.replace(/<strong>(.*)<\/strong>/gi,'<span style="font-weight: bold;">$1</span>');
v=v.replace(/<em>(.*)<\/em>/gi,'<span style="font-weight: italic;">$1</span>')}this.e.body.innerHTML=v;
this.t.style.display='none';
this.i.style.display='block';
this.d=1}
else{
var v=this.e.body.innerHTML;
if(this.xhtml)
{
v=v.replace(/<[^>]*>/g,function(a){return a.toLowerCase()});
v=v.replace(/<span class="apple-style-span">(.*)<\/span>/g,'$1');
v=v.replace(/ class="apple-style-span"/g,'');
v=v.replace(/<span style="">/g,'');
v=v.replace(/<br>/g,'<br />');
v=v.replace(/<br ?\/?>$/g,'');
v=v.replace(/^<br ?\/?>/g,'');
v=v.replace(/(<img [^>]+[^\/])>/gi,'$1 />');
v=v.replace(/<b\b[^>]*>(.*?)<\/b[^>]*>/g,'<strong>$1</strong>');
v=v.replace(/<i\b[^>]*>(.*?)<\/i[^>]*>/g,'<em>$1</em>');
v=v.replace(/<u\b[^>]*>(.*?)<\/u[^>]*>/g,'<span style="text-decoration:underline">$1</span>');
v=v.replace(/<(b|strong|em|i|u) style="font-weight: normal;?">(.*)<\/(b|strong|em|i|u)>/g,'$2');
v=v.replace(/<(b|strong|em|i|u) style="(.*)">(.*)<\/(b|strong|em|i|u)>/g,'<span style="$2"><$4>$3</$4></span>');
v=v.replace(/<span style="font-weight: normal;?">(.*)<\/span>/g,'$1');
v=v.replace(/<span style="font-weight: bold;?">(.*)<\/span>/g,'<strong>$1</strong>');
v=v.replace(/<span style="font-style: italic;?">(.*)<\/span>/g,'<em>$1</em>');
v=v.replace(/<span style="font-weight: bold;?">(.*)<\/span>|<b\b[^>]*>(.*?)<\/b[^>]*>/g,'<strong>$1</strong>')
}
if(c)
{
c.innerHTML=this.obj.toggletext||'wysiwyg'
}
this.t.value=v;
if(!b)
{
this.t.style.height=this.i.height+'px';
this.i.style.display='none';
this.t.style.display='block';
this.d=0
}}},edit.prototype.post=function(){if(this.d){this.toggle(1)}};
return{edit:edit}}();
TINY.cursor=function()
{
return
{
top:function(e)
{
return T$$$()?window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop:e.clientY+window.scrollY
}
}
}();

View file

@ -0,0 +1,22 @@
#input {border:none; margin:0; padding:0; font:10px 'Courier New',Verdana; border:0}
.te select{
padding: 1px;
}
.te {border:1px solid #5EB2DC; padding:0 1px 1px; font:12px Verdana,Arial}
.te iframe {border:none}
.teheader {height:31px; border-bottom:1px solid #5EB2DC; background:url(images/header-bg.gif) repeat-x; padding-top:1px}
.teheader select {float:left; margin-top:5px}
.tefont {margin-left:12px}
.tesize {margin:0 3px}
.testyle {margin-right:12px}
.tecolor {margin:0 3px}
.tedivider {float:left; width:1px; height:30px; background:#ccc}
.tecontrol {float:left; width:34px; height:30px; cursor:pointer; background-image:url(images/icons.png)}
.tecontrol:hover {background-color:#fff; background-position:30px 0}
.tefooter {height:32px; border-top:1px solid #5EB2DC; background:#f5f5f5}
.toggle {float:left; background:url(images/icons.png) -34px 2px no-repeat; padding:9px 13px 0 31px; height:23px; border-right:1px solid #ccc; cursor:pointer; color:#666}
.toggle:hover {background-color:#fff}
.resize {float:right; height:32px; width:32px; background:url(images/resize.gif) 15px 15px no-repeat; }
#editor {cursor:text;}

6
credits.txt Normal file
View file

@ -0,0 +1,6 @@
Crédits:
N.n.S Production pour le développement et le graphisme.
Michael Leigeber pour TinyEditor.
99ko pour l'idée.
holger1 pour une aide et certains fonctions PHP.

1
data/.htaccess Normal file
View file

@ -0,0 +1 @@
deny from all

9
data/pages/1.xml Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<page>
<id>1</id>
<nom>Accueil</nom>
<contenu>Bienvenue sur votre nouvelle page !</contenu>
<type>Simple</type>
<ordre>1</ordre>
<etat>1</etat>
</page>

30
index.php Normal file
View file

@ -0,0 +1,30 @@
<?php
// Vérification de l'installation.
ob_start();
if (!file_exists("data/config.xml")){header('Location: install/index.php?etape=0');}
// Inclusion des librairie
require_once ('lib/aeos.lib.php');
require_once ('lib/var.lib.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title><?php echo $SITE_NOM; ?></title>
<meta name="description" content="<?php echo $SITE_DESC; ?>" />
<?php
// Detection du navigateur. Si iPhone ou non.
if(preg_match("/iphone/i", $_SERVER["HTTP_USER_AGENT"])) {?>
<link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo $SITE_THEME; ?>/styles_mobile.css" /><?php } else { ?>
<link rel="stylesheet" type="text/css" media="screen" href="themes/<?php echo $SITE_THEME; ?>/styles.css" />
<link rel="icon" type="image/png" href="themes/<?php echo $SITE_THEME; ?>/images/favicon_aeos.ico" /><?php } ?>
</head>
<?php
// Maintenance ou non
if ($SITE_MAINTENANCE=="on"){require_once('themes/'.$SITE_THEME.'/maintenance.php');}
else {require_once('themes/'.$SITE_THEME.'/base.php');}
ob_end_flush();
?>

19
install/base.xml Normal file
View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
<nom_site/>
<description_site/>
<login_admin>kghk</login_admin>
<email_admin>ghj@k.kcom</email_admin>
<mdp_admin>aa36dc6e81e2ac7ad03e12fedcb6a2c0</mdp_admin>
<accueil>1</accueil>
<theme>defaut</theme>
<contentd>0</contentd>
<version>0.1a</version>
<maintenance>off</maintenance>
<message>Votre site est actuellement en maintenance. &lt;br /&gt;&#13;
&lt;br /&gt;&#13;
Merci de revenir plus tard !</message>
<footer>Copyright © 2011 N.n.S Production. Tous droits réservés. &lt;br /&gt;&lt;a href="http://nekonosekai.com"&gt;AEOS&lt;/a&gt; est un logiciel libre sous licence GNU/GPL.</footer>
</configuration>

238
install/index.php Normal file
View file

@ -0,0 +1,238 @@
<?php
ob_start();
if (file_exists("../data/config.xml")){header('Location: ../index.php');}
require_once ('../lib/aeos.lib.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>AEOS | Installation</title>
<link rel="stylesheet" type="text/css" media="screen" href="../themes/defaut/styles.css" />
<link rel="stylesheet" type="text/css" media="screen" href="install.css" />
<link rel="icon" type="image/png" href="../themes/defaut/images/favicon_aeos.ico" />
</head>
<body>
<div id="content">
<div id="center">
<div id="left">NNSPROD LOGO</div>
<h6><img src="../themes/defaut/images/icones/config.png" alt="Install" class="icon" />Installation - AEOS</h6>
<table class="tableCenter">
<tr>
<?php
!isset($_GET['etape'])?$etape=0:$etape=$_GET['etape'];
$PHPVersion = phpversion();
$PHPv = explode (".", $PHPVersion);
switch ($etape)
{
// Pré-installation
case 0: ?>
<td class="menu">
<ul class="listing">
<li id="actif">Preface</li>
<li class="onglet">Etape 1</li>
<li class="onglet">Etape 2</li>
<li class="onglet">Etape 3</li>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=1">
<h2>Préface d'installation</h2>
<h3>AEOS 0.1 Alpha [CALVARIUM]</h3>
<p>
Bienvenue sur l'assistant d'installation d'AEOS [CALVARIUM] !<br />
Veuillez suivre les étapes et valider avec la touche "suivant" afin de progresser.<br /><br />
<b>Prérequis:</b><br /><br />
PHP version >= 5.x.x
<?php
if ($PHPv[0]>=5) {echo "<span class='validation'>OK</span><br />";}
else {$erreur="Vous ne disposez pas de la version 5 de PHP."; echo "<span class='erreur'>ERREUR</span><br />";}
?>
Possibilité d'écrire dans le dossier DATA
<?php
$chmod_data = substr(sprintf('%o', fileperms('../data')), -4);
if ($chmod_data<"0700"){$erreur="Le dossier DATA n'a pas les droits appropriés. Il est en ".$chmod_data; echo "<span class='erreur'>ERREUR</span>";}
else {echo "<span class='validation'>OK</span>";}
?>
<?php
if (isset($erreur))
{
echo "<br /><span class='erreur2'>".$erreur."</span>";
?><br /><input type="submit" value="Suivant" class="input" id="input1" disabled="disabled" /><?php
}
else
{ ?>
<br /><br /><input type="submit" value="Suivant" class="input" id="input1" /><?php
} ?>
</p>
</form>
</td>
<?php
break;
// Etape 1
case 1:
?>
<td class="menu">
<ul class="listing">
<li class="onglet">Preface</li>
<li id="actif">Etape 1</li>
<li class="onglet">Etape 2</li>
<li class="onglet">Etape 3</li>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=2">
<h2>Etape 1</h2>
<h3>Configuration générale</h3>
<p>
Titre du site<br />
<input class="textWidth" type="text" name="titre" /><br /><br />
Description du site<br />
<textarea class="textWidth" name="description" rows="1" cols="1" class="input"></textarea>
<input type="button" value="Précédent" onclick="javascript:history.back();" class="input" id="input2" />
<input type="submit" value="Suivant" class="input" id="input1" />
</p>
</form>
</td>
<?php
break;
// Etape 2
case 2:
?>
<td class="menu">
<ul class="listing">
<li class="onglet">Preface</li>
<li class="onglet">Etape 1</li>
<li id="actif">Etape 2</li>
<li class="onglet">Etape 3</li>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=3">
<h2>Etape 2</h2>
<h3>Configuration du compte Administrateur</h3>
<p>
Identifiant: <input type="text" style="float:right; border:1px solid #219AD2;" name="login_admin" /><br /><br />
Mot de passe: <input type="password" style="float:right; border:1px solid #219AD2;" name="mdp_admin" /><br /><br />
Confirmer mot de passe: <input type="password" style="float:right; border:1px solid #219AD2;" name="mdp_confirme_admin" /><br /><br />
eMail: <input type="text" style="float:right; border:1px solid #219AD2;" name="email_admin" /><br /><br />
<?php
if(!isset($_GET['erreur']))
{
ecriture_xml('base.xml', 'nom_site', $_POST['titre']);
ecriture_xml('base.xml', 'description_site', $_POST['description']);
}
if (@$_GET['erreur']==1) echo "<span class='erreur2'>Les deux mots de passe ne sont pas identiques !</span><br />";
elseif (@$_GET['erreur']==2) echo "<span class='erreur2'>Votre adresse email n'est pas conforme.</span><br />";
?>
<input type="button" value="Précédent" onclick="javascript:history.back();" class="input" id="input2" />
<input type="submit" value="Suivant" class="input" id="input1" />
</p>
</form>
</td>
<?php
break;
// Etape 3
case 3:
?>
<td class="menu">
<ul class="listing">
<li class="onglet">Preface</li>
<li class="onglet">Etape 1</li>
<li class="onglet">Etape 2</li>
<li id="actif">Etape 3</li>
<li class="onglet">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="index.php?etape=4">
<h2>Etape 3</h2>
<h3>Licence publique générale GNU</h3>
<?php if (@$_GET['erreur']==1) echo "<span class='erreur2'>Veuillez accepter les conditions !</span><br />";
elseif (isset($_POST['mdp_admin']) && md5($_POST['mdp_admin']) != md5($_POST['mdp_confirme_admin']))
{
@header('Location:index.php?etape=2&erreur=1');
}
elseif (checkMail($_POST['email_admin'])==FALSE)
{
@header('Location:index.php?etape=2&erreur=2');
}
else
{
if(!isset($_GET['erreur']))
{
ecriture_xml('base.xml', 'login_admin', $_POST['login_admin']);
ecriture_xml('base.xml', 'mdp_admin', md5($_POST['mdp_admin']));
ecriture_xml('base.xml', 'email_admin', $_POST['email_admin']);
}
}?>
<p>
<textarea class="textWidth" style="height:90px;" cols="0" rows="0"><?php include('../licence.txt'); ?></textarea><br />
<input type="checkbox" name="conditions" /> Oui j'ai lu et j'accepte les termes et conditions d'utilisation
<input type="button" value="Précédent" onclick="javascript:history.back();" class="input" id="input2" />
<input type="submit" value="Suivant" class="input" id="input1" />
</p>
</form>
</td>
<?php
break;
// Etape 4
case 4:
if (!isset($_POST['conditions']) || (@$_POST['conditions']!="on"))
{
@header('Location: index.php?etape=3&erreur=1');
} ?>
<td class="menu">
<ul class="listing">
<li class="onglet">Preface</li>
<li class="onglet">Etape 1</li>
<li class="onglet">Etape 2</li>
<li class="onglet">Etape 3</li>
<li id="actif">Etape 4</li>
</ul>
</td>
<td rowspan="2" class="blocD">
<form method="post" action="../index.php">
<h2>Etape 4</h2>
<h3>Finalisation</h3>
<?php
copy("base.xml", "../data/config.xml");
unlink("base.xml");
?>
<p>
<b>AEOS 0.1 Alpha [CALVARIUM]</b> installé avec succés !<br /><br />
<span class="erreur2">N'oubliez pas d'effacer le dossier INSTALL de votre serveur !</span><br />
(Vous avez la possibilité de l'effacer via l'administration du site)<br /><br />
<b>Remerciements:</b><br />
N.n.S Production, PHP.NET
<input type="submit" value="Accés au site" class="input" id="input1" />
</p>
</form>
</td>
<?php
break;
} ?>
</tr>
<tr>
<td style="background:none;">
</td>
</tr>
</table>
</div>
</div>
</body>
</html>
<?php ob_end_flush(); ?>

25
install/install.css Normal file
View file

@ -0,0 +1,25 @@
/*
Utilisation de la CSS de base du thème defaut.
*/
table {margin-top:10px;}
td {background-color:#A0D2FC;}
h2 {font-weight:bold; font-size:16px;}
h3 {font-weight:bold; font-size:14px;}
p {text-align:left; margin:0 5px 0 5px; padding:4px; color:#0E6696;}
li {list-style-type:none; background-color:#79C0FB; border:1px solid #0E6696;}
.validation {font-weight:bold; color:green; float:right;}
.erreur {font-weight:bold; color:red; float:right;}
.erreur2 {font-weight:bold; color:red;}
.menu {height:55px; width:90px; background:none;}
.listing {margin:1px 0 0 0;}
.blocD {width:400px; border:1px solid #0E6696;}
.textWidth {width:375px; border:1px solid #219AD2;}
#actif {height:20px; padding:8px 7px 0 7px; margin:-2px 0 4px 0; border:1px solid white; font-weight:bold;}
.onglet {height:20px; padding:8px 7px 0 7px; margin:-2px 0 4px 0;}
#input1 {float:right; margin:5px -5px 5px 5px;}
#input2 {float:left; margin:5px 5px 5px -5px;}
#center {height: 300px;}
.tableCenter {margin:0 auto 0; width:510px;}

1
lib/.htaccess Normal file
View file

@ -0,0 +1 @@
deny from all

259
lib/aeos.lib.php Normal file
View file

@ -0,0 +1,259 @@
<?php
// Listings des fonctions (librairie) utilisées sur AEOS
// *****************************************************
/* Class qui permet la lecture des fichiers XML */
class Xml2Array
{
private $xml_dom;
private $xml_array;
private $xml;
public function __construct($xml = '') {$this->xml = $xml;}
public function setXml($xml)
{
if(!empty($xml))
{
$this->xml = $xml;
}
}
public function get_array()
{
if($this->get_dom() === false){return false;}
$this->xml_array = array();
$root_element = $this->xml_dom->firstChild;
$this->xml_array[$root_element->tagName] = $this->node_2_array($root_element);
return $this->xml_array;
}
private function node_2_array($dom_element)
{
if($dom_element->nodeType != XML_ELEMENT_NODE){return false;}
$children = $dom_element->childNodes;
foreach($children as $child)
{
if($child->nodeType != XML_ELEMENT_NODE){continue;}
$prefix = ($child->prefix) ? $child->prefix.':' : '';
if(!is_array(@$result[$prefix.$child->nodeName]))
{
$subnode = false;
foreach($children as $test_node)
{
if($child->nodeName == $test_node->nodeName && !$child->isSameNode($test_node))
{
$subnode = true;
break;
}
}
}
else
{
$subnode = true;
}
if ($subnode)
{
$result[$prefix.$child->nodeName][] = $this->node_2_array($child);
}
else
{
$result[$prefix.$child->nodeName] = $this->node_2_array($child);
}
}
if (!is_array(@$result))
{
$result['#text'] = html_entity_decode(htmlentities($dom_element->nodeValue, ENT_COMPAT, 'UTF-8'), ENT_COMPAT,'ISO-8859-1');
}
if ($dom_element->hasAttributes())
{
foreach ($dom_element->attributes as $attrib)
{
$prefix = ($attrib->prefix) ? $attrib->prefix.':' : '';
$result["@".$prefix.$attrib->nodeName] = $attrib->nodeValue;
}
}
return $result;
}
private function get_dom()
{
if(empty($this->xml))
{
echo '<span class="erreur">Aucun fichier XML trouv&eacute;.</span>';
return false;
}
$this->xml_dom = @DOMDocument::load($this->xml);
if($this->xml_dom)
{
return $this->xml_dom;
}
echo '<span class="erreur">Donn&eacute;es XML invalide</span>'; exit;
}
}
// Renvoi le XML en ARRAY
function lecture_xml($config)
{
$converter = new Xml2Array();
$converter->setXml($config);
$xml_array = $converter->get_array();
return $xml_array;
}
// Renvoi le listing d'un dossier dans un ARRAY
function listing_dossier($folder)
{
$dossier = opendir($folder);
$i=0;
while ($Fichier = readdir($dossier)) {
if ($Fichier != "." && $Fichier != "..") {
$array[$i]=$Fichier;
$i++;
}
}
@natsort($array);
return $array;
closedir($dossier);
}
// Enregistre une donnée dans un XML - Chemin, OldElement, NewElement
function ecriture_xml($a, $b, $c)
{
$dom = new DomDocument;
$dom->load($a);
$xml = $dom->getElementsByTagName($b);
//echo $xml->item(0)->nodeValue;
$titre = $xml->item(0);
$titre->nodeValue = utf8_encode($c);
//echo $dom->saveXML();
$dom->save($a);
}
// Renvoi une donnée en STRING
function donnee_xml($a, $b)
{
$dom = new DomDocument;
$dom->load($a);
$xml = $dom->getElementsByTagName($b);
return $xml->item(0)->nodeValue;
}
// Upload $fichier, le dézippe dans $dossier et affiche le message $page
function upload_unzip($fichier, $dossier, $page)
{
$filename = $fichier["name"];
$source = $fichier["tmp_name"];
$type = $fichier["type"];
if ($type=="application/zip" || $type=="application/x-zip-compressed" || $type=="multipart/x-zip" || $type=="application/x-compressed")
{
$target_path = $dossier.$filename;
if(move_uploaded_file($source, $target_path))
{
$nom = basename($filename, ".zip");
if (is_dir($dossier.$nom)==TRUE)
{
echo "<span class='erreur'>Ce ".$page." est d&eacute;j&agrave; install&eacute;.</span>";
unlink($target_path);
}
else
{
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true)
{
$zip->extractTo($dossier.$nom);
$zip->close();
unlink($target_path);
}
echo "<span class='valide'>Votre ".$page." a bien &eacute;t&eacute; install&eacute;.</span>";
}
}
else {echo "<span class='erreur'>Une erreur est survenue. Veuillez recommencer.</span>";}
}
else {echo "<span class='erreur'>Votre fichier n'est pas un zip.</span>";}
}
// Inverse de nl2br by OverSu
function br2nl($replace) {
return preg_replace("/<br\\s*?\/??>/i", "", $replace);
}
//Merci à holger1 de php.net
// Supprime un dossier
function removeFolder($dir) {
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
if (filetype($dir."/".$object) == "dir") removeFolder($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
// Vide un dossier
function clearFolder($folder)
{
$dossier=opendir($folder);
while ($fichier = readdir($dossier))
{
if ($fichier != "." && $fichier != "..")
{
$Vidage= $folder.$fichier;
unlink($Vidage);
}
}
closedir($dossier);
}
// Génère un mot de passe de $nbr caractères
function generer_mdp($nbr)
{
$str = "";
$chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
srand((double)microtime()*1000);
for($i=0; $i<$nbr; $i++) {
$str .= $chaine[rand()%strlen($chaine)];
}
return $str;
}
// Envoi un mail
function sendMail($expediteur, $destinataire, $titre, $messageHTML){
date("D, j M Y H:i:s");
$entete = "From: ".$expediteur."\n";
$entete .= "Cc: \n";
$entete .= "Reply-To: ".$expediteur." \n";
$entete .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$entete .= "Date: ". date("D, j M Y H:i:s");
mail($destinataire, $titre, $messageHTML, $entete);
}
// Retourne un boolean
// Vérifie si une adresse est belle et bien au format mail.
function checkMail($adresse)
{
$Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($Syntaxe,$adresse)) return true;
else return false;
}
?>

20
lib/config.lib.php Normal file
View file

@ -0,0 +1,20 @@
<?php
// Listings des variables les plus utilisées sous AEOS.
if (preg_match("/admin/", $_SERVER['SCRIPT_FILENAME'])){
$config = lecture_xml('../data/config.xml');
$data_pages = "../data/pages/";
} else {
$config = lecture_xml('data/config.xml');
$data_pages = "data/pages/";
}
$SITE_NOM = $config['configuration']['nom_site']['#text'];
$SITE_DESC = $config['configuration']['description_site']['#text'];
$SITE_THEME = $config['configuration']['theme']['#text'];
$SITE_MAINTENANCE = $config['configuration']['maintenance']['#text'];
$SITE_MESSAGE = $config['configuration']['message']['#text'];
$SITE_VERSION = $config['configuration']['version']['#text'];
$SITE_FOOTER = $config['configuration']['footer']['#text'];
$ADMIN_MDP = $config['configuration']['mdp_admin']['#text'];
$ADMIN_LOG = $config['configuration']['login_admin']['#text'];
$ADMIN_EMAIL = $config['configuration']['email_admin']['#text'];
?>

14
lib/var.lib.php Normal file
View file

@ -0,0 +1,14 @@
<?php
/*
Fichier libraire contenant toutes les constantes et/ou variables
permettant de gérer AEOS.
*/
// Repère si oui nous sommes dans l'Administration
include('config.lib.php');
$DATA_PAGES = $data_pages;
$execTime = microtime(true);
if(@empty($_GET['pid'])){$pid=1;} else {$pid = $_GET['pid'];}
?>

26
lib/wysiwyg.lib.php Normal file
View file

@ -0,0 +1,26 @@
<?php
// Script TinyEditor
?>
<script type="text/javascript">
new TINY.editor.edit('editor',{
id:'input',
width:700,
height:175,
cssclass:'te',
controlclass:'tecontrol',
rowclass:'teheader',
dividerclass:'tedivider',
controls:['bold','italic','underline','strikethrough','|','subscript','superscript','|',
'orderedlist','unorderedlist','|','outdent','indent','|','leftalign',
'centeralign','rightalign','blockjustify','|','unformat','|','undo','redo','n',
'font','size','style','|','image','hr','link','unlink','|','cut','copy','paste','print'],
footer:true,
fonts:['Verdana','Arial','Georgia','Trebuchet MS'],
xhtml:true,
cssfile:'style.css',
bodyid:'editor',
footerclass:'tefooter',
toggle:{text:'source',activetext:'wysiwyg',cssclass:'toggle'},
resize:{cssclass:'resize'}
});
</script>

227
licence.txt Normal file
View file

@ -0,0 +1,227 @@
Version 3, du 29 juin 2007.
Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org
Chacun est autorisé à copier et distribuer des copies conformes de ce document de licence, mais toute modification en est proscrite.
Préambule
La Licence Publique Générale GNU (“GNU General Public License”) est une licence libre, en “copyleft”, destinée aux œuvres logicielles et dautres types dœuvres.
Les licences de la plupart des œuvres logicielles et autres œuvres de la pratique sont conçues pour vous ôter votre liberté de partager et modifier ces œuvres. À linverse, la Licence Publique Générale GNU a pour but de garantir votre liberté de partager et changer toutes les versions dun programme — afin dassurer quil restera libre pour tous les utilisateurs. Nous, la Free Software Foundation, utilisons la Licence Publique Générale GNU pour la plupart de nos logiciels ; cela sapplique aussi à toute autre œuvre éditée de cette façon par ses auteurs. Vous pouvez, vous aussi, lappliquer à vos propres programmes.
Quand nous parlons de logiciel libre (“free”), nous nous référons à la liberté (“freedom”), pas au prix. Nos Licences Publiques Générales sont conçues pour assurer que vous ayez la liberté de distribuer des copies de logiciel libre (et le facturer si vous le souhaitez), que vous receviez le code source ou pouviez lobtenir si vous le voulez, que vous pouviez modifier le logiciel ou en utiliser toute partie dans de nouveaux logiciels libres, et que vous sachiez que vous avez le droit de faire tout ceci.
Pour protéger vos droits, nous avons besoin dempêcher que dautres vous restreignent ces droits ou vous demande de leur abandonner ces droits. En conséquence, vous avez certaines responsabilités si vous distribuez des copies dun tel programme ou si vous le modifiez : les responsabilités de respecter la liberté des autres.
Par exemple, si vous distribuez des copies dun tel programme, que ce soit gratuit ou contre un paiement, vous devez accorder aux Destinataires les mêmes libertés que vous avez reçues. Vous devez aussi vous assurer queux aussi reçoivent ou peuvent recevoir son code source. Et vous devez leur montrer les termes de cette licence afin quils connaissent leurs droits.
Les développeurs qui utilisent la GPL GNU protègent vos droits en deux étapes : (1) ils affirment leur droits dauteur (“copyright”) sur le logiciel, et (2) vous accordent cette Licence qui vous donne la permission légale de le copier, le distribuer et/ou le modifier.
Pour la protection des développeurs et auteurs, la GPL stipule clairement quil ny a pas de garantie pour ce logiciel libre. Aux fins à la fois des utilisateurs et auteurs, la GPL requière que les versions modifiées soient marquées comme changées, afin que leurs problèmes ne soient pas attribués de façon erronée aux auteurs des versions précédentes.
Certains dispositifs sont conçus pour empêcher laccès des utilisateurs à linstallation ou lexécution de versions modifiées du logiciel à lintérieur de ces dispositifs, alors que les fabricants le peuvent. Ceci est fondamentalement incompatible avec le but de protéger la liberté des utilisateurs de modifier le logiciel. Laspect systématique de tels abus se produit dans le secteur des produits destinés aux utilisateurs individuels, ce qui est précisément ce qui est le plus inacceptable. Aussi, nous avons conçu cette version de la GPL pour prohiber cette pratique pour ces produits. Si de tels problèmes surviennent dans dautres domaines, nous nous tenons prêt à étendre cette restriction à ces domaines dans de futures versions de la GPL, autant quil sera nécessaire pour protéger la liberté des utilisateurs.
Finalement, chaque programme est constamment menacé par les brevets logiciels. Les États ne devraient pas autoriser de tels brevets à restreindre le développement et lutilisation de logiciels libres sur des ordinateurs dusage général ; mais dans ceux qui le font, nous voulons spécialement éviter le danger que les brevets appliqués à un programme libre puisse le rendre effectivement propriétaire. Pour empêcher ceci, la GPL assure que les brevets ne peuvent être utilisés pour rendre le programme non-libre.
Les termes précis et conditions concernant la copie, la distribution et la modification suivent.
TERMES ET CONDITIONS
Article 0. Définitions.
« Cette Licence » se réfère à la version 3 de la “GNU General Public License” (le texte original en anglais).
« Droit dAuteur » signifie aussi les droits du “copyright” ou voisins qui sappliquent à dautres types dœuvres, tels que celles sur les masques de semi-conducteurs.
« Le Programme » se réfère à toute œuvre qui peut être sujette au Droit dAuteur (“copyright”) et dont les droits dutilisation sont concédés en vertu de cette Licence. Chacun des Licenciés, à qui cette Licence est concédée, est désigné par « vous. » Les « Licenciés » et les « Destinataires » peuvent être des personnes physiques ou morales (individus ou organisations).
« Modifier » une œuvre signifie en obtenir une copie et adapter tout ou partie de lœuvre dune façon qui nécessite une autorisation dun titulaire de Droit dAuteur, autre que celle permettant den produire une copie conforme. Lœuvre résultante est appelée une « version modifiée » de la précédente œuvre, ou une œuvre « basée sur » la précédente œuvre.
Une « Œuvre Couverte » signifie soit le Programme non modifié soit une œuvre basée sur le Programme.
« Propager » une œuvre signifie faire quoi que ce soit avec elle qui, sans permission, vous rendrait directement ou indirectement responsable dun délit de contrefaçon suivant les lois relatives au Droit dAuteur, à lexception de son exécution sur un ordinateur ou de la modification dune copie privée. La propagation inclue la copie, la distribution (avec ou sans modification), la mise à disposition envers le public, et aussi d'autres activités dans certains pays.
« Acheminer » une œuvre signifie tout moyen de propagation de celle-ci qui permet à dautres parties den réaliser ou recevoir des copies. La simple interaction dun utilisateur à travers un réseau informatique, sans transfert effectif dune copie, ne constitue pas un acheminement.
Une interface utilisateur interactive affiche des « Notices Légales Appropriées » quand elle comprend un dispositif convenable, bien visible et évident qui (1) affiche une notice appropriée sur les droits dauteur et (2) informe lutilisateur quil ny a pas de garantie pour lœuvre (sauf si des garanties ont été fournies hors du cadre de cette Licence), que les licenciés peuvent acheminer lœuvre sous cette Licence, et comment consulter une copie de cette Licence. Si linterface présente une liste de commandes utilisateur ou doptions, tel quun menu, un élément évident dans la liste présentée remplit ce critère.
Article 1. Code source.
Le « code source » dune œuvre signifie la forme préférée de lœuvre qui permet ou facilite les modifications de celle-ci. Le « code objet » dune œuvre signifie toute forme de lœuvre qui nen est pas le code source.
Une « Interface Standard » signifie une interface qui est soit celle dune norme officielle définie par un organisme de normalisation reconnu ou, dans le cas des interfaces spécifiées pour un langage de programmation particulier, une interface largement utilisée parmi les développeurs qui travaillent dans ce langage.
Les « Bibliothèques Système » dune œuvre exécutable incluent tout ce qui, en dehors de lœuvre dans son ensemble, (a) est inclus dans la forme usuelle de paquetage dun Composant Majeur mais ne fait pas partie de ce Composant Majeur et (b) sert seulement à permettre lutilisation de lœuvre avec ce Composant Majeur ou à mettre en œuvre une Interface Standard pour laquelle une mise en œuvre est disponible au public sous forme de code source ; un « Composant Majeur » signifie, dans ce contexte, un composant majeur essentiel (noyau, système de fenêtrage, etc.) du système dexploitation (le cas échéant) dun système sur lequel lœuvre exécutable fonctionne, ou bien un compilateur utilisé pour produire le code objet de lœuvre, ou un interprète de code objet utilisé pour exécuter celui-ci.
Le « Source Correspondant » dune œuvre sous forme de code objet signifie lensemble des codes sources nécessaires pour générer, installer et (dans le cas dune œuvre exécutable) exécuter le code objet et modifier lœuvre, y compris les scripts pour contrôler ces activités. Cependant, cela ninclue pas les Bibliothèques Système de lœuvre, ni les outils dusage général ou les programmes libres généralement disponibles qui peuvent être utilisés sans modification pour achever ces activités mais ne sont pas partie de cette œuvre. Par exemple le Source Correspondant inclut les fichiers de définition dinterfaces associés aux fichiers sources de lœuvre, et le code source des bibliothèques partagées et des sous-routines liées dynamiquement, pour lesquelles lœuvre est spécifiquement conçue pour les requérir via, par exemple, des communications de données ou contrôles de flux internes entre ces sous-programmes et dautres parties de lœuvre.
Le Source Correspondant na pas besoin dinclure tout ce que les utilisateurs peuvent regénérer automatiquement à partir dautres parties du Source Correspondant.
Le Source Correspondant pour une œuvre sous forme de code source est cette même œuvre.
Article 2. Permissions de base.
Tous les droits accordés suivant cette Licence le sont jusquau terme des Droits dAuteur (“copyright”) sur le Programme, et sont irrévocables pourvu que les conditions établies soient remplies. Cette Licence affirme explicitement votre permission illimitée dexécuter le Programme non modifié. La sortie produite par lexécution dune Œuvre Couverte nest couverte par cette Licence que si cette sortie, étant donné leur contenu, constitue une Œuvre Couverte. Cette Licence reconnait vos propres droits dusage raisonnable (“fair use” en législation des États-Unis dAmérique) ou autres équivalents, tels quils sont pourvus par la loi applicable sur le Droit dAuteur (“copyright”).
Vous pouvez créer, exécuter et propager sans condition des Œuvres Couvertes que vous nacheminez pas, aussi longtemps que votre licence demeure en vigueur. Vous pouvez acheminer des Œuvres Couvertes à dautres personnes dans le seul but de leur faire réaliser des modifications à votre usage exclusif, ou pour quils vous fournissent des facilités vous permettant dexécuter ces œuvres, pourvu que vous vous conformiez aux termes de cette Licence lors de lacheminement de tout matériel dont vous ne contrôlez pas le Droit dAuteur (“copyright”). Ceux qui, dès lors, réalisent ou exécutent pour vous les Œuvres Couvertes ne doivent alors le faire quexclusivement pour votre propre compte, sous votre direction et votre contrôle, suivant des termes qui leur interdisent de réaliser, en dehors de leurs relations avec vous, toute copie de votre matériel soumis au Droit dAuteur.
Lacheminement dans toutes les autres circonstances nest permis que selon les conditions établies ci-dessous. La concession de sous-licences nest pas autorisé ; larticle 10 rend cet usage non nécessaire.
Article 3. Protection des droits légaux des utilisateurs envers les lois anti-contournement.
Aucune Œuvre Couverte ne doit être vue comme faisant partie dune mesure technologique effective selon toute loi applicable remplissant les obligations prévues à larticle 11 du traité international sur le droit dauteur adopté à lOMPI le 20 décembre 1996, ou toutes lois similaires qui prohibent ou restreignent le contournement de telles mesures.
Si vous acheminez une Œuvre Couverte, vous renoncez à tout pouvoir légal dinterdire le contournement des mesures technologiques dans tous les cas où un tel contournement serait effectué en exerçant les droits prévus dans cette Licence pour cette Œuvre Couverte, et vous déclarez rejeter toute intention de limiter lopération ou la modification de lŒuvre, en tant que moyens pour renforcer, à lencontre des utilisateurs de cette Œuvre, vos droits légaux ou ceux de tierces parties dinterdire le contournement desdites mesures technologiques.
Article 4. Acheminement des copies conformes.
Vous pouvez acheminer des copies conformes du code source du Programme tel que vous lavez reçu, sur nimporte quel support, pourvu que vous publiiez scrupuleusement et de façon appropriée sur chaque copie une notice de Droit dAuteur appropriée ; gardez intactes toutes les notices établissant que cette Licence et tous les termes additionnels non permissifs ajoutés en accord avec larticle 7 sappliquent à ce code ; et donnez à chacun des Destinataires une copie de cette Licence en même temps que le Programme.
Vous pouvez facturer un prix quelconque, y compris gratuit, pour chacune des copies que vous acheminez, et vous pouvez offrir une protection additionnelle de support ou de garantie en échange dun paiement.
Article 5. Acheminement des versions sources modifiées.
Vous pouvez acheminer une œuvre basée sur le Programme, ou bien les modifications pour le produire à partir du Programme, sous la forme de code source suivant les termes de larticle 4, pourvu que vous satisfassiez aussi à chacune des conditions requises suivantes :
a) Lœuvre doit comporter des notices évidentes établissant que vous lavez modifiée et donnant la date correspondante.
b) Lœuvre doit comporter des notices évidentes établissant quelle est éditée selon cette Licence et les conditions ajoutées daprès larticle 7. Cette obligation vient modifier lobligation de larticle 4 de « garder intactes toutes les notices. »
c) Vous devez licencier lœuvre entière, comme un tout, suivant cette Licence à quiconque entre en possession dune copie. Cette Licence sappliquera en conséquence, avec les termes additionnels applicables prévus par larticle 7, à la totalité de lœuvre et chacune de ses parties, indépendamment de la façon dont elles sont empaquetées. Cette licence ne donne aucune permission de licencier lœuvre dune autre façon, mais elle ninvalide pas une telle permission que vous auriez reçue séparément.
d) Si lœuvre a des interfaces utilisateurs interactives, chacune doit afficher les Notices Légales Appropriées ; cependant si le Programme a des interfaces qui naffichent pas les Notices Légales Appropriées, votre œuvre na pas à les modifier pour quelles les affichent.
Une compilation dune Œuvre Couverte avec dautres œuvres séparées et indépendantes, qui ne sont pas par leur nature des extensions de lŒuvre Couverte, et qui ne sont pas combinés avec elle de façon à former un programme plus large, dans ou sur un volume de stockage ou un support de distribution, est appelé un « agrégat » si la compilation et son Droit dAuteur résultant ne sont pas utilisés pour limiter laccès ou les droits légaux des utilisateurs de la compilation en deçà de ce que permettent les œuvres individuelles. Linclusion dune Œuvre Couverte dans un agrégat ne cause pas lapplication de cette Licence aux autres parties de lagrégat.
Article 6. Acheminement des formes non sources.
Vous pouvez acheminer sous forme de code objet une Œuvre Couverte suivant les termes des articles 4 et 5, pourvu que vous acheminiez également suivant les termes de cette Licence le Source Correspondant lisible par une machine, dune des façons suivantes :
a) Acheminer le code objet sur, ou inclus dans, un produit physique (y compris un support de distribution physique), accompagné par le Source Correspondant fixé sur un support physique durable habituellement utilisé pour les échanges de logiciels.
b) Acheminer le code objet sur, ou inclus dans, un produit physique (y compris un support de distribution physique), accompagné dune offre écrite, valide pour au moins trois années et valide pour aussi longtemps que vous fournissez des pièces de rechange ou un support client pour ce modèle de produit, afin de donner à quiconque possède le code objet soit (1) une copie du Source Correspondant à tout logiciel dans ce produit qui est couvert par cette Licence, sur un support physique durable habituellement utilisé pour les échanges de logiciels, pour un prix non supérieur au coût raisonnable de la réalisation physique de lacheminement de la source, ou soit (2) un accès permettant de copier le Source Correspondant depuis un serveur réseau sans frais.
c) Acheminer des copies individuelles du code objet avec une copie de loffre écrite de fournir le Source Correspondant. Cette alternative est permise seulement occasionnellement et non-commercialement, et seulement si vous avez reçu le code objet avec une telle offre, en accord avec larticle 6 alinéa b.
d) Acheminer le code objet en offrant un accès depuis un emplacement désigné (gratuit ou contre facturation) et offrir un accès équivalent au Source Correspondant de la même façon via le même emplacement et sans facturation supplémentaire. Vous navez pas besoin dobliger les Destinataires à copier le Source Correspondant en même temps que le code objet. Si lemplacement pour copier le code objet est un serveur réseau, le Source Correspondant peut être sur un serveur différent (opéré par vous ou par un tiers) qui supporte des facilités équivalentes de copie, pourvu que vous mainteniez des directions claires à proximité du code objet indiquant où trouver le Source Correspondant. Indépendamment de quel serveur héberge le Source Correspondant, vous restez obligé de vous assurer quil reste disponible aussi longtemps que nécessaire pour satisfaire à ces obligations.
e) Acheminer le code objet en utilisant une transmission dégal-à-égal, pourvu que vous informiez les autres participants sur lendroit où le code objet et le Source Correspondant de lœuvre sont offerts sans frais au public général suivant larticle 6 alinéa d.
Une portion séparable du code objet, dont le code source est exclu du Source Correspondant en tant que Bibliothèque Système, na pas besoin dêtre inclu dans lacheminement de lœuvre sous forme de code objet.
Un « Produit Utilisateur » est soit (1) un « Produit de Consommation, » ce qui signifie toute propriété personnelle tangible normalement utilisée à des fins personnelles, familiales ou relatives au foyer, soit (2) toute chose conçue ou vendue pour lincorporation dans un lieu dhabitation. Pour déterminer si un produit constitue un Produit de Consommation, les cas ambigus sont résolus en fonction de la couverture. Pour un produit particulier reçu par un utilisateur particulier, lexpression « normalement utilisée » ci-avant se réfère à une utilisation typique ou lusage commun de produits de même catégorie, indépendamment du statut de cet utilisateur particulier ou de la façon spécifique dont cet utilisateur particulier utilise effectivement ou sattend lui-même ou est attendu à utiliser ce produit. Un produit est un Produit de Consommation indépendamment du fait que ce produit a ou na pas dutilisations substantielles commerciales, industrielles ou hors Consommation, à moins que de telles utilisations représentent le seul mode significatif dutilisation du produit.
Les « Informations dInstallation » dun Produit Utilisateur signifient toutes les méthodes, procédures, clés dautorisation ou autres informations requises pour installer et exécuter des versions modifiées dune Œuvre Couverte dans ce Produit Utilisateur à partir dune version modifiée de son Source Correspondant. Les informations qui suffisent à assurer la continuité de fonctionnement du code objet modifié ne doivent en aucun cas être empêchées ou interférées du seul fait quune modification a été effectuée.
Si vous acheminez le code objet dune Œuvre Couverte dans, ou avec, ou spécifiquement pour lutilisation dans, un Produit Utilisateur et si lacheminement se produit en tant quélément dune transaction dans laquelle le droit de possession et dutilisation du Produit Utilisateur est transféré au Destinataire définitivement ou pour un terme fixé (indépendamment de la façon dont la transaction est caractérisée), le Source Correspondant acheminé selon cet article-ci doit être accompagné des Informations dInstallation. Mais cette obligation ne sapplique pas si ni vous ni aucune tierce partie ne détient la possibilité dinstaller un code objet modifié sur le Produit Utilisateur (par exemple, lœuvre a été installée en mémoire morte).
Lobligation de fournir les Informations dInstallation ninclue pas celle de continuer à fournir un service de support, une garantie ou des mises à jour pour une œuvre qui a été modifiée ou installée par le Destinataire, ou pour le Produit Utilisateur dans lequel elle a été modifiée ou installée. Laccès à un réseau peut être rejeté quand la modification elle-même affecte matériellement et défavorablement les opérations du réseau ou viole les règles et protocoles de communication au travers du réseau.
Le Source Correspondant acheminé et les Informations dInstallation fournies, en accord avec cet article, doivent être dans un format publiquement documenté (et dont une implémentation est disponible auprès du public sous forme de code source) et ne doit nécessiter aucune clé ou mot de passe spécial pour le dépaquetage, la lecture ou la copie.
Article 7. Termes additionnels.
Les « permissions additionnelles » désignent les termes qui supplémentent ceux de cette Licence en émettant des exceptions à lune ou plusieurs de ses conditions. Les permissions additionnelles qui sont applicables au Programme entier doivent être traitées comme si elles étaient incluent dans cette Licence, dans les limites de leur validité suivant la loi applicable. Si des permissions additionnelles sappliquent seulement à une partie du Programme, cette partie peut être utilisée séparément suivant ces permissions, mais le Programme tout entier reste gouverné par cette Licence sans regard aux permissions additionnelles.
Quand vous acheminez une copie dune Œuvre Couverte, vous pouvez à votre convenance ôter toute permission additionnelle de cette copie, ou de nimporte quelle partie de celui-ci. (Des permissions additionnelles peuvent être rédigées de façon à requérir leur propre suppression dans certains cas où vous modifiez lœuvre.) Vous pouvez placer les permissions additionnelles sur le matériel acheminé, ajoutées par vous à une Œuvre Couverte pour laquelle vous avez ou pouvez donner les permissions de Droit dAuteur (“copyright”) appropriées.
Nonobstant toute autre clause de cette Licence, pour tout constituant que vous ajoutez à une Œuvre Couverte, vous pouvez (si autorisé par les titulaires de Droit dAuteur pour ce constituant) supplémenter les termes de cette Licence avec des termes :
a) qui rejettent la garantie ou limitent la responsabilité de façon différente des termes des articles 15 et 16 de cette Licence ; ou
b) qui requièrent la préservation de notices légales raisonnables spécifiées ou les attributions dauteur dans ce constituant ou dans les Notices Légales Appropriées affichées par les œuvres qui le contiennent ; ou
c) qui prohibent la représentation incorrecte de lorigine de ce constituant, ou qui requièrent que les versions modifiées dun tel constituant soient marquées par des moyens raisonnables comme différentes de la version originale ; ou
d) qui limitent lusage à but publicitaire des noms des concédants de licence et des auteurs du constituant ; ou
e) qui refusent à accorder des droits selon la législation relative aux marques commerciales, pour lutilisation dans des noms commerciaux, marques commerciales ou marques de services ; ou
f) qui requièrent lindemnisation des concédants de licences et auteurs du constituant par quiconque achemine ce constituant (ou des versions modifiées de celui-ci) en assumant contractuellement la responsabilité envers le Destinataire, pour toute responsabilité que ces engagements contractuels imposent directement à ces octroyants de licences et auteurs.
Tous les autres termes additionnels non permissifs sont considérés comme des « restrictions avancées » dans le sens de larticle 10. Si le Programme tel que vous lavez reçu, ou toute partie de celui-ci, contient une notice établissant quil est gouverné par cette Licence en même temps quun terme qui est une restriction avancée, vous pouvez ôter ce terme. Si un document de licence contient une restriction avancée mais permet la reconcession de licence ou lacheminement suivant cette Licence, vous pouvez ajouter une Œuvre Couverte constituante gouvernée par les termes de ce document de licence, pourvu que la restriction avancée ne survit pas à une telle cession de licence ou un tel acheminement.
Si vous ajoutez des termes à une Œuvre Couverte en accord avec cet article, vous devez placer, dans les fichiers sources appropriés, une déclaration des termes additionnels qui sappliquent à ces fichiers, ou une notice indiquant où trouver les termes applicables.
Les termes additionnels, quils soient permissifs ou non permissifs, peuvent être établis sous la forme dune licence écrite séparément, ou établis comme des exceptions ; les obligations ci-dessus sappliquent dans chacun de ces cas.
Article 8. Terminaison.
Vous ne pouvez ni propager ni modifier une Œuvre Couverte autrement que suivant les termes de cette Licence. Toute autre tentative de le propager ou le modifier est nulle et terminera automatiquement vos droits selon cette Licence (y compris toute licence de brevet accordée selon le troisième paragraphe de larticle 11).
Cependant, si vous cessez toute violation de cette Licence, alors votre licence depuis un titulaire de Droit dAuteur (“copyright”) est réinstaurée (a) à titre provisoire à moins que et jusquà ce que le titulaire de Droit dAuteur termine finalement et explicitement votre licence, et (b) de façon permanente si le titulaire de Droit dAuteur ne parvient pas à vous notifier de la violation par quelque moyen raisonnable dans les soixante (60) jours après la cessation.
De plus, votre licence depuis un titulaire particulier de Droit dAuteur est réinstaurée de façon permanente si ce titulaire vous a notifié de la violation par quelque moyen raisonnable, et si cest la première fois que vous avez reçu une notification de violation de cette Licence (pour une œuvre quelconque) depuis ce titulaire de Droit dAuteur, et si vous résolvez la violation dans les trente (30) jours qui suivent votre réception de la notification.
La terminaison de vos droits suivant cette section ne terminera pas les licences des parties qui ont reçu des copies ou droits de votre part suivant cette Licence. Si vos droits ont été terminés et non réinstaurés de façon permanente, vous nêtes plus qualifié à recevoir de nouvelles licences pour les mêmes constituants selon larticle 10.
Article 9. Acceptation non requise pour obtenir des copies.
Vous nêtes pas obligé daccepter cette licence afin de recevoir ou exécuter une copie du Programme. La propagation asservie dune Œuvre Couverte qui se produit simplement en conséquence dune transmission dégal-à-égal pour recevoir une copie ne nécessite pas lacceptation. Cependant, rien dautre que cette Licence ne vous accorde la permission de propager ou modifier une quelconque Œuvre Couverte. Ces actions enfreignent le Droit dAuteur si vous nacceptez pas cette Licence. Par conséquent, en modifiant ou propageant une Œuvre Couverte, vous indiquez votre acceptation de cette Licence pour agir ainsi.
Article 10. Cession automatique de Licence aux Destinataires et intermédiaires.
Chaque fois que vous acheminez une Œuvre Couverte, le Destinataire reçoit automatiquement une licence de la part des concédants originaux, pour exécuter, modifier et propager cette œuvre, suivant les termes de cette Licence. Vous nêtes pas responsable du renforcement de la conformation des tierces parties aux termes de cette Licence.
Une « transaction dentité » désigne une transaction qui transfère le contrôle dune organisation, ou de substantiellement tous ses actifs, ou la subdivision dune organisation, ou la fusion de plusieurs organisations. Si la propagation dune Œuvre Couverte résulte dune transaction dentité, chaque partie à cette transaction qui reçoit une copie de lœuvre reçoit aussi les licences pour lœuvre que le prédécesseur intéressé à cette partie avait ou pourrait donner selon le paragraphe précédent, plus un droit de possession du Source Correspondant de cette œuvre depuis le prédécesseur intéressé si ce prédécesseur en dispose ou peut lobtenir par des efforts raisonnables.
Vous ne pouvez imposer aucune restriction avancée dans lexercice des droits accordés ou affirmés selon cette Licence. Par exemple, vous ne pouvez imposer aucun paiement pour la licence, aucune royaltie, ni aucune autre charge pour lexercice des droits accordés selon cette Licence ; et vous ne pouvez amorcer aucun litige judiciaire (y compris une réclamation croisée ou contre-réclamation dans un procès) sur lallégation quune revendication de brevet est enfreinte par la réalisation, lutilisation, la vente, loffre de vente, ou limportation du Programme ou dune quelconque portion de celui-ci.
Article 11. Brevets.
Un « contributeur » est un titulaire de Droit dAuteur (“copyright”) qui autorise lutilisation selon cette Licence du Programme ou de lœuvre sur laquelle le Programme est basé. Lœuvre ainsi soumise à licence est appelée la « version contributive » de ce contributeur.
Les « revendications de brevet essentielles » sont toutes les revendications de brevets détenues ou contrôlées par le contributeur, quelles soient déjà acquises par lui ou acquises subséquemment, qui pourraient être enfreintes de quelque manière, permises par cette Licence, sur la réalisation, lutilisation ou la vente de la version contributive de celui-ci. Aux fins de cette définition, le « contrôle » inclue le droit de concéder des sous-licences de brevets dune manière consistante, nécessaire et suffisante, avec les obligations de cette Licence.
Chaque contributeur vous accorde une licence de brevet non exclusive, mondiale et libre de toute royaltie, selon les revendications de brevet essentielles, pour réaliser, utiliser, vendre, offrir à la vente, importer et autrement exécuter, modifier et propager les contenus de sa version contributive.
Dans les trois paragraphes suivants, une « licence de brevet » désigne tous les accords ou engagements exprimés, quel que soit le nom que vous lui donnez, de ne pas mettre en vigueur un brevet (telle quune permission explicite pour mettre en pratique un brevet, ou un accord pour ne pas poursuivre un Destinataire pour cause de violation de brevet). « Accorder » une telle licence de brevet à une partie signifie conclure un tel accord ou engagement à ne pas faire appliquer le brevet à cette partie.
Si vous acheminez une Œuvre Couverte, dépendant en connaissance dune licence de brevet, et si le Source Correspondant de lœuvre nest pas disponible à quiconque copie, sans frais et suivant les termes de cette Licence, à travers un serveur réseau publiquement accessible ou tout autre moyen immédiatement accessible, alors vous devez soit (1) rendre la Source Correspondante ainsi disponible, soit (2) vous engager à vous priver pour vous-même du bénéfice de la licence de brevet pour cette œuvre particulière, soit (3) vous engager, dune façon consistante avec les obligations de cette Licence, à étendre la licence de brevet aux Destinataires de cette œuvre. « Dépendant en connaissance » signifie que vous avez effectivement connaissance que, selon la licence de brevet, votre acheminement de lŒuvre Couverte dans un pays, ou lutilisation de lŒuvre Couverte par votre Destinataire dans un pays, enfreindrait un ou plusieurs brevets identifiables dans ce pays où vous avez des raisons de penser quils sont valides.
Si, conformément à ou en liaison avec une même transaction ou un même arrangement, vous acheminez, ou propagez en procurant un acheminement de, une Œuvre Couverte et si accordez une licence de brevet à lune des parties recevant lŒuvre Couverte pour lui permettre dutiliser, propager, modifier ou acheminer une copie spécifique de lŒuvre Couverte, alors votre accord est automatiquement étendu à tous les Destinataires de lŒuvre Couverte et des œuvres basées sur celle-ci.
Une licence de brevet est « discriminatoire » si, dans le champ de sa couverture, elle ninclut pas un ou plusieurs des droits qui sont spécifiquement accordés selon cette Licence, ou en prohibe lexercice, ou est conditionnée par le non-exercice dun ou plusieurs de ces droits. Vous ne pouvez pas acheminer une Œuvre Couverte si vous êtes partie à un arrangement, selon lequel une partie tierce exerçant son activité dans la distribution de logiciels et à laquelle vous effectuez un paiement fondé sur létendue de votre activité dacheminement de lœuvre, et selon lequel la partie tierce accorde, à une quelconque partie qui recevrait depuis vous lŒuvre Couverte, une licence de brevet discriminatoire (a) en relation avec les copies de lŒuvre Couverte acheminées par vous (ou les copies réalisées à partir de ces copies), ou (b) avant tout destinée à et en relation avec des produits spécifiques ou compilations contenant lŒuvre Couverte, à moins que vous ayez conclu cet arrangement ou que la licence de brevet ait été accordée avant le 28 mars 2007.
Rien dans cette Licence ne devrait être interprété comme devant exclure ou limiter toute licence implicite ou dautres moyens de défense à une infraction qui vous seraient autrement disponible selon la loi applicable relative aux brevets.
Article 12. Non abandon de la liberté des autres.
Si des conditions vous sont imposées (que ce soit par décision judiciaire, par un accord ou autrement) qui contredisent les conditions de cette Licence, elles ne vous excusent pas des conditions de cette Licence. Si vous ne pouvez pas acheminer une Œuvre Couverte de façon à satisfaire simultanément vos obligations suivant cette Licence et toutes autres obligations pertinentes, alors en conséquence vous ne pouvez pas du tout lacheminer. Par exemple, si vous avez un accord sur des termes qui vous obligent à collecter pour le réacheminement des royalties depuis ceux à qui vous acheminez le Programme, la seule façon qui puisse vous permettre de satisfaire à la fois à ces termes et ceux de cette Licence sera de vous abstenir entièrement dacheminer le Programme.
Article 13. Utilisation avec la Licence Générale Publique Affero GNU.
Nonobstant toute autre clause de cette Licence, vous avez la permission de lier ou combiner toute Œuvre Couverte avec une œuvre placée sous la version 3 de la Licence Générale Publique GNU Affero (“GNU Affero General Public License”) en une seule œuvre combinée, et dacheminer lœuvre résultante. Les termes de cette Licence continueront à sappliquer à la partie formant une Œuvre Couverte, mais les obligations spéciales de la Licence Générale Publique GNU Affero, article 13, concernant linteraction à travers un réseau, sappliqueront à la combinaison en tant que telle.
Article 14. Versions révisées de cette License.
La Free Software Foundation peut publier des versions révisées et/ou nouvelles de la Licence Publique Générale GNU (“GNU General Public License”) de temps en temps. De telles version nouvelles resteront similaires dans lesprit avec la présente version, mais peuvent différer dans le détail afin de traiter de nouveaux problèmes ou préoccupations.
Chaque version reçoit un numéro de version distinctif. Si le Programme indique quune version spécifique de la Licence Publique Générale GNU « ou toute version ultérieure » (“or any later version”) sapplique à celui-ci, vous avez le choix de suivre soit les termes et conditions de cette version numérotée, soit ceux de nimporte quelle version publiée ultérieurement par la Free Software Foundation. Si le Programme nindique pas une version spécifique de la Licence Publique Générale GNU, vous pouvez choisir lune quelconque des versions qui ont été publiées par la Free Software Foundation.
Si le Programme spécifie quun intermédiaire peut décider quelles versions futures de la Licence Générale Publique GNU peut être utilisée, la déclaration publique dacceptation dune version par cet intermédiaire vous autorise à choisir cette version pour le Programme.
Des versions ultérieures de la licence peuvent vous donner des permissions additionnelles ou différentes. Cependant aucune obligation additionnelle nest imposée à lun des auteurs ou titulaires de Droit dAuteur du fait de votre choix de suivre une version ultérieure.
Article 15. Déclaration dabsence de garantie.
IL NY A AUCUNE GARANTIE POUR LE PROGRAMME, DANS LES LIMITES PERMISES PAR LA LOI APPLICABLE. À MOINS QUE CELA NE SOIT ÉTABLI DIFFÉREMMENT PAR ÉCRIT, LES PROPRIÉTAIRES DE DROITS ET/OU LES AUTRES PARTIES FOURNISSENT LE PROGRAMME « EN LÉTAT » SANS GARANTIE DAUCUNE SORTE, QUELLE SOIT EXPRIMÉE OU IMPLICITE, CECI COMPRENANT, SANS SE LIMITER À CELLES-CI, LES GARANTIES IMPLICITES DE COMMERCIALISABILITÉ ET DADÉQUATION À UN OBJECTIF PARTICULIER. VOUS ASSUMEZ LE RISQUE ENTIER CONCERNANT LA QUALITÉ ET LES PERFORMANCES DU PROGRAMME. DANS LÉVENTUALITÉ OÙ LE PROGRAMME SAVÉRERAIT DÉFECTUEUX, VOUS ASSUMEZ LES COÛTS DE TOUS LES SERVICES, RÉPARATIONS OU CORRECTIONS NÉCESSAIRES.
Article 16. Limitation de responsabilité.
EN AUCUNE AUTRE CIRCONSTANCE QUE CELLES REQUISES PAR LA LOI APPLICABLE OU ACCORDÉES PAR ÉCRIT, UN TITULAIRE DE DROITS SUR LE PROGRAMME, OU TOUT AUTRE PARTIE QUI MODIFIE OU ACHEMINE LE PROGRAMME COMME PERMIS CI-DESSUS, NE PEUT ÊTRE TENU POUR RESPONSABLE ENVERS VOUS POUR LES DOMMAGES, INCLUANT TOUT DOMMAGE GÉNÉRAL, SPÉCIAL, ACCIDENTEL OU INDUIT SURVENANT PAR SUITE DE LUTILISATION OU DE LINCAPACITÉ DUTILISER LE PROGRAMME (Y COMPRIS, SANS SE LIMITER À CELLES-CI, LA PERTE DE DONNÉES OU LINEXACTITUDE DES DONNÉES RETOURNÉES OU LES PERTES SUBIES PAR VOUS OU DES PARTIES TIERCES OU LINCAPACITÉ DU PROGRAMME À FONCTIONNER AVEC TOUT AUTRE PROGRAMME), MÊME SI UN TEL TITULAIRE OU TOUTE AUTRE PARTIE A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS DOMMAGES.
Article 17. Interprétation des sections 15 et 16.
Si la déclaration dabsence de garantie et la limitation de responsabilité fournies ci-dessus ne peuvent prendre effet localement selon leurs termes, les cours de justice qui les examinent doivent appliquer la législation locale qui approche au plus près possible une levée absolue de toute responsabilité civile liée au Programme, à moins quune garantie ou assumation de responsabilité accompagne une copie du Programme en échange dun paiement.
FIN DES TERMES ET CONDITIONS.
Comment appliquer ces termes à vos nouveaux programmes
Si vous développez un nouveau programme et voulez quil soit le plus possible utilisable par le public, la meilleure façon dy parvenir et den faire un logiciel libre que chacun peut redistribuer et changer suivant ces termes-ci.
Pour appliquer ces termes, attachez les notices suivantes au programme. Il est plus sûr de les attacher au début de chacun des fichiers sources afin de transporter de façon la plus effective possible lexclusion de garantie ; et chaque fichier devrait comporter au moins la ligne de réservation de droit (“copyright”) et une indication permettant de savoir où la notice complète peut être trouvée :
Une ligne donnant le nom du programme et une brève idée de ce quil fait.
Copyright (C) "année" "nom de lauteur" — Tous droits réservés.
Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le
modifier suivant les termes de la “GNU General Public License” telle que
publiée par la Free Software Foundation : soit la version 3 de cette
licence, soit (à votre gré) toute version ultérieure.
Ce programme est distribué dans lespoir quil vous sera utile, mais SANS
AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ
ni dADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale
Publique GNU pour plus de détails.
Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec
ce programme ; si ce nest pas le cas, consultez :
http://www.gnu.org/licenses.
Ajoutez également les informations permettant de vous contacter par courrier électronique ou postal.
Si le programme produit une interaction sur un terminal, faites lui afficher une courte notice comme celle-ci lors de son démarrage en mode interactif :
"programme" Copyright (C) "année" "nom de lauteur"
Ce programme vient SANS ABSOLUMENT AUCUNE GARANTIE ; taper “affiche g” pour
les détails. Ceci est un logiciel libre et vous êtes invité à le redistribuer
suivant certaines conditions ; taper “affiche c” pour les détails.
Les commandes hypothétiques “affiche g” and “affiche c” devrait afficher les parties appropriées de la Licence Générale Publique. Bien sûr, les commandes de votre programme peuvent être différentes ; pour une interface graphique, vous pourriez utiliser une « boîte À propos. »
Vous devriez également obtenir de votre employeur (si vous travaillez en tant que programmeur) ou de votre école un « renoncement aux droits de propriété » pour ce programme, si nécessaire. Pour plus dinformations à ce sujet, et comment appliquer la GPL GNU, consultez "http://www.gnu.org/licenses".
La Licence Générale Publique GNU ne permet pas dincorporer votre programme dans des programmes propriétaires. Si votre programme est une bibliothèque de sous-routines, vous pourriez considérer quil serait plus utile de permettre de lier des applications propriétaires avec la bibliothèque. Si cest ce que vous voulez faire, utilisez la Licence Générale Publique Limitée GNU au lieu de cette Licence ; mais dabord, veuillez lire http://www.gnu.org/philosophy/why-not-lgpl.html.

10
modules/simple/base.xml Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<page>
<id>0</id>
<nom>nom</nom>
<contenu>contenu</contenu>
<type>Simple</type>
<ordre>0</ordre>
<etat>0</etat>
</page>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
<nom>Pages simples</nom>
<dossier>simple</dossier>
<description>Module de base qui permet d'ajouter une page de texte.</description>
<version>1.0.3</version>
<auteurs>N.n.S Production</auteurs>
<email>contact@nekonosekai.com</email>
</configuration>

105
modules/simple/edition.php Normal file
View file

@ -0,0 +1,105 @@
<?php
// Fichier d'édition et d'ajout d'une page
if ($_GET['action']=="ajouter")
{
if(isset($_POST['s1']) || isset($_POST['s2']))
{
if (empty($_POST['nom_page']) || $_POST['nom_page']=="")
{
echo "<span class='erreur'>Merci d'indiquer un nom de page.</span>";
}
else
{
$list=listing_dossier($DATA_PAGES);
$nb = sizeof($list); $nb=$nb+1;
copy('../modules/simple/base.xml', '../data/pages/'.$nb.'.xml');
ecriture_xml('../data/pages/'.$nb.'.xml', 'nom', $_POST['nom_page']);
ecriture_xml('../data/pages/'.$nb.'.xml', 'contenu', $_POST['input']);
ecriture_xml('../data/pages/'.$nb.'.xml', 'id', $nb);
ecriture_xml('../data/pages/'.$nb.'.xml', 'ordre', $nb);
if (@$_POST['affichage']=="on"){$maintenance="1";} else {$maintenance="0";}
ecriture_xml('../data/pages/'.$nb.'.xml', 'etat', $maintenance);
if(isset($_POST['s1'])) {$m=1; echo "<span class='valide'>Page ajoutée.</span>";}
if(isset($_POST['s2'])) {$m=1;echo "<span class='valide'>Page sauvegardée.</span>";}
}
}
if (@$m!=1) { ?>
<form action="index.php?pid=2&amp;action=ajouter" method="post" onsubmit="editor.post();" enctype="multipart/form-data">
<p>
<b>Nom de la page</b><br /><br />
<input type="text" name="nom_page" class="input_text" value="" id="text_input" /><br /><br />
<b>Contenu de la page</b>
</p>
<div class="gauche"><textarea id="input" name="input" cols="0" rows="0"></textarea></div>
<div class="div_unique1">
<b>Options</b><br /><br />
<table id="option_table">
<tr>
<td><input type="checkbox" id="affi" name="affichage" /><label for="affi"><span style="cursor:pointer;"> Affichage</span></label></td>
<td><input type="submit" name="s1" value="Appliquer" id="apply_but"/></td>
</tr>
<tr>
<td><img src="../themes/defaut/images/icones/delete.png" alt="Delete" /><a href="index.php?pid=2"> Annuler</a></td>
<td><input type="submit" name="s2" value="Enregistrer" id="save_but"/></td>
</tr>
</table>
</div>
<?php include('../lib/wysiwyg.lib.php'); ?>
<p>
<input type="hidden" name="type" value="<?php echo $_POST['type']; ?>" /><br /><br />
</p>
</form><?php
}
}
elseif ($_GET['action']=="modifier")
{
if(isset($_POST['s1']) || isset($_POST['s2']))
{
if (empty($_POST['nom_page']) || $_POST['nom_page']=="")
{
echo "<span class='erreur'>Merci d'indiquer un nom de page.</span>";
}
else
{
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'nom', $_POST['nom_page']);
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'contenu', $_POST['input']);
if (@$_POST['affichage']=="on"){$maintenance="1";} else {$maintenance="0";}
ecriture_xml('../data/pages/'.$_GET['id'].'.xml', 'etat', $maintenance);
if(isset($_POST['s1'])) {$m=0; echo "<span class='valide'>Changement appliqué.</span>";}
if(isset($_POST['s2'])) {$m=1; echo "<span class='valide'>Changement sauvegardé.</span>";}
}
}
$page = lecture_xml("../data/pages/".$_GET['id'].".xml");
if(@$m!=1){ ?>
<form action="index.php?pid=2&amp;action=modifier&amp;id=<?php echo $_GET['id']; ?>" method="post" onsubmit="editor.post();" enctype="multipart/form-data">
<p> <b>Nom de la page</b><br /><br />
<input type="text" name="nom_page" class="input_text" value="<?php echo $page['page']['nom']['#text']; ?>" id="text_input" /><br /><br />
<input type="hidden" name="type" value="<?php echo $_POST['type']; ?>" /><br /><br />
<b>Contenu de la page</b><br />
</p>
<div class="gauche"><textarea id="input" name="input" cols="0" rows="0"><?php echo $page['page']['contenu']['#text']; ?></textarea></div>
<div class="div_unique1">
<b>Options</b><br /><br />
<table id="option_table">
<tr>
<td><input type="checkbox" id="affi" name="affichage" <?php if($page['page']['etat']['#text']==1){echo "checked='checked'";} ?>/><label for="affi"><span style="cursor:pointer;"> Affichage</span></label></td>
<td><input type="submit" name="s1" value="Appliquer" id="apply_but"/></td>
</tr>
<tr>
<td><img src="../themes/defaut/images/icones/delete.png" alt="Delete" /><a href="index.php?pid=2"> Annuler</a></td>
<td><input type="submit" name="s2" value="Enregistrer" id="save_but"/></td>
</tr>
</table>
</div>
<?php include('../lib/wysiwyg.lib.php'); ?>
</form>
<?php
}
}
?>

47
themes/defaut/base.php Normal file
View file

@ -0,0 +1,47 @@
<body>
<div id="general">
<div id="header">
<h1><?php echo $SITE_NOM; ?></h1>
<p><?php echo $SITE_DESC; ?></p>
<ul class="menu">
<?php
// Listings des pages + menu
$list=listing_dossier($DATA_PAGES);
if(empty($_GET['id'])){$id=1;} else {$id = $_GET['id'];}
foreach ($list as &$pages) {
$page = lecture_xml($DATA_PAGES.$pages);
if ($page['page']['etat']['#text']==1){
if ($page['page']['ordre']['#text']==$id)
{
echo "<li><a href='index.php?id=".$page['page']['ordre']['#text']."'><b>".$page['page']['nom']['#text']."</b></a></li>";
}
else
{
echo "<li><a href='index.php?id=".$page['page']['ordre']['#text']."'>".$page['page']['nom']['#text']."</a></li>";
}
}
}
?>
</ul>
</div>
<div id="corps">
<div id="contentG">
<p>
<?php
// Affichage de la page
if(empty($_GET['id'])){$id=1;} else {$id = $_GET['id'];}
$contenu = lecture_xml($DATA_PAGES.$id.'.xml');
echo $contenu['page']['contenu']['#text'];
?>
</p>
</div>
</div>
<div id="footer">
<p>
AEOS v<?php echo $SITE_VERSION; ?> - <?php echo round(microtime(true)-$execTime, 3)."s<br />".$SITE_FOOTER; ?>
</p>
</div>
</div>
</body>
</html>

10
themes/defaut/config.xml Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
<id>1</id>
<nom>AEOS - Défaut</nom>
<dossier>defaut</dossier>
<description>Thème de base d'AEOS</description>
<version>1.0.0</version>
<auteurs>N.n.S Production</auteurs>
<email>contact@nekonosekai.com</email>
</configuration>

View file

@ -0,0 +1,3 @@
<?php
echo "<span class='erreur'>Aucune modification possible sur ce thème.</span>";
?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 968 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,002 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,000 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,012 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,001 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,023 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,10 @@
<!-- Maintenance -->
<body>
<div id="content">
<div id="center">
<p><?php echo $SITE_MESSAGE; ?></p>
</div>
<div id="left"></div>
</div>
</body>
</html>

View file

@ -0,0 +1,3 @@
<!--
Ici, modification possible au format XML pour votre thème.
-->

106
themes/defaut/styles.css Normal file
View file

@ -0,0 +1,106 @@
body,html{
font-family: Arial, sans-serif;
font-size: 12px;
margin:0;
color: #666;
}
/* Design */
#header{
background: url(images/bg_header.png) repeat-x #D8D8D8;
overflow: hidden;
margin-bottom: 15px;
border-bottom: 5px solid #D8D8D8;
}
#header p {width: 960px; color: #fff; margin: 5px auto 15px auto;}
#corps{
width: 960px;
margin: 0 auto 0;
margin-bottom: 30px;
overflow: hidden;
}
#contentG{
float: left;
width: 950px;
/*width: 600px*/
margin-right: 60px;
}
#contentD{
float: left;
width: 298px;
}
#footer{clear: both; text-align: center;}
#footer a {color:#33AFDE; text-decoration:none;}
/* Menus */
ul.menu{
width: 960px;
margin: 0 auto;
list-style-type: none;
background: url(images/bg_nav.png);
overflow: hidden;
}
ul.menu li a{
color: #fff;
text-decoration: none;
padding: 10px;
display: block;
}
ul.menu li{float: left;margin-right: 5px;}
ul.menu li a:hover{color: #4b537a;}
/* Styles */
#text_input {width:250px;}
.input_text {border:1px solid #5EB2DC;background-color:#FFFFFF; padding:3px; font-family:Arial; font-size:12px;}
.input_text_mini {border:1px solid #5EB2DC;background-color:#FFFFFF; padding:3px; width:76px; font-family:Arial; font-size:12px;}
.area_text {border:1px solid #5EB2DC;background-color:#FFFFFF; padding:3px; width:250px; height:100px; font-family:Arial; font-size:12px;}
/* Tableaux */
#tableau {border:1px solid #5EB2DC; padding:15px;}
#tableau tr:hover {background:#CEE7F4;}
#tableau tr {border:1px solid black;}
#en_tete {font-weight:bold; background:#A5D2EB;}
tr:hover#en_tete {background:#A5D2EB;}
/* Formulaire */
#option_table a {text-decoration:none; color:#666666;}
#option_table td {border:1px solid #5EB2DC; padding:3px; background:url(tinyeditor/images/header-bg.gif) repeat-x; height:34px;}
#option_table td:hover {padding:3px; background-image:none; background-color:#FFFFFF; height:34px;}
.div_unique1 {float:left; border:1px solid #5EB2DC;width:184px; margin:0 0 30px 20px; height:237px; padding:20px;}
/* Admin BOX */
#content {position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: white;}
#center {position: absolute;
height: 200px; top:0; bottom:0; left:0; right: 0; margin: auto; background-color: #1389CA;
text-align:left; text-align:center; color:#FFF; border-top:5px solid #E9EBF5 ; border-bottom:5px solid #E9EBF5 ; background-image:url(images/bg_header.png);background-repeat:repeat-x;}
#left {width: 76px; height: 77px; background:url(images/logo.png) no-repeat; text-indent:-5000; font-size:0; margin:-90px auto 20px;}
/* Boutons */
.erreur {color:red; font-weight:bold; text-shadow:#FFFFFF 0px 0px 2px;}
.valide {color:green; font-weight:bold; text-shadow:#FFFFFF 0px 0px 2px;}
.input {border:1px solid #219AD2;}
.option {border:1px solid #219AD2; padding:2px;}
#add_but {background:url(images/icones/ajout.png) no-repeat; padding:4px 0px 4px 17px; border:none; background-position:left center; font-size:12px; font-family:Arial; color:#A60000; cursor:pointer;}
#apply_but {background:url(images/icones/apply.png) no-repeat; padding:4px 0px 4px 17px; border:none; background-position:left center; font-size:12px; font-family:Arial; color:#666666;}
#save_but {background:url(images/icones/save.png) no-repeat; padding:4px 0px 4px 17px; border:none; background-position:left center; font-size:12px; font-family:Arial; color:#666666;}
/* Icones */
.icon {margin:0 4px -2px 0;}
.petit_decalage {margin:0 5px 0 5px;}
.decalageBas {margin:0 0 -10px 0;}
/* Bases */
ul{margin-left: 0; padding-left: 0; list-style-position: inside;}
a{color: #b70034;}
h1{width: 960px; color: #fff; font-weight: normal; margin: 30px auto 5px auto;}
h6{font-size:14px; margin:10px 0 5px 0;}
.text_left {text-align:justify; padding:10px;}
.link {text-decoration:none;}
.gauche {float:left;}
.gauche50 {float:left; margin:0 50px 0 0;}

View file

@ -0,0 +1,3 @@
/*
Ici, création d'un thème format iPhone/iPod
*/