update du projet, xml collection enlevé et méthode fait maison ajouter

This commit is contained in:
Pontoporeia
2023-05-12 09:38:08 +02:00
parent 85a81079c1
commit 3ee32e17fa
2058 changed files with 837761 additions and 41938 deletions

View File

@@ -1,826 +0,0 @@
<?php
/* classe principale */
class classe_xml {
private $type;
private $modele;
private $contenu;
private $form;
private $hydrate;
public $fichier;
public $fichier_seul;
public $cle;
public $messages;
public function __construct($modele){
$this->modele=$modele;
$structure=json_decode(json_encode((array)simplexml_load_file($modele)),1);
// nettoyage de l'attribut du tag de base après récupération du type
$this->type=$structure['@attributes']['type'];
// la cle de tri est l'attribut de cle, sinon le premier tag de type texte
$this->cle=$structure['@attributes']['cle'];
// dupliquer la structure dans le contenu
$this->contenu=$structure;
unset($this->contenu['@attributes']);
foreach($this->contenu as $cle => $valeur){
if(empty($this->cle) && $valeur['@attributes']['type']=="text"){
$this->cle =$cle;
}
$this->contenu[$cle]['contenu']="";
}
$this->hydrate=false;
$this->messages=array();
//print_r($this->contenu);
}
// fonction de lecture d'un xml
// reçoit le nom, et va récupérer
// le xml grace à la constante d'adresse du dossier
// dans le fichier de configuration
public function lire_xml($fichier){
$this->fichier=$fichier;
$this->fichier_seul=fichier_seul($fichier);
$tempcontenu=json_decode(json_encode((array)simplexml_load_file($fichier,'SimpleXMLElement', LIBXML_NOCDATA)),1);
unset($tempcontenu['@attributes']);
// transformation éventuelle de l'array pour complaire à la structure
// hydrater la structure par le contenu
foreach($this->contenu as $cle => $valeur){
if(isset($tempcontenu[$cle])){
$this->contenu[$cle]['contenu']=$tempcontenu[$cle];
// supprimer cette clé du contenu
// pour pouvoir dans un deuxième temps
// ajouter les contenus éventuellement ajoutés librement
// sans référence dans la définition du xml
unset($tempcontenu[$cle]);
} else {
$this->contenu[$cle]['contenu']="";
}
}
// ajouter les champs trouvé hors définition dans le contenu
// par exemple <truc>contenu du truc</truc>
foreach($tempcontenu as $cle => $valeur){
$this->contenu[$cle]['@attributes']['type']='unknow';
$this->contenu[$cle]['@attributes']['titre']=$cle;
if(is_array($tempcontenu[$cle])){
foreach($tempcontenu[$cle] as $ar_item){
$this->contenu[$cle]['contenu'][]=$ar_item;
}
} else {
$this->contenu[$cle]['contenu']=$tempcontenu[$cle];
}
}
$this->hydrate=true;
}
//sur base de la structure de $contenu, écrit le formulaire
public function ecrit_xml(){
$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->encoding = "UTF-8";
$item = $doc->createElement('item');
$item->setAttribute('type', $this->type);
foreach($this->contenu as $tag => $contenu){
// print_r($contenu);
if(is_array($contenu['contenu'])){
// type "multiple", prendre chaque item pour le rentrer
foreach($contenu['contenu'] as $e){
$elem = $doc->createElement( $tag );
$ct = $elem->ownerDocument->createCDATASection($e);
$elem->appendChild($ct);
$item->appendChild( $elem );
}
} else {
// contenu unique, créer un noeud
if($contenu['contenu']!=""){
$elem = $doc->createElement( $tag );
$ct = $elem->ownerDocument->createCDATASection($contenu['contenu']);
$elem->appendChild($ct);
$item->appendChild( $elem );
}
}
}
$doc->appendChild( $item );
fix_exists_dir(CHEMIN.DOSSIER_XML);
$r=$doc->save($this->fichier);
if($r==true){
$this->messages[]="enregistrement réussi de ".$this->fichier;
} else {
$this->messages[]="échec de l'enregistrement de ".$this->fichier;
}
}
// renvoie tout le contenu dans un array
public function get_contenu(){
return $this->contenu;
}
// renvoie tout le contenu dans un array
public function get_contenu_simple(){
$retour=array();
foreach ($this->contenu as $champ => $contenu){
if (!$this->is_tag_empty($champ)){
$retour[$champ]=$this->get($champ);
}
}
return $retour;
}
// renvoie le contenu dans un array, moins une exclude list
public function get_partial_contenu($exclus=array()){
$base_contenu =$this->contenu;
if(is_array($exclus)){
foreach($exclus as $tag){
unset($base_contenu[$tag]);
}
} else {
unset($base_contenu[$exclus]);
}
return $base_contenu;
}
public function get_liste_pour_attribut($attribut,$valeur,$exclude){
$retour=array();
foreach($this->contenu as $tag => $contenu){
//print_r($contenu['@attributes']);
if(isset($contenu['@attributes'][$attribut]) && !in_array($tag,$exclude)){
if($contenu['@attributes'][$attribut]==$valeur){
$retour[]=$tag;
}
}
}
return $retour;
}
// renvoir le contenu total d'un tag
public function get_contenu_tag($tag){
//$retour=$this->contenu[$tag]["@attributes"];
$this->contenu[$tag];
//return $retour;
}
public function get_tag_attribute($tag,$attribute,$defaut=""){
//print_r($this->contenu[$tag]['@attributes']);
if(isset($this->contenu[$tag]['@attributes'][$attribute])){
return $this->contenu[$tag]['@attributes'][$attribute];
//echo "il y a attribut";
} else {
return $defaut;
}
//return $retour;
}
// renvoie le contenu d'un tag
// avec filtrage éventuel
public function get($tag, $defaut="", $filtrage=false){
$retour="";
if(isset($this->contenu[$tag])){
// attention un tag peut être présent mais vide
// dans ce cas il se présente en array
if(!is_array($this->contenu[$tag]['contenu'])){
$retour=$this->contenu[$tag]['contenu'];
} else {
if(count($this->contenu[$tag]['contenu'])){
$retour = $this->contenu[$tag]['contenu'];
}
}
}
if($retour==""){ return $defaut; } else {
// voir si le filtrage s'applique
// si on est face à un array, appliquer le filtre sur chaque élément
return $retour;
}
}
// renvoie le contenu du tag en un array
public function get_tag_array($tag){
$contenu=$this->contenu[$tag]['contenu'];
if(is_array($contenu)){
if(trim(implode("",$contenu))==""){
return array();
} else {
return $contenu;
}
} else {
if(trim($contenu)==""){
return array();
} else {
return array( $contenu );
}
}
return false;
}
// renvoie le nombre d'éléments contenus
public function get_tag_nb($tag){
if(!isset($this->contenu[$tag]) || !isset($this->contenu[$tag]['contenu'])){
return 0;
}
if(is_string($this->contenu[$tag]['contenu'])){
return 1;
}
return count($this->contenu[$tag]['contenu']);
}
public function set($tag, $contenu){
if(isset($this->contenu[$tag])){
$this->contenu[$tag]['contenu']=$contenu;
}
}
// afficher le tag de maniere standard
// avec un label, les contenus et le filtrage spécifié
public function display_tag($tag,$class_replace="",$filter_replace=""){
if($this->is_tag_empty($tag)){ return ""; }
// okay, quelque chose à afficher
// label si le contenu n'est pas de type texte
$retour="<div class='".$this->get_tag_attribute($tag,"class","")."'>";
$type=$this->get_tag_attribute($tag,"type");
if($type !="text"){
$retour.="<label for='tag' class='tag-$tag label-$type'>".$this->get_tag_attribute($tag,"titre")."</label>";
}
$contenu=$this->get($tag);
// transformer les éléments uniques en array
if(!is_array($contenu)){
$contenu=array(0=>$contenu);
}
$nb=count($contenu);
$classnth="grid1";
if($nb == 2 ) {
$classnth="grid2";
} else if($nb >= 3 ){
$classnth="grid3";
}
$retour.="<div class='viewer-grid grid-$type $classnth'>";
// affichage de chaque item
foreach($contenu as $pc){
switch($type){
case "image":
$retour.= "<div class='viewer-grid-item image'><img onclick='viewer_show_image(this);' class='img-fluid' src='";
$retour.= donne_lien(DOSSIER_FICHIERS.$pc, 600, 400, true);
$retour.= "' data-original='".donne_lien(DOSSIER_FICHIERS.$pc,1200,1200,false)."'></div>";
break;
case "file":
$ext = strtolower(pathinfo($pc, PATHINFO_EXTENSION));
switch($ext){
case "mp4":
case "ogg":
case "webm":
$retour.="<video controls class='viewer-grid-item videoreader' width='100%' height='320' ><source src='".DOSSIER_FICHIERS.$pc."' type='video/$ext'>Your browser does not support the video tag.</video>";
break;
case "mp3":
case "ogg":
$retour.="<audio controls class='viewer-grid-item audioreader'><source src='".DOSSIER_FICHIERS.$pc."' type='audio/$ext' />Mettez à jour votre navigateur</audio>";
break;
default:
$retour.="<div class='viewer-grid-item viewer-grid-standard'><a href='".DOSSIER_FICHIERS.$pc."'>".$this->file_icon($pc).fichier_seul($pc)."</a></div>";
break;
}
break;
default:
$retour.="<div class='viewer-item' title='".$tag."'>".nl2br($this->appliquer_filtre($tag,$pc))."</div>";
break;
}
}
$retour.="</div></div>";
return $retour;
}
// Creation du formulaire
/*
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
*/
public function deployer_formulaire($action=array()){
// action : action= nom de l'action, bouton=texte du bouton, titre=entete
// entete du formulaire
$this->form="<div class='px-3'>";
if(isset($action['titre'])){
$this->form .= "<header>\n<h2 class='h5 mb-3'>".$action['titre']."</h2>\n</header>\n";
}
if(isset($action['addtop'])){
$this->form .= $action['addtop'];
}
$this->form .="<form id=\"form-".$this->type."\" method=\"post\" enctype=\"multipart/form-data\" class=\"pb-3\">";
$this->form .="<input type=\"hidden\" name=\"action\" value=\"".$action['action']."\" >";
foreach($this->contenu as $tag => $champ){
// champs à exclure sur demande
if(isset($action['exclure_champ'])){
if(in_array($tag,$action['exclure_champ'])){
continue;
}
}
// prendre le contenu et en faire un array
// si l'array est vide, lui donner un contenu vide
// foreach sur les contenus
// ajouter le bouton plus si on est en multi
// démarrer le filedset, afficher le label
$this->form .= "<fieldset class='form-group mb-3 ".$this->type." fieldset-".$tag."'>\n";
$this->form .="<label for='".$tag."' class='mb-1'>".$champ['@attributes']['titre'];
if(isset($champ['@attributes']['allow'])){
$this->form .=" (".$champ['@attributes']['allow'].")" ;
}
$this->form .= "</label>\n";
$contenus=$this->get_tag_array($tag);
// si le tag est vide, mettre un contenu pour afficher le champ
if(empty($contenus)){
$contenus=array(0 => "");
}
if($this->is_tag_multiple($tag)){
// champ multiple
$multiple=true;
$this->form .="<div class='file-item multiple small row' data-form-dest='form_".$tag."'>\n";
// cas particulier des files: il faut toujours un input
if(($champ['@attributes']['type']=='file' || $champ['@attributes']['type']=='image') && !$this->is_tag_empty($tag)){
$contenus[]="";
}
} else {
$multiple=false;
$this->form .="<div class='file-item unique row'>\n";
}
// foreach sur les contenus du tag
foreach($contenus as $contenu){
switch($champ['@attributes']['type']) {
case 'image':
$this->form .= $this->form_part_image($tag, $champ, $contenu, $multiple);
break;
case 'file':
$this->form .= $this->form_part_file($tag, $champ, $contenu, $multiple);
break;
default:
$this->form .= $this->form_part_input($tag, $champ, $contenu, $multiple);
break;
}
}
$this->form .="</div>\n";
// le bouton "plus"
if($multiple){
$this->form .= "<div class='mb-1'><button onclick='form_input_duplicate(this);return false;' class='button bouton-plus' data-duplicate='form_$tag'>+</button></div>\n";
}
$this->form .= "</fieldset>\n";
}
if(!isset($action['no_submit'])){
$this->form .= "<input type=\"submit\" class=\"btn btn-success btn-sm\" name=\"submit\" value=\"";
if(isset($action['submit'])){
$this->form .=$action['submit'];
} else {
$this->form .= "Envoyer";
}
$this->form .= "\">\n";
}
$this->form .= "</form>\n";
if(isset($action['delete'])){
$this->form .= "<form method=\"post\">";
$this->form .="<input type=\"hidden\" name=\"action\" value=\"supprimer\" >";
$this->form .="<div id=\"supprimer_1\" class=\"btn btn-danger btn-sm mr-2\" onclick=\"show_next(this);\">Supprimer</div>";
$this->form .= "<input type=\"submit\" class=\"btn btn-danger btn-sm\" style=\"display:none;\" name=\"supprimer\" value=\"Confirmer la suppression\">";
$this->form .= "</form>";
}
$this->form.="</div>";
if(isset($action['addbottom'])){
$this->form .= $action['addbottom'];
}
return $this->form;
}
private function form_part_image($tag, $champ, $contenu, $multiple){
$code="";
if($multiple){ $add="[]"; $addclass="col-12 col-sm-6 mb-1";} else { $add="";$addclass="col-12"; }
if(!empty($contenu)) {
$ext = pathinfo(DOSSIER_FICHIERS.$contenu, PATHINFO_EXTENSION);
switch ($ext){
case 'jpg':
case'gif':
case 'png':
$url_item="";
$code .="<div class='form-image $addclass'>";
$code .= "<img src='".donne_lien( DOSSIER_FICHIERS.$contenu,$l_vignette=600,$h_vignette=400,false)."' data-original='".$contenu."' class='force-w px-0'>";
$code .= "<div class='tools-image item-tools' data-item='".$this->fichier_seul."'>";
$code .= "<button class=' button' onclick='image_rotate(\"".$contenu."\",90,\"".$this->fichier_seul."\");return false;'><i class='fas fa-undo-alt' class='icon-rotate'></i></button><button class='button' onclick='image_rotate(\"".$contenu."\",-90,\"".$this->fichier_seul."\");return false;' class='icon-rotate'><i class='fas fa-redo-alt'></i></button>";
$code .="<input type='checkbox' name='doc-delete[]' id='".$tag."|".$contenu."' value='".$tag."|".$contenu."' class='d-none'><label for='".$tag."|".$contenu."' class='icon-delete carefull button' onClick='visible_check(this);'><i class='fas fa-times'></i></label>";
$code .= "</div></div>";
break;
}
} else {
$this->form .= "<div class='col-12 mb-1' data-form-base='form_".$tag."' ><input class='form-control form-control-sm' type='file' name='".$tag."[]' value=''></div>";
}
return $code;
}
private function form_part_file($tag, $champ, $contenu, $multiple){
$code="";
if($multiple){ $add="[]"; } else { $add=""; }
if(!empty($contenu)) {
// creer un hash pour placer dans le value le type et le tag
// pour un meilleur process
$ext = pathinfo(DOSSIER_FICHIERS.$contenu, PATHINFO_EXTENSION);
$icones=array(
"pdf"=>"far fa-file-pdf",
"zip" =>"far fa-file-archive",
"mp3" => "far fa-file-audio",
"mp4" => "far fa-file-video",
"ogg" => "far fa-file-video",
"defaut" => "far fa-file"
);
if(isset($icones[$ext])){
$icon_class=$icones[$ext];
} else {
$icon_class=$icones['defaut'];
}
$code .= "<div class='col-12'><i class='".$icon_class." pr-1 h6' aria-hidden='true'></i><span class='pr-3 h6'>".fichier_seul(DOSSIER_FICHIERS.$contenu)."</span> <span class='tools-file'><input type='checkbox' name='doc-delete[]' value='".$tag."|".$contenu."' id='".$tag."|".$contenu."' class='d-none'><label for='".$tag."|".$contenu."' class='icon-delete carefull button' onClick='visible_check(this);'><i class='fas fa-times'></i></label></span></div>";
} else {
$this->form .= "<div class='col-12 mb-1' data-form-base='form_".$tag."' ><input class='form-control form-control-sm' type='file' name='".$tag."[]' value=''></div>";
}
return $code;
}
// sous fonction de déployer formulaire, crée un élément particulier
// ancien value_html_part
private function form_part_input($titre, $champ, $contenu, $multiple){
$code="";
if(isset($champ['@attributes']['class'])) {
$addclass=" ".$champ['@attributes']['class'];
} else {
$addclass="";
}
if($multiple){ $add="[]"; } else { $add=""; }
switch($champ['@attributes']['type']) {
case 'select':
$options=explode("|",$champ['@attributes']['value']);
$code .= "<div class='col-12 mb-1' data-form-base='form_".$titre."'><select class='form-control-sm form-control' name='".$titre.$add."'>\n";
$code.= "<option value=''>- - -</option>";
foreach($options as $option){
$code.= "<option value='".htmlentities($option, ENT_QUOTES)."'";
if($option == $contenu){
$code .=" selected='selected'";
}
$code .=">".$option."</option>\n";
}
$code .= "</select></div>\n";
break;
case 'radio':
$options=explode("|",$champ['@attributes']['value']);
$code .="<div class='col-12 mb-1' data-form-base='form_".$titre."'>";
foreach($options as $option){
$code .= "<span class='pr-3'><input class='form-control-sm form-control mr-1' type='radio' name='".$titre.$add."' value='".$option."'";
if($option == $contenu){
$code .=" checked='checked'";
}
$code .="> ".$option."</span>\n";
}
$code .="</div>";
break;
case 'textarea':
$code .= "<div class='col-12 mb-1' data-form-base='form_".$titre."'><textarea class='form-control-sm form-control' name='".$titre.$add."'>".$contenu."</textarea></div>\n";
break;
default:
$code .= "<div class='col-12 mb-1' data-form-base='form_".$titre."'><input class='form-control-sm form-control' type='text' name='".$titre.$add."' value='".htmlspecialchars($contenu,ENT_QUOTES)."' data-type='".$titre."'></div>\n";
break;
}
return $code;
}
public function traiter_formulaire($ecrire=false){
//unset($_POST['valider']);
$retour="none";
if(isset($_POST['action'])){
if($_POST['action']=="supprimer"){
$this->supprimer_xml();
return "delete";
}
// d'abord les suppressions de document
// virer les docs, puis les virer du $_POST
// ici il faudrait checker si il y a suppression de document.
// les documents sont signalé par un bouton checkbox avec leur nom
// les supprimer avant toute chose et les retirer de la liste de $this->contenu
$retour="update";
// ne pas injecter le bouton du form dans le xml !
unset($_POST['action']);
unset($_POST['submit']); // bouton du form, pas utile
// traitement des fichiers à supprimer
$this->traiter_uploads_delete();
foreach($_POST as $cle => $valeur){
// pre-traitement: soit c'est un champ unique,
// du coup passer l'array éventuel à champ
// soit c'est un multiple, vider les elements de liste vides
if(isset($this->contenu[$cle]['@attributes']['multiple'])) {
if(is_array($valeur)){
for($i=count($valeur)-1;$i>=0;$i--){
if(empty($valeur[$i])){
unset($valeur[$i]); // virer si c'est vide
}
}
}
} else {
if(is_array($valeur)){
$valeur=$valeur[0]; // ne prendre que le premier
}
}
//if(!empty($valeur) && !is_array($valeur)){
$this->contenu[$cle]['contenu']=$valeur;
//}
// supprimer cette clé du contenu
// pour pouvoir dans un deuxième temps
// ajouter les contenus éventuellement ajoutés librement
// sans référence dans la définition du xml
unset($_POST[$cle]);
}
$this->traiter_uploads();
// si c'est un nouveau xml, lui donner un nom
if($this->hydrate==false){
$this->fichier=CHEMIN.DOSSIER_XML.date("YmdHis")."_".$this->nettoie_lien($this->get('titre'))."_".hash('adler32', date("Y-m-d H:i:s")).".xml";
$this->fichier_seul=fichier_seul($this->fichier);
$retour="insert";
}
if($ecrire){
$this->ecrit_xml();
}
}
return $retour;
}
// supprimer les fichiers demandés
private function traiter_uploads_delete(){
if(isset($_POST['doc-delete'])){
foreach($_POST['doc-delete'] as $num => $doc){
$elem=explode("|",$doc);
// rechercher le bon element
// si c'est un contenu unique (pas un array, supprimer l'élément)
if(!is_array($this->contenu[$elem[0]]['contenu'])){
unset($this->contenu[$elem[0]]);
@unlink(CHEMIN.DOSSIER_FICHIERS.$elem[1]);
} else {
// plusieurs éléments dans contenu !
for($i = count($this->contenu[$elem[0]]['contenu'])-1; $i>=0;$i--){
if($this->contenu[$elem[0]]['contenu'][$i]==$elem[1]){
unset($this->contenu[$elem[0]]['contenu'][$i]);
@unlink(CHEMIN.DOSSIER_FICHIERS.$elem[1]);
$this->contenu[$elem[0]]['contenu'] = array_values($this->contenu[$elem[0]]['contenu']);
}
}
}
}
unset ($_POST['doc-delete']);
}
}
// traiter les imports de fichier
// hydrate contenu avec
private function traiter_uploads(){
// ne pas oublier de virer les documents supprimés
fix_exists_dir(CHEMIN.DOSSIER_FICHIERS);
//print_r($_FILES);
foreach($_FILES as $tag => $fichiers){
// 1) vérifier que le tag est associé à un fichier ou une image
if($this->contenu[$tag]['@attributes']['type']!='file' && $this->contenu[$tag]['@attributes']['type']!='image'){
$this->messages[] = "Ce fichier n'est associé à aucun tag";
continue;
}
// 2) vérifier si ce qui est reçu est un array ou un seul élément
// comparer avc le description du tag (multiple ou pas)
if(is_array($fichiers['name'])){
// 2-1) passer en revue l'array
foreach($fichiers['name'] as $num => $c){
$piece=array(
"name" => $fichiers['name'][$num],
"tmp_name" => $fichiers['tmp_name'][$num],
"size" => $fichiers['size'][$num],
);
$this->traiter_upload_piece($tag,$piece,$num);
}
} else if(!is_array($fichiers['name'])){
// 2-2) traitement de la piece unique
$this->traiter_upload_piece($tag,$fichiers,0);
} else {
$this->messages[] = "Un problème avec $tag ";
}
}
//print_r($this->messages);
}
// traiter_upload_piece reçoit un tag et des fichiers
// compare les fichiers aux extensions autorisées
// si un zip est reçu et que zip n'est pas dans les extensions,
// le décompresser et regarder ce qu'il y a dedans qui correspond aux extensions
//
// reecrire cette fonction et son parent
// Le parent analyse $_FILES tag par tag
// regarde si le tag est actuellement vide
// si le tag est multiple
// ensuite vérifie le file
// si c'est ok déplace le fichier (verifie les doublons) vers le dossier des fichires
// et envoie vers sous fonction pour ajouter au tag avec son nom correct
//
private function traiter_upload_piece($tag,$piece,$num){
if(empty($piece['name'])){ return false; }
$ext_ok=explode(",",$this->contenu[$tag]['@attributes']['allow']);
$ext = strtolower(pathinfo($piece['name'], PATHINFO_EXTENSION));
if($ext=="jpeg"){
$ext="jpg"; // virer les ext en jpeg
}
if(!in_array($ext,$ext_ok) || empty($piece['name'])){
$this->messages[] = "Ce fichier n'a pas la bonne extension ou fichier absent";
return false;
}
$fileParts = pathinfo($piece['name']);
$nom_seul=$this->stripAccents($fileParts['filename']);
if(file_exists(CHEMIN.DOSSIER_FICHIERS.$nom_seul.".".$ext)){
$ad= hash('adler32', date("Y-m-d H:i:s"));
$nom_seul=$nom_seul."_".$ad; // ce serait mieux entre le nom et l'extension
}
if(!move_uploaded_file($piece['tmp_name'], CHEMIN.DOSSIER_FICHIERS.$nom_seul.".".$ext)){
$this->messages[]="Impossible de déplacer le fichier vers ".DOSSIER_FICHIERS;
return false;
}
// recuperer les contenus précédents en array
// le contenu à la base peut être vide, ou ne contenir qu'un élément en string
if($this->is_tag_empty($tag)){
// tag vide, ajouter l'element
$this->set($tag,$nom_seul.".".$ext);
} else {
if($this->is_tag_multiple($tag)){
if(is_string($this->contenu[$tag]['contenu'])){
$this->contenu[$tag]['contenu']=array($this->contenu[$tag]['contenu']);
}
$this->contenu[$tag]['contenu'][]=$nom_seul.".".$ext;
} else {
$this->set($tag,$nom_seul.".".$ext);
}
}
$this->messages[]="fichier envoyé avec succès vers ".DOSSIER_FICHIERS;
}
public function supprimer_xml(){
// supprimer le xml
//echo "supprimer ".$this->fichier;
unlink($this->fichier);
// supprimer les documents attachés
foreach($this->get_contenu() as $elem){
if($elem['@attributes']['type']=="file" || $elem['@attributes']['type']=="image"){
$c=$elem['contenu'];
if(!is_array($c)){$c=array($c);}
foreach($c as $f){
if($f){
unlink(CHEMIN.DOSSIER_FICHIERS.$f);
}
if($elem['@attributes']['type']=="image"){
// eliminer les vignettes de l'image !
}
}
}
}
}
/*
Petites fonctions diverses - - - - - - - -
*/
public function is_tag_empty($tag){
$contenu=$this->contenu[$tag]['contenu'];
if(is_array($contenu)){
if(trim(implode("",$contenu))==""){
return true;
}
} else {
if(trim($contenu)==""){
return true;
}
}
return false;
}
public function is_tag_multiple($tag){
if(isset($this->contenu[$tag]['@attributes']['multiple'])){
if($this->contenu[$tag]['@attributes']['multiple']=="oui"){
return true;
}
}
return false;
}
// transforme un lien en un truc uniquement constitué de lettres
public function nettoie_lien($texte){
$texte = preg_replace("#[^a-zA-Z]#", "", $texte);
return $texte;
}
// retire tous les caractères qui peuvent poser problème à l'enregistrement
public function stripAccents($string){
$transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
return $transliterator->transliterate($string);
/*
$str = htmlentities($string, ENT_NOQUOTES, 'UTF-8');
$str = preg_replace('#Ç#', 'C', $str);
$str = preg_replace('#ç#', 'c', $str);
$str = preg_replace('#è|é|ê|ë#', 'e', $str);
$str = preg_replace('#È|É|Ê|Ë#', 'E', $str);
$str = preg_replace('#à|á|â|ã|ä|å#', 'a', $str);
$str = preg_replace('#@|À|Á|Â|Ã|Ä|Å#', 'A', $str);
$str = preg_replace('#ì|í|î|ï#', 'i', $str);
$str = preg_replace('#Ì|Í|Î|Ï#', 'I', $str);
$str = preg_replace('#ð|ò|ó|ô|õ|ö#', 'o', $str);
$str = preg_replace('#Ò|Ó|Ô|Õ|Ö#', 'O', $str);
$str = preg_replace('#ù|ú|û|ü#', 'u', $str);
$str = preg_replace('#Ù|Ú|Û|Ü#', 'U', $str);
$str = preg_replace('#ý|ÿ#', 'y', $str);
$str = preg_replace('#Ý#', 'Y', $str);
$str = preg_replace('#\&([A-za-])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
$str = strtolower(str_replace(" ","_",$str));
$str = str_replace(array("#","'",'"'),"",$str);
return $str;
*/
}
public function file_icon($fichier){
$icones=array(
"mp4"=>"far fa-file-video",
"ogg"=>"far fa-file-video",
"mp3"=>"far fa-file-audio",
"pdf"=>"far fa-file-pdf",
"zip" =>"far fa-file-archive",
"tif"=>"far fa-file-image",
"defaut" => "far fa-file",
);
$ext = pathinfo($fichier, PATHINFO_EXTENSION);
if(isset($icones[$ext])){
$icon_class=$icones[$ext];
} else {
$icon_class=$icones['defaut'];
}
return "<i class=\"".$icon_class." pr-1\"></i>";
}
public function appliquer_filtre($tag,$contenu){
switch ($this->get_tag_attribute($tag,"filtre_display","")){
case "lien":
if (filter_var($contenu, FILTER_VALIDATE_URL)) {
$p=parse_url($contenu);
return "<a href='".$contenu."' target='_blank'>Lien vers ".$p['host']."</a>";
} else {
return $contenu;
}
break;
default:
return $contenu;
break;
}
}
}
?>

