Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3982 → Rev 3983

/trunk/widget/modules/photo/squelettes/js/WidgetPhotoCommun.js
92,7 → 92,48
return chaine.replace(/[^a-z0-9_\s]/gi, '').replace(/[_\s]/g, '_');
}
 
WidgetPhotoCommun.prototype.envoyerVersService = function ( mode, url, donnees = null, callback = () => {}) {
const lthis = this;
 
var xhr = new XMLHttpRequest();
xhr.open(mode, url, true);
xhr.setRequestHeader("Content-Type", "application/json");
 
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
var data = JSON.parse(xhr.responseText);
 
callback(null, data);
} else { // Error during the request
var erreurMsg = "Erreur :\ntype : " + xhr.statusText + ' ' + xhr.status + "\n";
var reponse = JSON.parse(xhr.responseText);
 
if (lthis.valOk(reponse)) {
Object.values(reponse).forEach(function (valeur) {
erreurMsg += valeur + "\n";
});
}
 
var debugMsg = '';
var debugInfos = JSON.parse(xhr.getResponseHeader("X-DebugJrest-Data"));
 
if (lthis.valOk(debugInfos)) {
Object.values(debugInfos).forEach(function (valeur) {
debugMsg += valeur + "\n";
});
}
 
callback(erreurMsg, null);
 
}
}
};
 
xhr.send(donnees);
};
 
 
// see : http://semplicewebsites.com/removing-accents-javascript
var Latinise = {};
 
/trunk/widget/modules/photo/squelettes/js/WidgetPhotoPopup.js
13,6 → 13,7
this.userId = proprietes.userId;
this.token = proprietes.token;
this.protocoles = proprietes.protocoles;
this.urlServiceDel = proprietes.urlServiceDel;
}
this.protocole = null;
this.voteId = null;
40,7 → 41,6
$( window ).on( 'resize', lthis.redimentionnerModaleCarousel.bind( lthis ) );
this.initEvtsFonctionsPhoto();
this.initEvtsRetourGalerieResponsive();
this.initEvtsTagsPF();
};
 
WidgetPhotoPopup.prototype.mettreAJourPopup = function() {
51,6 → 51,8
this.fournirLienIdentiplante();
this.pivoterImage();
this.initEvtsProtocole();
this.initEvtsTagsPF();
this.initEvtsTagsCel();
};
 
