/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.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 { |
/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/utilisateurs/Connecter.php |
---|
32,6 → 32,8 |
$utilisateur = $this->completerInfosUtilisateur($utilisateur); |
$this->poserCookieUtilisateur($utilisateur); |
$this->ajouterEvenements($utilisateur); |
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
$resultat->corps = $utilisateur; |
/trunk/services/modules/0.1/observations/ListeObservations.php |
---|
33,7 → 33,9 |
private $infosObs = array(); |
private $infosObsOrdonnee = array(); |
private $evenementsObs = array(); |
public function __construct(Conteneur $conteneur) { |
$this->conteneur = $conteneur; |
$this->conteneur->chargerConfiguration('config_departements_bruts.ini'); |
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); |
109,6 → 106,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. |
* Le web service est ainsi 3 fois plus rapide. |
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,7 → 234,11 |
$obsFormatees[$id] = $obs; |
} |
$obsFormatees[$id]['images'][] = $this->extraireInfosImage($obs); |
if(isset($this->evenementsObs[$id])) { |
$obsFormatees[$id]['evenements'] = $this->evenementsObs[$id]; |
} |
} |
return $obsFormatees; |
} |