Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 44 → Rev 45

/trunk/interfaces/index.php
27,7 → 27,7
<style type="text/css" media="screen">
<!--
@import "http://www.tela-botanica.org/sites/commun/fr/styles/commun_complexe.css";
@import "http://www.tela-botanica.org/sites/parlons_bota/fr/styles/parlons_bota.css";
@import "http://www.tela-botanica.org/sites/atelier/fr/styles/atelier.css";
-->
</style>
 
41,27 → 41,31
<script type="text/javascript" src="interfaces/squelettes/js/jquery-ui-1.8.2.custom.min.js"></script>
</head>
<body xml:lang="fr" lang="fr">
<div id="reducteur">
<div id="zone-centrale">
 
<div id="logo_tela">
<div id="zone-logo">
<a href="/referentiel/" title="Retour à l'accueil du site">
<img src="http://www.tela-botanica.org/sites/reseau/generique/images/graphisme/logo_jaune.gif" alt="le logo de Tela Botanica"/>
</a>
</div>
<div id="bandeau">
<div id="bandeau_contenu">
<div id="titre_monde">
<div id="zone-entete">
<div id="zone-entete-contenu">
<div id="zone-titre-site">
<h1>Referentiels</h1>
</div>
</div>
</div>
<div id="droite">
<div id="onglets">
<?php echo Referentiel::getContenuNavigation(); ?>
<div id="zone-corps">
<div id="zone-navigation">
<?php echo Referentiel::getContenuMenu(); ?>
</div>
<div id="contenu">
<div id="zone-corps-contenu">
<div id="zone-fil-ariane">
<p>Vous êtes ici&nbsp;:</p>
<?php echo Referentiel::getContenuNavigation(); ?>
</div>
<div id="entete">
<?php echo Referentiel::getContenuTete(); ?>
</div>
76,15 → 80,10
<?php echo Referentiel::getChrono(); ?>
<?php echo Referentiel::getExceptions(); ?>
</div>
<div id="pied">
<div id="zone-pied">
<p> &copy;<a href="http://www.tela-botanica.org/" accesskey="1">Tela Botanica</a> / 2000-<?=date('Y')?> - Le réseau des Botanistes Francophones</p>
</div>
</div>
<div id="nav_gauche">
<?php echo Referentiel::getContenuMenu(); ?>
</div>
</div>
</div>
</body>
</html>
/trunk/interfaces/squelettes/form_traitement.tpl.html
File deleted
\ No newline at end of file
/trunk/interfaces/squelettes/test.tpl.html
File deleted
\ No newline at end of file
/trunk/interfaces/squelettes/resultat.tpl.html
16,12 → 16,12
<?php if (isset($resultat)) : ?>
<h2>Description</h2>
<p class="description"><?=$resultat['description']?></p>
 
<h2>Résultat</h2>
<p class="resultat <?=$resultat['resultat'] ? 'ok' : 'ko';?>"><?=$resultat['resultat'] ? 'ok' : 'ko';?></p>
<h2>Description</h2>
<p class="description"><?=$resultat['description']?></p>
<h2>Messages du test</h2>
<?php if (isset($resultat['message'])) : ?>
<div class="message"><?=$resultat['message']?></div>
/trunk/interfaces/squelettes/menu.tpl.html
1,6 → 1,4
<!-- REF - DEBUT MENU -->
<h1>Menu</h1>
 
<?php if (isset($menus)) : ?>
<ul>
<?php foreach ($menus as $menu) : ?>
/trunk/interfaces/squelettes/accueil.tpl.html
1,6 → 1,6
<!-- REF - DEBUT ACCUEIL -->
<h1>Liste des référentiels en cours de travail</h1>
 
<p>Veuillez sélectionner un référentiel ci-dessous pour accéder aux différentes applications disponibles.</p>
<?php if (isset($messages)) : ?>
<h2>Messages</h2>
<?php foreach ($messages as $message) : ?>
/trunk/interfaces/squelettes/form_tests.tpl.html
New file
0,0 → 1,88
<!-- REF - DEBUT TEST -->
<script type="text/javascript">
$(document).ready(function() {
$('#ref-dem-ok').click(function(e) {
var ok = false;
if (confirm('Êtes vous sûr de vouloir lancer de nouveaux tests ?')) {
ok = true;
}
return ok;
});
});
</script>
<h1>Tests du référentiel «&nbsp;<?=$ref;?>&nbsp;»</h1>
 
