AEOS Calvarium v0.1a
This commit is contained in:
commit
37d5452518
56 changed files with 2081 additions and 0 deletions
524
admin/base.php
Normal file
524
admin/base.php
Normal 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&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&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&action=modifier&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&action=supprimer&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&action=ordremoins&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&action=ordreplus&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&action=ordremoins&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&action=ordreplus&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&action=affichage&aff=off&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&action=affichage&aff=on&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&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&action=supprimer&dossier=<?php echo $_GET['dossier']; ?>&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&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&action=modifier&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&action=supprimer&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&action=supprimer&dossier=<?php echo $_GET['dossier']; ?>&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&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&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&action=modifier&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&action=supprimer&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&action=choix&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
|
||||
Nouveau MDP
|
||||
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&action=supprimer&fichier=<?php echo $_GET['fichier']; ?>&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&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&action=retour&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&action=supprimer&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
97
admin/index.php
Normal 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(); ?>
|
||||
BIN
admin/tinyeditor/images/header-bg.gif
Normal file
BIN
admin/tinyeditor/images/header-bg.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 B |
BIN
admin/tinyeditor/images/icons.png
Normal file
BIN
admin/tinyeditor/images/icons.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
admin/tinyeditor/images/resize.gif
Normal file
BIN
admin/tinyeditor/images/resize.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 B |
257
admin/tinyeditor/packed.js
Normal file
257
admin/tinyeditor/packed.js
Normal 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
|
||||
}
|
||||
}
|
||||
}();
|
||||
22
admin/tinyeditor/style.css
Normal file
22
admin/tinyeditor/style.css
Normal 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;}
|
||||
Loading…
Add table
Add a link
Reference in a new issue