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