<h2>Demande de tests</h2>
<?php if (isset($ref)) : ?>
<div id="zone-form">
<form id="ref-demande-traitement" name="ref-demande-traitement" action="<?=$url_form;?>" method="get">
<input name="module" type="hidden" value="<?=$url_module;?>" />
<input name="action" type="hidden" value="<?=$url_action_demande;?>" />
<input name="ref" type="hidden" value="<?=$ref;?>" />
<input id="ref-dem-ok" type="submit" value="1. Lancer les tests" />
</form>
<form id="ref-rafraichir" name="ref-rafraichir" action="<?=$url_form;?>" method="get">
<input name="module" type="hidden" value="<?=$url_module;?>" />
<input name="action" type="hidden" value="<?=$url_action_rafraichir;?>" />
<input name="ref" type="hidden" value="<?=$ref;?>" />
<input id="ref-raf-ok" type="submit" value="2. Rafraichir" />
</form>
</div>
<?php endif; ?>
 
<?php if (isset($messages)) : ?>
<h2>Messages</h2>
<?php foreach ($messages as $message) : ?>
<p class="information"><?=$message;?></p>
<?php endforeach; ?>
<?php endif; ?>
 
<h2>Tests</h2>
<table>
<caption>Traitements <?=strftime('à %H:%M:%S le %d %B %Y')?></caption>
<thead>
<tr>
<th>Nom (#)</th>
<th>État</th>
<th>Date début</th>
<th>Date fin</th>
<th>Durée</th>
</tr>
</thead>
<tbody>
<?php if (isset($traitements_en_attente)) : ?>
<?php foreach ($traitements_en_attente as $traitement) : ?>
<tr>
<td><?=$traitement['nom']?> <span class="discretion">(id:<?=$traitement['id_traitement']?>)</span></a></td>
<td class="traitement-attente">En attente de traitement...</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
<?php if (isset($traitements_en_cours)) : ?>
<?php foreach ($traitements_en_cours as $traitement) : ?>
<tr>
<td><?=$traitement['nom']?> <span class="discretion">(id:<?=$traitement['id_traitement']?>)</span></a></td>
<td class="traitement-cours">En cours de traitement...</td>
<td><?=$traitement['date_debut']?></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
<?php if (isset($traitements_termines)) : ?>
<?php foreach ($traitements_termines as $traitement) : ?>
<tr>
<td><a href="<?=$traitement['url']?>"><?=$traitement['nom']?> <span class="discretion">(id:<?=$traitement['id_traitement']?>)</span></a></td>
<td class="traitement-termine">Terminé</td>
<td><?=$traitement['date_debut']?></td>
<td><?=$traitement['date_fin']?></td>
<td><?=$traitement['duree']?></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
<!-- REF - FIN TEST -->
/trunk/interfaces/squelettes/css/referentiel/referentiel.css
1,5 → 1,125
@CHARSET "UTF-8";
/*--------------------------------------------------------------------------------------------------------------*/
/* Générique */
table {
border:1px solid #36560B;
border-collapse: collapse;}
td, th {
border:1px solid #36560B;
padding:5px;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Disposition */
#zone-centrale {
text-align:center;
}
#zone-logo{
left:18px;
margin:7px 10px;
position:absolute;
top:2px;
z-index:1;}
#zone-entete{
height:120px;
margin:0;
background:url("http://www.tela-botanica.org/sites/atelier/generique/images/graphisme/bandeau_atelier_fond.png") repeat-x scroll 0 0 transparent;}
#zone-entete-contenu{
height:120px;
background:url("http://www.tela-botanica.org/sites/atelier/generique/images/graphisme/bandeau_atelier.jpg") no-repeat scroll 0 0 transparent;}
#zone-titre-site{
height:38px;
margin:0;
text-align:right;}
#zone-titre-site h1{
margin:0 20px 0 0;
padding:0;
background-color:transparent;
font-size:28px;
font-weight:bold;}
#zone-navigation{
position:relative;
float:left;
z-index:2;
text-align:left;
font-weight:bold;}
#zone-corps{
position:relative;
margin:0;
text-align:left;}
#zone-corps-contenu{
position:relative;
clear:both;
min-height:300px;
padding:0 2px;
text-align:justify;}
#zone-fil-ariane{
}
#zone-pied{
}
/*--------------------------------------------------------------------------------------------------------------*/
/* Fil d'ariane */
#zone-fil-ariane{
padding:10px 5px;}
#zone-fil-ariane p{
font-weight:bold;
float:left;
margin:0;
padding-right:5px;}
.fil-ariane{
list-style-type:none;
margin:0;
padding:0;}
.fil-ariane li{
float:left;
margin:0;
padding:0;}
.fil-ariane li:before{
content: " > ";}
.fil-ariane a{
padding:0 5px;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Navigation onglets */
#zone-navigation ul {
margin:0;
padding:0;
list-style:none;}
#zone-navigation li {
float:left;
margin:0;
padding:0;
background:url(http://www.tela-botanica.org/sites/commun/generique/images/graphisme/norm_right_both.gif) no-repeat right top;}
#zone-navigation a {
float:left; /* ligne ajoutee pour compatibilite IE5-Mac */
display:block;
background:url("http://www.tela-botanica.org/sites/commun/generique/images/graphisme/norm_left_both.gif") no-repeat left top;
width:.1em;
white-space:nowrap;/*2 lignes ajoutees pour compatibilite IE : extension de la zone cliquable a l'ensemble de l'onglet*/
padding:5px 15px 4px;
text-decoration:none;}
/* On retablit le float a sa valeur correct mais le hack de l'antislash commente cache cette regle a IE5-Mac \*/
#zone-navigation a {float:none;}
/* End IE5-Mac hack */
#zone-navigation > ul a {
width:auto;} /*propriete ajoutee pour contredire la ligne speciale IE (ci dessus) pour les autres navigateurs*/
#zone-navigation li:hover {
background-position:100% -150px;}
#zone-navigation li:hover a {
background-position:0% -150px;}
#zone-navigation .menu_inactif {
border-bottom:1px solid;}
#zone-navigation .menu_actif, #zone-navigation .onglet_actif {
position:relative;
background-position:100% -150px;
padding-bottom:2px;
z-index:3;
font-weight:bold;}
#zone-navigation .menu_actif a, #zone-navigation .onglet_actif a {
position:relative;
background-position:0% -150px;
padding-bottom:3px;
z-index:4;}
 