9
inc/footer.php Normal file
View File

@@ -0,0 +1,9 @@
<!-- footer.php -->
<footer class="footer">
<div class="content has-text-centered">
<p>Site fait avec en PHP, HTML, CSS fait mains.</p>
</div>
</footer>
</body>
</html>

32
inc/header.php Normal file
View File

@@ -0,0 +1,32 @@
<!-- header.php -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="author" content="">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Posterg</title>
<link rel="stylesheet" href="assets/normalize.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
<link rel="stylesheet" href="assets/posterg.css">
</head>
<body>
<nav class="navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="index.php">
<h1 class="title is-1">Mémoire post-ERG/A life after ERG</h1>
</a>
</div>
<div class="navbar-menu">
<div class="navbar-end">
<!-- <input type="search" name="search" placeholder="Recherche..." button class="boutton boutton1"></input> -->
<!-- <a href="partagerunmemoire.html" button class="boutton boutton1">Partager un mémoire</a> -->
<a href="apropos.php" class="navbar-item">À propos</a>
<a href="contact.php" class="navbar-item">Contact</a>
<a href="licences.php" class="navbar-item">Licences</a>
</div>
</div>
</nav>

View File

@@ -1,94 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/classe_xml.php");
require(CHEMIN."inc/inc-display-functions.php");
// import simple depuis une image
if(isset($_POST['import'])){
$image=$_POST['import'];
unset($_POST['import']);
$xml=new classe_xml(MODELE);
// traitement de l'import
$ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
$ext_ok=array("gif","png","jpg","jpeg");
if(file_exists($image) && in_array($ext,$ext_ok)){
$fileParts = pathinfo(CHEMIN.$image);
$nom_seul=$xml->stripAccents($fileParts['filename']);
if(file_exists(CHEMIN.DOSSIER_FICHIERS.$nom_seul.".".$ext)){
$ad= hash('adler32', date("Y-m-d H:i:s"));
$nom_seul=$nom_seul."_".$ad; // ce serait mieux entre le nom et l'extension
}
if(rename($image, CHEMIN.DOSSIER_FICHIERS.$nom_seul.".".$ext)){
$xml->set("illustration",$nom_seul.".".$ext);
$xml->traiter_formulaire();
if($xml->get('titre',"rien")=="rien"){
$xml->set('titre',human_name($fileParts['filename']));
}
// fabriquer le nom de fichier
$nom_xml=date("YmdHis")."_".$xml->nettoie_lien($nom_seul)."_".hash('adler32', date("Y-m-d H:i:s").rand(1,99)).".xml";
$xml->fichier=CHEMIN.DOSSIER_XML.$nom_xml;
$xml->fichier_seul=$nom_xml;
$xml->ecrit_xml();
display_mosaique_item($xml);
} else {
echo 'notok';
}
//hydratation de l'objet
// sauvegarde
}
supprimer_cache();
die();
}
?>
<div class="container-buttons"><div class="buttons-left"></div><div class="buttons-right"><div class="button button-close ml-3" onclick="close_viewer()"><span class="titre-tiny">Close</span> <i class="fas fa-chevron-right"></i></div></div></div>
<div class="p-3">
<h2 class="titre-medium mb-3">Ajouter des items</h2>
<div class="texte-small">
Cet outil permet de créer des entrées dans la collection générale à partir d'un ensemble d'image déposées dans le dossier "upload".
</div>
<hr>
<div class="bg-light" id="import_infos">
<?php
$xml=new classe_xml(MODELE);
$action=array(
"titre"=>"Informations communes aux items",
"action"=>"ajouter_item",
"submit"=>"Ajouter",
"exclure_champ"=>array("illustration","galerie","fichier"),
"no_submit"=>true
);
echo $xml->deployer_formulaire($action);
?>
</div>
<hr>
<h3 class="titre-small">Liste des éléments</h3>
<div class="texte-tiny">
Images présentes dans le dossier upload
</div>
<div id="import-list" class="my-3 texte-mini">
<?php
// afficher les éléments
$liste=glob(CHEMIN.DOSSIER_UPLOAD."*.{jpg,JPG,gif,png,jpeg}",GLOB_BRACE);
foreach($liste as $item){
echo "<div data-source='".$item."' data-import='true' class='p-1 border mb-1' onclick='import_toggle_item(this);'><i class='fas fa-times text-warning px-2' ></i> ".fichier_seul($item)."</div>";
}
if(count($liste)==0){
echo "<div class='text-warning'>pas d'éléments</div>";
}
?>
</div>
<div class="btn btn-primary" onclick="import_proceed();">Uploader</div>
</div>

