Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3203 → Rev 3204

/trunk/widget/modules/saisie2/squelettes/js/auth.js
New file
0,0 → 1,123
// configuration
var urlRacine = 'https://www.tela-botanica.org',
config = {
prod: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'
},
test: {
urlWidgetNavigation : urlRacine + '/widget-test:cel:saisie2',
urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire-test:auth'
},
local: {
urlWidgetNavigation : 'https://localhost/widget:cel:saisie2',
urlBaseAuth : 'https://localhost/service:annuaire:auth'
}
}
 
/**
* Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe
* dans la page appelante.
*
* Nécessite jQuery
*
* Utilisation :
* - prévoir un <div id="tb-navigation"> dans la page, qui accueillera la barre de navigation.
* - si ce <div> contient déjà quelque chose, son contenu sera reporté à la place de la zone ayant l'id "contenu-source"
* de la barre de navigation (si une telle zone existe)
* - si ce <div> contient un attribut "data-courant" et si la valeur de cet attribut correspond à l'id d'un des éléments
* de navigation, alors cet élément aura la classe "active" (pour localiser la page courante dans les menus)
* - si ce <div> contient un attribut "data-squelette", alors le widget de navigation sera appelé avec le paramètre
* "?squelette=contenu-de-data-squelette"; se reporter à la documentation du widget:reseau:navigation
*/
 
$(document).ready(function() {
var div = $('#tb-navigation');
if (div) {
var squelette = div.data('squelette'),
courant = div.data('courant'),
mode = div.data('mode') || 'prod',
contenu = div.html();
 
// chargement de la barre
var urlBarreNavigation = config[mode]['urlWidgetNavigation'];
if (squelette) {
urlBarreNavigation += '?squelette=' + squelette;
}
htmlBarre = $.ajax({
url: urlBarreNavigation,
type: 'get',
success: function(data) {
// remplacement de la zone contenu-source
var zoneSource = div.find('#contenu-source');
if (zoneSource) {
zoneSource.replaceWith(contenu);
// Chargement de sinformations de connexion SSO
var urlBaseAuth = config[mode]['urlBaseAuth'];
chargerStatutSSO(urlBaseAuth);
}
},
error: function() {
div.html('Erreur: impossible de charger la barre de navigation');
}
});
}
});
 
/**
* Modifie les liens des boutons de connexion / déconnexion SSO pour prendre ne compte
* l'adresse exacte de la page d'origine (si on fait ça en PHP, on obtient l'URL du
* widget de barre de navigation et pas de la page appelante)
*/
function definirPageOrigineDansLiens() {
var page = window.location.href;
$('#bouton-connexion a').attr('href', $('#bouton-connexion a').attr('href') + page);
$('#deconnexion a').attr('href', $('#deconnexion a').attr('href') + page);
}
 
/**
* Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
* à droite de la barre en fonction
*/
function chargerStatutSSO(urlBaseAuth) {
var urlAuth = urlBaseAuth + '/identite';
$.ajax({
url: urlAuth,
type: "GET",
dataType: 'json',
xhrFields: {
withCredentials: true
}
}).done(function(data) {
// connecté
definirUtilisateur(data.token);
});
}
 
function definirUtilisateur(jeton) {
var nomComplet = '';
if (jeton != undefined) {
// décodage jeton
var jetonDecode = decoderJeton(jeton);
nomComplet = jetonDecode.intitule;
}
// affichage
$('#bouton-connexion').hide();
$('#utilisateur-connecte').show();
$('#nom-complet').html(nomComplet);
}
 
/**
* Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
* Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
* ou ceci : https://code.google.com/p/crypto-js
*/
function decoderJeton(jeton) {
parts = jeton.split('.');
payload = parts[1];
payload = atob(payload);
payload = JSON.parse(payload, true);
 
return payload;
}
/trunk/widget/modules/saisie2/squelettes/saisie.tpl.html
17,9 → 17,9
 
<!-- OpenGraph pour Facebook, Pinterest, Google+ -->
<meta property="og:type" content="website" />
<meta property="og:title" content="Gestion des widgets de saisie du CeL" />
<meta property="og:title" content="Widgets de saisie du CeL" />
<meta property="og:site_name" content="Tela Botanica" />
<meta property="og:description" content="Gestion des widgets de saisie du Carnet en Ligne" />
<meta property="og:description" content="Widgets de saisie du Carnet en Ligne" />
<meta property="og:image" content="http://resources.tela-botanica.org/tb/img/256x256/carre_englobant.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="256" />
30,9 → 30,7
<link rel="shortcut icon" type="image/x-icon" href="http://resources.tela-botanica.org/tb/img/16x16/favicon.ico" />
<!-- Jquery -->
<!-- Google Map v3 -->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?language=fr&amp;region=FR"></script>
<!-- Jquery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.1.js"></script>
<!-- Jquery UI : nécessaire pour le minicalendrier et l'auto-complétion -->
<script type="text/javascript" src="http://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/jquery-ui.min.js"></script>
48,6 → 46,7
<script type="text/javascript" src="http://resources.tela-botanica.org/bootstrap/2.3.2/js/bootstrap.min.js"></script>
 
<script type="text/javascript" src="<?=$url_base?>modules/saisie2/squelettes/js/WidgetSaisie.js"></script>
<script type="text/javascript" src="<?=$url_base?>modules/saisie2/squelettes/js/auth.js"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
116,6 → 115,8
<?php if($prod): ?>
<?php include "analytics.html"; ?>
<?php endif; ?>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
 