WidgetPhotoPopup.prototype.mettreAJourInfosImage = function() {
102,8 → 104,11
WidgetPhotoPopup.prototype.initEvtsDefilerImage = function() {
const lthis = this;
 
$( '#precedent, #suivant' ).off('click');
 
$( '#precedent, #suivant' ).on( 'click', function() {
lthis.defilerImage( this.id );
lthis.initEvtsTagsPF();
});
 
$( '#print_content:not(saisir-tag)' ).on( 'keydown', function( event ) {
168,17 → 173,77
});
};
 
WidgetPhotoPopup.prototype.initEvtsTagsCel = function(){
const lthis = this;
$( '#tags-cel' ).html('');
 
$( '#tags-cel' ).append(
"<p>"+ lthis.item['tags_photo']+"</p>"
)
}
 
WidgetPhotoPopup.prototype.initEvtsTagsPF = function() {
//recupérer tags en ajax (voir pictoflora, peut-être dans le php?)
// _OPTIONS
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles?image=197938
// _GET
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles?image=197938
const tagsPfDiv = $('#tags-pf');
tagsPfDiv.html('');
tagsPfDiv.append('<a id="port" class="btn tag">Port</a>' +
'<a id="fleur" class="btn tag">Fleur</a>' +
'<a id="fruit" class="btn tag">Fruit</a>' +
'<a id="feuille" class="btn tag">Feuille</a>' +
'<a id="ecorce" class="btn tag">Ecorce</a>' +
'<a id="rameau" class="btn tag">Rameau</a>' +
'<a id="planche" class="btn tag">Planche</a>' +
'<a id="rosette" class="btn tag">Rosette</a>' +
'<a id="pousse" class="btn tag">Pousse</a>');
 
this.tagsPf();
this.tagsPfCustom();
 
$( '#bloc-tags' ).off('click');
 
$( '#bloc-tags' ).on( 'click', '.tag', function( event ) {
event.preventDefault();
$( this ).toggleClass( 'actif' );
 
var motCleClique = '';
motCleClique = $(this).attr('id');
 
// Utiliser la méthode findIndex pour obtenir l'index de l'élément dans le tableau
var indexElementTrouve = lthis.item['tags_pf'].findIndex(function (tag) {
return tag['mot_cle'] === motCleClique;
});
 
// Vérifier si l'élément a été trouvé
if (indexElementTrouve !== -1) {
//supprimer tag dans DEL
if (lthis.item['tags_pf'][indexElementTrouve].hasOwnProperty('id_mot_cle') && lthis.item['tags_pf'][indexElementTrouve]['id_mot_cle'] != ''){
let url = lthis.urlServiceDel + 'mots-cles/' + lthis.item['tags_pf'][indexElementTrouve]['id_mot_cle']
 
lthis.envoyerVersService('DELETE', url)
}
 
// Supprimer l'élément de this.item['tags_pf'] à l'index trouvé
lthis.item['tags_pf'].splice(indexElementTrouve, 1);
} else {
//Ajout tag dans le DEL
let url = lthis.urlServiceDel + 'mots-cles';
let donnees = {
"image" : lthis.idImage,
"mot_cle" : motCleClique,
"auteur.id" : lthis.item["utilisateur"]["id_utilisateur"]
}
 
lthis.envoyerVersService('PUT', url, JSON.stringify(donnees), function (erreur, tagId) {
if (erreur) {
console.error("Erreur lors de la requête :", erreur);
} else {
console.log('tag : ' + motCleClique + ' ajouté');
lthis.item['tags_pf'].push({'id_mot_cle' : tagId['id'][0], 'mot_cle' : motCleClique})
}
});
}
//TODO post vers le del
});
/* //@TODO est-ce qu'on garde cette croix?
$( '#bloc-tags' ).on( 'click', '.custom-tag.actif .fermer', function( event ) {
event.preventDefault();
// Supprimer un custom-tag
197,7 → 262,8
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles?image=197938
$( this ).parent( '.custom-tag' ).remove();
});
 
*/
/*
$( '#bloc-tags' ).on( 'keyup', '.custom-tag.actif', function( event ) {
let supprimerTag = false;
 
226,6 → 292,7
$( this ).parent( '.custom-tag' ).remove();
}
});
*/
};
 
WidgetPhotoPopup.prototype.defilerImage = function( sens ) {
330,6 → 397,25
}
};
 
WidgetPhotoPopup.prototype.tagsPf = function () {
const lthis = this;
$('#tags-pf-supp').html('');
 
lthis.item['tags_pf'].forEach(tag => {
const tagElement = document.getElementById(tag['mot_cle']);
 
// Vérifier si l'élément existe
if (tagElement) {
// Ajouter la classe 'active' à l'élément <a>
tagElement.classList.add('actif');
} else {
$('#tags-pf-supp').append('<a id="'+tag['mot_cle']+'" class="btn tag custom-tag actif">' + tag['mot_cle'] + '&nbsp;' +
// '<i class="fas fa-times-circle fermer"></i>' +
'</a>')
}
});
}
 