View File

@@ -1,117 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/classe_xml.php");
require(CHEMIN."inc/inc-display-functions.php");
// import depuis un zip
// on envoie les images vers upload puis on lance le formulaire
//print_r($_POST);
//print_r($_FILES);
if(isset($_POST['submit-zip'])){
$filename = $_FILES['zip']['name'];
$tmp_name = $_FILES['zip']['tmp_name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!in_array(strtolower($ext),array('zip'))){
echo "Erreur de fichier, ceci n'est pas un zip !";
die();
}
zip_flatten( $tmp_name, CHEMIN.DOSSIER_UPLOAD );
/*
$zip = new ZipArchive;
$res = $zip->open($tmp_name);
$valid_ext = array('jpg','png','gif','jpeg');
if ($res === TRUE) {
for($i = 0; $i < $zip->numFiles; $i++){
$nom=$zip->getNameIndex($i);
if(strpos($nom, "__MACOSX") === false){
$fileParts = pathinfo($nom);
//print_r($fileParts);
if(!isset($fileParts['extension'])){
continue;
}
$ext = strtolower($fileParts['extension']);
if(in_array(strtolower($ext),$valid_ext)){
//echo $fileParts['basename']."<br>";
$zip->extractTo(CHEMIN.DOSSIER_UPLOAD,$nom);
}
} else {
// erreur !
}
}
$zip->close();
echo 'Unzippé !<br>Redirection dans un instant';
} else {
echo 'Echec !<br>Quelque chose s\'est mal passé';
}
*/
die();
}
function zip_flatten ( $zipfile, $dest='.' ){
$valid_ext = array('jpg','png','gif','jpeg');
$zip = new ZipArchive;
if ( $zip->open( $zipfile ) ){
for ( $i=0; $i < $zip->numFiles; $i++ ){
$entry = $zip->getNameIndex($i);
if ( substr( $entry, -1 ) == '/' ) continue; // skip directories
$ext = strtolower(pathinfo($entry, PATHINFO_EXTENSION));
if(!in_array(strtolower($ext),$valid_ext)){
continue;
}
$fp = $zip->getStream( $entry );
$ofp = fopen( $dest.'/'.basename($entry), 'w' );
if ( ! $fp )
throw new Exception('Unable to extract the file.');
while ( ! feof( $fp ) )
fwrite( $ofp, fread($fp, 8192) );
fclose($fp);
fclose($ofp);
}
$zip->close();
}
else
return false;
return $zip;
}
?>
<div class="p-3">
<h2 class="titre-medium mb-3">Ajouter des items zippés</h2>
<div class="texte-small">
Cet outil permet de créer des entrées dans la collection générale à partir d'un fichier unique en zip.
</div>
<hr>
<h3 class="titre-small">Liste des éléments</h3>
<div class="texte-tiny">
Images présentes dans le dossier upload
</div>
<div id="import-list" class="my-3 texte-mini">
<form method="post" enctype="multipart/form-data" id="form-zip">
<fieldset class="form-group mb-3 livre fieldset-illustration">
<label for="zip" class="mb-1">Fichier zip</label>
<div class="file-item unique small row">
<div class="col-12 mb-1"><input class="form-control form-control-sm" type="file" name="zip" value=""></div></div>
</fieldset>
<input type="submit" class="btn btn-success btn-sm" name="submit-zip" value="Uploader">
</form>
</div>

