Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 45 → Rev 46

/trunk/interfaces/configurations/config.default.ini
51,7 → 51,12
chemin_script_log = "{ref:chemin_appli}../log.txt"
; Doit on afficher les messages de paramêtrage du serveur pour les scripts
script_message = "php:true";
; Durée de vie en seconde d'un traitement en attente
ddv_traitement_attente = 300
; Durée de vie en seconde d'un traitement en cours
ddv_traitement_en_cours = 300
 
; +------------------------------------------------------------------------------------------------------+
; Url du Jrest utilisé pour les services web fournissant les données à l'application
url_jrest = "{ref:url_base}services/"
; Nom du fichier contenant les infos sur la version courante du manuel technique
/trunk/interfaces/squelettes/css/referentiel/initialisation.css
New file
0,0 → 1,224
/*
style.css contains a reset, font normalization and some base styles.
credit is left where credit is due.
additionally, much inspiration was taken from these projects:
yui.yahooapis.com/2.8.1/build/base/base.css
camendesign.com/design/
praegnanz.de/weblog/htmlcssjs-kickstart
*/
 
/*
html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark
html5doctor.com/html-5-reset-stylesheet/
*/
 
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code,del, dfn, em, img,
ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption,
tbody, tfoot, thead, tr, th, td, article, aside, figure, footer, header, hgroup, menu, nav, section, menu, time, mark, audio,
video {
margin:0;
padding:0;
border:0;
outline:0;
font-size:100%;
vertical-align:baseline;
background:transparent;}
 
article, aside, figure, footer, header, hgroup, nav, section{
display:block;}
nav ul{
list-style:none;}
blockquote, q { quotes:none; }
 
blockquote:before, blockquote:after,
q:before, q:after { content:''; content:none; }
 
a { margin:0; padding:0; border:0; font-size:100%; vertical-align:baseline; background:transparent; }
 
ins { background-color:#ff9; color:#000; text-decoration:none; }
 
mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }
 
del { text-decoration: line-through; }
 
abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }
 
/* tables still need cellspacing="0" in the markup */
table { border-collapse:collapse; border-spacing:0; }
 
hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }
 
input, select { vertical-align:middle; }
/* END RESET CSS */
 
 
/*
fonts.css from the YUI Library: developer.yahoo.com/yui/
Please refer to developer.yahoo.com/yui/fonts/ for font sizing percentages
 
There are two custom edits:
* make the line-height relative and unit-less
* remove the pre,code styles as we use a recommendation from Eric Meyer instead
*/
body { font:13px arial,helvetica,"Nimbus Sans L", "Bitstream Vera Sans", sans-serif; *font-size:small; *font:x-small; line-height:1.22; }
 
table { font-size:inherit; font:100%; }
 
select, input, textarea { font:99% arial,helvetica,"Nimbus Sans L", "Bitstream Vera Sans", sans-serif; }
 
 
/* normalize monospace sizing
* meyerweb.com/eric/thoughts/2010/02/12/fixed-monospace-sizing/
*/
code, pre { font-family: "Courier New", monospace, serif; font-size: 1em; }
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* minimal base styles */
 