<body>
143,21 → 144,14
<h3><?= $aide['titre']; ?></h3>
<div id="aide-txt" class="hiden-sm-down">
<p>
Cet outil vous permet de partager simplement vos observations avec
le <a target="_blank" href="http://www.tela-botanica.org/site:accueil">réseau Tela Botanica</a>
(<a target="_blank" href="http://www.tela-botanica.org/page:licence">licence CC-BY-SA</a>).
Identifiez-vous bien pour ensuite retrouver et gérer vos données dans votre
<a target="_blank" href="http://www.tela-botanica.org/appli:cel"> Carnet en ligne</a>.
Créez jusqu'à 10 observations (avec 10Mo max d'images) puis partagez-les avec le bouton 'transmettre'.
Elles apparaissent immédiatement sur les
<a target="_blank" href="http://www.tela-botanica.org/site:botanique">cartes et galeries photos </a> du site.
<?= $aide['description']; ?>
</p>
<p class="discretion">
Pour toute question ou remarque,
<?= $aide['contact']; ?>
<a href="<?= $url_remarques ?>?service=cel&pageSource=<?php echo urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']); ?>"
target="_blank"
onclick="javascript:window.open(this.getAttribute('href'), 'Tela Botanica - Remarques', config='height=700, width=640, scrollbars=yes, resizable=yes'); return false;">
contactez-nous</a>
<?= $aide['contact2']; ?></a>
</p>
</div>
</div>
165,7 → 159,37
</div>
<div id="formulaire">
<form id="form-observateur" role="form" autocomplete="on">
<h2><?= $observateur['titre']; ?></h2>
<h2><?= $observateur['titre']; ?>
<!--la partie tb-navigation vient du widget stats http://svn.tela-botanica.net/websvn/filedetails.php?repname=eFlore%2FApplications.cel&path=%2Ftrunk%2Fwidget%2Fmodules%2Fstats%2Fsquelettes%2Fstats_utilisateur.tpl.html
la partie contenu-souce vient de http://svn.tela-botanica.net/websvn/filedetails.php?repname=Applications.reseau&path=%2Ftrunk%2Fwidget%2Fmodules%2Fnavigation%2Fsquelettes%2Fbootstrap3.tpl.php
le javascript auth.js vient de http://svn.tela-botanica.net/websvn/filedetails.php?repname=Applications.reseau&path=%2Ftrunk%2Fresources%2Fjs%2Fnavigation.js
de l'aide dans la partie Intégration dans l'interface (applications AJAX) de https://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=MemoIntegrationSSO
<div id="tb-navigation" data-courant="widget-cel-stats" data-squelette="bootstrap3" data-mode="prod">
<form class="navbar-form navbar-left">
<?php if ($utilisateur_authentifie): ?>
<button class="btn btn-default" disabled><?=$utilisateur?></button>
<a id="mode-stats" class="btn btn-success" href="?mode=defaut" data-mode-courant="utilisateur">Statistiques globales</a>
<?php else: ?>
<a id="mode-stats" class="btn btn-success" href="?mode=utilisateur" data-mode-courant="defaut">Statistiques personnelles</a>
<?php endif; ?>
</form>
</div>
<div id="contenu-source">
<!-- ici le contenu du div #tb-navigation de la page appelante -->
<!--</div>-->
<ul class="nav navbar-nav navbar-right">
<li id="bouton-connexion" class="dropdown">
<a href="<?= $authTpl; ?>">Connexion</a>
</li>
<li class="dropdown" id="utilisateur-connecte" style="display: none;">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span id="nom-complet"></span> <b class="caret"></b></a>
<ul class="dropdown-menu">
<li id="profil-utilisateur"><a href="http://www.tela-botanica.org/inscription">Mon profil</a></li>
<li id="deconnexion"><a href="http://www.tela-botanica.org/widget:reseau:auth?action=deconnexion&origine=">Déconnexion</a></li>
</ul>
</li>
</ul>
</h2>
<div id="zone-courriel" class="row align-items-center">
<div class="col-md-6 form-inline">
<label for="courriel" class="col-sm-3" title="<?= $observateur['courriel-title']; ?>">
209,14 → 233,21
<h2><?= $observation['titre']; ?></h2>
<div id="zone-observation" class="row align-items-center">
<div class="col-md-6 form-inline">
<label for="courriel" class="col-sm-3" title="<?= $observateur['courriel-title']; ?>">
<label for="geolocalisation" class="col-sm-3" title="<?= $observateur['courriel-title']; ?>">
<strong class="obligatoire">* </strong>
<?= $observation['geolocalisation']; ?>
</label>
<div class="col-sm-8 mb-2 input-group">
<span class="input-group-addon hidden-xs-down"><span class="fa fa-envelope"></span></span>
<input id="courriel" name="courriel" class="form-control" type="email" title="<?= $observateur['courriel-title']; ?> "/>
<input id="id_utilisateur" name="id_utilisateur" type="hidden"/>
<input id="geolocalisation" name="geolocalisation" type="hidden"/>
<!-- code à décommenter pour avoir un aperçu de la carte qui fonctionne sous chrome,
à remplacer quand Stéphane aura fait une release sur https://github.com/steph-del/tb-geoloc-lib/releases -->
<!-- <app-root></app-root>
<script type="text/javascript" src="modules/saisie2/squelettes/js/runtime.js"></script>
<script type="text/javascript" src="modules/saisie2/squelettes/js/polyfills.js"></script>
<script type="text/javascript" src="modules/saisie2/squelettes/js/styles.js"></script>
<script type="text/javascript" src="modules/saisie2/squelettes/js/vendor.js"></script>
<script type="text/javascript" src="modules/saisie2/squelettes/js/main.js"></script> -->
</div>
<label for="milieu" class="col-sm-3">
<?= $observation['milieu']; ?>