View File

@@ -1,65 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/inc-display-functions.php");
require(CHEMIN."inc/classe_xml.php");
if(isset($_GET['display'])){
if(isset($_GET['xml'])){
$xml=new classe_xml(MODELE);
$item=CHEMIN.DOSSIER_XML.$_GET['xml'];
$xml->lire_xml($item);
if($_GET['display']=='item-mosaique'){
display_mosaique_item($xml);
}
if($_GET['display']=='item-lateral'){
display_lateral_item($xml);
}
if($_GET['display']=='item-fullpage'){
display_fullpage_item($xml);
}
if($_GET['display']=='item-galerie'){
display_galerie_item($xml);
}
}
if($_GET['display']=='item-page'){
$url=CHEMIN.DOSSIER_CUSTOM.$_GET['page'];
$page=contenu_xml($url);
display_page($page,$url);
}
if($_GET['display']=='collection'){
$xml=new classe_xml(MODELE_COLLECTION);
$item=CHEMIN.DOSSIER_COLLECTION.$_GET['collection'];
$xml->lire_xml($item);
display_menu_collection($xml);
}
}
if(isset($_GET['vider_cache'])){
if($_GET['vider_cache']=='items'){
supprimer_cache();
}
if($_GET['vider_cache']=='vignettes'){
supprimer_cache_images();
}
}
if(isset($_POST['rotation_image'])){
ini_set('memory_limit', '256M');
$filename = $_POST['url'];
$degrees=$_POST['angle'];
traiter_rotation_image($filename, $degrees);
echo filectime(CHEMIN.DOSSIER_FICHIERS.$filename);
//donne_lien( DOSSIER_FICHIERS.$filename,$l_vignette=ILLU_WIDTH,$h_vignette=ILLU_HEIGHT,false);
}
if(isset($_POST['rotate_all'])){
$liste_items=$_POST['item'];
$degrees=$_POST['rotate_all'];
foreach($liste_items as $item){
$c=read_xml($item,true);
traiter_rotation_image($GLOBALS['root'].$c['illustration'], $degrees);
}
}
?>

