Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 3225 → Rev 3226

/trunk/widget/modules/manager/squelettes/creation.tpl.html
1,9 → 1,9
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $mode; ?> de widget de saisie du CeL</title>
<title><?= $mode; ?> de widget de saisie du CeL</title>
 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
28,28 → 28,14
<!-- Favicones -->
<link rel="shortcut icon" type="image/x-icon" href="https://resources.tela-botanica.org/tb/img/16x16/favicon.ico" />
 
<!-- Jquery -->
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/1.7.1/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.17/js/jquery-ui-1.8.17.custom.min.js"></script>
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.17/js/jquery.ui.datepicker-fr.js"></script>
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/validate/1.9.0/jquery.validate.js"></script>
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/validate/1.9.0/messages_fr.js"></script>
<script type="text/javascript" src="https://www.tela-botanica.org/commun/jquery/form/2.95/jquery.form.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/bootstrap/3.1.0/js/bootstrap.min.js"></script>
 
<!-- Barre de navigation -->
<?php if ($bar !== false): ?>
<script src="<?php echo $url_script_navigation; ?>"></script>
<?php endif; ?>
 
<!-- CSS -->
<link href="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.18/css/smoothness/jquery-ui-1.8.18.custom.css" rel="stylesheet" type="text/css" media="screen">
<link rel="stylesheet" type="text/css" href="https://resources.tela-botanica.org/bootstrap/3.1.0/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="<?php echo $url_base; ?>modules/manager/squelettes/css/manager.css" media="screen">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.1/css/all.css" integrity="sha384-O8whS3fhG2OnA5Kas0Y9l3cfpmYjapjI0E4theH4iuMD+pLhbf6JI0jIMfYcK3yZ" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="https://resources.tela-botanica.org/bootstrap/3.1.0/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="<?= $url_base; ?>modules/manager/squelettes/css/manager.css" media="screen" />
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.1/css/all.css" integrity="sha384-O8whS3fhG2OnA5Kas0Y9l3cfpmYjapjI0E4theH4iuMD+pLhbf6JI0jIMfYcK3yZ" crossorigin="anonymous" />
 
<!-- Google Analytics -->
<?php if($prod): ?>
<?php if( $prod ) : ?>
<?php include "analytics.html"; ?>
<?php endif; ?>
</head>
56,11 → 42,11
 
<body>
<div id="zone-appli" class="container">
<?php if ($bar !== false): ?>
<?php if ( $bar !== false ) : ?>
<div id="tb-navigation" data-courant="widget-cel-export" data-squelette="bootstrap3" data-mode="prod"></div>
<br/>
<?php endif; ?>
<h1 id="widget-titre" class="widget-titre"><?php echo ucfirst($mode); ?> de widget de saisie du CEL</h1>
<h1 id="widget-titre" class="widget-titre"><?php echo ucfirst( $mode ); ?> de widget de saisie du CEL</h1>
<div id="register-page">
<div id="group-settings-form" class="row">
 
67,7 → 53,7
<div class="widget-blocks col-md-4">
 
<p class="message">
<?php if ($mode === 'modification') : ?>
<?php if ( $mode === 'modification' ) : ?>
Attention vous modifiez un widget déjà existant, le tag et la langue ne peuvent pas être changés.
S'il s'agit d'un projet type, en modifiant ce widget vous modifiez tous les widgets de ce type.
<?php else : ?>
76,14 → 62,14
<?php endif; ?>
</p>
 
<form action="<?php echo $url_base; ?>manager?mode=<?php echo $mode.$params; ?>" id="basic-widget-form" class="standard-form component component-text" method="post" enctype="multipart/form-data">
<form action="<?= $url_base; ?>manager?mode=<?= $mode.$params; ?>" id="basic-widget-form" class="standard-form component component-text" method="post" enctype="multipart/form-data">
<div class="register-section" id="basic-details-section">
 
<h2>Meta-données</h2>
 
<?php //var_dump($widget); ?>
<?php // var_dump($widget); ?>
<label for="projet">Projet *</label>
<input type="text" name="projet" id="projet" pattern="[a-z]+" <?php echo ($mode === 'modification') ? 'value="'.$widget['projet'].'" readonly' : 'required'; ?> title="Champ obligatoire : pas d'espace">
<input type="text" name="projet" id="projet" pattern="[a-z]+" <?= ( $mode === 'modification' ) ? 'value="' . $widget['projet'] . '" readonly' : 'required'; ?> title="Champ obligatoire : pas d'espace">
 
<label for="motscles">Autres mots-clés</label>
<input type="text" name="motscles" id="motscles" value="" />
92,23 → 78,23
<div class="select-wrapper">
<select id="type" name="type">
<option value=""> ----</option>
<?php foreach ($type as $id => $projet) : ?>
<option <?php echo (isset($widget['projet']) && $projet['projet']== $widget['projet']) ? 'selected="selected"' : ''; ?> value="<?php echo $projet['projet']; ?>"><?php echo $projet['projet']; ?></option>
<?php foreach ( $type as $id => $projet ) : ?>
<option <?php echo ( isset( $widget['projet'] ) && $projet['projet'] === $widget['projet'] ) ? 'selected="selected"' : ''; ?> value="<?= $projet['projet']; ?>"><?= $projet['projet']; ?></option>
<?php endforeach; ?>
</select>
</div>
 
<label for="est_type">Ce widget est un widget type</label>
<input type="checkbox" name="est_type" id="est_type" <?php echo (isset($widget['est_type']) && $projet['est_type']=== '1') ? 'checked="checked"' : ''; ?>>
<input type="checkbox" name="est_type" id="est_type" <?php echo ( isset( $widget['est_type'] ) && $projet['est_type'] === '1' ) ? 'checked="checked"' : ''; ?>>
 
<label for="langue">Langue</label>
<?php if ($mode === 'modification') : ?>
<input id="langue" name="langue" readonly value="<?php echo $widget['langue']; ?>">
<?php if ( $mode === 'modification' ) : ?>
<input id="langue" name="langue" readonly value="<?= $widget['langue']; ?>">
<?php else : ?>
<div class="select-wrapper">
<select id="langue" name="langue">
<?php foreach ($langues as $code => $langue) : ?>
<option value="<?php echo $code; ?>" <?php echo $code === 'fr' ? 'selected' : '';?>><?php echo $langue['nom']; ?></option>
<?php foreach ( $langues as $code => $langue ) : ?>
<option value="<?= $code; ?>" <?= ( $code === 'fr' ) ? 'selected' : '';?>><?= $langue['nom']; ?></option>
<?php endforeach; ?>
</select>
</div>
119,10 → 105,17
<div class="register-section" id="profile-details-description-section">
<h2>Description</h2>
<label for="titre">Titre</label>
<input type="text" name="titre" id="titre" value="<?php echo isset($widget['titre']) ? $widget['titre'] : ''; ?>">
<input type="text" name="titre" id="titre" value="<?php echo isset( $widget['titre'] ) ? $widget['titre'] : ''; ?>">
 
