1.
<?php
2.
3.
/*
4.
5.
Formulaire d'édition pour la table : metadata.
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_metadata.php";
17.
include_once "phpdb/class_metadata_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.
$mymetadata = new metadata( $db );
33.
34.
35.
36.
$sqlError = false;
37.
38.
// Sauvegarde
39.
if(isset($_POST['submitSave']))
40.
{
41.
if ($id > 0) {
42.
$results = $mymetadata->update(
43.
$_REQUEST["a_id"],
44.
$_REQUEST["a_name"],
45.
$_REQUEST["a_code"],
46.
$_REQUEST["a_value"],
47.
$_REQUEST["a_type"],
48.
$_REQUEST["a_description"] );
49.
50.
if ($results === false) {
51.
$userUiMessage .= '<div class="editmessageError">Erreur sauvegarde (id='.$id.') :'.$mymetadata->lasterror.'</div>';
52.
$sqlError = true;
53.
}
54.
else
55.
$userUiMessage .= '<div class="editmessageInfo">Sauvegarde effectuée (id='.$id.')</div>';
56.
}
57.
else
58.
{
59.
$results = $mymetadata->insert(
60.
$_REQUEST["a_name"],
61.
$_REQUEST["a_code"],
62.
$_REQUEST["a_value"],
63.
$_REQUEST["a_type"],
64.
$_REQUEST["a_description"] );
65.
echo '<div class="editmessage">';
66.
if ($results === false) {
67.
$userUiMessage .= '<div class="editmessageError">Erreur de création :'.$mymetadata->lasterror.'</div>';
68.
$sqlError = true;
69.
}
70.
else {
71.
$id=$mymetadata->lastInsertId;
72.
$userUiMessage .= '<div class="editmessageInfo">Création effectuée (id='.$id.')</div>';
73.
}
74.
}
75.
}
76.
77.
// Suppression
78.
if(isset($_POST['submitDelete']))
79.
{
80.
if ($id > 0) {
81.
$results = $mymetadata->delete( $id );
82.
83.
if ($results === false) {
84.
$userUiMessage .= '<div class="editmessageError">Erreur Suppression (id='.$id.') :'.$mymetadata->lasterror.'</div>';
85.
$sqlError = true;
86.
}
87.
else {
88.
$userUiMessage .= '<div class="editmessageInfo">Suppression effectuée (id='.$id.')</div>';
89.
$id = -1;
90.
}
91.
92.
}
93.
}
94.
95.
// Select reccord by id :
96.
if ($sqlError === false ) {
97.
98.
if ( isset($_POST['submitSave']) || isset($_POST['submitDelete']) )
99.
$results = $mymetadata->select( $id );
100.
else {
101.
switch ($offset) {
102.
case '_PREV':
103.
$results = $mymetadata->selectPrev( $id );
104.
$id = $results[0]['a.id'];
105.
break;
106.
case '_NEXT':
107.
$results = $mymetadata->selectNext( $id );
108.
$id = $results[0]['a.id'];
109.
break;
110.
default:
111.
$results = $mymetadata->select( $id );
112.
break;
113.
}
114.
}
115.
116.
if ($results === false) {
117.
$userUiMessage .= '<div class="editmessageError">Erreur Sql : '.$mymetadata->lasterror.'</div>';
118.
$sqlError = true;
119.
}
120.
/*if ( empty($results) ) {
121.
$userUiMessage .= '<div class="editmessageInfo">Cet enregistrement n\'existe plus. id = '.$id.' </div>';
122.
$sqlError = true;
123.
}
124.
*/
125.
}
126.
else {
127.
$results[0]["a.id"] = $_REQUEST['a_id'];
128.
$results[0]["a.code"] = $_REQUEST['a_code'];
129.
$results[0]["a.name"] = $_REQUEST['a_name'];
130.
$results[0]["a.value"] = $_REQUEST['a_value'];
131.
$results[0]["a.type"] = $_REQUEST['a_type'];
132.
$results[0]["a.description"] = $_REQUEST['a_description'];
133.
134.
}
135.
136.
$recordcount = $mymetadata->getCount();
137.
138.
echo '<div class="formtable">';
139.
140.
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https')
141.
=== FALSE ? 'http' : 'https';
142.
$host = $_SERVER['HTTP_HOST'];
143.
$script = $_SERVER['SCRIPT_NAME'];
144.
$params = $_SERVER['QUERY_STRING'];
145.
146.
$currentUrl = $protocol . '://' . $host . $script . '?' . $params;
147.
148.
// xxx fix enctype
149.
echo '<form id="editform" class="formedit pure-form pure-form-aligned" method="post" action="'.$currentUrl.'" enctype="multipart/form-data" >';
150.
151.
echo '<fieldset>';
152.
153.
echo '<legend style="display:inline-block" class="titleedit"><span title="Paramètres et métadonnées" class="titleedit">Paramètre</span> #'.($id==-1?'?':$id).'/'.$recordcount['count'];
154.
155.
echo '<div style="font-size:80%; float:right; display:inline-block;">'.$userUiMessage.'</div>';
156.
157.
echo '</legend>';
158.
?>
159.
160.
<input type="hidden" readonly name="a.id.value" value="<?php echo $results[0]["a.id"]; ?>" >
161.
162.
<div class="pure-control-group"><label for="aligned-name">id</label>
163.
<input type="{{edithidden}}" readonly name="a.id" value="<?php echo $results[0]["a.id"]; ?>"
164.
style="width:12em;" ><span class="pure-form-message-inline"></span>
165.
</div>
166.
167.
<div class="pure-control-group"><label title="code" for="aligned-name">code</label>
168.
169.
170.
171.
172.
<input type="text" class="" name="a.code" id="a_code"
173.
value="<?php if ( $results[0]["a.code"] !='') echo $results[0]["a.code"]; else echo ''; ?>"
174.
style="width:12em;"
175.
>
176.
<div style="display:inline-block; color:red"> </div>
177.
178.
179.
180.
<span class="pure-form-message-inline"></span>
181.
182.
</div>
183.
184.
<div class="pure-control-group"><label title="name" for="aligned-name">name</label>
185.
186.
187.
188.
189.
<input type="text" class="" name="a.name" id="a_name"
190.
value="<?php if ( $results[0]["a.name"] !='') echo $results[0]["a.name"]; else echo ''; ?>"
191.
style="width:30em;"
192.
>
193.
<div style="display:inline-block; color:red">*</div>
194.
195.
196.
197.
<span class="pure-form-message-inline"></span>
198.
199.
</div>
200.
201.
<div class="pure-control-group"><label title="value" for="aligned-name">value</label>
202.
203.
204.
205.
206.
<input type="text" class="" name="a.value" id="a_value"
207.
value="<?php if ( $results[0]["a.value"] !='') echo $results[0]["a.value"]; else echo ''; ?>"
208.
style="width:30em;"
209.
>
210.
<div style="display:inline-block; color:red">*</div>
211.
212.
213.
214.
<span class="pure-form-message-inline"></span>
215.
216.
</div>
217.
218.
<div class="pure-control-group"><label title="type" for="aligned-name">type</label>
219.
220.
221.
222.
223.
<select name="a.type" >
224.
<option value="" <?php if ($results[0]["a.type"]=="") echo "selected"; ?> >Pas de type</option>
225.
<option value="gedcom" <?php if ($results[0]["a.type"]=="gedcom") echo "selected"; ?> >Meta données Gedcom</option>
226.
<option value="mailto" <?php if ($results[0]["a.type"]=="mailto") echo "selected"; ?> >Url Mailto</option>
227.
<option value="href" <?php if ($results[0]["a.type"]=="href") echo "selected"; ?> >Url Href</option>
228.
229.
</select>
230.
<div style="display:inline-block; color:red"> </div>
231.
232.
233.
<span class="pure-form-message-inline"></span>
234.
235.
</div>
236.
237.
<div class="pure-control-group"><label title="description" for="aligned-name">description</label>
238.
239.
240.
241.
242.
<textarea text rows="4" cols="40" name="a.description" rows="4" cols="12" ><?php if ( $results[0]["a.description"] !='') echo $results[0]["a.description"]; else echo ''; ?></textarea>
243.
244.
245.
<span class="pure-form-message-inline"></span>
246.
247.
</div>
248.
249.
<?
250.
251.
echo ' <div class="pure-controls">'."\n";
252.
echo '<button type="submit" name = "submitSave" class="formbutton xpure-button xpure-button-primary">Enregistrer</button>'."\n";
253.
$confirmBox = "onclick=\"return confirm('Etes vous sûr de vouloir supprimer cet article ?')\"";
254.
if ($id > 0)
255.
echo '<button type="submit" name = "submitDelete" class="formbutton xpure-button xpure-button-primary" '.$confirmBox.' >Supprimer</button>'."\n";
256.
257.
258.
parse_str($_SERVER['QUERY_STRING'], $query_string);
259.
260.
if ($id != -1 and $id > $recordcount['minid'] ) {
261.
$urlPrev='';
262.
$query_string['id'] = $id;
263.
$query_string['offset'] = '_PREV';
264.
$paramPrev = http_build_query($query_string);
265.
$urlPrev = $protocol . '://' . $host . $script . '?' . $paramPrev;
266.
echo "<a class='formbutton' href='$urlPrev'>Précédent</a>\n";
267.
}
268.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Précédent</a>\n";
269.
270.
if ($id != -1 and $id < $recordcount['maxid'] ) {
271.
$urlNext='';
272.
$query_string['id'] = $id;
273.
$query_string['offset'] = '_NEXT';
274.
$paramNext = http_build_query($query_string);
275.
$urlNext = $protocol . '://' . $host . $script . '?' . $paramNext;
276.
echo "<a class='formbutton' href='$urlNext'>Suivant</a>\n";
277.
}
278.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Suivant</a>\n";
279.
280.
281.
echo '</div>'."\n";
282.
echo '</fieldset>'."\n";
283.
echo '</form>'."\n";
284.
285.
echo '</div>';
286.
287.
?>
288.
289.
290.
<script type="text/javascript">
291.
292.
$(document).ready(function(){
293.
294.
$(".selectlist").on("click", function() {
295.
startModal('selectplaceholder');
296.
//alert("Id du champ à remplir au retour : [" + $(this).attr('valuebackval') + "]");
297.
var url = "phpui/select_" + $(this).attr('valuetable') + ".php?valuebackfield=" + $(this).attr('valuebackfield') + '&valuebackval=' + $(this).attr('valuebackval');
298.
299.
$('#selectplaceholder').load(url, function() {
300.
$('#selectplaceholder').css("background-color", "white");
301.
$('#selectplaceholder').css("border", "1px solid #034668");
302.
//box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
303.
//-webkit-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
304.
//-moz-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
305.
$('#selectplaceholder').css("box-shadow", "5px 10px 12px -4px rgba(0,0,0,0.75)");
306.
$('#selectplaceholder').css("border-radius", "7px");
307.
});
308.
309.
});
310.
});
311.
312.
function startModal(id) {
313.
$("body").prepend(
314.
"<div id='PopupMask' style='position:fixed;width:100%;height:100%;z-index:10;background-color:gray;'></div>"+
315.
"<div style='position: fixed;top: 50%;left: 50%; transform: translate(-50%, -50%);' "+
316.
"id='selectplaceholder'><img width='180' height='60' src='img/loading.gif'></div>");
317.
$("#PopupMask").css('opacity', 0.5);
318.
$("#"+id).data('saveZindex', $("#"+id).css( "z-index"));
319.
$("#"+id).data('savePosition', $("#"+id).css( "position"));
320.
$("#"+id).css( "z-index" , 11 );
321.
$("#"+id).css( "position" , "fixed" );
322.
}
323.
324.
</script>
325.
326.
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
327.
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
328.
329.
<script>
330.
331.
// Disable autofill
332.
$(".datepicker").prop("autocomplete", "off");
333.
334.
$( function() {
335.
336.
$.datepicker.regional['fr'] = {
337.
yearRange: '1:2099',
338.
changeMonth: true,
339.
changeYear: true,
340.
closeText: 'Fermer',
341.
prevText: '<Préc',
342.
nextText: 'Suiv>',
343.
currentText: 'Aujourd\'hui',
344.
monthNames: ['Janvier','Fevrier','Mars','Avril','Mai','Juin',
345.
'Juillet','Aout','Septembre','Octobre','Novembre','Decembre'],
346.
monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun',
347.
'Jul','Aou','Sep','Oct','Nov','Dec'],
348.
dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
349.
dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
350.
dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
351.
weekHeader: 'Sm',
352.
dateFormat: 'dd/mm/yy',
353.
firstDay: 1,
354.
/*isRTL: false,*/
355.
/*showMonthAfterYear: false,*/
356.
/*yearSuffix: '',*/
357.
/*minDate: 0,*/
358.
/*maxDate: '+12M +0D',*/
359.
numberOfMonths: 1,
360.
showButtonPanel: true
361.
};
362.
363.
$.datepicker.setDefaults($.datepicker.regional['fr']);
364.
365.
$(".datepicker" ).datepicker().on("show", function() {
366.
var formDate = $(this).val()
367.
$(this).val(formDate).datepicker('update');
368.
});
369.
370.
} );
371.
372.
$("#over").remove();
373.
374.
// Page quit confirmation
375.
var form = $('#editform'),
376.
original = form.serialize()
377.
378.
form.submit(function(){
379.
$('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> ');
380.
window.onbeforeunload = null
381.
})
382.
383.
window.onbeforeunload = function(){
384.
if (form.serialize() != original)
385.
return "Confirmez-vous l'abandon de vos modifications ?"
386.
}
387.
388.
</script>
389.
390.