View File

@@ -1,66 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/classe_xml.php");
require(CHEMIN."inc/inc-display-functions.php");
$xml=new classe_xml(MODELE);
//print_r($_POST);
if(isset($_POST['items'])){
// print_r($_POST);
$retour=array();
// récupérer les valeurs encodées du formulaire
// passer en revue les items et modifier puis sauver le xml
$items=$_POST['items'];
unset($_POST['items']);
if($_POST['action']=="editer"){
$xml->traiter_formulaire(false);
$infos=$xml->get_contenu_simple();
foreach($items as $item){
$xml->lire_xml(CHEMIN.DOSSIER_XML.$item);
foreach($infos as $champ => $contenu){
$xml->set($champ,$contenu);
}
$xml->ecrit_xml();
$retour[$item]=display_mosaique_item($xml,true);
}
supprimer_cache();
echo json_encode($retour);
} else if($_POST['action']=="supprimer"){
foreach($items as $item){
$xml->lire_xml(CHEMIN.DOSSIER_XML.$item);
$xml->supprimer_xml();
$retour[$item]=$item;
}
supprimer_cache();
echo json_encode($retour);
}
}
if(isset($_GET['edit_items']) || isset($_GET['supprimer_items'])){
echo "<div class=\"container-buttons\"><div class=\"buttons-left\"></div><div class=\"buttons-right\"><div class=\"button button-close ml-3\" onclick=\"close_viewer()\"><span class=\"titre-tiny\">Close</span> <i class=\"fas fa-chevron-right\"></i></div></div></div>";
}
if(isset($_GET['edit_items'])){
$action=array(
"titre"=>"Modifier des items",
"action"=>"modifier_items",
"exclure_champ"=>array('illustration'),
"addtop"=>"<div class='my-2'>Sélectionnez les items de cette collection en cliquant sur les items à gauche.</div>",
"submit"=>"Modifier"
);
echo $xml->deployer_formulaire($action);
} else if(isset($_GET['supprimer_items'])){
echo "<div class=\"px-3\"><header>
<h2 class=\"h5 mb-3\">Supprimer des items</h2>
</header><div class=\"my-2\">Sélectionnez les items à supprimer en cliquant sur les items à gauche.</div>";
echo "<form id=\"form-item\" method=\"post\" class=\"pb-3\"><input type=\"hidden\" name=\"action\" value=\"supprimer_items\"><input type=\"submit\" class=\"btn btn-success btn-sm\" name=\"submit\" value=\"Supprimer\"></form></div>";
}
?>

View File

@@ -1,56 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/inc-display-functions.php");
require(CHEMIN."inc/classe_xml.php");
$xml=new classe_xml(CHEMIN."config/structure_page.xml");
if(isset($_GET['page_edit'])){
// traitement de la page
$url=$_GET['page_edit'];
if($url=="new"){
$retour=$xml->traiter_formulaire(false);
$nom_page=$xml->stripAccents($xml->get('titre')).".xml";
$xml->fichier_seul=$nom_page;
$xml->fichier = CHEMIN.DOSSIER_CUSTOM.$nom_page;
$xml->ecrit_xml();
echo "<div class='m-2'><div class=\"alert alert-success\" role=\"alert\"><a href='".URL."'>Rechargez pour faire apparaitre la page</a></div>.</div>";
display_page($xml->get_contenu_simple(),$xml->fichier);
} else {
$xml->lire_xml($url);
$retour=$xml->traiter_formulaire(true);
if($retour=="delete"){
echo "delete";
} else {
$page=contenu_xml($url);
display_page($page,$url);
}
}
} else if(isset($_GET['page'])){
// affichage de la page
if($_GET['page']=="new"){
$action=array(
"titre"=>"Ajouter une page",
"action"=>"ajouter_page",
"submit"=>"Ajouter"
);
echo $xml->deployer_formulaire($action);
echo "<script>init_ajax_submit_page('".$_GET['page']."')</script>";
} else {
$action=array(
"titre"=>"Editer une page",
"action"=>"editer_page",
"submit"=>"Modifier",
"delete"=>"oui"
);
$xml->lire_xml($_GET['page']);
echo $xml->deployer_formulaire($action);
echo "<script>init_ajax_submit_page('".$_GET['page']."')</script>";
}
}
?>

View File

@@ -1,70 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/inc-display-functions.php");
require(CHEMIN."inc/classe_xml.php");
$xml=new classe_xml(MODELE_COLLECTION);
fix_exists_dir(CHEMIN.DOSSIER_COLLECTION);
if(isset($_GET['xml'])){
$url=CHEMIN.DOSSIER_COLLECTION.$_GET['xml'];
$xml->lire_xml($url);
$action=array(
"titre"=>"Updater une collection",
"action"=>"updater_collection",
"addtop"=>"<div class='my-2'>Sélectionnez les items de cette collection en cliquant sur les items à gauche.<br>Réordonnez-les par drag and drop.</div>",
"submit"=>"Updater",
"delete"=>"oui"
);
$retour=$xml->traiter_formulaire(true);
if($retour=="delete"){
echo "delete";
} if($retour=="update"){
display_mosaique_collection($xml,false);
}
} else {
$action=array(
"titre"=>"Ajouter une collection",
"action"=>"ajouter_collection",
"addtop"=>"<div class='my-2'>Sélectionnez les items de cette collection en cliquant sur les items à gauche.</div>",
"submit"=>"Ajouter"
);
$retour=$xml->traiter_formulaire(false);
if($retour=="insert"){
$nom_page=$xml->stripAccents($xml->get('titre')).".xml";
$xml->fichier_seul=$nom_page;
$xml->fichier = CHEMIN.DOSSIER_COLLECTION.$nom_page;
$xml->ecrit_xml();
display_mosaique_collection($xml,false);
}
}
//print_r($xml->messages);
if($retour=="none"){
echo "<div class=\"container-buttons collection-form-button\"><div class=\"buttons-left\"></div><div class=\"buttons-right\"><div class=\"button button-close ml-3\" onclick=\"close_viewer();destroy_multi_select();\"><span class=\"titre-tiny\">Close</span> <i class=\"fas fa-chevron-right\"></i></div></div></div></div></div>";
echo $xml->deployer_formulaire($action);
/*echo "<div class='mt-3 pt-2 border-top'>
<div class='mt-1 d-inline-block mr-4 fat' >
Ajouter des éléments par simple clic
</div>
<div class='mt-1 d-inline-block mr-4 pointer' onclick='collection_items_filtre(\"cochertout\")'>
Tout cocher
</div>
<div class='mt-1 d-inline-block mr-4 pointer' onclick='collection_items_filtre(\"cocherrien\")'>
Tout décocher
</div>
<div class='mt-1 d-inline-block mr-4 pointer' onclick='collection_items_filtre(\"showselect\")'>
Ne montrer que la sélection
</div>
<div class='mt-1 d-inline-block mr-4 pointer' onclick='collection_items_filtre(\"showall\")'>
Montrer tout
</div>
</div>";*/
}
?>

View File

@@ -1,45 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/inc-display-functions.php");
require(CHEMIN."inc/classe_xml.php");
$xml=new classe_xml(MODELE);
$action=array(
"titre"=>"Ajouter un item",
"action"=>"ajouter_item",
"submit"=>"Ajouter"
);
if(isset($_GET['xml'])){
$item=CHEMIN.DOSSIER_XML.$_GET['xml'];
$xml->lire_xml($item);
$action=array(
"titre"=>"Updater un item",
"action"=>"updater_item",
"submit"=>"Updater",
"delete"=>"oui");
}
$retour=$xml->traiter_formulaire(true);
//print_r($xml->messages);
if($retour=="update"){
display_mosaique_item($xml);
supprimer_cache();
}
if($retour=="insert"){
display_mosaique_item($xml);
supprimer_cache();
}
if($retour=="delete"){
// header('Location: '.URL.'index.php');
// die();
echo "delete";
supprimer_cache();
}
if($retour=="none"){
echo "<div class='px-3'>".display_buttons("",false)."</div>";
echo $xml->deployer_formulaire($action);
}
?>

View File

@@ -1,30 +0,0 @@
<?php
include_once("../config/config.php");
$retour="";
if(isset($_POST['login']) && isset($_POST['pwd'])) {
if(isset($logins[$_POST['login']])){
$i=$logins[$_POST['login']];
if($i['pwd']==$_POST['pwd']){
// on la démarre :)
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
$_SESSION['nom']=$logins[$_POST['login']]['nom'];
} else {
$retour= "Mauvais login ou mot de passe";
}
} else {
$retour= "Login/mot de passe non reconnu";
}
}
if(isset($_POST['logout'])){
// On détruit les variables de notre session
session_unset ();
// On détruit notre session
session_destroy ();
$retour = "Déconnecté !";
}
include("inc-menu-admin.php");
?>

View File