/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */
body, select, input, textarea { color:#444; }
 
/* Headers (h1,h2,etc) have no default font-size or margin,
you'll want to define those yourself. */
/* www.aestheticallyloyal.com/public/optimize-legibility/ */
h1,h2,h3,h4,h5,h6 { font-weight: bold; text-rendering: optimizeLegibility; }
 
/* maxvoltar.com/archive/-webkit-font-smoothing */
html { -webkit-font-smoothing: antialiased; }
 
/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */
a:active { outline: none; }
a:focus { outline: thin dotted; }
 
a, a:active, a:visited { color:#607890; }
a:hover { color:#036; }
 
ul { margin-left:30px; }
ol { margin-left:30px; list-style-type: decimal; }
 
small { font-size:85%; }
strong, th { font-weight: bold; }
 
td, td img { vertical-align:top; }
 
sub { vertical-align: sub; font-size: smaller; }
sup { vertical-align: super; font-size: smaller; }
 
pre {
padding: 15px;
/* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */
white-space: pre; /* CSS2 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */}
 
/* align checkboxes, radios, text inputs with their label
by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */
input[type="radio"] { vertical-align: text-bottom; }
input[type="checkbox"] { vertical-align: bottom; *vertical-align: baseline; }
.ie6 input { vertical-align: text-bottom; }
 
/* hand cursor on clickable input elements */
label, input[type=button], input[type=submit], button { cursor: pointer; }
 
/* These selection declarations have to be separate.
No text-shadow: twitter.com/miketaylr/status/12228805301
Also: hot pink. */
::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; }
::selection { background:#FF5E99; color:#fff; text-shadow: none; }
 
/* j.mp/webkit-tap-highlight-color */
a:link { -webkit-tap-highlight-color: #FF5E99; }
 
/* always force a scrollbar in non-IE */
html { overflow-y: scroll; }
 
/* make buttons play nice in IE:
www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */
button { width: auto; overflow: visible; }
/* bicubic resizing for non-native sized IMG:
code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
.ie7 img { -ms-interpolation-mode: bicubic; }
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Non-semantic helper classes */
 
/* for image replacement */
.ir { display:block; text-indent:-999px; overflow:hidden; background-repeat: none; }
 
/* Hide for both screenreaders and browsers
css-discuss.incutio.com/wiki/Screenreader_Visibility */
.hidden { display:none; visibility:hidden; }
 
/* Hide only visually, but have it available for screenreaders
www.webaim.org/techniques/css/invisiblecontent/
Solution from: j.mp/visuallyhidden - Thanks Jonathan Neal! */
.visuallyhidden { position:absolute !important;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px, 1px, 1px, 1px); }
 
/* Hide visually and from screenreaders, but maintain layout */
.invisible { visibility: hidden; }
 
/* >> The Magnificent CLEARFIX << */
.clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.clearfix { display: inline-block; }
* html .clearfix { height: 1%; } /* Hides from IE-mac \*/
.clearfix { display: block; }
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Primary Styles
Author:
*/
 
 
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Print styles : inlined to avoid required HTTP connection www.phpied.com/delay-loading-your-print-css/ */
@media print {
* { background: transparent !important; color: #444 !important; text-shadow: none; }
 
a, a:visited { color: #444 !important; text-decoration: underline; }
 
a:after { content: " (" attr(href) ")"; }
 
abbr:after { content: " (" attr(title) ")"; }
.ir a:after { content: ""; } /* Don't show links for images */
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
img { page-break-inside: avoid; }
 
@page { margin: 0.5cm; }
 
p, h2, h3 { orphans: 3; widows: 3; }
 
h2, h3{ page-break-after: avoid; }
}
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Media queries for responsive design */
 
@media all and (orientation:portrait) {
/* Style adjustments for portrait mode goes here */
}
 
@media all and (orientation:landscape) {
/* Style adjustments for landscape mode goes here */
}
 
/* Grade-A Mobile Browsers (Opera Mobile, iPhone Safari, Android Chrome)
Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */
@media screen and (max-device-width: 480px) {
/* Prevent iOS, WinMobile from adjusting font size */
html {
-webkit-text-size-adjust:none;
-ms-text-size-adjust:none;}
}
/trunk/interfaces/squelettes/css/referentiel/referentiel.css
35,18 → 35,15
background-color:transparent;
font-size:28px;
font-weight:bold;}
#zone-corps{
margin:0;
text-align:left;}
#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;
/trunk/interfaces/squelettes/form_version.tpl.html
1,7 → 1,7
<!-- REF - DEBUT VERSIONNAGE -->
<script type="text/javascript">
$(document).ready(function() {
$('#ref-dem-ok').click(function(e) {
$('#ref-versionnage-ok').click(function(e) {
var ok = false;
if (confirm('Êtes vous sûr de vouloir versionner le référentiel actuellement en cours de travail ?')) {
ok = true;
19,12 → 19,8
<?php endforeach; ?>
<?php endif; ?>
 
<div id="zone-form-version">
<form id="ref-demande-versionnage" name="ref-demande-versionnage" 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?>" />
<div id="zone-form">
<form id="ref-demande-versionnage" name="ref-demande-versionnage" action="<?=$url_form?>" method="post">
<fieldset>
<legend>Général</legend>
<ul class="liste-champs">
135,8 → 131,14
</ul>
</fieldset>
<input id="ref-versionnage-ok" type="submit" value="Versionner" />
<input id="ref-versionnage-ok" type="submit" value="1. Versionner" />
</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>
 
<h2>Versions</h2>
/trunk/interfaces/controleurs/Versionnage.php
16,7 → 16,6
const SCRIPT_A_LANCER = 'versionnage';
private $manuel = null;
private $referentiel = null;
private $traitementDao = null;
27,8 → 26,6
if (isset($_GET['ref'])) { // code du projet courrant
$this->referentiel = strtolower($_GET['ref']);
}
// Chargement des infos du manuel technique des référentiels
$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini');
// Chargement des DAO nécessaires
$this->traitementDao = new TraitementDao();
52,9 → 49,8
// Paramêtres pour l'url du formulaire
$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
$donnees['url_form'] = $this->url->getUrl();
$donnees['url_form'] = $this->obtenirUrlDemandeVersionnage($this->referentiel);
$donnees['url_module'] = 'Versionnage';
$donnees['url_action_demande'] = 'demanderTraitement';
$donnees['url_action_rafraichir'] = 'afficherInterface';
// Date de production de la version
98,6 → 94,7
$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
}
$donnees['messages'] = $this->getMessages();
$this->setSortie(self::RENDU_CORPS, $this->getVue('form_version', $donnees), false);
$this->construireMenu($this->referentiel);
$this->construireFilAriane($this->referentiel);
/trunk/interfaces/controleurs/AppliControleur.php
22,6 → 22,7
// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
protected $url = null;
private $parametres = array();
protected $manuel = null;
private $sortie = array();
private $messages = null;
32,6 → 33,8
$registre = Registre::getInstance();
$this->parametres = $registre->get('parametres');
$this->url = $this->parametres['url'];
// Chargement des infos du manuel technique des référentiels
$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini');
parent::__construct();
}
238,6 → 241,16
return $this->obtenirUrlMenu('Versionnage', $referentiel);
}
protected function obtenirUrlDemandeVersionnage($referentiel) {
$this->url->setRequete(false);
$this->url->setVariableRequete('module', 'Versionnage');
$this->url->setVariableRequete('action', 'demanderTraitement');
$this->url->setVariableRequete('ref', $referentiel);
$url = $this->url->getURL();
$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
return $url;
}
protected function obtenirUrlMenuConsultation($referentiel) {
return $this->obtenirUrlMenu('Consultation', $referentiel);
}
280,14 → 293,33
if (is_null($referentiel_code)) {
$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
} else {
$traitements_a_supprimer = null;
$traitementDao = new TraitementDao();
$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
if ($resultat_traitement_en_attente) {
$this->addMessage("Un traitement est déjà en attente...");
foreach ($resultat_traitement_en_attente as $traitement) {
$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
if ($difference > Config::get('ddv_traitement_attente')) {
$traitements_a_supprimer[] = $traitement['id_traitement'];
$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
} else {
$this->addMessage("Un traitement est déjà en attente...");
}
}
} else {
$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
if ($resultat_traitement_en_cours) {
$this->addMessage("Un traitement est déjà en cours...");
foreach ($resultat_traitement_en_cours as $traitement) {
$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
if ($difference > Config::get('ddv_traitement_en_cours')) {
$traitements_a_supprimer[] = $traitement['id_traitement'];
$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
} else {
$this->addMessage("Un traitement est déjà en cours...");
}
}
} else {
$resultat = $traitementDao->ajouterTraitement($referentiel_code, $script_nom);
if ($resultat != false) {
298,9 → 330,26
}
}
}
// Suppression des traitements posant problème
if (count($traitements_a_supprimer) > 0) {
$traitementDao->supprimer($traitements_a_supprimer);
}
}
}
private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
if (floatval(phpversion()) >= 5.3 ) {
$d1 = new DateTime($date_01);
$d2 = new DateTime($date_02);
$difference_absolue = true;
$diff = $d1->diff($d2, $difference_absolue);
$nbre_secondes = $diff->format('s');
} else {
$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02))));
}
return $nbre_secondes;
}
/**
* Lance le script d'execution des traitements
*/
309,7 → 358,8
$exe = Config::get('chemin_script');
$action = 'tout';
$log = Config::get('chemin_script_log');
$commande = "$php -d memory_limit=1073741824 -f $exe $script_nom -p $referentiel_code -a $action > $log &";
$limite_memoire = Config::get('script_limite_memoire');
$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
if ($this->verifierSafeModeOff() === false) {
$e = "Le safe_mode est actif sur ce serveur.";