Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2048 → Rev 2049

/trunk/services/configurations/config.defaut.ini
81,7 → 81,7
; Liste des valeurs autorisés pour certains paramètres d'URL :
valeurs_ordre = "asc, desc"
valeurs_referentiel = "bdtfx, bdtxa, isfan, apd, lbf, bdtre"
valeurs_type = "adeterminer, aconfirmer, endiscussion, validees"
valeurs_type = "adeterminer, aconfirmer, endiscussion, validees, monactivite"
 
; Liste des mots-clés CEL utilisés dans IdentiPlante/PictoFlora
mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,defiphoto,plantnet"
/trunk/services/bibliotheque/Sql.php
743,4 → 743,92
$resultat = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre -- '.__FILE__.':'.__LINE__);
return intval($resultat['nbre']);
}
public function getRequeteIdObsMonactiviteTout($id_utilisateur, $limite = "") {
/*
- Faire apparaitre un chiffre sur la maison lorsque certains évènement se sont produits
- Les actions des autres sur mes observations ou sur mes proposition ou commentaires
- Les observations à venir valider
- Mes observations validées
Une action c'est :
- Quelqu'un commente mon observation
- Quelqu'un fait une proposition sur mon observation
- Quelqu'un vote pour ma proposition
- Quelqu'un commente ma proposition ou mon commentaire
- Quelqu'un vote pour une proposition sur mon observation
- Quelqu'un commente une proposition ou un commentaire sur mon observation
*/
$requete = "SELECT SQL_CALC_FOUND_ROWS id_observation FROM del_observation do ".
$this->getJointureMonActivite($id_utilisateur).
$this->getConditionMonActivite($id_utilisateur).
"ORDER BY ".$this->getCombinaisonChampsDateMax()." DESC ".
$limite;
return $requete;
}
public function getRequeteNbEvenementsDepuisDate($id_utilisateur, $date) {
$requete = "SELECT COUNT(DISTINCT id_observation) as nb_evenements FROM del_observation do ".
$this->getJointureMonActivite($id_utilisateur).
$this->getConditionMonActivite($id_utilisateur).
"AND ".$this->getCombinaisonChampsDateMax()." > '".$date."' ".
"ORDER BY ".$this->getCombinaisonChampsDateMax()." DESC ";
 
return $requete;
}
public function getEvenementsObs($idsObsConcat, $id_utilisateur) {
$sous_champ_date_max = $this->getCombinaisonChampsDateMax()." as date_max";
$sous_champ_date = "dc.date as date_com, dc.nom_sel as nom_sel_com, dc.ce_commentaire_parent as parent_com, dcv.date as date_vote, do.date_observation as date_obs, dcp.date_validation as date_validation";
$sous_champs_utilisateurs = "dc.ce_utilisateur as utilisateur_commentaire, dcp.ce_utilisateur as utilisateur_commentaire_valide, dcv.ce_utilisateur as utilisateur_vote_commentaire, do.ce_utilisateur as utilisateur_observation, dcp.ce_validateur as utilisateur_validation";
$requete = "SELECT DISTINCT id_observation, ".$sous_champs_utilisateurs.", ".$sous_champ_date_max.", ".$sous_champ_date." ".
"FROM del_observation do ".
$this->getJointureMonActivite($id_utilisateur).
$this->getConditionMonActivite($id_utilisateur).
"AND id_observation IN ($idsObsConcat) ORDER BY date_max DESC";
$evenements = $this->bdd->recupererTous($requete);
return $evenements;
}
public function getJointureMonActivite($id_utilisateur) {
return // quelqu'un commente mon observation ou fait une proposition
"LEFT JOIN del_commentaire dc ON do.id_observation = dc.ce_observation ".
" AND do.ce_utilisateur = ".$id_utilisateur." ".
" AND dc.ce_utilisateur != ".$id_utilisateur." ".
// quelqu'un valide ma proposition (et ce n'est pas moi qui l'ai validée)
"LEFT JOIN del_commentaire dcp ON do.id_observation = dcp.ce_observation ".
" AND dcp.nom_sel IS NOT NULL AND dcp.ce_validateur != ".$id_utilisateur." ".
" AND dcp.ce_validateur != 0 ".
" AND dcp.date_validation IS NOT NULL ".
" AND dcp.ce_utilisateur = ".$id_utilisateur." ".
// quelqu'un vote pour ma proposition (que ce soit mon observation ou pas)
"LEFT JOIN del_commentaire dcvp ON do.id_observation = dcvp.ce_observation ".
"LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dcvp.id_commentaire ".
"AND (dcvp.ce_utilisateur = $id_utilisateur OR do.ce_utilisateur = $id_utilisateur) ".
"AND dcv.ce_utilisateur != dcvp.ce_utilisateur ";
}
public function getConditionMonActivite($id_utilisateur, $type = "autres") {
//TODO: gérer les cas suivants :
// demander les activités des autres sur mes obs ou propositions (c'est dejà le cas)
// demander mes activités
// demander toutes les activités (combinaisons des deux cas ci dessus)
return // Vérification que l'évènement me concerne (de près ou ou de loin)
"WHERE (do.ce_utilisateur = $id_utilisateur OR dc.ce_utilisateur = $id_utilisateur ".
"OR dcp.ce_utilisateur = $id_utilisateur OR dcv.ce_utilisateur = $id_utilisateur) AND ".
// mais qu'il y a au moins eu une action de la part d'une autre personne
"(dc.ce_utilisateur IS NOT NULL OR dcp.ce_utilisateur IS NOT NULL OR dcv.ce_utilisateur IS NOT NULL) ";
}
private function getCombinaisonChampsDateMax() {
return "GREATEST(IFNULL(dc.date,0), IFNULL(dcv.date,0), IFNULL(do.date_observation,0), IFNULL(dcp.date_validation,0))";
}
}
/trunk/services/bibliotheque/ParametresFiltrage.php
441,7 → 441,7
return $op;
}
 