@@ -1,216 +0,0 @@
<?php
/*
Fonctions d'affichage générales
en latéral ou frontal
Charger le fichier de surcharge éventuel
*/
if(file_exists(CHEMIN.DOSSIER_CUSTOM."custom-functions.php")){
include(CHEMIN.DOSSIER_CUSTOM."custom-functions.php");
}
// afficher le contenu des pages (fichiers xml de contenus situées dans config/custom)
function display_page($page,$url){
echo "<div class='p-3'>";
echo display_buttons("edit_page('".$url."')",true);
echo "<h3 class=\"titre-small my-2\">".$page["titre"]."</h3>";
echo "<div class=\"texte\">";
echo $page["texte"];
echo "</div>";
echo "</div>";
}
// affiche chaque item dans la galerie générale
function display_mosaique_item($xml,$return=false){
if(function_exists('display_mosaique_item_custom')){
$item = display_mosaique_item_custom($xml,$return);
if($return){
return $item;
} else {
echo $item;
}
} else {
$item = "<article class=\"col-12 col-sm-6 col-md-4 col-lg-3 col-xl-2 mb-3 item\" data-xml=\"".$xml->fichier_seul."\" data-mainillu=\"".$xml->get("illustration", "images/defaut.jpg")."\">\n";
$item .= "<div class=\"mb-2\" onclick=\"item_click(this)\">\n";
$item .= "<img class=\"img-fluid item-illu\" src=\"";
$item .=donne_lien(URL."images/defaut.jpg",ILLU_WIDTH,ILLU_HEIGHT,true);
$item .= "\" alt=\"\" data-source=\"";
$item .= donne_lien(DOSSIER_FICHIERS.$xml->get("illustration", "images/defaut.jpg"),ILLU_WIDTH,ILLU_HEIGHT,true);
$item .= "\">\n";
$item .= "</div>\n";
$l=$xml->get_liste_pour_attribut("afficher","oui",array("illustration"));
foreach($l as $tag){
$item .= "<div class=\"tag-$tag\" data-contenu=\"$tag\">".flat_array($xml->get($tag))."</div>\n";
}
$item .= "</article>\n";
if($return){
return $item;
} else {
echo $item;
}
}
}
// affiche le contenu d'un xml dans l'espace latéral
function display_lateral_item($xml,$return=false){
if(function_exists('display_lateral_item_custom')){
$item = display_lateral_item_custom($xml,$return);
} else {
echo "<div class='px-3'>";
echo display_buttons("item_edit('".$xml->fichier_seul."')",true);
echo "<div class='viewer-main-illu-container'>";
$original=donne_lien(DOSSIER_FICHIERS.$xml->get("illustration", "images/defaut.jpg"),1200,1200,false);
echo "<img class=\"img-fluid viewer-main-illu\" src=\"";
echo $original;
echo "\" alt=\"\" data-original=\"".$original."\">\n";
echo "<div class=\"button button-back\" onclick=\"viewer_back_image();\"><i class=\"fas fa-arrow-left\"></i></div>";
echo "</div>";
foreach($xml->get_partial_contenu(array("illustration")) as $tag => $tag_contenu){
echo $xml->display_tag($tag);
}
echo "</div>";
}
}
// affiche la fiche complète en pleine page
function display_fullpage_item($xml){
if(function_exists('display_fullpage_item_custom')){
display_fullpage_item_custom($xml);
} else {
echo "<article class=\"row mx-0 h-100\">";
echo "<div class=\"col-12 col-sm-9 p-0 p-md-3 mb-3 h-100 text-center\">\n";
$original=donne_lien(DOSSIER_FICHIERS.$xml->get("illustration", "images/defaut.jpg"),1200,1200,false);
echo "<img class=\"img-fluid viewer-main-illu\" src=\"";
echo $original;
echo "\" alt=\"\" data-original=\"".$original."\">\n";
echo "<div class=\"button button-back\" onclick=\"viewer_back_image();\"><i class=\"fas fa-arrow-left\"></i></div>";
echo "</div>\n";
echo "<div class='col-12 col-sm-3 p-0 pt-md-3 pr-md-3 mb-3 h-100vh'>";
echo "<div class='pl-3'>".display_buttons("item_edit('".$xml->fichier_seul."')",true)."</div>";
echo "<div class='mt-3'>";
echo "<div class='px-3 content-scrollable'>";
foreach($xml->get_partial_contenu(array("illustration")) as $tag => $tag_contenu){
echo $xml->display_tag($tag);
}
echo "</div><div></div>";
echo "<script>init_fullpage();</script>";
echo "</article>";
}
}
// affiche l'image et le titre en pleine page
function display_galerie_item($xml){
if(function_exists('display_galerie_item_custom')){
display_galerie_item_custom($xml);
} else {
echo display_buttons("item_edit('".$xml->fichier_seul."')",false);
echo "<img src=\"";
echo donne_lien(DOSSIER_FICHIERS.$xml->get("illustration", "images/defaut.jpg"),1200,800,false);
echo "\" class=\"\"></div><div class=\"item-info\"><div>";
echo $xml->get("titre");
echo "</div></div>";
}
}
// affiche le contenu d'un xml dans l'espace latéral
function display_menu_collection($xml,$return=false){
if(function_exists('display_lateral_collection_custom')){
$item = display_menu_collection_custom($xml,$return);
} else {
echo "<div class='row'>";
echo "<div class='viewer-main-illu-container col-auto'>";
echo "<img class=\"img-fluid collection-illu mb-2\" src=\"";
$c=new classe_xml(MODELE);
$i=$xml->get_tag_array("items");
$c->lire_xml(CHEMIN.DOSSIER_XML.$i[0]);
echo donne_lien(DOSSIER_FICHIERS.$c->get("illustration", "images/defaut.jpg"),400,200,true);
echo "\" alt=\"\">\n";
echo "</div><div class='col'>";
echo '<div class="container-buttons"><div class="buttons-left"><div class="button button-edit" onclick="collection_edit(\''.$xml->fichier_seul.'\')"><i class="fas fa-pencil-alt"></i></div></div><div class="buttons-right"><div class="button button-close ml-3" onclick="collection_close();"><span class="titre-tiny">Close</span> <i class="fas fa-chevron-right"></i></div></div></div>';
foreach($xml->get_partial_contenu(array("items")) as $tag => $tag_contenu){
echo $xml->display_tag($tag);
}
echo "<div class=\"texte-small my-2\">".$xml->get_tag_nb("items"). " éléments</div>";
$items=$xml->get_tag_array("items");
echo "<div id='collection-items' class='d-none'>";
foreach($items as $it){
echo "<div class='collection-item'>".$it."</div>";
}
echo "</div></div></div>";
}
}
// affichage des collections
function display_mosaique_collection($xml,$return=false){
if(function_exists('display_mosaique_collection_custom')){
$item = display_mosaique_collection_custom($xml,$return);
if($return){
return $item;
} else {
echo $item;
}
} else {
$item = "<article class=\"col-6 col-sm-4 col-md-2 mb-3 collection\" data-xml=\"".$xml->fichier_seul."\" onclick=\"collection_click(this);\">\n";
$item .= "<img class=\"img-fluid collection-illu mb-2\" src=\"";
$c=new classe_xml(MODELE);
$i=$xml->get_tag_array("items");
$c->lire_xml(CHEMIN.DOSSIER_XML.$i[0]);
$item .= donne_lien(DOSSIER_FICHIERS.$c->get("illustration", "images/defaut.jpg"),400,300,true);
//$item .="images/defaut.jpg";
$item .= "\" alt=\"\">\n";
$item .= "<div class=\"titre-mini fat mb-1\">".$xml->get("titre")."</div>";
$item .= "<div class=\"texte-small mb-1\">".$xml->get("tags")."</div>";
$item .= "<div class=\"texte-small\">".$xml->get_tag_nb("items"). " éléments</div>";
$item .= "</article>\n";
if($return){
return $item;
} else {
echo $item;
}
}
}
// affichage des boutons avant-après-edit-close
function display_buttons($url,$edit=false){
$buttons="<div class=\"container-buttons\">";
$buttons .="<div class=\"buttons-left\">";
$buttons .="<div class=\"button button-prev\" onclick=\"item_precedent();\"><i class=\"fas fa-chevron-left\"></i></div>";
$buttons .="<div class=\"button button-next\" onclick=\"item_suivant();\"><i class=\"fas fa-chevron-right\"></i></div>";
if((isset($_SESSION['login']) || DEBUG) && $edit==true){
$buttons .="<div class=\"button button-edit\" onclick=\"".$url."\"><i class=\"fas fa-pencil-alt\"></i></div>";
}
$buttons .="</div><div class=\"buttons-right\">";
$buttons .="<div class=\"button button-full\" onclick=\"openFullscreen();\" title=\"Plein écran\"><i class=\"fas fa-expand\"></i></div>";
$buttons .="<div class=\"button icon-viewer icon-showgal\" title='Affichage en galerie' onclick=\"change_display('showgal');\"><img src='images/icon-gal.svg'></div>";
$buttons .="<div class=\"button icon-viewer icon-showfull\" onclick=\"change_display('showfullpage');\" title='Affichage en pleine page'><img src='images/icon-full.svg'></div>";
$buttons .="<div class=\"button icon-viewer icon-showlat\" onclick=\"change_display('showlateral');\" title='Affichage latéral'><img src='images/icon-lateral.svg'></div>";
$buttons .="<div class=\"button button-close ml-3\" onclick=\"close_viewer();\"><span class=\"titre-tiny\">Close</span> <i class=\"fas fa-chevron-right\"></i></div></div></div>";
return $buttons;
}
function flat_array($c,$glu=", "){
if(is_array($c)){
$c=implode($glu,$c);
}
return $c;
}
?>

View File

@@ -1,32 +0,0 @@
<section class="container-fluid pb-3">
<footer class="mx-3" role="contentinfo">
<div class="row">
<div class="col-12"><hr></div>
<div class="texte-small col-6"><?php echo $site['footer']; ?>
-
<span id="compteur_elems">0</span> éléments dans la collection
</div>
<div class="texte-small col-6 text-right"><?php
echo "V".file_get_contents('version.txt');
?></div>
</div>
</footer>
</section>
<!-- /end footer -->
<script src="js/jquery-3.4.1.min.js"></script>
<script src="js/trumbowyg.min.js"></script>
<script src="js/langs/fr.min.js"></script>
<script src="js/Sortable.min.js"></script>
<script src="js/js.cookie.js"></script>
<script src="js/bootstrap.js"></script>
<script src="js/main.js"></script>
<?php
$jss=glob(DOSSIER_CUSTOM."*.js");
foreach($jss as $js){
echo "<script src=\"".$js."\"></script>\n";
}
?>
</body>
</html>