/*--------------------------------------------------------------------------------------------------------------*/
/* Général */
.discretion{
color:#A9A9A9;
31,10 → 151,17
margin:0 !important;}
.liste-champs li{
padding:2px;}
 
/*--------------------------------------------------------------------------------------------------------------*/
/* Demande de traitements */
#zone-form form{
display:inline;}
#zone-form input {
margin:5px;}
.traitement-attente{
background-color:#F16158;}
.traitement-cours{
background-color:#FCCB54;}
.traitement-termine{
background-color:#BBEFA5;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Traitement */
#resultats {
/trunk/interfaces/controleurs/Test.php
46,6 → 46,7
*/
public function afficherInterface() {
$donnees = array();
$this->definirCommeModulePrincipal(get_class($this));
$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
$donnees['url_form'] = $this->url->getUrl();
$donnees['url_module'] = 'Test';
/trunk/interfaces/controleurs/Versionnage.php
48,6 → 48,7
*/
public function afficherInterface() {
$donnees = array();
$this->definirCommeModulePrincipal(get_class($this));
// Paramêtres pour l'url du formulaire
$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
/trunk/interfaces/controleurs/AppliControleur.php
143,6 → 143,19
$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
return $txt;
}
protected function initialiserModulePrincipal() {
$_SESSION['module_principal'] = null;
}
protected function definirCommeModulePrincipal($module_nom) {
$_SESSION['module_principal'] = $module_nom;
}
 
private function getModulePrincipalCourant() {
return $_SESSION['module_principal'];
}
/**
* Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
*
180,10 → 193,10
$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
$donnees['entrees'][] = $entree;
$module = Referentiel::getModule();
if ($module != 'Accueil') {
$entree['nom'] = $module;
$entree['url'] = $this->obtenirUrlMenu($module, $referentiel);
$module_principal = $this->getModulePrincipalCourant();
if (isset($module_principal)) {
$entree['nom'] = $module_principal;
$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
$donnees['entrees'][] = $entree;
}
/trunk/interfaces/controleurs/Consultation.php
31,6 → 31,7
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
$this->definirCommeModulePrincipal(get_class($this));
$this->construireMenu($this->referentiel);
$this->construireFilAriane($this->referentiel);
$this->setSortie(self::RENDU_CORPS, '<p>En cours de réalisation...</p>', false);
/trunk/interfaces/controleurs/Referentiel.php
47,7 → 47,7
public static function initialiser() {
self::verifierCreationInstance();
self::gererSession();
if (isset($_GET['module'])) {
self::$parametres['module'] = $_GET['module'];
}
/trunk/interfaces/controleurs/Accueil.php
43,6 → 43,7
*/
public function afficherAccueil() {
$donnees = array();
$this->initialiserModulePrincipal();
$infos = $this->referentielDao->getReferentielsDispo();
if ($infos != false) {
67,6 → 68,7
*/
public function afficherDetail() {
$donnees = array();
$this->initialiserModulePrincipal();
// Traitement de l'info sur le code du référentiel
if (isset($this->referentiel)) {
/trunk/services/modules/Traitement.php
76,20 → 76,19
* Retourne les infos sur la dernière demande de traitement pour un projet donné.
*/
public function getElementDerniereDemande($params_url) {
$p = $this->traiterParametresUrl(array('projet'), $params_url);
$p = $this->traiterParametresUrl(array('projet', 'script'), $params_url);
extract($p);
$donnees = false;
if (!is_null($projet)) {
if (isset($projet) && isset($script)) {
$requete = ($this->distinct ? 'SELECT DISTINCT' : 'SELECT').' * '.
'FROM ref_traitement '.
"WHERE referentiel_code = $projet ".
" AND script = $script ".
' AND date_fin IS NULL '.
'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'meta_date_creation DESC').' '.
'LIMIT 0,1 ';
$this->debug[] = $requete;
// Récupération des résultats
try {
$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
102,7 → 101,8
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
}
} else {
$this->messages[] = "Veuillez préciser le nom de code du projet comme premier paramêtre (ex. : bdnff).";
$this->messages[] = "Veuillez préciser le nom de code du projet comme premier paramêtre (ex. : bdnff) ".
"et le code du script à lancer comme second paramêtre (ex. : tests ou versionnage).";
}
return $donnees;
184,15 → 184,16
* Retourne les id des demandes de traitements obsolètes.
*/
public function getElementObsolete($params_url) {
$p = $this->traiterParametresUrl(array('projet'), $params_url);
$p = $this->traiterParametresUrl(array('projet', 'script'), $params_url);
extract($p);
$sortie = false;
if (!is_null($projet)) {
$sortie = null;
if (isset($projet) && isset($script)) {
try {
$requete = 'SELECT MAX(date_debut) '.
'FROM ref_traitement '.
"WHERE referentiel_code = $projet ".
" AND script = $script ".
' AND date_debut IS NOT NULL '.
'GROUP BY referentiel_code ';
204,6 → 205,7
$requete = 'SELECT id_traitement '.
'FROM ref_traitement '.
"WHERE referentiel_code = $projet ".
" AND script = $script ".
' AND date_debut IS NULL '.
' AND date_fin IS NULL '.
" AND meta_date_creation < $date_max ";
216,7 → 218,7
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
}
// Pos-traitement
$sortie = array();
 
if ($donnees != false) {
foreach ($donnees as $donnee) {
$sortie[] = $donnee['id_traitement'];
223,7 → 225,8
}
}
} else {
$this->messages[] = "Veuillez préciser le nom de code du projet comme premier paramêtre (ex. : bdnff).";
$this->messages[] = "Veuillez préciser le nom de code du projet comme premier paramêtre (ex. : bdnff) ".
"et le code du script à lancer comme second paramêtre (ex. : tests ou versionnage).";
}
return $sortie;
/trunk/scripts/modules/tests/Tests.php
1228,7 → 1228,10
private function testerTailleDesChamps($colonnes, $analyses) {
$info = array('nom' => 'Structure -> champs tronqués',
'description' => "Vérifie que les données de type texte insérées dans la table n'ont pas été tronquées lors de leur insertion.",
'description' => "Vérifie que le risque éventuel que des données de type texte insérées ".
"dans la table aient pu être tronquées lors de leur insertion.\n".
"Un résultat de type KO ne signifie pas forcément un problème à résoudre mais attire l'attention du coordinateur ".
"sur un problème éventuel.",
'resultat' => false);
$tailles_champs_maxi = array();
/trunk/configurations/referentiel_v2.1.ini
4,8 → 4,8
champs = "num_nom,num_nom_retenu,num_tax_sup,rang,nom_complet,nom_supra_generique,genre,epithete_infra_generique,epithete_sp,type_epithete,epithete_infra_sp,cultivar_groupe,cultivar,nom_commercial,auteur,annee,biblio_origine,notes,nom_addendum,homonyme,basionyme,synonyme_proparte,synonyme_douteux,synonyme_mal_applique,synonyme_orthographique,biblio_statut,hybride_parent_01,hybride_parent_01_notes,hybride_parent_02,hybride_parent_02_notes,nom_francais,presence,statut_origine,statut_introduction,statut_culture"
; Noms et types des champs
champs_type = "num_nom=INT,
num_nom_retenu=INT,
num_tax_sup=INT,
num_nom_retenu=VARCHAR,
num_tax_sup=VARCHAR,
rang=INT,
nom_complet=VARCHAR,
nom_supra_generique=VARCHAR,
18,20 → 18,20
cultivar=VARCHAR,
nom_commercial=VARCHAR,
auteur=VARCHAR,
annee=INT,
annee=VARCHAR,
biblio_origine=VARCHAR,
notes=TEXT,
nom_addendum=VARCHAR,
homonyme=INT,
basionyme=INT,
homonyme=VARCHAR,
basionyme=VARCHAR,
synonyme_proparte=VARCHAR,
synonyme_douteux=BOOL,
synonyme_mal_applique=BOOL,
synonyme_orthographique=INT,
synonyme_douteux=VARCHAR,
synonyme_mal_applique=VARCHAR,
synonyme_orthographique=VARCHAR,
biblio_statut=TEXT,
hybride_parent_01=INT,
hybride_parent_01=VARCHAR,
hybride_parent_01_notes=TEXT,
hybride_parent_02=INT,
hybride_parent_02=VARCHAR,
hybride_parent_02_notes=TEXT,
nom_francais=VARCHAR,
presence=VARCHAR,
/trunk/bibliotheque/dao/TraitementDao.php
40,6 → 40,7
* Retourne l'ensemble des traitements en attente.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur les traitements en attente ou false en cas d'échec.
*/
public function getTraitementsEnAttente($code_projet, $script) {
54,6 → 55,7
* Retourne l'ensemble des traitements en cours.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur les traitements en cours ou false en cas d'échec.
*/
public function getTraitementsEnCours($code_projet, $script) {
68,10 → 70,11
* Retourne les ids de l'ensemble des traitements obsolètes.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les ids des traitements obsolètes ou false en cas d'échec.
*/
public function getTraitementsObsoletes($code_projet) {
$url = $this->url."/Obsolete/$code_projet";
public function getTraitementsObsoletes($code_projet, $script) {
$url = $this->url."/Obsolete/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
82,10 → 85,11
* Retourne le dernier traitement demandé et non traité pour un projet donné.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur le dernier traitement demandé et non traité ou false en cas d'échec.
*/
public function getDernierTraitement($code_projet) {
$url = $this->url."/DerniereDemande/$code_projet";
public function getDernierTraitement($code_projet, $script) {
$url = $this->url."/DerniereDemande/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
96,6 → 100,7
* Retourne l'ensemble des traitements terminés.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur les traitements terminés ou false en cas d'échec.
*/
public function getTraitementsTermines($code_projet, $script) {
110,6 → 115,7
* Ajoute une demande de traitement pour une référentiel donné.
*
* @param string le code du référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed l'id du traitement ou false en cas d'échec.
*/
public function ajouterTraitement($code_projet, $script) {