push initial du projet par Stéphane
This commit is contained in:
826
inc/classe_xml.php
Executable file
826
inc/classe_xml.php
Executable file
@@ -0,0 +1,826 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
94
inc/inc-add-items.php
Executable file
94
inc/inc-add-items.php
Executable file
@@ -0,0 +1,94 @@
|
||||
<?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>
|
||||
117
inc/inc-add-zip.php
Executable file
117
inc/inc-add-zip.php
Executable file
@@ -0,0 +1,117 @@
|
||||
<?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>
|
||||
65
inc/inc-ajax-display.php
Executable file
65
inc/inc-ajax-display.php
Executable file
@@ -0,0 +1,65 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
66
inc/inc-ajax-edit-items.php
Executable file
66
inc/inc-ajax-edit-items.php
Executable file
@@ -0,0 +1,66 @@
|
||||
<?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>";
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
56
inc/inc-ajax-edit-pages.php
Executable file
56
inc/inc-ajax-edit-pages.php
Executable file
@@ -0,0 +1,56 @@
|
||||
<?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>";
|
||||
}
|
||||
}
|
||||
?>
|
||||
70
inc/inc-ajax-form-collection.php
Executable file
70
inc/inc-ajax-form-collection.php
Executable file
@@ -0,0 +1,70 @@
|
||||
<?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>";*/
|
||||
}
|
||||
?>
|
||||
45
inc/inc-ajax-form.php
Executable file
45
inc/inc-ajax-form.php
Executable file
@@ -0,0 +1,45 @@
|
||||
<?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);
|
||||
}
|
||||
?>
|
||||
30
inc/inc-ajax-login.php
Executable file
30
inc/inc-ajax-login.php
Executable file
@@ -0,0 +1,30 @@
|
||||
<?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");
|
||||
?>
|
||||
216
inc/inc-display-functions.php
Executable file
216
inc/inc-display-functions.php
Executable file
@@ -0,0 +1,216 @@
|
||||
<?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;
|
||||
}
|
||||
?>
|
||||
32
inc/inc-footer.php
Executable file
32
inc/inc-footer.php
Executable file
@@ -0,0 +1,32 @@
|
||||
<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>
|
||||
221
inc/inc-functions.php
Executable file
221
inc/inc-functions.php
Executable file
@@ -0,0 +1,221 @@
|
||||
<?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;
|
||||
}
|
||||
?>
|
||||
228
inc/inc-head.php
Executable file
228
inc/inc-head.php
Executable file
@@ -0,0 +1,228 @@
|
||||
<!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>
|
||||
|
||||
20
inc/inc-login.php
Executable file
20
inc/inc-login.php
Executable file
@@ -0,0 +1,20 @@
|
||||
<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>
|
||||
40
inc/inc-menu-admin.php
Executable file
40
inc/inc-menu-admin.php
Executable file
@@ -0,0 +1,40 @@
|
||||
<?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>";
|
||||
}
|
||||
?>
|
||||
10
inc/inc-menu-pages.php
Executable file
10
inc/inc-menu-pages.php
Executable file
@@ -0,0 +1,10 @@
|
||||
<?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>";
|
||||
}
|
||||
?>
|
||||
44
inc/out-inc-ajax-collection-form.php
Executable file
44
inc/out-inc-ajax-collection-form.php
Executable file
@@ -0,0 +1,44 @@
|
||||
<?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);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user