<div class="input-file-container">
<input type="file" class="input-file" name="info" id="info" value="<?= $widget['titre']; ?>" accept="image/*">
<label for="info" class="label-file"><i class="fas fa-download"></i> Image d'aide dans le titre (.jpg)</label>
</div>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>
<div class="file-return info hidden"></div>
 
<label for="description">Description</label>
<textarea name="description" id="description"><?php echo isset($widget['description']) ? $widget['description'] : ''; ?></textarea>
<textarea name="description" id="description"><?php echo isset( $widget['description'] ) ? $widget['description'] : ''; ?></textarea>
 
<div class="input-file-container">
 
132,7 → 125,7
$logo_img =
'<img id="pre-existent-logo" src="' . $logo_src . '"><br>Pour changer, télécharger un nouveau fichier.';
$logo_hidden = '';
$logo_file_name = array_reverse(explode('/', $logo_src));
$logo_file_name = array_reverse( explode( '/', $logo_src ) );
else :
$logo_src = '';
$logo_img = '';
141,24 → 134,25
endif;
?>
 
<input type="file" class="input-file" name="logo" id="logo" accept="image" value="<?php echo $logo_src; ?>">
<input type="file" class="input-file" name="logo" id="logo" accept="image/*" value="">
<label for="logo" class="label-file"><i class="fas fa-download"></i> Logo</label>
</div>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier">
<i class="fas fa-times" aria-hidden="true"></i>
</div>
<div class="file-return logo<?php echo $logo_hidden; ?>">
<?php echo $logo_file_name[0]; ?>
<?php echo $logo_img; ?>
<div class="file-return logo<?= $logo_hidden; ?>">
<?= $logo_file_name[0]; ?>
<?= $logo_img; ?>
</div>
 
 
<div class="input-file-container">
<input type="file" class="input-file" name="fond" id="fond" value="<?php echo $widget['titre']; ?>">
<input type="file" class="input-file" name="fond" id="fond" value="<?= $widget['titre']; ?>" accept="image/*">
<label for="fond" class="label-file"><i class="fas fa-download"></i> Image de fond</label>
</div>
<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>
<div class="file-return fond hidden"></div>
 
</div><!-- end #profile-details-description-section -->
 
<div class="register-section" id="profile-details-fields-section">
166,16 → 160,16
<label for="type_localisation">Type de localisation</label>
<div class="select-wrapper">
<select id="type_localisation" name="type_localisation" >
<option value="<?php echo (isset($widget['type_localisation'])) ? $widget['type_localisation'] : 'point'; ?>"><?php echo (isset($widget['type_localisation'])) ? $widget['type_localisation'] : 'point'; ?></option>
<option value="<?php echo (isset($widget['type_localisation']) && $widget['type_localisation'] == 'rue') ? 'point' : 'rue'; ?>"><?php echo (isset($widget['type_localisation']) && $widget['type_localisation'] == 'rue') ? 'point' : 'rue'; ?></option>
<option value="<?php echo ( isset( $widget['type_localisation'] ) ) ? $widget['type_localisation'] : 'point'; ?>"><?php echo ( isset( $widget['type_localisation'] ) ) ? $widget['type_localisation'] : 'point'; ?></option>
<option value="<?php echo ( isset( $widget['type_localisation'] ) && $widget['type_localisation'] === 'rue' ) ? 'point' : 'rue'; ?>"><?php echo ( isset( $widget['type_localisation'] ) && $widget['type_localisation'] === 'rue') ? 'point' : 'rue'; ?></option>
</select>
</div>
 
<label for="localisation">Zoom</label>
<input type="text" name="localisation" id="localisation" value="<?php echo isset($widget['localisation']) ? $widget['localisation'] : ''; ?>" />
<input type="text" name="localisation" id="localisation" value="<?php echo isset( $widget['localisation'] ) ? $widget['localisation'] : ''; ?>" />
 
<label for="milieux">Milieux</label>
<input type="text" name="milieux" id="milieux" value="<?php echo isset($widget['milieux']) ? $widget['milieux'] : ''; ?>">
<input type="text" name="milieux" id="milieux" value="<?php echo isset( $widget['milieux'] ) ? $widget['milieux'] : ''; ?>">
 
<label for="type_especes">Type liste espèce *</label>
<div class="select-wrapper">
188,7 → 182,7
</div>
 
<label for="referentiel">Référentiel *</label>
<input type="text" name="referentiel" id="referentiel" required pattern="([a-z]+?)*" title="Nom du référentiel ex. bdtfx" value="<?php echo isset($widget['referentiel']) ? $widget['referentiel'] : ''; ?>">
<input type="text" name="referentiel" id="referentiel" required pattern="([a-z]+?)*" title="Nom du référentiel ex. bdtfx" value="<?php echo isset( $widget['referentiel'] ) ? $widget['referentiel'] : ''; ?>">
 
<!-- Bouton fichier-type à compléter -->
<div class="input-file-container">
249,7 → 243,6
<div id="preview-title" class="col-md-8">
<h1></h1>
</div>
 
</div>
 
<div id="preview-messages" class="row">
262,6 → 255,7
</h3>
<p class="preview-description"></p>
</div>
 
</div><!-- end #preview-description -->
 
<div id="preview-aide" class="col-md-5">
279,14 → 273,13
</p>
<p class="discretion">
Pour toute question ou remarque,
<a href="https://www.tela-botanica.org/widget:reseau:remarques?service=cel&pageSource=<?php echo $url_base; ?>manager?mode=<?php echo $mode.$params; ?>" target="_blank" onclick=
"
javascript:window.open(
this.getAttribute('href'),
'Tela Botanica - Remarques',
config='height=700, width=640, scrollbars=yes, resizable=yes'
);
return false;
<a href="https://www.tela-botanica.org/widget:reseau:remarques?service=cel&pageSource=<?= $url_base; ?>manager?mode=<?php echo $mode . $params; ?>" 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>
</p>
</div>
376,7 → 369,7
<label for="certitude" class="" title="">
<i class="fa fa-question"></i> Certitude *
</label>
<div class="date select-wrapper add-field-select" id="datetimepicker">
<div class="select-wrapper add-field-select">
<select id="certitude" name="certitude" required>
<option value="">-</option>
</select>
394,8 → 387,6
</div>
</form>
 
