Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3737 Rev 3756
Line 26... Line 26...
26
    private $tagsObs = null;
26
    private $tagsObs = null;
27
    private $tagsImg = null;
27
    private $tagsImg = null;
28
    private $userId = null;
28
    private $userId = null;
29
    private $userEmail = null;
29
    private $userEmail = null;
30
    private $userIntitule = null;
30
    private $userIntitule = null;
31
    private $isFromPlantNet = false;
31
    private $isPlantnetPull = false;
32
    private $isSauvages = false;
32
    private $isSauvages = false;
33
    const DUREE_DE_VIE_IMG = 86400;// 3600 * 24 = 86 400 (1 journée)
33
    const DUREE_DE_VIE_IMG = 86400;// 3600 * 24 = 86 400 (1 journée)
34
    const ARRET_SERVICE = false;// Permet de bloquer le service en cas de problème sur le serveur
34
    const ARRET_SERVICE = false;// Permet de bloquer le service en cas de problème sur le serveur
Line 35... Line 35...
35
 
35
 
Line 47... Line 47...
47
                $this->projetId = $requeteDonnees['id_projet'] ?? null;
47
                $this->projetId = $requeteDonnees['id_projet'] ?? null;
48
            }
48
            }
Line 49... Line 49...
49
 
49
 
50
            // Si c'est une obs Pl@ntNet
50
            // Si c'est une obs Pl@ntNet
-
 
51
            if (! empty($requeteDonnees['tag-obs']) && strpos(strtolower($requeteDonnees['tag-obs']), 'plantnet') !== false) {
-
 
52
                if (isset($requeteDonnees['origin']) && 'pullPlantnet' === $requeteDonnees['origin']) {
51
            if (! empty($requeteDonnees['tag-obs']) && strpos(strtolower($requeteDonnees['tag-obs']), 'plantnet') !== false) {
53
                    // on traite les obs PN qui viennent du script de pull
-
 
54
                    $this->isPlantnetPull = true;
-
 
55
                } else {
-
 
56
                    // fake ID pour les obs PN provenant de PlantNet V1
-
 
57
                    $retour = (object) [
-
 
58
                        'msg' => 'observation Pl@ntNet non sauvegardée',
-
 
59
                        'id' => 'fake-' . uniqid(),
-
 
60
                        'images' => []
-
 
61
                    ];
-
 
62
                    $this->envoyerJson($retour);
-
 
63
                    exit; // envoyerJson() ne termine pas le script !
52
                $this->isFromPlantNet = true;
64
                }
53
            }
65
            }
54
            // Si c'est une obs Pl@ntNet
66
            // Si c'est une obs Sauvages de ma rue
55
            if (! empty($requeteDonnees['tag-obs']) && strpos(strtolower($requeteDonnees['tag-obs']), 'mobileSauvages') !== false) {
67
            if (! empty($requeteDonnees['tag-obs']) && strpos(strtolower($requeteDonnees['tag-obs']), 'mobileSauvages') !== false) {
56
                $this->isSauvages = true;
68
                $this->isSauvages = true;
Line 57... Line 69...
57
            }
69
            }
Line 67... Line 79...
67
 
79
 
68
            // Traitement des observations et des images
80
            // Traitement des observations et des images