WidgetPhotoPopup.prototype.tagsPfCustom = function() {
const lthis = this;
 
351,26 → 437,31
nouveauTagAttr = lthis.chaineValableAttributsHtml( nouveauTag.toLowerCase() );
 
if( lthis.valOk( nouveauTagAttr ) && !lthis.valOk( $( '#' + nouveauTagAttr + '.tag' ) ) ) {
// Envoyer tags en ajax :
// _OPTIONS
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles/
// _paramètres :
//rien
// _PUT
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles/
// _paramètres :
// image=197938&mot_cle=motcleperso&auteur.id=44084
// Mettre à jour les mots cles
// _OPTIONS
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles?image=197938
// _GET
// https://api-test.tela-botanica.org/service:del:0.1/mots-cles?image=197938
$( '#tags-pf-supp' ).append(
'<a id="' + nouveauTagAttr + '" class="btn tag custom-tag actif">' +
nouveauTag + '&nbsp;<i class="fas fa-times-circle fermer"></i>' +
nouveauTag + '&nbsp;' +
// '<i class="fas fa-times-circle fermer"></i>' +
'</a>'
);
$( '#form-tags-auteur' )[0].reset();
 
let url = lthis.urlServiceDel + 'mots-cles';
let donnees = {
"image" : lthis.idImage,
"mot_cle" : nouveauTagAttr,
"auteur.id" : lthis.item["utilisateur"]["id_utilisateur"]
}
 
// Envoie du nouveau tag dans le DEL
lthis.envoyerVersService('PUT', url, JSON.stringify(donnees), function (erreur, tagId) {
if (erreur) {
console.error("Erreur lors de la requête :", erreur);
} else {
console.log('tag : ' + nouveauTagAttr + ' ajouté');
lthis.item['tags_pf'].push({'id_mot_cle' : tagId['id'][0], 'mot_cle' : nouveauTagAttr})
}
});
 
// $( '#form-tags-auteur' )[0].reset();
$( this ).val( '' );
}
}
/trunk/widget/modules/photo/squelettes/popup.tpl.html
6,20 → 6,12
<div id="bloc-tags" class="bloc-volet tags hidden todo" data-volet="tags">
<h2>Tags</h2>
<h3>Tags CEL (propres à l'auteur)</h3>
<form id="form-tags-auteur">
<input type="text" name="null" id="tags-auteur" placeholder="Aucun tag ajouté par l'auteur de l'observation" disabled>
</form>
<!-- <form id="form-tags-auteur">-->
<!-- <input type="text" name="null" id="tags-auteur" placeholder="Aucun tag ajouté par l'auteur de l'observation" disabled>-->
<!-- </form>-->
<div id="tags-cel"></div>
<h3>Tags Pictoflora</h3>
<div id="tags-pf">
<a id="port" class="btn tag">Port</a><!--
--><a id="fleur" class="btn tag">Fleur</a><!--
--><a id="fruit" class="btn tag">Fruit</a><!--
--><a id="feuille" class="btn tag">Feuille</a><!--
--><a id="ecorce" class="btn tag">Ecorce</a><!--
--><a id="rameau" class="btn tag">Rameau</a><!--
--><a id="planche" class="btn tag">Planche</a><!--
--><a id="insecte" class="btn tag">Insecte</a>
</div>
<div id="tags-pf"></div>
<label for="saisir-tag">Saisir un tag</label>
<input type="text" class="form-control" id="saisir-tag" name="saisir-tag">
<div id="tags-pf-supp"></div>
382,6 → 374,7
'popupUrl' : "<?php echo $popup_url; ?>",
'urlBaseTelechargement' : "<?php echo $url_base_telechargement; ?>",
'urlServiceRegenererMiniature' : "<?php echo $url_ws_regenerer_img; ?>",
'urlServiceDel' : "<?php echo $del_url; ?>",
'userId' : "<?php echo $userId; ?>",
'token' : "<?php echo $token; ?>",
'protocoles' : <?php echo json_encode($protocoles); ?>
/trunk/widget/modules/photo/Photo.php
165,6 → 165,7
$widget['donnees']['url_base_telechargement'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelImageFormat/');
$widget['donnees']['formats_description'] = self::IMAGE_FORMATS;
$widget['donnees']['protocoles'] = $protocoles;
$widget['donnees']['del_url'] = sprintf($this->config['chemins']['baseURLServicesDelTpl'], '');
if ($this->user){
$widget['donnees']['userId'] = $this->user['id'];
446,11 → 447,11
} else {
$tableau = json_decode($json, true);
// print_r($tableau);
if (empty($tableau['total']) || empty($tableau['images'])) {
$this->messages[] = 'Aucune photo ne correspond à vos critères';
} else {
 
$parametres_photo_suivante = $parametres_photo_precedente = $this->parametres;
$start = $this->parametres['start'] ? : 0;
$parametres_photo_suivante['start'] = $start + $limit;
513,6 → 514,9
// Récupération des votes pictoflora
$item['votes'] = $this->getVotes($item);
// Récupération des tags pictoflora
$item['tags_pf'] = $this->getPfTags($item);
$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = $item;
}
522,5 → 526,29
return $widget;
}
private function getPfTags($image){
$tags = [];
$id = $image['id_photo'];
$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
$url = sprintf($this->service_del_url, 'mots-cles?image='.$id);
$json = $this->getDao()->consulter($url);
if (empty($json)) {
$this->messages[] = "L'URI suivante est invalide : $url";
} else {
foreach (json_decode($json, true)['resultats'] as $tag){
$tags[] = [
'id_mot_cle' => $tag['id_mot_cle'],
'mot_cle' => $tag['mot_cle']
];
}
}
return $tags;
}
}
?>