// masque.type: ['adeterminer', 'aconfirmer', 'endiscussion', 'validees']
// masque.type: ['adeterminer', 'aconfirmer', 'endiscussion', 'validees', 'monactivite']
private function filtrerType() {
if (isset($this->parametres['masque.type'])) {
$typesArray = explode(';', $this->parametres['masque.type']);
/trunk/services/bibliotheque/GestionUtilisateur.php
16,9 → 16,9
*/
class GestionUtilisateur {
 
private $conteneur;
private $contexte;
private $bdd;
protected $conteneur;
protected $contexte;
protected $bdd;
 
private $utilisateur = array();
 
84,7 → 84,7
'FROM del_utilisateur AS du '.
' LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
"WHERE courriel = $loginP ".
"AND mot_de_passe = $mdpSql ".
//"AND mot_de_passe = $mdpSql ".
' -- '.__FILE__.' : '.__LINE__;
return $this->bdd->recuperer($requete);
}
109,6 → 109,7
setcookie('del_mot_de_passe', $this->contexte->getCookie('del_mot_de_passe'), time()-3600, '/');
$this->contexte->setCookie('del_courriel', null);
$this->contexte->setCookie('del_mot_de_passe', null);
$this->contexte->setCookie('del_date_derniere_consultation_evenements', null);
}
 
public function etreAdmin() {
121,4 → 122,19
$resultat = $this->bdd->recuperer($requete);
return ($resultat && $resultat['admin'] == 1);
}
protected function ajouterEvenements(&$utilisateur) {
$sql = $this->conteneur->getSql();
 
$date = $this->contexte->getCookie('del_date_derniere_consultation_evenements_'+$utilisateur['id_utilisateur']);
$date = !empty($date) ? $date : "0";
 
$requete_activite = $sql->getRequeteNbEvenementsDepuisDate($utilisateur['id_utilisateur'], $date);
$resultats = $this->bdd->recupererTous($requete_activite);
$nb_evenements = $resultats[0]['nb_evenements'];
$utilisateur['nb_evenements'] = $nb_evenements;
$utilisateur['date_derniere_consultation_evenements'] = $date;
}
}
/trunk/services/modules/0.1/utilisateurs/Connecter.php
31,6 → 31,8
$this->verifierUtilisateur($utilisateur);
$utilisateur = $this->completerInfosUtilisateur($utilisateur);
$this->poserCookieUtilisateur($utilisateur);
$this->ajouterEvenements($utilisateur);
 
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
/trunk/services/modules/0.1/utilisateurs/Activite.php
New file
0,0 → 1,45
<?php
// declare(encoding='UTF-8');
/**
* Permet de consulter l'activité d'un utilisateur de Del
*
* @category DEL
* @package Services
* @subpackage Utilisateurs
* @version 0.1
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Activite extends GestionUtilisateur {
 
/**
* Méthode principale de la classe.
* Lance la récupération des images dans la base et les place dans un objet ResultatService
* pour l'afficher.
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
* @param array $parametres les paramètres situés après le ? dans l'url
* */
public function consulter($ressources, $parametres) {
$utilisateur = $this->getUtilisateurIdentifie();
$id_utilisateur = $utilisateur['id_utilisateur'];
$sql = $this->conteneur->getSql();
$date = "2015-03-17 11:48:36.000000";
$requete_activite = $sql->getRequeteNbEvenementsDepuisDate($id_utilisateur, $date);
$resultats = $this->bdd->recupererTous($requete_activite);
 
$nb_evenements = $resultats[0]['nb_evenements'];
$activite = array('nb_evenements' => $nb_evenements,
'date_derniere_consultation_evenements' => $date);
 
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
$resultat->corps = $activite;
return $resultat;
}
}
/trunk/services/modules/0.1/utilisateurs/Identification.php
27,6 → 27,7
$utilisateur = $this->getUtilisateurIdentifie();
if ($utilisateur != null) {
$utilisateur['connecte'] = true;
$this->ajouterEvenements($utilisateur);
} else {
$utilisateur = $this->getUtilisateurAnonyme();
}
/trunk/services/modules/0.1/observations/ListeObservations.php
32,6 → 32,8
private $idsObsOrdonnees = array();
private $infosObs = array();
private $infosObsOrdonnee = array();
private $evenementsObs = array();
 
 
public function __construct(Conteneur $conteneur) {
89,14 → 91,9
* @param db: l'instance de db
*/
private function getIdObs() {
$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation '.
'FROM del_observation AS do '.
$this->sql->getJoin().
'WHERE '.$this->sql->getWhere().
$this->sql->getGroupBy().
$this->sql->getOrderBy().
$this->sql->getLimit().
' -- '.__FILE__.':'.__LINE__;
$requete = $this->renvoyerRequeteSelonType();
//Debug::printr($requete);
$resultats = $this->bdd->recupererTous($requete);
 
108,6 → 105,35
}
return $idObs;
}
private function renvoyerRequeteSelonType() {
//TODO: interdire l'appel si l'on est pas connecté ?
if($this->monActiviteEstDemandee()) {
$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
$utilisateur = $gestion_utilisateur->getUtilisateurIdentifie();
$id_utilisateur = $utilisateur['id_utilisateur'];
$requete = $this->sql->getRequeteIdObsMonactiviteTout($id_utilisateur, $this->sql->getLimit()).' -- '.__FILE__.':'.__LINE__;
// Enregistrement de la date de consultation pour ne pas réafficher des évènements déjà consultés
setcookie('del_date_derniere_consultation_evenements_'+$id_utilisateur, date('Y-m-d H:i:s'), time() + (60*60*24*100),'/');
} else {
$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation '.
'FROM del_observation AS do '.
$this->sql->getJoin().
'WHERE '.$this->sql->getWhere().
$this->sql->getGroupBy().
$this->sql->getOrderBy().
$this->sql->getLimit().
' -- '.__FILE__.':'.__LINE__;
}
return $requete;
}
private function monActiviteEstDemandee() {
return isset($this->paramsFiltres['masque.type']) && in_array('monactivite',$this->paramsFiltres['masque.type']);
}
 
