Subversion Repositories eFlore/Applications.cel

Rev

Rev 3950 | Rev 3971 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3950 Rev 3958
Line 8... Line 8...
8
		this.indexImage                   = this.indexPremiereImage;
8
		this.indexImage                   = this.indexPremiereImage;
9
		this.tailleMax                    = proprietes.tailleMax;
9
		this.tailleMax                    = proprietes.tailleMax;
10
		this.popupUrl                     = proprietes.popupUrl;
10
		this.popupUrl                     = proprietes.popupUrl;
11
		this.urlBaseTelechargement        = proprietes.urlBaseTelechargement;
11
		this.urlBaseTelechargement        = proprietes.urlBaseTelechargement;
12
		this.urlServiceRegenererMiniature = proprietes.urlServiceRegenererMiniature;
12
		this.urlServiceRegenererMiniature = proprietes.urlServiceRegenererMiniature;
-
 
13
		this.userId       				  = proprietes.userId;
-
 
14
		this.token						  = proprietes.token;
-
 
15
		this.protocoles					  = proprietes.protocoles;
13
	}
16
	}
14
 
-
 
-
 
17
	this.protocole = null;
-
 
18
	this.voteId = null;
-
 
19
	this.votes = null;
15
	this.mettreAJourInfosImage();
20
	this.mettreAJourInfosImage();
16
}
21
}
Line 17... Line 22...
17
 
22
 
Line 34... Line 39...
34
	this.initEvtsContact();
39
	this.initEvtsContact();
35
	$( window ).on( 'resize', lthis.redimentionnerModaleCarousel.bind( lthis ) );
40
	$( window ).on( 'resize', lthis.redimentionnerModaleCarousel.bind( lthis ) );
36
	this.initEvtsFonctionsPhoto();
41
	this.initEvtsFonctionsPhoto();
37
	this.initEvtsRetourGalerieResponsive();
42
	this.initEvtsRetourGalerieResponsive();
38
	this.initEvtsTagsPF();
43
	this.initEvtsTagsPF();
39
	this.initEvtsProtocole();
-
 
40
};
44
};
Line 41... Line 45...
41
 
45
 
42
WidgetPhotoPopup.prototype.mettreAJourPopup = function() {
46
WidgetPhotoPopup.prototype.mettreAJourPopup = function() {
43
	this.mettreAJourInfosImage();
47
	this.mettreAJourInfosImage();
44
	this.afficherTitreImage();
48
	this.afficherTitreImage();
45
	this.traiterMetas();
49
	this.traiterMetas();
46
	this.regenererMiniature();
50
	this.regenererMiniature();
47
	this.fournirLienIdentiplante();
-
 
48
	this.traiterVote();
51
	this.fournirLienIdentiplante();
49
	this.pivoterImage();
52
	this.pivoterImage();
50
	// this.pivoterGauche();
53
	this.initEvtsProtocole();
Line 51... Line 54...
51
};
54
};
52
 
55
 
53
WidgetPhotoPopup.prototype.mettreAJourInfosImage = function() {
56
WidgetPhotoPopup.prototype.mettreAJourInfosImage = function() {
Line 66... Line 69...
66
	this.obs           = this.item['obs'];
69
	this.obs           = this.item['obs'];
67
	this.nn            = '[nn' + this.obs['nom_sel_nn']+']';
70
	this.nn            = '[nn' + this.obs['nom_sel_nn']+']';
68
	this.urlIP         = this.obs['url_ip'];
71
	this.urlIP         = this.obs['url_ip'];
69
	this.tagsImage     = this.tagsToArray( this.item['tags_photo'] );
72
	this.tagsImage     = this.tagsToArray( this.item['tags_photo'] );
70
	this.tagsObs       = this.tagsToArray( this.obs['tags_obs'] );
73
	this.tagsObs       = this.tagsToArray( this.obs['tags_obs'] );
71
	this.auteur        = this.item['utilisateur']['nom_utilisateur'];
74
	let auteurMail = this.item['utilisateur']['mail_utilisateur'].split("@")[0];
-
 
75
	this.auteur        = this.item["utilisateur"]["nom_utilisateur"] ? this.item["utilisateur"]["nom_utilisateur"] : auteurMail;
72
	this.date          = this.item['date'];
76
	this.date          = this.item['date'];
73
};
77
};
Line 74... Line 78...
74
 