<div id="image" class="row align-items-center"></div>
 
</div><!-- end #preview-formulaire -->
 
</div><!-- end #widget-renderer-->
421,6 → 412,25
</div>
</div>
</div>
<script type="text/javascript" src="<?php echo $url_base; ?>modules/manager/squelettes/js/manager.js"></script>
<!-- Jquery -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/1.11.1/jquery-1.11.1.min.js"></script>
 
<!-- Jquery UI : nécessaire pour le minicalendrier et l'auto-complétion -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/jquery-ui.min.js"></script>
<!-- <script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/datepicker-fr.js"></script> -->
<!-- Jquery Plugins -->
<!-- Jquery Validate : nécessaire pour la validation des formulaires -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/jquery.validate.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/additional-methods.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/messages_fr.js"></script>
<!-- Jquery Form :nécessaire pour l'upload des images -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js"></script>
<!-- Bootstrap -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script type="text/javascript" src="<?= $url_base; ?>modules/manager/squelettes/js/manager.js"></script>
<!-- Barre de navigation -->
<?php if ( $bar !== false ) : ?>
<script src="<?= $url_script_navigation; ?>"></script>
<?php endif; ?>
</body>
</html>
/trunk/widget/modules/manager/squelettes/img/images_projets/testimages/logo.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/widget/modules/manager/squelettes/img/images_projets/testimages/logo.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/widget/modules/manager/squelettes/js/manager.js
25,17 → 25,22
// Affiche un retour visuel dès que input:file change
$fileInput.change( function( event ) {
// Il est possible de supprimer un fichier
// donc on vérifie que le 'change' est un ajout ou modification
// donc on vérifie que le 'change' est un ajout ou modificationis-defaut-value
if( !$.isEmptyObject( event.target.files[0] ) ) {
var file = event.target.files[0],
$theReturn = $( '.' + $( this ).attr( 'id' ) );
$theReturn = $( '.' + $( this ).attr( 'id' ) );
// Affichage du nom du fichier
$theReturn.text( file.name );
// Si le fichier est une image on l'affiche
if( file.type.match( 'image' ) ) {
if( file.type.match( 'image/*' ) ) {
// Chemin temporaire de l'image et affichage
var tmppath = URL.createObjectURL( file );
$theReturn.removeClass( 'hidden' ).append( '<img src="' + tmppath + '" width="50%">' );
} else {
$theReturn.removeClass( 'hidden' ).append( '<p>Le fichier doit être au format image (jpg, png, etc.)</p>' );
// lib : https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js
$( this ).clearInputs();
console.log(file);
}
}
});
42,9 → 47,10
// Annuler le téléchargement
$( '.remove-file' ).click( function() {
var $thisFileInput = $( this ).prev( '.input-file-container' ).find( '.input-file' );
$thisFileInput.wrap( '<form>' ).closest( 'form' ).get(0).reset();
// lib : https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js
$thisFileInput.clearInputs();
$thisFileInput.triggerHandler( 'change' );
$thisFileInput.unwrap();
// $thisFileInput.unwrap();
$( this ).next( '.file-return' ).addClass( 'hidden' ).empty();
});
}
54,7 → 60,7
// On écoute le click sur une list-checkbox ('.selectBox')
// à tout moment de son insertion dans le dom
$( '#zone-appli' ).on( 'click' , '.selectBox' , function() {
$( '.checkboxes[data-id="' + $(this).attr( 'data-id' ) + '"]' ).toggleClass( 'hidden' );
$( '.checkboxes[data-id="' + $(this).data( 'id' ) + '"]' ).toggleClass( 'hidden' );
});
}
 
106,12 → 112,13
'<label for="field-key" title="Nom du champ dans la base de données">'+
'Clé du champ *'+
'</label>'+
'<input type="text" name="field-key" data-id="' + fieldIndex + '" class="field-key" placeholder="Clé du champ" Pattern="[A-Z][A-Za-z]+" title="Clé Unique en Camelcase, pas d\'accents pas de caractères spéciaux." required>'+
'<input type="text" name="field-key" data-id="' + fieldIndex + '" class="field-key" placeholder="Clé du champ" Pattern="^(?:[a-z]+(?:(?:[A-Z][a-z]+)+)?|[a-z]+(?:(?:-[a-z]+)+)?)$" title="Clé Unique en Camelcase ou minuscule séparés par tirets, pas d\'accents pas de caractères spéciaux." required>'+
'<p class="message">' +
'<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i> '+
'Une clé doit être unique<br>' +
'En camelCase (ecriture chameau)<br>'+
'Pas d\'accents ou de cédille, pas de caractères spéciaux.' +
'En "camelCase" (ecriture chameau)<br>'+
'Ou en minuscule avec tirets ("-") si nécessaire<br>'+
'Pas d\'espaces, aucuns caractères spéciaux (accents, cédilles, etc.).' +
'</p>' +
// Type de champ
'<label for="field-element" title="Quel type de champ">Type de champ *</label>'+
125,7 → 132,6
'<option value="list-checkbox">Liste de cases à cocher</option>'+
'<option value="radio">Boutons radio</option>'+
'<option value="date">Calendrier</option>'+
'<option value="file">Téléchargement</option>'+
'<option value="range">Curseur (entre 2 bornes)</option>'+
'<option value="number">Nombre</option>'+
'</select>'+
139,10 → 145,10
// Tooltip
'<label for="field-description" title="Ajoutez une info-bulle">Info-bulle</label>'+
'<input type="text" name="field-description" data-id="' + fieldIndex + '" class="field-description" placeholder="Quelques mots">'+
// Import d'une image ou d'un pdf d'aide à afficher en popup
// Import d'une image d'aide à afficher en popup
'<div class="input-file-container">'+
'<input type="file" class="input-file field-help" name="field-help" data-id="' + fieldIndex + '" id="help-doc-' + fieldIndex + '" accept="application/pdf, image/*, video/*">'+
'<label for="field-help" class="label-file"><i class="fas fa-download"></i> Popup aide image/pdf</label>'+
'<input type="file" class="input-file field-help" name="field-help' + fieldIndex + '" data-id="' + fieldIndex + '" id="help-doc-' + fieldIndex + '" accept="image/*">'+
'<label for="field-help' + fieldIndex + '" class="label-file"><i class="fas fa-download"></i> Popup aide image (.jpg)</label>'+
'</div>'+
'<div class="remove-file button" name="remove-file" data-id="' + fieldIndex + '" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>'+
'<div class="file-return help-doc-' + fieldIndex + ' hidden"></div>'+
163,10 → 169,10
}
 