View File

@@ -1,221 +0,0 @@
<?php
function supprimer_cache(){
@unlink(CHEMIN.DOSSIER_CACHE."cache.html");
}
function supprimer_cache_images(){
$images=glob(CHEMIN.DOSSIER_VIGNETTES."*.{gif,png,jpg,webp}",GLOB_BRACE);
foreach($images as $image){
@unlink($image);
}
// vider le cache pour permettre la recréation des vignettes
@unlink(CHEMIN.DOSSIER_CACHE."cache.html");
}
// donne lien : reçoit une adresse de fichier et une taille, verifie si une vignette a cette taille existe et produit une version de cette image le cas échaant renvoie cette adresse
function donne_lien($file,$l_vignette=600,$h_vignette=600,$crop=true){
// creer le dossier pour les images petites
fix_exists_dir(CHEMIN.DOSSIER_VIGNETTES);
if(!is_file(CHEMIN.$file)){
$file=IMG_DEFAULT;
}
$ext_image=array('jpg','png','gif','webp');
$fi=pathinfo($file);
$ext=strtolower($fi['extension']);
$nom=$fi['filename'];
$add="_".$l_vignette."x".$h_vignette.($crop ? "_crop" : "_nocrop");
$local_name=DOSSIER_VIGNETTES.$nom.$add.".".$ext;
// - - - image : traitement des icones
if(in_array($ext,$ext_image)){
// charger l'image brute
// vérifier que l'image existe
// sinon la créer
if (!file_exists(CHEMIN.$local_name)) {
if(image_resize(CHEMIN.$file, CHEMIN.$local_name, $l_vignette, $h_vignette, $crop)){
return $local_name."?".filectime(CHEMIN.$local_name);
} else {
return $file."?".filectime(CHEMIN.$file);
}
} else {
return $local_name."?".filectime(CHEMIN.$local_name);
}
} else {
return "img-default/error.jpg";
}
// - - - - fin traitement des images
}
function image_resize($src, $dst, $width=500, $height=400, $crop=0){
ini_set('memory_limit', '256M');
if(!list($w, $h) = getimagesize($src)) {
echo "image does not exists";
return false;
}
$type = strtolower(substr(strrchr($src,"."),1));
if($type == 'jpeg') $type = 'jpg';
switch($type){
case 'gif': $img = imagecreatefromgif($src); break;
case 'jpg': $img = imagecreatefromjpeg($src); break;
case 'png': $img = imagecreatefrompng($src); break;
case 'webp': $img = imagecreatefromwebp($src); break;
default : echo "image does not exists"; return false;
}
// resize
if($crop){
if($w < $width or $h < $height){
return false;
};
$ratio = max($width/$w, $height/$h);
$y= ($h - $height / $ratio) /2;
$x = ($w - $width / $ratio) / 2;
$h = $height / $ratio;
$w = $width / $ratio;
}
else{
if($w < $width and $h < $height) {
return false;
}
$ratio = min($width/$w, $height/$h);
$width = $w * $ratio;
$height = $h * $ratio;
$x = 0;
$y = 0;
}
$new = imagecreatetruecolor($width, $height);
// preserve transparency
if($type == "gif" or $type == "png"){
imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
imagealphablending($new, false);
imagesavealpha($new, true);
}
imagecopyresampled($new, $img, 0, 0, $x, $y, $width, $height, $w, $h);
$sharpen = array([-1,-1,-1], [-1, 16, -1], [-1,-1,-1]);
imageconvolution($new, $sharpen, 8, 0);
switch($type){
case 'gif': imagegif($new, $dst); break;
case 'jpg': imagejpeg($new, $dst); break;
case 'png': imagepng($new, $dst); break;
case 'webp': imagewebp($new, $dst); break;
}
return true;
}
function traiter_rotation_image($filename, $degrees){
supprimer_cache();
$rotang = $degrees;
// traiter les versions de cette images dans les vignettes !
$fi=pathinfo($filename);
$nom_seul=$fi['filename'];
//$filename=CHEMIN.DOSSIER_FICHIERS.$filename; // au même endroit
$liste=glob(CHEMIN.DOSSIER_VIGNETTES.$nom_seul."*");
$liste[]=CHEMIN.DOSSIER_FICHIERS.$filename; // au même endroit
foreach ($liste as $filename){
//unlink($version);
list($width, $height, $type, $attr) = getimagesize($filename);
$size = getimagesize($filename);
switch($size['mime']){
case 'image/webp':
$source =imagecreatefromwebp($filename);
$bgColor=imageColorAllocateAlpha($source, 0, 0,0, 0);
$rotation = imagerotate($source,$rotang,$bgColor);
imagealphablending($rotation, false);
imagesavealpha($rotation, true);
imagecreate($width,$height);
imagewebp($rotation,$filename);
chmod($filename, 0777);
break;
case 'image/jpeg':
$source =imagecreatefromjpeg($filename);
$bgColor=imageColorAllocateAlpha($source, 0, 0,0, 0);
$rotation = imagerotate($source,$rotang,$bgColor);
imagealphablending($rotation, false);
imagesavealpha($rotation, true);
imagecreate($width,$height);
imagejpeg($rotation,$filename);
chmod($filename, 0777);
break;
case 'image/png':
$source =imagecreatefrompng($filename);
$bgColor=imageColorAllocateAlpha($source, 0, 0,0, 0);
$rotation = imagerotate($source,$rotang,$bgColor);
imagealphablending($rotation, false);
imagesavealpha($rotation, true);
imagecreate($width,$height);
imagepng($rotation,$filename);
chmod($filename, 0777);
break;
case 'image/gif':
$source =imagecreatefromgif($filename);
$bgColor=imageColorAllocateAlpha($source, 0, 0,0, 0);
$rotation = imagerotate($source,$rotang,$bgColor);
imagealphablending($rotation, false);
imagesavealpha($rotation, true);
imagecreate($width,$height);
imagegif($rotation,$filename);
chmod($filename, 0777);
break;
case 'image/vnd.wap.wbmp':
$source =imagecreatefromwbmp($filename);
$bgColor=imageColorAllocateAlpha($source, 0, 0,0, 0);
$rotation = imagerotate($source,$rotang,$bgColor);
imagealphablending($rotation, false);
imagesavealpha($rotation, true);
imagecreate($width,$height);
imagewbmp($rotation,$filename);
chmod($filename, 0777);
break;
}
}
}
// Vérifie l'existence d'un doccier, le Crée au besoin
function fix_exists_dir($dir){
if(!is_dir($dir)){
mkdir($dir, 0777, true);
}
}
// renvoie uniquement le nom du fichier complet à partir de l'adresse
function fichier_seul($file){
$file = preg_replace('/.*\//i', '', $file);
return $file;
}
function human_name($str){
$t=explode(" ",str_replace(array("-","_",'.')," ",$str));
for($i=0; $i<count($t);$i++){
$t[$i]=ucfirst($t[$i]);
}
return implode(" ",$t);
}
function contenu_xml($source){
$structure=array();
$document_xml = new DomDocument();
$document_xml->load($source);
$champs = $document_xml->getElementsByTagName('item')->item(0)->childNodes;
foreach ($champs as $champ){
if ($champ->nodeType != XML_TEXT_NODE){
$structure[$champ->nodeName]=$champ->nodeValue;
}
}
return $structure;
}
?>

View File