78
 
75
WidgetPhotoPopup.prototype.tagsToArray = function( tags ) {
79
WidgetPhotoPopup.prototype.tagsToArray = function( tags ) {
Line 678... Line 682...
678
	});
682
	});
679
};
683
};
Line 680... Line 684...
680
 
684
 
681
WidgetPhotoPopup.prototype.initEvtsProtocole = function() {
685
WidgetPhotoPopup.prototype.initEvtsProtocole = function() {
-
 
686
	const lthis = this;
-
 
687
	$('#bloc-notes-protocole').addClass('hidden');
-
 
688
	lthis.votes = null
-
 
689
	//On transforme la promesse en array
-
 
690
	const PROTOCOLES_ARRAY = Object.values(lthis.protocoles);
-
 
691
 
-
 
692
	const $select = $('#protocole');
-
 
693
	$select.empty(); // Clear existing options
-
 
694
 
-
 
695
	// Add the default hidden option
-
 
696
	$select.append('<option value="" selected hidden>Choix du protocole</option>');
-
 
697
 
-
 
698
	PROTOCOLES_ARRAY.forEach(protocoleData => {
-
 
699
		$select.append(`<option id="protocole_${protocoleData['protocole.id']}" value="protocole_${protocoleData['protocole.id']}">${protocoleData['protocole.intitule']}</option>`);
Line 682... Line 700...
682
	const lthis = this;
700
	})
683
 
701
 
-
 
702
	$( '#protocole').on( 'change', function( event ){
-
 
703
		event.preventDefault();
684
	$( '#protocole').on( 'change', function( event ){
704
		lthis.votes = null
-
 
705
 
Line 685... Line 706...
685
		event.preventDefault();
706
		var id = $(this).children(":selected").attr("id");
Line 686... Line 707...
686
		var id = $(this).children(":selected").attr("id");
707
		var protocole = id.split("_")[1];
687
 
708
 
-
 
709
		$('#bloc-notes-protocole').removeClass('hidden');
-
 
710
 
688
		$('#bloc-notes-protocole').removeClass('hidden');
711
		// Find the object corresponding to the selected id (protocole.id)
-
 
712
		var selectedProtocoleData = PROTOCOLES_ARRAY.find(protocoleData => protocoleData['protocole.id'] === protocole);
689
 
713
 
-
 
714
		lthis.protocole = selectedProtocoleData['protocole.id'];
690
		const message = {
715
		const message = selectedProtocoleData['protocole.descriptif'];
691
			'capitalisation_image': "\"Capitalisation d'image\" est un programme de sciences participatives initié" +
716
 
692
				" dans le cadre du projet Pl@nttNet. En attribuant une note aux photos vous nous aidez à connaître" +
717
		$('#message-protocole').html('<p>' + message + '</p>');
-
 
718
 
-
 
719
		// On envoie le protocole sélectionné à la partie "vote"
-
 
720
		// On récupère tous les votes de l'image depuis pictoflora
-
 
721
		lthis.votes = lthis.getVotes(lthis.protocole)
693
				" leur qualité.",
722
 
-
 
723
		// Si l'utilisateur est connect, on vérifie s'il a déjà voté pour cette image et on affiche les étoiles
-
 
724
		// correspondantes
-
 
725
		if(lthis.userId){
694
			'aide_identification': "Message du protocole aide identification",
726
			lthis.checkUserVote(lthis.userId, lthis.protocole, lthis.votes);
-
 
727
		} else {
695
			'defi_photo': "Message du protocole défi photo",
728
			lthis.voteId = null;
-
 
729
			lthis.removeVoteStars()
-
 
730
		}
-
 
731
 
-
 
732
		// Remove any previous click event listeners on rating stars
-
 
733
		for (let i=1; i<=5; i++){
-
 
734
			$("#rating-star-"+i).off("click");
696
			'gentiane_azure': "Message du protocole gentiane_azure",
735
		}
697
			'arbres_tetards': "Message du protocole arbres_tetards",
736
 
Line 698... Line 737...
698
		}
737
		// Si l'utilisateur vote, on affiche les étoiles correspondantes et on l'envoie vers pictoflora
-
 
738
		lthis.traiterVote();
-
 
739
	});
-
 
740
}
Line 699... Line 741...
699
		$('#message-protocole').html('<p>' + message[id] + '</p>');
741
 
Line -... Line 742...
-
 
742
WidgetPhotoPopup.prototype.traiterVote = function () {
700
	});
743
	const lthis = this;
-
 
744
	let starSelected = 0
-
 
745
	let mode = '';
-
 
746
 
-
 
747
	$("#note").attr("value", -1);
701
};
748
 
702
 
749
	// Traitement du bouton suppression du vote
703
WidgetPhotoPopup.prototype.traiterVote = function () {
-
 
704
 
750
	$("#note-remove").click(function (){
Line -... Line 751...
-
 
751
		lthis.removeVoteStars();
-
 
752
		mode = 'DELETE';
-
 
753
		// On n'envoie le vote que si l'utilisateur est connecté
-
 
754
		if (lthis.userId) {
-
 
755
			lthis.sendVote(lthis.userId, lthis.protocole, starSelected, mode, lthis.voteId);
-
 
756
		}
705
	$("#note").attr("value", -1);
757
	})
-
 
758
 
-
 
759
	// Si l'utilisateur a déjà voté pour cette image on affiche son vote et on passe en mode modification
-
 
760
	let userAVoter = lthis.checkUserVote(lthis.userId, lthis.protocole, lthis.votes);
-
 
761
	userAVoter ? mode = 'POST' : mode = 'PUT';
-
 
762
 
706
 
763
	// Affichage du nombre d'étoiles sélectionnées et envoi du vote
-
 
764
	for (let i=1; i<=5; i++){
-
 
765
		$("#rating-star-"+i).click(function () {
-
 
766
			starSelected = i
-
 
767
			lthis.displayVote(starSelected);
Line -... Line 768...
-
 
768
			$("#note").attr("value", starSelected);
707
	$("#note-remove").click(function (){
769
			// On n'envoie le vote que si l'utilisateur est connecté
-
 
770
			if (lthis.userId){
Line -... Line 771...
-
 
771
				lthis.sendVote(lthis.userId, lthis.protocole, starSelected, mode);
-
 
772
			}
-
 
773
		});
708
		$(".notation-star").removeClass('fa').addClass('far').css("color", "grey");
774
	}
-
 
775
};
709
 
776
 
Line 710... Line 777...
710
		$("#note").attr("value", -1);
777
// Envoi du vote vers la fonction sendVote() du fichier php
711
	})
-
 
Line 712... Line 778...
712
 
778
WidgetPhotoPopup.prototype.sendVote = function (userId, protocole, note, mode, voteId){
-
 
779
	const lthis = this;
-
 
780
 
-
 
781
	var xhttp = new XMLHttpRequest();
-
 
782
	xhttp.onreadystatechange = function() {
-
 
783
		if (this.readyState == 4 && this.status == 200) {
-
 
784
			location.reload();
-
 
785
		}
-
 
786
	};
-
 
787
 
Line -... Line 788...
-
 
788
	var url = "../widget:cel:photo/";
-
 
789
 
713
	$("#rating-star-1").hover(function () {
790
	// Convertir les données en une chaîne JSON pour les envoyer dans le corps de la requête
714
		$(".notation-star").removeClass('fa').addClass('far').css("color", "grey");
791
	var data = {
Line -... Line 792...
-
 
792
		idImage: this.idImage,
-
 
793
		mode: mode,
-
 
794
		user: userId,
-
 
795
		protocole: protocole,
-
 
796
		vote: note,
-
 
797
		voteId: voteId
-
 
798
	}
-
 
799
	var jsonData = JSON.stringify(data);
715
 
800
 
-
 
801
	xhttp.open("POST", url+"?action=send_pf_vote", true);
-
 
802
	xhttp.setRequestHeader("Content-Type", "application/json");
716
		$("#rating-star-1").removeClass('far').addClass('fa').css("color", "#c3d45d");
803
	xhttp.send(jsonData);
-
 
804
}
-
 
805
 
-
 
806
WidgetPhotoPopup.prototype.getVotes = function (protocoleId){
Line 717... Line 807...
717
 
807
	let votes = Object.values(this.item["votes"]);
-
 
808
	let noteMoyenne = 0;
Line -... Line 809...
-
 
809
	let nombreVotes= 0;
718
		$("#note").attr("value", 1);
810
	let noteTotal = 0;
719
	});
-
 
Line 720... Line 811...
720
 
811
	let itemVotes = [];
721
	$("#rating-star-2").hover(function () {
-
 
-
 
812
 
Line 722... Line 813...
722
		$(".notation-star").removeClass('fa').addClass('far').css("color", "grey");
813
	votes.forEach(vote => {
-
 
814
		if (vote["protocole.id"] == protocoleId){
Line -... Line 815...
-
 
815
			nombreVotes++
723
 
816
			noteTotal += parseInt(vote["vote"]);
-
 
817
			noteMoyenne = (noteTotal / nombreVotes).toFixed(1)
-
 
818
			itemVotes.push(vote);
724
		$("#rating-star-1, #rating-star-2").removeClass('far').addClass('fa').css("color", "#c3d45d");
819
		}
-
 
820
	})
Line 725... Line 821...
725
 
821
 
726
		$("#note").attr("value", 2);
822
	let elementNoteMoyenne = $("#note-moyenne .contenu");
-
 
823
	elementNoteMoyenne.text(noteMoyenne);
-
 
824
 
Line 727... Line 825...
727
	});
825
	let elementNoteCount = $("#note-count .contenu");
-
 
826
	elementNoteCount.text(nombreVotes);
Line 728... Line 827...
728
 
827
 
-
 
828
	return itemVotes;
-
 
829
}
-
 
830
 
729
	$("#rating-star-3").hover(function () {
831
WidgetPhotoPopup.prototype.displayVote = function (note){
Line -... Line 832...
-
 
832
	lthis.removeVoteStars();
-
 
833
 
730
		$(".notation-star").removeClass('fa').addClass('far').css("color", "grey");
834
	for (let i=1; i<=5; i++){
-
 
835
		for (let j=1; j<=note; j++){
-
 
836
			$("#rating-star-"+j).removeClass('far').addClass('fa').css("color", "#c3d45d");
-
 
837
		}
-
 
838
	}
-
 
839
}
-
 
840
 
-
 
841
WidgetPhotoPopup.prototype.removeVoteStars = function (){
731
 
842
	$(".notation-star").removeClass('fa').addClass('far').css("color", "grey");
Line 732... Line 843...
732
		$("#rating-star-1, #rating-star-2, #rating-star-3").removeClass('far').addClass('fa').css("color", "#c3d45d");
843
	$("#note").attr("value", -1);
733
 
844
}
734
		$("#note").attr("value", 3);
845
 
735
	});
846
WidgetPhotoPopup.prototype.checkUserVote = function (userId, protocoleId, votes){