// Supprimer un nouveau champ
function onClickRemoveField ( keyFlag , nameFlag ) {
function onClickRemoveField () {
$( '.remove-field' ).click( function() {
$(this).closest('fieldset').hide( 200 , function () {
$(this).remove();
$( this ).closest('fieldset').hide( 200 , function () {
$( this ).remove();
});
});
}
190,14 → 196,11
// Si on hésite on qu'on se trompe dans la liste :
// les champs de détails de l'option précédente doivent être supprimés
$( '.field-details[data-id="' + fieldIndex + '"]' ).hide( 200 , function () {
$(this).remove();
$( this ).remove();
});
 
// Html de recueil de données en fonction de l'élément choisi
switch( $( this ).val() ) {
case 'file':
break;
 
case 'number':
case 'range':
displayFieldDetailsCollect(
314,8 → 317,6
'</div>'+
'</div>'
).hide().show( 200);
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
onInputListValueLabelEnableDefaultCheckbox( valueIndex );
// Une seule valeur par défaut pour select et radio
onClickDefaultValueRemoveOthers( fieldIndex );
// Supprimer une valeur
324,12 → 325,13
}
 
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
function onInputListValueLabelEnableDefaultCheckbox( valueIndex ) {
$( '.new-value[data-list-value-id="' + valueIndex + '"] .list-value' ).on( 'input' , function() {
if( $(this).val() !== '' ) {
$( '.is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).removeAttr( 'disabled');
function onInputListValueLabelEnableDefaultCheckbox() {
$( '#new-fields' ).on( 'input' , '.list-value' , function() {
var thisValue = $( this ).parent( '.new-value' );
if( '' !== $( this ).val() ) {
$( '.is-defaut-value', thisValue ).removeAttr( 'disabled' );
} else {
$( '.is-defaut-value[data-list-value-id="' + valueIndex + '"]' ).attr( 'disabled', true ).removeAttr( 'checked' );
$( '.is-defaut-value', thisValue ).attr( 'disabled', true ).removeAttr( 'checked' );
}
});
}
351,8 → 353,8
// Bouton supprimer une valeur
function onClickRemoveListValue( fieldIndex ) {
$( '.remove-value.button[data-id="' + fieldIndex + '"]' ).click( function() {
$( '.new-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' ).hide( 200 , function () {
$(this).remove();
$( '.new-value[data-list-value-id="' + $( this ).data( 'list-value-id' ) + '"]' ).hide( 200 , function () {
$( this ).remove();
});
});
}
484,8 → 486,8
// Le champ est signalé en rouge
$( this ).addClass( 'invalid' );
// Un message d'alerte apparait après le champ
if( 0 === $( this).next( '.validation-warning' ).length ) {
$( this).after(
if( 0 === $( this ).next( '.validation-warning' ).length ) {
$( this ).after(
'<p class="validation-warning message">' +
'<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>' +
'&nbsp;Ce champ est requis' +
496,7 → 498,7
// Le champ est signalé en rouge
$( this ).removeClass( 'invalid' );
// Le message d'alerte du champ est supprimé
if( 0 < $( this).next( '.validation-warning' ).length ) {
if( 0 < $( this ).next( '.validation-warning' ).length ) {
$( this ).next( '.validation-warning' ).hide( 200 , function () {
$( this ).remove();
});
532,7 → 534,7
function onClickStoreNewFields() {
// Lorsqu'on valide
var resultArrayIndex = 0;
var count = $( 'fieldset' ).last().attr('data-id');
var count = $( 'fieldset' ).last().data( 'id' );
var helpFileExists = false;
// Savoir si au moins un fichier "aide" est enregistré
$( '.field-help' ).each( function () {
543,10 → 545,10
// dans ce cas intégrer dans le formulaire à soumettre un bloc
// qui contiendra une copie de chacun de ces input[type="file"]
if( helpFileExists ){
$('#submit-button').before( '<div id="help-doc-submit" class="hidden"></div>' );
$( '#submit-button' ).before( '<div id="help-doc-submit" style="position:fixed;visibility:hidden;"></div>' );
}
// On déroule les blocs de champs supplémentaires
for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
for( var index = $( 'fieldset' ).first().data( 'id' ) ; index <= count ; index++ ) {
var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
// Certains indices peuvent correspondre à un champ supprimé
if( 0 < $( thisFieldset ).length ) {
569,14 → 571,14
// Collecte les des données dépendantes de l'élément choisi
// sous forme d'un tableau de resultats
onSelectCollectDataValuesToSubmit( datasToSubmit[ resultArrayIndex ] , thisFieldset );
if( $.isEmptyObject(datasToSubmit[ resultArrayIndex ].fieldValues) ){
 
if( $.isEmptyObject( datasToSubmit[ resultArrayIndex ].fieldValues ) ){
delete datasToSubmit[ resultArrayIndex ].fieldValues;
}
// Copie d'un champ de fichier d'aide dans le bloc d'envoi
if( '' !== $( '.field-help' , thisFieldset ).val() ) {
$( '.field-help' , thisFieldset ).clone()
.attr( 'id' , datasToSubmit[ resultArrayIndex ].key )// l'id prend la valeur de la clé
.css( 'position' , 'static' )// Retrouver facilement le bloc dans la page
.attr( 'name' , 'help-' + datasToSubmit[ resultArrayIndex ].key )// l'attribut name prend la valeur de la clé
.appendTo( '#help-doc-submit' );
}
resultArrayIndex++;
583,13 → 585,14
}
}
var resultsArrayJson = JSON.stringify( datasToSubmit );
console.log(resultsArrayJson);
// Désactivation de tous les champs et boutons (nouveaux champs)
$( '#new-fields, #new-fields .button , #add-fields , #preview-field' ).addClass( 'disabled' );
$( '#validate-new-fields' ).addClass( 'validated' );
$( '.validate-new-fields' ).text( 'Champs validés' );
// Mise à disposition des données pour le bouron submit
$('#submit-button').before(
'<input type="hidden" name="champs-supp" id="champs-supp" value=\'' + resultsArrayJson + '\'>'
$( '#submit-button' ).before(
'<input type="hidden" name="champs-supp" id="champs-supp" value="' + resultsArrayJson + '">'
);
}
 
597,8 → 600,6
// pour les données dépendant de l'élément choisi
function onSelectCollectDataValuesToSubmit( datasToSubmitObject , thisFieldset ) {
switch( datasToSubmitObject.element ) {
// case 'file' :
// Rien à faire, pas de détails à transmettre
case 'select':
case 'checkbox':
case 'list-checkbox':
607,7 → 608,7
// Ajout des valeurs de liste
onChangeStoreListValueLabel( datasToSubmitObject , thisFieldset );
// S'il y a une valeur 'autre' on l'indique à la fin de la liste
if( $('.option-other-value' , thisFieldset ).attr( 'checked' ) && datasToSubmitObject.fieldValues.listValue.indexOf( 'other' ) === -1 ) {
if( $( '.option-other-value' , thisFieldset ).attr( 'checked' ) && -1 === datasToSubmitObject.fieldValues.listValue.indexOf( 'other' ) ) {
datasToSubmitObject.fieldValues.listValue.push( 'other' );
}
break;
652,7 → 653,7
 
if( $( this ).val() ){
// Is-default-value non cochée
if( !$( '.is-defaut-value[data-list-value-id="' + $( this ).attr( 'data-list-value-id' ) + '"]' , thisFieldset ).attr( 'checked' ) ) {
if( !$( '.is-defaut-value[data-list-value-id="' + $( this ).data( 'list-value-id' ) + '"]' , thisFieldset ).attr( 'checked' ) ) {
datasToSubmitObject.fieldValues.listValue.push( $( this ).val() );
// Is-default-value cochée pour select/radio
} else if( 'select' === selectedFieldElement || 'radio' === selectedFieldElement ) {
674,16 → 675,16
// Prévisualisation
function DisplayClassicFields() {
// Affichage du titre du widget
renderFields( $('#titre') , $( '.widget-renderer h1' ) );
renderFields( $( '#titre' ) , $( '.widget-renderer h1' ) );
// Affichage du nom du projet
renderFields( $('#projet') , $( '.projet-description' ));
renderFields( $( '#projet' ) , $( '.projet-description' ));
// Affichage de la description
renderFields( $('#description') , $( '.preview-description' ) );
renderFields( $( '#description' ) , $( '.preview-description' ) );
// Affichage du logo s'il existe déjà
if( 0 !== $('#logo').val().length || $('#logo')[0].defaultValue ) {
if( 0 !== $( '#logo' ).val().length || $( '#logo' )[0].defaultValue ) {
$( '#preview-logo' ).append(
'<img src="' +
$( '#group-settings-form .logo img' ).prop('src') +
$( '#group-settings-form .logo img' ).prop( 'src' ) +
'" width="75%"' +
'>'
);
716,7 → 717,7
// Affichage des infos dès que disponibles
// pour les champs classiques
function renderFields( $source , $taget ) {
if($source.val()) {
if( $source.val() ) {
$taget.text( $source.val() );
}
$source.change( function () {
1079,54 → 1080,6
commonFieldsHtml.helpButton;
break;
 
case 'file' :
// Ouvrir l'attribut class (suppression de '"')
commonFieldsHtml.fieldInput.classAttr = commonFieldsHtml.fieldInput.classAttr.slice(0, -1);
commonFieldsHtml.fieldInput.classAttr += ' input-file"';
// Class du label
commonFieldsHtml.fieldLabel.classAttr = ' class="label-file"';
// Type de fichiers acceptés
commonFieldsHtml.fieldInput.otherAttr += ' accept="application/pdf, image/*, video/*"';
 
fieldHtml =
// Classe 'and-help'
'<div class="input-file-container' + commonFieldsHtml.helpClass + '">' +
'<input' +
// Type
commonFieldsHtml.fieldInput.typeAttr +
// Name
commonFieldsHtml.fieldInput.nameAttr +
// DataId
commonFieldsHtml.dataIdAttr +
// Class
commonFieldsHtml.fieldInput.classAttr +
// Info-bulle
commonFieldsHtml.titleAttr +
// Placeholder
commonFieldsHtml.fieldInput.placeholderAttr +
// Required
commonFieldsHtml.fieldInput.mandatoryAttr +
// Autres attributs
commonFieldsHtml.fieldInput.otherAttr +
'>' +
'<label' +
// For
commonFieldsHtml.fieldLabel.forAttr +
// Class
commonFieldsHtml.fieldLabel.classAttr +
// Info-bulle
commonFieldsHtml.titleAttr +
'><i class="fas fa-download"></i> ' +
// Nom du champ
commonFieldsHtml.fieldLabel.labelContent +
'</label>' +
'</div>' +
// Bouton supprimer le fichier
'<div class="remove-file button" name="remove-file" title="Supprimer le fichier"><i class="fas fa-times" aria-hidden="true"></i></div>' +
// Bouton 'help'
commonFieldsHtml.helpButton;
break;
 
case 'textarea':
// Classe 'and-help'
commonFieldsHtml.fieldLabel.classAttr = ' class="' + commonFieldsHtml.helpClass + '"';
1356,7 → 1309,7
// Booléen "default"
isDefault : $( this ).find( '.is-defaut-value').is( ':checked' ),
// Indice de l'option
optionIndex : $( this ).attr('data-list-value-id')
optionIndex : $( this ).data( 'list-value-id')
});
});
return options;
1428,7 → 1381,7
 
// Prévisualisation des nouveaux champs
function newFieldsPreview() {
var count = $( 'fieldset' ).last().attr('data-id');
var count = $( 'fieldset' ).last().data( 'id' );
// Si on a déjà prévisualisé on efface tout pour recommencer
if( 0 < $( '.preview-fields' ).length ) {
$( '.preview-fields' ).each( function () {
1443,7 → 1396,7
);
}
// Parcourir tous les blocs d'infos de champs supplémentaires
for( var index = $( 'fieldset' ).first().attr('data-id') ; index <= count ; index++ ) {
for( var index = $( 'fieldset' ).first().data( 'id' ) ; index <= count ; index++ ) {
var thisFieldset = $( 'fieldset[data-id="' + index + '"]');
// Certains indices peuvent correspondre à un champ supprimé
if( 0 < $( thisFieldset ).length ) {
1467,7 → 1420,7
// https://getbootstrap.com/docs/3.3/javascript/#modals
function previewFieldHelpModal() {
$( '#zone-supp' ).on( 'click' , '.help-button' , function ( event ) {
var index = $( this ).closest( '.preview-fields' ).attr( 'data-id' ),
var index = $( this ).closest( '.preview-fields' ).data( 'id' ),
thisFieldset = $( '.new-field[data-id="' + index + '"]' ),
file = $( '.field-help' , thisFieldset )[0].files[0],
tmppath = URL.createObjectURL( file );
1474,10 → 1427,10
// Titre
$( '#help-modal-label' ).text( 'Aide pour : ' + $( '.field-name' , thisFieldset ).val() );
// Contenu
if( file.type.match( 'image' ) ) {
if( file.type.match( 'image/*' ) ) {
$( '#print_content' ).append( '<img src="' + tmppath + '" style="max-width:100%">' );
} else if( file.type.match( 'pdf' ) ) {
$( '#print_content' ).append( '<iframe src="' + tmppath + '" width="100%" height="650" align="middle" scrolling="no" frameborder="0"></iframe>' );
} else {
$( '#print_content' ).append( '<p>Erreur : le fichier n\'est pas une image</p>' );
}
// Sortie avec la touche escape
$( '#help-modal' ).modal( { keyboard : true } );
1522,8 → 1475,10
inputFile();
// Affichage des List-checkbox
inputListCheckbox();
// Activer la checkbox de valeur par default uniquement si une valeur est entrée
onInputListValueLabelEnableDefaultCheckbox();
// Affichage des Range
inputRangeDisplayNumber()
inputRangeDisplayNumber();
// Modale "aide"
previewFieldHelpModal();
});
/trunk/widget/modules/manager/Manager.php
22,158 → 22,423
*/
class Manager extends WidgetCommun {
 
const DS = DIRECTORY_SEPARATOR;
const SERVICE_DEFAUT = 'manager';
private $cel_url_tpl = null;
/** Si spécifié, on ajoute une barre de navigation inter-applications */
private $bar;
//private $parametres_autorises = array('projet', 'type', 'langue', 'order');
private $parametres_autorises = array(
'projet' => 'projet',
'type' => 'type',
'langue' => 'langue',
'order' => 'order'
);
/**
* Méthode appelée par défaut pour charger ce widget.
*/
public function executer() {
$retour = null;
// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
unset($this->parametres['callback']);
extract($this->parametres);
$this->bar = (isset($bar)) ? $bar : false;
const DS = DIRECTORY_SEPARATOR;
const SERVICE_DEFAUT = 'manager';
private $cel_url_tpl = null;
/** Si spécifié, on ajoute une barre de navigation inter-applications */
private $bar;
//private $parametres_autorises = array('projet', 'type', 'langue', 'order');
private $parametres_autorises = array(
'projet' => 'projet',
'type' => 'type',
'langue' => 'langue',
'order' => 'order'
);
/**
* Méthode appelée par défaut pour charger ce widget.
*/
public function executer() {
$retour = null;
 
if (!isset($mode)) {
$mode = self::SERVICE_DEFAUT;
}
// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
unset( $this->parametres['callback'] );
extract( $this->parametres );
$this->bar = ( isset( $bar ) ) ? $bar : false;
 
$this->cel_url_tpl = $this->config['manager']['celUrlTpl'];
if ($_POST != array()) { //print_r($_POST);
$this->parametres['projet'] = $_POST['projet'];
$this->parametres['langue'] = $_POST['langue'];
if ($mode == 'modification') {
$parametres = $this->traiterParametresModif();
$json = $this->getDao()->modifier($this->cel_url_tpl, $parametres);
} else {
$json = $this->getDao()->ajouter($this->cel_url_tpl, $_POST);
$this->parametres['mode'] = $mode = 'modification';
}
}
$framework = dirname( __FILE__ ) . '/framework.php';
 
if ( !file_exists( $framework ) ) {
 
$e = 'Veuillez paramêtrer l\'emplacement et la version du Framework dans le fichier $framework';
trigger_error( $e, E_USER_ERROR );
} else {
 
// Inclusion du Framework
require_once $framework;
// Ajout d'information concernant cette application
Framework::setCheminAppli( __FILE__ );// Obligatoire
Framework::setInfoAppli( Config::get( 'info' ) );// Optionnel
}
 
$methode = $this->traiterNomMethodeExecuter($mode);
if (method_exists($this, $methode)) {
$retour = $this->$methode();
} else {
$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
}
$contenu = '';
if (is_null($retour)) {
$this->messages[] = 'La ressource demandée a retourné une valeur nulle.';
} else {
if (isset($retour['donnees'])) {
$retour['donnees']['params'] = '&projet='.$_POST['projet'].
'&langue='.$_POST['langue'];
$retour['donnees']['prod'] = ($this->config['parametres']['modeServeur'] == "prod");
$retour['donnees']['bar'] = $this->bar;
$retour['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], '');
$retour['donnees']['mode'] = $mode; //print_r($retour);
$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html';
$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
} else {
$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
}
}
$this->envoyer($contenu);
}
if ( !isset( $mode ) ) {
 
private function executerManager() {
$params = array();
$retour['squelette'] = 'manager';
foreach ($this->parametres_autorises as $id=>$pa) {
if (isset($this->parametres[$pa])) {
$params[] = $pa."=".$this->parametres[$pa];
}
}
$param = implode($params, '&');
$url = $this->cel_url_tpl;
if ($param != "") $url .= '?'.$param;
$json = $this->getDao()->consulter($url);
$retour['donnees']['widget'] = (array) json_decode($json, true);
$retour['donnees']['widgetUrlTpl'] = $this->config['manager']['widgetUrlTpl'];
return $retour;
}
$mode = self::SERVICE_DEFAUT;
}
 
private function executerCreation() {
//https://api.tela-botanica.org/service:cel:NomsChampsEtendus/cle
$retour['squelette'] ='creation';
$jsonlangue = $this->getDao()->consulter($this->config['manager']['languesUrl']);
$tableaulangue = (array) json_decode($jsonlangue, true);
$retour['donnees']['langues'] = $tableaulangue['resultat'] ;
$retour['donnees']['widget'] = array();
if (isset($this->parametres['projet'])) {
$url = $this->cel_url_tpl.'?projet='.$this->parametres['projet'];
$json = $this->getDao()->consulter($url);
$tableau = (array) json_decode($json, true);
$retour['donnees']['widget'] = $tableau[0];
$this->cel_url_tpl = $this->config['manager']['celUrlTpl'];
 
}
$urltype = $this->cel_url_tpl.'?esttype=1';
$jsontype = $this->getDao()->consulter($urltype);
$tableautype= (array) json_decode($jsontype, true);
$retour['donnees']['type'] = $tableautype;
return $retour;
}
if ( $_POST !== array() ) { //print_r($_POST);
 
$this->parametres['projet'] = $_POST['projet'];
$this->parametres['langue'] = $_POST['langue'];
 
if ( $mode === 'modification' ) {
 
private function executerModification() {
$retour = array();
if (isset($this->parametres['projet'])) {
$retour['squelette'] = 'creation';
$url = $this->cel_url_tpl.'?projet='.$this->parametres['projet'].'&langue='.$this->parametres['langue'];
$json = $this->getDao()->consulter($url);
$tableau = (array) json_decode($json, true);
$retour['donnees']['widget'] = $tableau[0];
$urltype = $this->cel_url_tpl.'?esttype=1';
$jsontype = $this->getDao()->consulter($urltype);
$tableautype= (array) json_decode($jsontype, true);
$retour['donnees']['type'] = $tableautype;
}//print_r($retour['donnees']);
return $retour;
}
private function traiterParametres() {
$parametres_flux = '?';
$criteres = array('utilisateur', 'commune', 'dept', 'taxon', 'commentaire', 'date', 'tag', 'motcle', 'projet', 'num_taxon', 'num_nom', 'referentiel', 'groupe_zones_geo');
foreach($this->parametres as $nom_critere => $valeur_critere) {
if (in_array($nom_critere, $criteres)) {
$valeur_critere = str_replace(' ', '%20', $valeur_critere);
$parametres_flux .= $nom_critere.'='.$valeur_critere.'&';
}
}
$parametres = $this->traiterParametresModif();
$json = $this->getDao()->modifier( $this->cel_url_tpl, $parametres );
} else {
 
if ($parametres_flux == '?') {
$parametres_flux = '';
} else {
$parametres_flux = rtrim($parametres_flux, '&');
}
return $parametres_flux;
$donnees = array_merge( $_POST, $this->traiterDonneesFiles() );
$json = $this->getDao()->ajouter( $this->cel_url_tpl, $donnees );
$mode = $this->parametres['mode'] = 'modification';
}
}
 
 
 
 
$methode = $this->traiterNomMethodeExecuter( $mode );
if ( method_exists( $this, $methode ) ) {
 
$retour = $this->$methode();
} else {
 
$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
}
 
$contenu = '';
if ( is_null( $retour ) ) {
$this->messages[] = 'La ressource demandée a retourné une valeur nulle.';
 
} else {
 
if ( isset( $retour['donnees'] ) ) {
 
$retour['donnees']['params'] = '&projet=' . $_POST['projet'] . '&langue=' . $_POST['langue'];
$retour['donnees']['prod'] = ( $this->config['parametres']['modeServeur'] === 'prod' );
$retour['donnees']['bar'] = $this->bar;
$retour['donnees']['url_base'] = sprintf( $this->config['chemins']['baseURLAbsoluDyn'], '' );
 
$retour['donnees']['mode'] = $mode; //print_r($retour);
$squelette = dirname( __FILE__ ) . self::DS . 'squelettes' . self::DS . $retour['squelette'] . '.tpl.html';
$contenu = $this->traiterSquelettePhp( $squelette, $retour['donnees'] );
} else {
 
$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
}
}
$this->envoyer($contenu);
}
 
private function executerManager() {
$params = array();
$retour['squelette'] = 'manager';
 
foreach ( $this->parametres_autorises as $id => $pa ) {
if ( isset( $this->parametres[$pa] ) ) {
 
$params[] = $pa . '=' . $this->parametres[$pa];
}
}
 
$param = implode( $params, '&' );
$url = $this->cel_url_tpl;
 
if ( $param !== '' ) {
 
$url .= '?' . $param;
}
 
$json = $this->getDao()->consulter( $url );
$retour['donnees']['widget'] = (array) json_decode( $json, true );
$retour['donnees']['widgetUrlTpl'] = $this->config['manager']['widgetUrlTpl'];
 
return $retour;
}
 
private function executerCreation() {
//https://api.tela-botanica.org/service:cel:NomsChampsEtendus/cle
$jsonlangue = $this->getDao()->consulter( $this->config['manager']['languesUrl'] );
$tableaulangue = (array) json_decode( $jsonlangue, true );
$retour['squelette'] = 'creation';
$retour['donnees']['langues'] = $tableaulangue['resultat'] ;
$retour['donnees']['widget'] = array();
 
if ( isset( $this->parametres['projet'] ) ) {
 
$url = $this->cel_url_tpl . '?projet=' . $this->parametres['projet'];
$json = $this->getDao()->consulter( $url );
$tableau = (array) json_decode( $json, true );
$retour['donnees']['widget'] = $tableau[0];
}
 
$urltype = $this->cel_url_tpl . '?esttype=1';
$jsontype = $this->getDao()->consulter( $urltype );
$tableautype = (array) json_decode( $jsontype, true );
$retour['donnees']['type'] = $tableautype;
 
return $retour;
}
 
 
 
private function executerModification() {
$retour = array();
if ( isset( $this->parametres['projet'] ) ) {
 
$url = $this->cel_url_tpl . '?projet=' . $this->parametres['projet'] . '&langue=' . $this->parametres['langue'];
$json = $this->getDao()->consulter( $url );
$tableau = (array) json_decode( $json, true );
$retour['squelette'] = 'creation';
$retour['donnees']['widget'] = $tableau[0];
 
$urltype = $this->cel_url_tpl .'?esttype=1';
$jsontype = $this->getDao()->consulter( $urltype );
$tableautype = (array) json_decode( $jsontype, true );
$retour['donnees']['type'] = $tableautype;
}//print_r($retour['donnees']);
 
return $retour;
}
private function traiterParametres() {
$parametres_flux = '?';
$criteres = array( 'utilisateur', 'commune', 'dept', 'taxon', 'commentaire', 'date', 'tag', 'motcle', 'projet', 'num_taxon', 'num_nom', 'referentiel', 'groupe_zones_geo' );
 
foreach( $this->parametres as $nom_critere => $valeur_critere ) {
if ( in_array( $nom_critere, $criteres ) ) {
 
$valeur_critere = str_replace( ' ', '%20', $valeur_critere );
$parametres_flux .= $nom_critere . '=' . $valeur_critere . '&';
}
}
 
$parametres_flux = ( $parametres_flux === '?' ) ? '' : rtrim( $parametres_flux, '&' );
 
return $parametres_flux;
}
 
private function traiterParametresModif() {
$parametres_modif = array();
 
foreach ( $_POST as $id => $parametres ) {
if ($parametres !== '' ) {
 
$parametres_modif[$id] = $parametres;
}
}
 
return $parametres_modif;
}
 
private function traiterDonneesFiles() {
$files_descriptions = array(
'info',
'logo',
'fond'
);
$return = array();
$dossier_url = dirname(__FILE__) . '/squelettes/img/images_projets/' . $_POST['projet'] . '/';
$transmettre_donnees = false;
 
foreach ( array_keys( $_FILES ) as $file ) {
if ( $_FILES[$file]['name'] !== '' ) {
 
$transmettre_donnees = true;
$is_help_file = strstr( $file, 'help-');
 
if ( $file === 'especes' ) {
 
$return['especes']['name'] = 'especes.csv';
$return['especes']['type'] = $_FILES['especes']['type'];
} elseif ( in_array( $file, $files_descriptions ) ) {
 
$return['images_description'][$file]['type'] = $_FILES[$file]['type'];
$return['images_description'][$file]['name'] = $file . strrchr( $_FILES[$file]['name'], '.' );
 
} elseif ( $is_help_file ) {
 
$real_file_key = str_replace( 'help-', '', $file );
$return['images_aide'][$real_file_key]['type'] = $_FILES[$file]['type'];
$return['images_aide'][$real_file_key]['name'] = $real_file_key . strrchr( $_FILES[$file]['name'], '.' );
}
}
}
if ( $transmettre_donnees ) {
if( !is_dir( $dossier_url ) ) {
 
private function traiterParametresModif() {
$parametres_modif = array();
foreach ($_POST as $id => $parametres) {
if ($parametres != "") {
$parametres_modif[$id] = $parametres;
}
}
return $parametres_modif;
}
mkdir( $dossier_url, 0755 );
}
 
if ( count( $return['especes'] ) > 0 ) {
$this->televerser( 'especes', $return['especes']['name'], $dossier_url );
}
 
foreach ( array_keys( $return['images_description'] ) as $file ) {
$this->televerser( $file, $return['images_description'][ $file ]['name'], $dossier_url );
}
 
foreach ( array_keys( $return['images_aide'] ) as $file ) {
$this->televerser( 'help-' . $file, $return['images_aide'][ $file ]['name'], $dossier_url );
}
 
 
}
 
return $return;
}
 
private function televerser( $file, $new_file_name, $dossier_url ) {
 
$fichier = $new_file_name;
$taille_maxi = 5242880;
$taille = filesize( $_FILES[$file]['tmp_name'] );
$extension = strrchr( $_FILES[$file]['name'], '.' );
$extensions = array( '.png', '.gif', '.jpg', '.jpeg', '.csv' );
 
//Début des vérifications de sécurité...
if ( file_exists( $dossier_url . $new_file_name ) ) {
if ( $_POST['mode'] === 'modification' ) {
 
// Le fichier existe déjà, c'est normal si on est en mode modification
unlink ( $dossier_url . $new_file_name );
} else {
 
$erreur =
"<p class=\"message\" style=\"background-color: #f9e2d7;border-color: #eca27e;color: #9c4217;fill: #9c4217;border: 0.1rem solid;border-radius: 0.4rem;padding: 0.5rem; display: inline-block;margin: 1rem\"> Echec du téléchargement : ".
"Un fichier image pour \"" . str_replace( $extension, '', $new_file_name ) . "\", dans un projet \"" . $_POST['projet'] . "\".</p>";
}
}
 
if ( !in_array( $extension, $extensions ) ) {
 
//Si le format n'est pas bon
$erreur = '<p class="message" style="background-color: #f9e2d7;border-color: #eca27e;color: #9c4217;fill: #9c4217;border: 0.1rem solid;border-radius: 0.4rem;padding: 0.5rem; display: inline-block;margin: 1rem"> Echec du téléchargement, formats acceptés : png, gif, jpg, jpeg, ou csv</p>';
}
 
if ( $taille > $taille_maxi ) {
 
$erreur = '<p class="message" style="background-color: #f9e2d7;border-color: #eca27e;color: #9c4217;fill: #9c4217;border: 0.1rem solid;border-radius: 0.4rem;padding: 0.5rem; display: inline-block;margin: 1rem"> Echec du téléchargement : Max 5Mo</p>';
}
 
if ( !isset( $erreur ) ) {
 
// Formatage du nom du fichier
$fichier = $this->remove_accents( $fichier );
$fichier = preg_replace( '/([^.a-z0-9]+)/i', '-', $fichier );
 
//////////// C'est ici que ça merde à priori ///////////////////////////////////////////////////
var_dump($dossier_url . $fichier);
if ( move_uploaded_file( $_FILES[$file]['tmp_name'], $dossier_url . $fichier ) ) {
// move_uploaded_file() renvoie false si l'upload a échoué
 
echo 'Téléchargement effectué avec succès';
} else {
 
echo '<p class="message" style="background-color: #f9e2d7;border-color: #eca27e;color: #9c4217;fill: #9c4217;border: 0.1rem solid;border-radius: 0.4rem;padding: 0.5rem; display: inline-block;margin: 1rem"> Echec du téléchargement</p>';
}
} else {
 
echo $erreur;
}
}
 
private function remove_accents( $string ) {
if ( !preg_match( '/[\x80-\xff]/' , $string ) ) {
 
return $string;
}
 
$chars = array(
// Decompositions for Latin-1 Supplement
chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
chr(195).chr(191) => 'y',
// Decompositions for Latin Extended-A
chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
chr(197).chr(190) => 'z', chr(197).chr(191) => 's'
);
 
$string = strtr( $string, $chars );
 
return $string;
}
 
}
?>
 
/trunk/widget/modules/manager/config.defaut.ini
3,4 → 3,7
autoload = "bibliotheque/;bibliotheque/xml_feed_parser/1.0.4/;bibliotheque/xml_feed_parser/1.0.4/parsers/"
; Squelette d'url pour accéder à la fiche eFlore
celUrlTpl = "http://localhost/service:cel:CelWidgetManager/Widget"
languesUrl = "http://localhost/service:eflore:0.1/iso-639-1/langues"
languesUrl = "http://api-test.tela-botanica.org/service:eflore:0.1/iso-639-1/langues"
widgetUrlTpl = "http://localhost/widget:cel:manager"
; Chemin de base des fichiers liés (images, pdf, csv, etc.)
dossierTmp = "https://beta.tela-botanica.org/tmp/widget_saisie/"