@@ -1,228 +0,0 @@
<!DOCTYPE html>
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title><?php echo strip_tags($site['titre']); ?></title>
<meta name="description" content="Un dérivé de XML collection">
<meta name="keywords" content="<?php echo $site['keywords'] ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="subject" content="collection">
<link rel="icon" type="image/png" href="images/favicon-16.png" sizes="16x16">
<link rel="icon" type="image/png" href="images/favicon-32.png" sizes="32x32">
<link rel="icon" type="image/png" href="images/favicon-96.png" sizes="96x96">
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/heebo-fontfacekit/stylesheet.css">
<link rel="stylesheet" href="css/trumbowyg.min.css">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/css-awesome/all.min.css">
<?php
// charger les css du dossier custom
$csss=glob(DOSSIER_CUSTOM."*.css");
foreach($csss as $css){
echo "<link rel=\"stylesheet\" href=\"".$css."\">\n";
}
$liste_criteres=implode(",",$xml->get_liste_pour_attribut("afficher","oui",array("illustration")));
?>
</head>
<body data-type-action="<?php echo DISPLAY_ACTION; ?>" data-type-tri="<?php echo DISPLAY_TRI; ?>" data-type-affichage="items" data-items-infos="<?php echo $liste_criteres; ?>" data-items-search="<?php echo $liste_criteres; ?>">
<!-- NAV -->
<section class="container-fluid mt-2">
<nav class="navbar navbar-expand-md navbar-light" id="main-navbar">
<a class="navbar-brand" href="./"><?php echo $site['titre'] ?></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#menu" aria-controls="menu" aria-expanded="false" aria-label="Toggle navigation">
<span><i class="navbar-toggler-icon"></i></span>
</button>
<div class="collapse navbar-collapse my-3 my-md-0" id="menu">
<ul class="navbar-nav ml-auto">
<?php
// ici un chargement des pages custom comme par exemple "about"
include(CHEMIN."inc/inc-menu-pages.php");
?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="admindropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Admin
</a>
<div id="admin-menu" class="dropdown-menu" aria-labelledby="admindropdown">
<?php
include("inc/inc-menu-admin.php");
?>
</div>
</li>
</ul>
</div>
</nav>
</section>
<section class="container-fluid mb-3">
<div id="descriptif" class="texte-medium mx-3">
<?php echo $site['descriptif'] ?>
</div>
</section>
<!-- END nav -->
<?php
// insert du pipeline en bottom
if(file_exists(CHEMIN.DOSSIER_CUSTOM."insert-pre-mosaique.php")){
include(CHEMIN.DOSSIER_CUSTOM."insert-pre-mosaique.php");
}
?>
<section class="container-fluid my-2" id="toolbar">
<div class="border-top border-bottom py-1 mx-3">
<ul class="nav" id="toolnav">
<li class="nav-item">
<a class="nav-link pl-0" data-showhide="tool-items-search" href="#">Rechercher</a>
</li>
<?php
if(DISPLAY_TOOL_TRI){ ?>
<li class="nav-item">
<a class="nav-link" data-showhide="tool-tri" href="#">Tri</a>
</li>
<?php }
if(DISPLAY_TOOL_INFOS){
?>
<li class="nav-item">
<a class="nav-link" data-showhide="tool-items-infos" href="#">Affichage</a>
</li>
<?php }
if(DISPLAY_TOOL_ACTION){
?>
<li class="nav-item">
<a class="nav-link" data-showhide="tool-action" href="#">Action</a>
</li>
<?php
}
if(COLLECTION){
?>
<li>
<a class="nav-link" data-showhide="tool-affichage" href="#">Collections</a>
</li>
<?php
}
?>
</ul>
<div id="tool-items-search" data-select-type="checkbox" data-hideonstart="oui" class="row no-gutters form-inline pb-1" style="display: none;" data-hideonstart="oui">
<input id="live-search" type="text" class="form-control form-control-usm mr-sm-2" placeholder="enter a few letters">
<?php
foreach($structure as $tag=>$c){
if(isset($c['@attributes']['afficher']) && !in_array($c['@attributes']['type'],array('image','file'))){
echo "<div class=\"form-check form-control-usm mr-sm-2\">
<input class=\"form-check-input\" type=\"checkbox\" data-critere=\"".$tag."\" id=\"".$tag."\">
<label class=\"form-check-label\" for=\"".$tag."\">".$c['@attributes']['titre']."</label>
</div>";
}
}
?>
</div>
<?php if(DISPLAY_TOOL_INFOS){ ?>
<div class="row" id="tool-items-infos" style="display:none">
<div class="col">
<div data-select-type="checkbox" class="row no-gutters form-inline pb-1">
<div class="form-check form-control-usm mr-sm-2">
Afficher :
</div>
<?php
$field_ok=array("text","textarea","select");
foreach($structure as $tag=>$c){
if(isset($c['@attributes']['afficher']) && in_array($c['@attributes']['type'],$field_ok)){
echo "<div class=\"form-check form-control-usm mr-sm-2\">\n<input class=\"form-check-input\" type=\"checkbox\" id=\"items-".$tag."\" data-critere=\"".$tag."\" checked=\"checked\">\n<label class=\"form-check-label\" for=\"items-".$tag."\">".$c['@attributes']['titre']."</label>\n</div>";
}
}
?>
</div>
</div>
<?php
}
?>
</div>
<?php
if(DISPLAY_TOOL_TRI){ ?>
<div id="tool-tri" data-select-type="radio" data-hideonstart="oui" class="row no-gutters form-inline pb-1" style="display: none;">
<div class="form-check form-control-usm mr-sm-2">
Réordonner :
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="ordre" type="radio" id="byid" data-critere="byid">
<label class="form-check-label" for="byid">
Date
</label>
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="ordre" type="radio" id="byantiid" data-critere="byantiid" checked="checked">
<label class="form-check-label" for="byantiid">
Date inverse
</label>
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="ordre" type="radio" id="alpha" data-critere="alpha">
<label class="form-check-label" for="alpha">
Alphabétique
</label>
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="ordre" type="radio" id="antialpha" data-critere="antialpha">
<label class="form-check-label" for="antialpha">
Anti alphabétique
</label>
</div>
</div>
<?php }
if(DISPLAY_TOOL_ACTION){ ?>
<div id="tool-action" data-select-type="radio" data-hideonstart="oui" class="row no-gutters form-inline pb-1" style="display: none;">
<div class="form-check form-control-usm mr-sm-2">
Un clic produit :
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="action" type="radio" id="showgal" data-critere="showgal">
<label class="form-check-label" for="showgal">
Affichage de l'image
</label>
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="action" type="radio" id="showlateral" data-critere="showlateral" checked="checked">
<label class="form-check-label" for="showlateral">
Affichage latéral de la fiche
</label>
</div>
<div class="form-check form-control-usm mr-sm-2">
<input class="form-check-input" name="action" type="radio" id="showfullpage" data-critere="showfullpage">
<label class="form-check-label" for="showfullpage">
Affichage pleine page de la fiche
</label>
</div>
</div>
<?php
}
if(COLLECTION){
?>
<section id="tool-affichage" class="mt-3" data-hideonstart="oui">
<div class="row py-1" id="collections-container">
<?php
$collec=new classe_xml(MODELE_COLLECTION);
$liste=glob(CHEMIN.DOSSIER_COLLECTION."*.xml",GLOB_BRACE);
foreach($liste as $item){
$collec->lire_xml($item);
display_mosaique_collection($collec,false);
}
if(count($liste)<1){
echo "<div class='col-12'>Pas encore de collection.</div>";
}
?>
</div>
<div class="my-2" id="collection-display">
<div class="container-inner"></div>
</div>
</section>
<?php
}
?>
</div>
</section>

View File

@@ -1,20 +0,0 @@
<li class="nav-item dropdown" id="admin-menu">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Login
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown1" style="display: none;">
<form method="post" class="form-small form-login login-off">
<fieldset class="p-1" id="login">
<label class="small mb-1" for="login">Login</label>
<input class="form-control form-control-sm" name="login" value="" type="text">
<label class="small mb-1 mt-2" for="pwd">Password</label>
<input class="form-control form-control-sm" name="pwd" value="" type="password">
<input type="submit" class="mt-1 btn btn-primary btn-sm" name="identify" value="Go">
</fieldset>
</form>
</div>
<script>
init_login();
</script>
</li>

View File

@@ -1,40 +0,0 @@
<?php
if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
?>
<div class="p-1">
<a class="dropdown-item" href="#" onclick="item_ajouter()">Ajouter un item</a>
<a class="dropdown-item" href="#" onclick="ajouter_items()">Ajouter des items</a>
<a class="dropdown-item" href="#" onclick="ajouter_zip()">Ajouter des items en zip</a>
<a class="dropdown-item" href="#" onclick="modifier_items();">Modifier plusieurs items</a>
<a class="dropdown-item" href="#" onclick="supprimer_items();">Supprimer plusieurs items</a>
<?php if(COLLECTION){ ?>
<hr class="my-1">
<a class="dropdown-item" href="#" onclick="collection_edit('')">Ajouter une collection</a>
<?php } ?>
<a class="dropdown-item" href="#" onclick="ajouter_page()">Ajouter une page</a>
<hr class="my-1">
<a class="dropdown-item" href="#" onclick="vider_cache('items')">Vider le cache</a>
<a class="dropdown-item" href="#" onclick="vider_cache('vignettes')">Vider le cache image</a>
<hr class="my-1">
<a class="dropdown-item" href="#" onclick="logout()">Logout</a>
</div>
<?php
} else {
?>
<form method="post" class="form-small form-login">
<fieldset class="p-1" id="login">
<label class="small mb-1" for="login">Login</label>
<input class="form-control form-control-sm" name="login" value="" type="text">
<label class="small mb-1 mt-2" for="pwd">Password</label>
<input class="form-control form-control-sm" name="pwd" value="" type="password">
<input type="submit" class="mt-1 btn btn-primary btn-sm" name="identify" value="Go">
</fieldset>
</form>
<?php
}
if(isset($retour)){
echo "<div class='small text-danger p-1'>".$retour."</div>";
}
?>

View File

@@ -1,10 +0,0 @@
<?php
$pages=glob(CHEMIN.DOSSIER_CUSTOM."*.xml");
foreach($pages as $page){
$tc=contenu_xml($page);
echo "<li class=\"nav-item\">\n";
echo "<span class=\"nav-link\" onclick=\"show_page('".fichier_seul($page)."');\" >";
echo $tc['titre'];
echo "</span></li>";
}
?>

View File

@@ -1,44 +0,0 @@
<?php
require("../config/config.php");
require(CHEMIN."inc/inc-functions.php");
require(CHEMIN."inc/inc-display-functions.php");
require(CHEMIN."inc/classe_xml.php");
$xml=new classe_xml(MODELE_COLLECTION);
$action=array(
"titre"=>"Ajouter une collection",
"action"=>"ajouter_collection",
"submit"=>"Ajouter"
);
if(isset($_GET['xml'])){
$item=CHEMIN.DOSSIER_XML.$_GET['xml'];
$xml->lire_xml($item);
$action=array(
"titre"=>"Updater une collection",
"action"=>"updater_collection",
"submit"=>"Updater",
"delete"=>"oui");
}
$retour=$xml->traiter_formulaire(true);
//print_r($xml->messages);
if($retour=="update"){
display_mosaique_collection($xml);
supprimer_cache();
}
if($retour=="insert"){
display_mosaique_collection($xml);
supprimer_cache();
}
if($retour=="delete"){
// header('Location: '.URL.'index.php');
// die();
echo "delete";
supprimer_cache();
}
if($retour=="none"){
echo $xml->deployer_formulaire($action);
}
?>