69
            if (isset($requeteDonnees['utilisateur']['courriel']) && filter_var($requeteDonnees['utilisateur']['courriel'], FILTER_VALIDATE_EMAIL)) {
81
            if (isset($requeteDonnees['utilisateur']['courriel']) && filter_var($requeteDonnees['utilisateur']['courriel'], FILTER_VALIDATE_EMAIL)) {
70
                $this->debug[] = 'Utilisateur : '.print_r($requeteDonnees['utilisateur'], true);
82
                $this->debug[] = 'Utilisateur : '.print_r($requeteDonnees['utilisateur'], true);
71
                $utilisateur = $requeteDonnees['utilisateur'];
-
 
72
                // début transaction car si insertions par le même utilisateur en parallèle,
-
 
73
                // De plus, ça permet de ne pas conserver les données d'obs si l'image provoque une erreur
-
 
74
                //Cel::db()->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
-
 
75
                Cel::db()->beginTransaction();
-
 
76
                $erreursDurantTraitement = false;
-
 
Line 77... Line 83...
77
                $nomsOriginauxImagesTemp = array();
83
                $utilisateur = $requeteDonnees['utilisateur'];
78
 
84
 
79
                // hop on récupère les infos de l'utilisateur
85
                // hop on récupère les infos de l'utilisateur
80
                $infosUtilisateur = $this->infosInscritTela($utilisateur['courriel']);
86
                $infosUtilisateur = $this->infosInscritTela($utilisateur['courriel']);
Line 120... Line 126...
120
                        $obsAAjouter['station'] = isset($obs['station']) && trim($obs['station']) !== "" ? $obs['station'] : null;
126
                        $obsAAjouter['station'] = isset($obs['station']) && trim($obs['station']) !== "" ? $obs['station'] : null;
121
                        $obsAAjouter['environment'] = isset($obs['milieu']) && trim($obs['milieu']) !== "" ? $obs['milieu'] : null;
127
                        $obsAAjouter['environment'] = isset($obs['milieu']) && trim($obs['milieu']) !== "" ? $obs['milieu'] : null;
122
                        $obsAAjouter['elevation'] = (! empty($obs['altitude'])) ? $obs['altitude'] : null;
128
                        $obsAAjouter['elevation'] = (! empty($obs['altitude'])) ? $obs['altitude'] : null;
123
                        $obsAAjouter['geometry'] = $obs['geometry'] ?? json_encode([
129
                        $obsAAjouter['geometry'] = $obs['geometry'] ?? json_encode([
124
                                'type' => 'Point',
130
                                'type' => 'Point',
125
                                'coordinates' => [ (float)$obs['longitude'], (float)$obs['latitude'] ]
131
                                'coordinates' => [ (float)str_replace(',', '.', $obs['longitude']),(float)str_replace(',', '.', $obs['latitude']) ]
126
                            ]); // CONCAT('{\"type\":\"Point\",\"coordinates\":[', longitude, ',', latitude,']}'),
132
                            ]); // CONCAT('{\"type\":\"Point\",\"coordinates\":[', longitude, ',', latitude,']}'),
127
                        $obsAAjouter['geodatum'] = 'WGS84';
133
                        $obsAAjouter['geodatum'] = 'WGS84';
128
                        $obsAAjouter['published_location'] = ($this->tagsObs != null && in_array('sensible', $this->tagsObs) == true) ? 
134
                        $obsAAjouter['published_location'] = ($this->tagsObs != null && in_array('sensible', $this->tagsObs) == true) ? 
129
                            "localité" : "précise";
135
                            "localité" : "précise";
Line 156... Line 162...
156
                        $obsAAjouter['certainty'] = ($this->projet == "aDeterminer") ? 'à déterminer' : $obsAAjouter['certainty'];
162
                        $obsAAjouter['certainty'] = ($this->projet == "aDeterminer") ? 'à déterminer' : $obsAAjouter['certainty'];
157
                        $obsAAjouter['input_source'] = 'widget';
163
                        $obsAAjouter['input_source'] = 'widget';
158
                        $obsAAjouter['project_id'] = $this->projetId;
164
                        $obsAAjouter['project_id'] = $this->projetId;
159
                        // racommodage en attendant mieux
165
                        // racommodage en attendant mieux
160
                        $obsAAjouter['project'] = ($this->projetId == null) ? null : ($this->projetId == 53) ? "missions-flore" : $this->projet ;
166
                        $obsAAjouter['project'] = ($this->projetId == null) ? null : ($this->projetId == 53) ? "missions-flore" : $this->projet ;
161
                        if ($this->isFromPlantNet) {
167
                        if ($this->isPlantnetPull) {
162
                            $obsAAjouter['input_source'] = 'PlantNet';
168
                            $obsAAjouter['input_source'] = 'PlantNet';
163
                            $obsAAjouter['plantnet_id'] = $obs['obs_id'];
169
                            $obsAAjouter['plantnet_id'] = $obs['obs_id'];
164
                        }
170
                        }
165
                        if ($this->isSauvages) {
171
                        if ($this->isSauvages) {
166
                            $obsAAjouter['input_source'] = 'autre';
172
                            $obsAAjouter['input_source'] = 'autre';
Line 179... Line 185...
179
                $this->debug[] = 'Nbre obs ajoutée : '.count($observations);
185
                $this->debug[] = 'Nbre obs ajoutée : '.count($observations);
180
                $this->debug[] = 'projet : '.$this->projet;
186
                $this->debug[] = 'projet : '.$this->projet;
181
                $this->debug[] = 'tagsObs : '.print_r($this->tagsObs, true);
187
                $this->debug[] = 'tagsObs : '.print_r($this->tagsObs, true);
182
                $this->debug[] = 'tagsImg : '.print_r($this->tagsImg, true);
188
                $this->debug[] = 'tagsImg : '.print_r($this->tagsImg, true);
Line -... Line 189...
-
 
189
 
-
 
190
                // début transaction car si insertions par le même utilisateur en parallèle,
-
 
191
                // De plus, ça permet de ne pas conserver les données d'obs si l'image provoque une erreur
-
 
192
                //Cel::db()->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
-
 
193
                Cel::db()->beginTransaction();
-
 
194
                $erreursDurantTraitement = false;
-
 
195
                $nomsOriginauxImagesTemp = array();
183
 
196
 
184
                // Insertion dans la base
197
                // Insertion dans la base
185
                $obs_a_taguer_ids = array();
198
                $obs_a_taguer_ids = array();
186
                $img_a_taguer_ids_noms = array();
199
                $img_a_taguer_ids_noms = array();
187
                $champsEtendusObs = array();
200
                $champsEtendusObs = array();
Line 415... Line 428...
415
     * interrogeant le service eFlore/noms par référentiel + nn
428
     * interrogeant le service eFlore/noms par référentiel + nn
416
     */
429
     */
417
    protected function enrichirDonneesTaxonomiquesParNN($ref, $nn, &$obs) {
430
    protected function enrichirDonneesTaxonomiquesParNN($ref, $nn, &$obs) {
418
        $url_nom = $this->config['eflore']['url_service_nom'];
431
        $url_nom = $this->config['eflore']['url_service_nom'];
419
        $url_nom = str_replace('{referentiel}', $ref, $url_nom);
432
        $url_nom = str_replace('{referentiel}', $ref, $url_nom);
420
        $url_nom .= '/' . $nn;
433
        $url_nom .= '/' . $nn . '?ns.structure=au,an';
421
        // un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
434
        // un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
422
        // @TODO mettre du cURL à l'occase
435
        // @TODO mettre du cURL à l'occase
423
        $infos_nom = @file_get_contents($url_nom);
436
        $infos_nom = @file_get_contents($url_nom);
424
        if ($infos_nom != NULL) {
437
        if ($infos_nom != NULL) {
425
            try {
438
            try {
Line 432... Line 445...
432
                    $obs['accepted_sci_name'] = $infos_nom['nom_retenu_complet'];
445
                    $obs['accepted_sci_name'] = $infos_nom['nom_retenu_complet'];
433
                }
446
                }
434
                if ($infos_nom['nom_retenu.id'] != null) {
447
                if ($infos_nom['nom_retenu.id'] != null) {
435
                    $obs['accepted_sci_name_id'] = $infos_nom['nom_retenu.id'];
448
                    $obs['accepted_sci_name_id'] = $infos_nom['nom_retenu.id'];
436
                }
449
                }
437
                // manque le accepted_sci_name retourné sans auteur (insatisfaisant)
-
 
438
                if ($infos_nom['famille'] != null) {
450
                if ($infos_nom['famille'] != null) {
439
                    $obs['family'] = $infos_nom['famille'];
451
                    $obs['family'] = $infos_nom['famille'];
440
                }
452
                }
441
            } catch(Exception $e) {
453
            } catch(Exception $e) {
442
                // échec silencieux
454
                // échec silencieux