1.
<?php
2.
3.
/*
4.
5.
Formulaire d'édition pour la table : depot.
6.
7.
07/03/2021 10:45
8.
9.
lvardon@laposte.net - 2021
10.
11.
Licence libre
12.
13.
*/
14.
15.
include_once "dbconnect.php";
16.
include_once "phpdb/class_depot.php";
17.
include_once "phpdb/class_depot_ext.php";
18.
19.
if (isset($_REQUEST['a_id_value'])) $id=$_REQUEST['a_id_value'];
20.
else
21.
if (isset($_REQUEST['id'])) $id=$_REQUEST['id'];
22.
else die("Erreur : _REQUEST['id'] est manquant.");
23.
24.
if (isset($_REQUEST['offset']))
25.
$offset=$_REQUEST['offset'];
26.
else
27.
$offset = '';
28.
29.
$userUiMessage="";
30.
31.
// Class instance
32.
$mydepot = new depot( $db );
33.
34.
35.
// Traitement des fichiers télédéposés
36.
37.
if ( isset($_REQUEST['a_icon_deletebefore']) && file_exists($_REQUEST["a_icon"])) {
38.
unlink($_REQUEST['a_icon']);
39.
$_REQUEST['a_icon'] = '';
40.
}
41.
if(isset($_FILES['a_icon']) && $_FILES['a_icon']['name'] != '' ){
42.
43.
$errors= array();
44.
$file_name = $_FILES['a_icon']['name'];
45.
$file_size = $_FILES['a_icon']['size'];
46.
$file_tmp = $_FILES['a_icon']['tmp_name'];
47.
$file_type = $_FILES['a_icon']['type'];
48.
$file_ext=strtolower(end(explode('.',$_FILES['a_icon']['name'])));
49.
50.
$extensions= array( 'jpeg', 'jpg', 'png' );
51.
52.
if(in_array($file_ext,$extensions)=== false){
53.
$errors[]="Extensions autorisées : 'jpeg', 'jpg', 'png'.";
54.
}
55.
56.
if($file_size > 2097152 ) {
57.
$errors[]='Taille maximum fichier : 2097152 octets.';
58.
}
59.
60.
if(empty($errors)==true) {
61.
$dest_dir="documents/icons/";
62.
63.
if ( file_exists($_REQUEST['a_icon'] ) ) {
64.
$userUiMessage='<div class="editmessageError">Le fichier existe déjà : '.$_REQUEST["a_icon"].'</div>';
65.
}
66.
else {
67.
move_uploaded_file($file_tmp,$dest_dir.$file_name);
68.
$_REQUEST['a_icon']= $dest_dir.$file_name; // Database url doc update
69.
$userUiMessage .= '<div class="editmessageInfo">Fichier déposé : '.$dest_dir.$file_name.'</div>';
70.
}
71.
}else{
72.
$userUiMessage .= '<div class="editmessageError">';
73.
$userUiMessage .= 'Erreur upload :';
74.
foreach ($errors as $verr) {
75.
$userUiMessage .= $verr.'<br>';
76.
}
77.
$userUiMessage .= '</div>';
78.
}
79.
}
80.
81.
82.
$sqlError = false;
83.
84.
// Sauvegarde
85.
if(isset($_POST['submitSave']))
86.
{
87.
if ($id > 0) {
88.
$results = $mydepot->update(
89.
$_REQUEST["a_id"],
90.
$_REQUEST["a_name"],
91.
$_REQUEST["a_code"],
92.
$_REQUEST["a_description"],
93.
$_REQUEST["a_icon"],
94.
$_REQUEST["a_url"],
95.
$_REQUEST["a_adress_1"],
96.
$_REQUEST["a_adress_2"],
97.
$_REQUEST["a_city"],
98.
$_REQUEST["a_zip"],
99.
$_REQUEST["a_country"] );
100.
101.
if ($results === false) {
102.
$userUiMessage .= '<div class="editmessageError">Erreur sauvegarde (id='.$id.') :'.$mydepot->lasterror.'</div>';
103.
$sqlError = true;
104.
}
105.
else
106.
$userUiMessage .= '<div class="editmessageInfo">Sauvegarde effectuée (id='.$id.')</div>';
107.
}
108.
else
109.
{
110.
$results = $mydepot->insert(
111.
$_REQUEST["a_name"],
112.
$_REQUEST["a_code"],
113.
$_REQUEST["a_description"],
114.
$_REQUEST["a_icon"],
115.
$_REQUEST["a_url"],
116.
$_REQUEST["a_adress_1"],
117.
$_REQUEST["a_adress_2"],
118.
$_REQUEST["a_city"],
119.
$_REQUEST["a_zip"],
120.
$_REQUEST["a_country"] );
121.
echo '<div class="editmessage">';
122.
if ($results === false) {
123.
$userUiMessage .= '<div class="editmessageError">Erreur de création :'.$mydepot->lasterror.'</div>';
124.
$sqlError = true;
125.
}
126.
else {
127.
$id=$mydepot->lastInsertId;
128.
$userUiMessage .= '<div class="editmessageInfo">Création effectuée (id='.$id.')</div>';
129.
}
130.
}
131.
}
132.
133.
// Suppression
134.
if(isset($_POST['submitDelete']))
135.
{
136.
if ($id > 0) {
137.
$results = $mydepot->delete( $id );
138.
139.
if ($results === false) {
140.
$userUiMessage .= '<div class="editmessageError">Erreur Suppression (id='.$id.') :'.$mydepot->lasterror.'</div>';
141.
$sqlError = true;
142.
}
143.
else {
144.
$userUiMessage .= '<div class="editmessageInfo">Suppression effectuée (id='.$id.')</div>';
145.
$id = -1;
146.
}
147.
148.
}
149.
}
150.
151.
// Select reccord by id :
152.
if ($sqlError === false ) {
153.
154.
if ( isset($_POST['submitSave']) || isset($_POST['submitDelete']) )
155.
$results = $mydepot->select( $id );
156.
else {
157.
switch ($offset) {
158.
case '_PREV':
159.
$results = $mydepot->selectPrev( $id );
160.
$id = $results[0]['a.id'];
161.
break;
162.
case '_NEXT':
163.
$results = $mydepot->selectNext( $id );
164.
$id = $results[0]['a.id'];
165.
break;
166.
default:
167.
$results = $mydepot->select( $id );
168.
break;
169.
}
170.
}
171.
172.
if ($results === false) {
173.
$userUiMessage .= '<div class="editmessageError">Erreur Sql : '.$mydepot->lasterror.'</div>';
174.
$sqlError = true;
175.
}
176.
/*if ( empty($results) ) {
177.
$userUiMessage .= '<div class="editmessageInfo">Cet enregistrement n\'existe plus. id = '.$id.' </div>';
178.
$sqlError = true;
179.
}
180.
*/
181.
}
182.
else {
183.
$results[0]["a.id"] = $_REQUEST['a_id'];
184.
$results[0]["a.code"] = $_REQUEST['a_code'];
185.
$results[0]["a.name"] = $_REQUEST['a_name'];
186.
$results[0]["a.description"] = $_REQUEST['a_description'];
187.
$results[0]["a.url"] = $_REQUEST['a_url'];
188.
$results[0]["a.adress_1"] = $_REQUEST['a_adress_1'];
189.
$results[0]["a.adress_2"] = $_REQUEST['a_adress_2'];
190.
$results[0]["a.city"] = $_REQUEST['a_city'];
191.
$results[0]["a.zip"] = $_REQUEST['a_zip'];
192.
$results[0]["a.country"] = $_REQUEST['a_country'];
193.
$results[0]["a.icon"] = $_REQUEST['a_icon'];
194.
195.
}
196.
197.
$recordcount = $mydepot->getCount();
198.
199.
echo '<div class="formtable">';
200.
201.
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https')
202.
=== FALSE ? 'http' : 'https';
203.
$host = $_SERVER['HTTP_HOST'];
204.
$script = $_SERVER['SCRIPT_NAME'];
205.
$params = $_SERVER['QUERY_STRING'];
206.
207.
$currentUrl = $protocol . '://' . $host . $script . '?' . $params;
208.
209.
// xxx fix enctype
210.
echo '<form id="editform" class="formedit pure-form pure-form-aligned" method="post" action="'.$currentUrl.'" enctype="multipart/form-data" >';
211.
212.
echo '<fieldset>';
213.
214.
echo '<legend style="display:inline-block" class="titleedit"><span title="Liste des dépôts pour les sources" class="titleedit">Dépot</span> #'.($id==-1?'?':$id).'/'.$recordcount['count'];
215.
216.
echo '<div style="font-size:80%; float:right; display:inline-block;">'.$userUiMessage.'</div>';
217.
218.
echo '</legend>';
219.
?>
220.
221.
<input type="hidden" readonly name="a.id.value" value="<?php echo $results[0]["a.id"]; ?>" >
222.
223.
<div class="pure-control-group"><label for="aligned-name">id</label>
224.
<input type="{{edithidden}}" readonly name="a.id" value="<?php echo $results[0]["a.id"]; ?>"
225.
style="width:3em;" ><span class="pure-form-message-inline"></span>
226.
</div>
227.
228.
<div class="pure-control-group"><label title="Code, identifiant du dépôt" for="aligned-name">Code</label>
229.
230.
231.
232.
233.
<input type="color" name="a.code" id="a_code"
234.
value="<?php if ( $results[0]["a.code"] !='') echo $results[0]["a.code"]; else echo ''; ?>"
235.
style="padding: 3px; margin:0; height:2.5em; width:3em;"
236.
237.
>
238.
<div style="display:inline-block; color:red"> </div>
239.
240.
241.
242.
<span class="pure-form-message-inline"></span>
243.
244.
</div>
245.
246.
<div class="pure-control-group"><label title="Nom du dépôt" for="aligned-name">Nom du dépôt</label>
247.
248.
249.
250.
251.
<input type="text" class="" name="a.name" id="a_name"
252.
value="<?php if ( $results[0]["a.name"] !='') echo $results[0]["a.name"]; else echo ''; ?>"
253.
style="width:30em;"
254.
>
255.
<div style="display:inline-block; color:red">*</div>
256.
257.
258.
259.
<span class="pure-form-message-inline"></span>
260.
261.
</div>
262.
263.
<div class="pure-control-group"><label title="Description" for="aligned-name">Decription</label>
264.
265.
266.
267.
268.
<textarea text rows="4" cols="40" name="a.description" rows="4" cols="30" ><?php if ( $results[0]["a.description"] !='') echo $results[0]["a.description"]; else echo ''; ?></textarea>
269.
270.
271.
<span class="pure-form-message-inline"></span>
272.
273.
</div>
274.
275.
<div class="pure-control-group"><label title="Adresse web du dépôt" for="aligned-name">Url</label>
276.
277.
278.
279.
280.
<input type="text" class="" name="a.url" id="a_url"
281.
value="<?php if ( $results[0]["a.url"] !='') echo $results[0]["a.url"]; else echo ''; ?>"
282.
style="width:30em;"
283.
>
284.
<div style="display:inline-block; color:red"> </div>
285.
<a href="<?php if ( $results[0]["a.url"] !='') echo $results[0]["a.url"]; else echo ''; ?>" target="_blank" " >Ouvrir</a>
286.
287.
288.
289.
<span class="pure-form-message-inline"></span>
290.
291.
</div>
292.
293.
<div class="pure-control-group"><label title="Adresse du dépôt" for="aligned-name">adresse</label>
294.
295.
296.
297.
298.
<input type="text" class="" name="a.adress_1" id="a_adress_1"
299.
value="<?php if ( $results[0]["a.adress_1"] !='') echo $results[0]["a.adress_1"]; else echo ''; ?>"
300.
style="width:30em;"
301.
>
302.
<div style="display:inline-block; color:red"> </div>
303.
304.
305.
306.
<span class="pure-form-message-inline"></span>
307.
308.
</div>
309.
310.
<div class="pure-control-group"><label title="Seconde ligne de l adresse du dépôt" for="aligned-name">adresse (suite)</label>
311.
312.
313.
314.
315.
<input type="text" class="" name="a.adress_2" id="a_adress_2"
316.
value="<?php if ( $results[0]["a.adress_2"] !='') echo $results[0]["a.adress_2"]; else echo ''; ?>"
317.
style="width:30em;"
318.
>
319.
<div style="display:inline-block; color:red"> </div>
320.
321.
322.
323.
<span class="pure-form-message-inline"></span>
324.
325.
</div>
326.
327.
<div class="pure-control-group"><label title="Ville" for="aligned-name">Ville</label>
328.
329.
330.
331.
332.
<input type="text" class="" name="a.city" id="a_city"
333.
value="<?php if ( $results[0]["a.city"] !='') echo $results[0]["a.city"]; else echo ''; ?>"
334.
style="width:30em;"
335.
>
336.
<div style="display:inline-block; color:red"> </div>
337.
338.
339.
340.
<span class="pure-form-message-inline"></span>
341.
342.
</div>
343.
344.
<div class="pure-control-group"><label title="Code Postal" for="aligned-name">Code Postal</label>
345.
346.
347.
348.
349.
<input type="text" class="" name="a.zip" id="a_zip"
350.
value="<?php if ( $results[0]["a.zip"] !='') echo $results[0]["a.zip"]; else echo ''; ?>"
351.
style="width:30em;"
352.
>
353.
<div style="display:inline-block; color:red"> </div>
354.
355.
356.
357.
<span class="pure-form-message-inline"></span>
358.
359.
</div>
360.
361.
<div class="pure-control-group"><label title="Pays" for="aligned-name">Pays</label>
362.
363.
364.
365.
366.
<input type="text" class="" name="a.country" id="a_country"
367.
value="<?php if ( $results[0]["a.country"] !='') echo $results[0]["a.country"]; else echo ''; ?>"
368.
style="width:30em;"
369.
>
370.
<div style="display:inline-block; color:red"> </div>
371.
372.
373.
374.
<span class="pure-form-message-inline"></span>
375.
376.
</div>
377.
378.
<div class="pure-control-group"><label title="Icone associé à ce dépôt" for="aligned-name">icone</label>
379.
380.
381.
382.
383.
<input style="display:inline-block" type="file" class="" name="a.icon" id="a_icon"
384.
style="width:32em;"
385.
>
386.
387.
<input type="checkbox" name="a_icon_deletebefore" id="a_icon_deletebefore" title="Supprimer le fichier.">
388.
389.
<input type="hidden" class="" name="a_icon" id="a_icon"
390.
value="<?php echo $results[0]["a.icon"]; ?>"
391.
>
392.
<div style="display:inline-block; vertical-align:middle" >
393.
394.
<?php
395.
396.
if (file_exists($results[0]["a.icon"])) {
397.
398.
echo '<img width="50" height="50" style="width: 50px; height: 50px;" alt="'.$results[0]["a.icon"].'" title="'.$results[0]["a.icon"].'" src="'.$results[0]["a.icon"].' ">';
399.
} else {
400.
401.
echo '<img width="50" height="50" style="width: 50px; height: 50px;" alt="Image inexistante" title="Image inexistante" src="img/missing.png">';
402.
}
403.
404.
?>
405.
406.
</div>
407.
408.
409.
<span class="pure-form-message-inline"></span>
410.
411.
</div>
412.
413.
<?
414.
415.
echo ' <div class="pure-controls">'."\n";
416.
echo '<button type="submit" name = "submitSave" class="formbutton xpure-button xpure-button-primary">Enregistrer</button>'."\n";
417.
$confirmBox = "onclick=\"return confirm('Etes vous sûr de vouloir supprimer cet article ?')\"";
418.
if ($id > 0)
419.
echo '<button type="submit" name = "submitDelete" class="formbutton xpure-button xpure-button-primary" '.$confirmBox.' >Supprimer</button>'."\n";
420.
421.
422.
parse_str($_SERVER['QUERY_STRING'], $query_string);
423.
424.
if ($id != -1 and $id > $recordcount['minid'] ) {
425.
$urlPrev='';
426.
$query_string['id'] = $id;
427.
$query_string['offset'] = '_PREV';
428.
$paramPrev = http_build_query($query_string);
429.
$urlPrev = $protocol . '://' . $host . $script . '?' . $paramPrev;
430.
echo "<a class='formbutton' href='$urlPrev'>Précédent</a>\n";
431.
}
432.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Précédent</a>\n";
433.
434.
if ($id != -1 and $id < $recordcount['maxid'] ) {
435.
$urlNext='';
436.
$query_string['id'] = $id;
437.
$query_string['offset'] = '_NEXT';
438.
$paramNext = http_build_query($query_string);
439.
$urlNext = $protocol . '://' . $host . $script . '?' . $paramNext;
440.
echo "<a class='formbutton' href='$urlNext'>Suivant</a>\n";
441.
}
442.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Suivant</a>\n";
443.
444.
445.
echo '</div>'."\n";
446.
echo '</fieldset>'."\n";
447.
echo '</form>'."\n";
448.
449.
echo '</div>';
450.
451.
?>
452.
453.
454.
<script type="text/javascript">
455.
456.
$(document).ready(function(){
457.
458.
$(".selectlist").on("click", function() {
459.
startModal('selectplaceholder');
460.
//alert("Id du champ à remplir au retour : [" + $(this).attr('valuebackval') + "]");
461.
var url = "phpui/select_" + $(this).attr('valuetable') + ".php?valuebackfield=" + $(this).attr('valuebackfield') + '&valuebackval=' + $(this).attr('valuebackval');
462.
463.
$('#selectplaceholder').load(url, function() {
464.
$('#selectplaceholder').css("background-color", "white");
465.
$('#selectplaceholder').css("border", "1px solid #034668");
466.
//box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
467.
//-webkit-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
468.
//-moz-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
469.
$('#selectplaceholder').css("box-shadow", "5px 10px 12px -4px rgba(0,0,0,0.75)");
470.
$('#selectplaceholder').css("border-radius", "7px");
471.
});
472.
473.
});
474.
});
475.
476.
function startModal(id) {
477.
$("body").prepend(
478.
"<div id='PopupMask' style='position:fixed;width:100%;height:100%;z-index:10;background-color:gray;'></div>"+
479.
"<div style='position: fixed;top: 50%;left: 50%; transform: translate(-50%, -50%);' "+
480.
"id='selectplaceholder'><img width='180' height='60' src='img/loading.gif'></div>");
481.
$("#PopupMask").css('opacity', 0.5);
482.
$("#"+id).data('saveZindex', $("#"+id).css( "z-index"));
483.
$("#"+id).data('savePosition', $("#"+id).css( "position"));
484.
$("#"+id).css( "z-index" , 11 );
485.
$("#"+id).css( "position" , "fixed" );
486.
}
487.
488.
</script>
489.
490.
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
491.
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
492.
493.
<script>
494.
495.
// Disable autofill
496.
$(".datepicker").prop("autocomplete", "off");
497.
498.
$( function() {
499.
500.
$.datepicker.regional['fr'] = {
501.
yearRange: '1:2099',
502.
changeMonth: true,
503.
changeYear: true,
504.
closeText: 'Fermer',
505.
prevText: '<Préc',
506.
nextText: 'Suiv>',
507.
currentText: 'Aujourd\'hui',
508.
monthNames: ['Janvier','Fevrier','Mars','Avril','Mai','Juin',
509.
'Juillet','Aout','Septembre','Octobre','Novembre','Decembre'],
510.
monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun',
511.
'Jul','Aou','Sep','Oct','Nov','Dec'],
512.
dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
513.
dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
514.
dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
515.
weekHeader: 'Sm',
516.
dateFormat: 'dd/mm/yy',
517.
firstDay: 1,
518.
/*isRTL: false,*/
519.
/*showMonthAfterYear: false,*/
520.
/*yearSuffix: '',*/
521.
/*minDate: 0,*/
522.
/*maxDate: '+12M +0D',*/
523.
numberOfMonths: 1,
524.
showButtonPanel: true
525.
};
526.
527.
$.datepicker.setDefaults($.datepicker.regional['fr']);
528.
529.
$(".datepicker" ).datepicker().on("show", function() {
530.
var formDate = $(this).val()
531.
$(this).val(formDate).datepicker('update');
532.
});
533.
534.
} );
535.
536.
$("#over").remove();
537.
538.
// Page quit confirmation
539.
var form = $('#editform'),
540.
original = form.serialize()
541.
542.
form.submit(function(){
543.
$('body').append('<div id="over" style="background:rgba(0,0,0, 0.05); position:fixed; top:0; left:0; width:100%; height:100%;"> <img style="position:absolute; top:0; left:0; right:0; bottom:0; margin:auto;" width="180" height="60" src="img/loading.gif"> </div> ');
544.
window.onbeforeunload = null
545.
})
546.
547.
window.onbeforeunload = function(){
548.
if (form.serialize() != original)
549.
return "Confirmez-vous l'abandon de vos modifications ?"
550.
}
551.
552.
</script>
553.
554.