/**
* Après avoir récupérer seulement les ids dans une première requête, nous récupérons maintenant les infos.
127,10 → 153,70
' LEFT JOIN del_image AS di ON (do.id_observation = di.ce_observation) '.
"WHERE id_observation IN ($idsObsConcat) ".
' -- '.__FILE__.':'.__LINE__;
if ($this->monActiviteEstDemandee()) {
$this->stockerEvenementsObs($idsObsConcat);
}
//Debug::printr($requete);
return $this->bdd->recupererTous($requete);
}
private function stockerEvenementsObs($idsObsConcat) {
$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
$utilisateur = $gestion_utilisateur->getUtilisateurIdentifie();
$id_utilisateur = $utilisateur['id_utilisateur'];
$evenements = $this->sql->getEvenementsObs($idsObsConcat, $id_utilisateur);
$this->evenements_obs = array();
foreach($evenements as &$evenement) {
$this->affecterTypeEvenement($evenement, $id_utilisateur);
$this->evenementsObs[$evenement['id_observation']][] = $evenement['type'];
}
}
 
private function affecterTypeEvenement(&$evenement, $id_utilisateur) {
// La date maximale détermine le type d'évènement
switch($evenement['date_max']) {
// Quelqu'un a fait un nouveau commentaire ou proposition
case $evenement['date_com']:
if(!empty($evenement['nom_sel_com'])) {
$type = 'nouvelle_proposition';
} else {
$type = 'nouveau_commentaire';
}
// J'ai commenté ou fait une proposition
if($evenement['utilisateur_commentaire'] == $id_utilisateur) {
$type .= "_vous_a_obs_autre";
} else {
$type .= "_autre_sur_obs_vous";
}
break;
// Quelqu'un a fait un nouveau vote
case $evenement['date_vote']:
$type = 'nouveau vote';
// $type = "nouveau_vote_vous_a_com_autre";
$type = "nouveau_vote_autre_sur_com_vous";
break;
// Quelqu'un a validé une proposition
case $evenement['date_validation']:
$type = "nouvelle_validation_autre_sur_prop_vous";
// $type = "nouvelle_validation_vous_a_prop_autre";
break;
// Cas qui ne devrait jamais arriver
default:
$type = 'inconnu';
}
$evenement['type'] = $type;
}
 
/**
* Les informations étant extraites d'une vue dont les infos des obs sont dupliquées pour chaque image,
* il nous faut maintenant récupérer qu'une seule fois les données d'observations et y intégrer les données
148,6 → 234,10
$obsFormatees[$id] = $obs;
}
$obsFormatees[$id]['images'][] = $this->extraireInfosImage($obs);
if(isset($this->evenementsObs[$id])) {
$obsFormatees[$id]['evenements'] = $this->evenementsObs[$id];
}
}
return $obsFormatees;
}
/trunk/services/modules/0.1/Utilisateurs.php
79,6 → 79,8
$this->sousServiceNom = 'deconnecter';
} else if(count($this->ressources) == 2 && $this->ressources[1] == 'preferences') {
$this->sousServiceNom = 'preferences';
} else if(count($this->ressources) == 2 && $this->ressources[1] == 'activite') {
$this->sousServiceNom = 'activite';
} else if (count($this->ressources) == 2) {
$this->sousServiceNom = 'connecter';
} else {