324 lines
10 KiB
PHP
324 lines
10 KiB
PHP
<?php
|
|
/******************************************************************************
|
|
* YMS - Yacht Management Software
|
|
* Copyright (C) 2024 Thomas Hooge
|
|
*
|
|
* SPDX-License-Identifier: WTFPL
|
|
******************************************************************************/
|
|
|
|
require 'globals.inc';
|
|
$pagetitle = _('Measurements');
|
|
|
|
$id = gpc_get_int($_REQUEST, 'id', 0);
|
|
|
|
$opt_unit = db_get_options(8);
|
|
$opt_accuracy = array(
|
|
'unknown' => _('Unknown'),
|
|
'precise' => _('Precise'),
|
|
'normal' => _('Normal'),
|
|
'rough' => _('Rough'),
|
|
'estimated' => _('Estimated')
|
|
);
|
|
$opt_dimensions = array(
|
|
1 => _('1D'),
|
|
2 => _('2D'),
|
|
3 => _('3D')
|
|
);
|
|
$opt_equipment = array(-1 => _('unassigned'));
|
|
$sth = $pdo->prepare("SELECT eid, ename FROM equipment WHERE vid=? ORDER BY ename");
|
|
$sth->execute([$user->vid]);
|
|
foreach ($sth->fetchAll() as $row) {
|
|
$opt_equipment[$row['eid']] = $row['ename'];
|
|
}
|
|
|
|
// ========== ACTIONS START ===================================================
|
|
|
|
switch ($submit = form_get_action()) {
|
|
|
|
case NULL: break;
|
|
|
|
case 'add': $action = ACT_ADD; break;
|
|
case 'view': $action = ACT_VIEW; break;
|
|
case 'edit': $action = ACT_EDIT; break;
|
|
case 'del': $action = ACT_DELETE; break;
|
|
|
|
case 'filter':
|
|
$flt = array();
|
|
$flt['precision'] = gpc_get_string($_POST, 'flt_precision');
|
|
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
|
|
db_save_filter($flt, 207);
|
|
$action = ACT_DEFAULT;
|
|
break;
|
|
|
|
case 'insert':
|
|
$p[':mname'] = gpc_get_string($_POST, 'mname');
|
|
$p[':note'] = gpc_get_string($_POST, 'note');
|
|
$p[':nval'] = gpc_get_int($_POST, 'nval'); // 1 to 3 dimensions
|
|
$p[':val1'] = gpc_get_int($_POST, 'val1');
|
|
$p[':val2'] = NULL;
|
|
$p[':val3'] = NULL;
|
|
if ($p[':nval'] > 1) {
|
|
$p[':val2'] = gpc_get_int($_POST, 'val2');
|
|
}
|
|
if ($p[':nval'] > 2) {
|
|
$p[':val3'] = gpc_get_int($_POST, 'val3');
|
|
}
|
|
$p[':unit'] = gpc_get_int($_POST, 'unit');
|
|
$p[':accuracy'] = gpc_get_string($_POST, 'accuracy');
|
|
$p[':eid'] = gpc_get_int($_POST, 'eid');
|
|
if ($p[':eid'] == -1) {
|
|
$p[':eid'] = NULL;
|
|
}
|
|
$id = db_exec_insert('measurement', $p);
|
|
$action = ACT_VIEW;
|
|
break;
|
|
|
|
case 'update':
|
|
$p[':mid'] = $id;
|
|
$p[':mname'] = gpc_get_string($_POST, 'mname');
|
|
$p[':nval'] = gpc_get_int($_POST, 'nval'); // 1 to 3 dimensions
|
|
$p[':val1'] = gpc_get_int($_POST, 'val1');
|
|
$p[':val2'] = NULL;
|
|
$p[':val3'] = NULL;
|
|
if ($p[':nval'] > 1) {
|
|
$p[':val2'] = gpc_get_int($_POST, 'val2');
|
|
}
|
|
if ($p[':nval'] > 2) {
|
|
$p[':val3'] = gpc_get_int($_POST, 'val3');
|
|
}
|
|
$p[':unit'] = gpc_get_int($_POST, 'unit');
|
|
$p[':accuracy'] = gpc_get_string($_POST, 'accuracy');
|
|
$p[':mdate'] = gpc_get_date($_POST, 'mdate');
|
|
$p[':note'] = gpc_get_string($_POST, 'note');
|
|
$p[':eid'] = gpc_get_int($_POST, 'eid');
|
|
if ($p[':eid'] == -1) {
|
|
$p[':eid'] = NULL;
|
|
}
|
|
db_exec_update('measurement', $p, 'mid');
|
|
$action = ACT_VIEW;
|
|
break;
|
|
|
|
case 'delete':
|
|
// Security token needed!
|
|
if (gpc_get_string($_POST, 'token', 16) != $_SESSION['token']) {
|
|
$g_error->Add(_('Delete prohibited, invalid security token!'));
|
|
$action = ACT_VIEW;
|
|
break;
|
|
}
|
|
$action = ACT_DEFAULT;
|
|
break;
|
|
|
|
|
|
default:
|
|
$g_error->Add(sprintf(_('Unknown function!'), $submit));
|
|
$valid = FALSE;
|
|
|
|
}
|
|
|
|
// ========== ACTIONS END =====================================================
|
|
|
|
require 'header.php';
|
|
|
|
// ========== PAGE CONTENT ====================================================
|
|
|
|
if ($action == ACT_DEFAULT):
|
|
// ========== VARIANT: default behavior =======================================
|
|
|
|
// load filter from db
|
|
$flt = db_get_filter($user->id, 207);
|
|
|
|
function format_vals($n, $v1, $v2, $v3) {
|
|
if ($n == 1) {
|
|
return $v1;
|
|
} elseif ($n == 2) {
|
|
return $v1 . 'x'. $v2;
|
|
} else {
|
|
return $v1 . 'x'. $v2 . 'x' . $v3;
|
|
}
|
|
}
|
|
|
|
echo "<h1>$pagetitle</h1>\n";
|
|
|
|
// Filter
|
|
$opt_special = array(
|
|
-2 => _('― all ―'),
|
|
-1 => _('― none ―')
|
|
);
|
|
?>
|
|
<form method="post" action="<?=$g_scriptname?>">
|
|
<div id="filter" class="card">
|
|
<div class="card-header">Filter</div>
|
|
<div class="card-body">
|
|
|
|
<label for="flt_txt">Text</label>
|
|
<input type="text" name="flt_txt" size="15" maxlength="30" value="<?=$flt->txt?>">
|
|
<button name="submit[filter]" class="btn btn-sm btn-primary" title="<?=_('Apply')?>"><?=_('Go')?></button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<?php
|
|
|
|
$sql = "SELECT mid, mname, nval, val1, val2, val3, unit, accuracy, mdate, note, eid "
|
|
. "FROM measurement "
|
|
. "ORDER BY mname";
|
|
$sth = $pdo->query($sql);
|
|
$res = $sth->fetchAll();
|
|
echo '<table class="table table-striped">', "\n";
|
|
echo "<thead>\n";
|
|
echo "<tr>\n";
|
|
echo '<th>', _('Measurement'), "</th>";
|
|
echo '<th>', _('Note'), "</th>";
|
|
echo '<th class="text-end">', _('Measured'), "</th>";
|
|
echo '<th>', _('Unit'), "</th>";
|
|
echo '<th>', _('Accuracy'), "</th>";
|
|
echo "<th></th>";
|
|
echo "</tr>\n";
|
|
echo "</thead>\n";
|
|
foreach ($res as $row) {
|
|
echo "<tr>\n";
|
|
echo "<td>", $row['mname'], "</td>\n";
|
|
echo "<td>", $row['note'], "</td>\n";
|
|
echo '<td class="text-end">', format_vals($row['nval'], $row['val1'], $row['val2'], $row['val3']), "</td>\n";
|
|
echo "<td>", $opt_unit[$row['unit']], "</td>\n";
|
|
echo "<td>", $opt_accuracy[$row['accuracy']], "</td>\n";
|
|
echo "<td>";
|
|
// Action buttons
|
|
form_action_buttons($g_scriptname, $row['mid']);
|
|
echo "</td>\n";
|
|
echo "</tr>\n";
|
|
}
|
|
// Table summary
|
|
echo "<tfoot>\n";
|
|
echo '<tr><td colspan="6">', sprintf(_('%d records'), count($res)), '</td></tr>', "\n";
|
|
echo "</tfoot>\n";
|
|
echo "</table>\n";
|
|
|
|
form_add_button($g_scriptname);
|
|
|
|
elseif ($action == ACT_ADD):
|
|
// ========== VARIANT: add record =============================================
|
|
|
|
echo '<h2>', _('Add measurement'), "</h2>\n";
|
|
|
|
?>
|
|
<form method="post" action="<?=$g_scriptname?>">
|
|
<div class="mb-3">
|
|
<label for="mname" class="form-label"><?=_('Name')?></label>
|
|
<input type="text" class="form-control" id="mname" name="mname" required autofocus>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="note" class="form-label"><?=_('Note')?></label>
|
|
<input type="text" class="form-control" id="note" name="note">
|
|
</div>
|
|
<?php
|
|
form_create_select('nval', _('Dimensions'), $opt_dimensions);
|
|
?>
|
|
<div class="mb-3">
|
|
<label for="val1" class="form-label"><?=_('Value 1')?></label>
|
|
<input type="text" class="form-control" id="val1" name="val1">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="val2" class="form-label"><?=_('Value 2')?></label>
|
|
<input type="text" class="form-control" id="val1" name="val2">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="val3" class="form-label"><?=_('Value 3')?></label>
|
|
<input type="text" class="form-control" id="val3" name="val3">
|
|
</div>
|
|
<?php
|
|
form_create_select('unit', _('Unit'), $opt_unit);
|
|
form_create_select('accuracy', _('Accuracy'), $opt_accuracy);
|
|
form_create_select('eid', _('Equipment'), $opt_equipment, $id);
|
|
?>
|
|
<div class="container-fluid px-0 my-3">
|
|
<button type="submit" name="submit[insert]" class="btn btn-primary"><?=_('Save')?></button>
|
|
<a href="<?=$g_scriptname?>" class="btn btn-secondary"><?=_('Back')?></a>
|
|
</div>
|
|
</form>
|
|
<?php
|
|
|
|
elseif ($action == ACT_VIEW):
|
|
// ========== VARIANT: view single record =====================================
|
|
|
|
$sql = "SELECT mname, unit, nval, val1, val2, val3, accuracy, mdate, note "
|
|
. "FROM measurement "
|
|
. "WHERE mid=?";
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute([$id]);
|
|
$measurement = $sth->fetch(PDO::FETCH_OBJ);
|
|
|
|
echo '<h2>', _('Measurement'), "</h2>\n";
|
|
|
|
echo '<table class="table">', "\n";
|
|
echo '<tr><th style="width:20%">', _('Name'),"</th><td>", $measurement->mname, "</td></tr>\n";
|
|
echo '<tr><th>', _('Unit'),"</th><td>", $opt_unit[$measurement->unit], "</td></tr>\n";
|
|
echo '<tr><th>', _('Values'),"</th><td>$measurement->nval</td></tr>\n";
|
|
echo '<tr><th>', _('Value 1'),"</th><td>$measurement->val1</td></tr>\n";
|
|
echo '<tr><th>', _('Value 2'),"</th><td>$measurement->val2</td></tr>\n";
|
|
echo '<tr><th>', _('Value 3'),"</th><td>$measurement->val3</td></tr>\n";
|
|
echo '<tr><th>', _('Accuracy'),"</th><td>$measurement->accuracy</td></tr>\n";
|
|
echo '<tr><th>', _('Date'),"</th><td>$measurement->mdate</td></tr>\n";
|
|
echo '<tr><th>', _('Note'),"</th><td>$measurement->note</td></tr>\n";
|
|
echo "</table>\n";
|
|
|
|
form_view_buttons($g_scriptname, $id);
|
|
|
|
|
|
elseif ($action == ACT_EDIT):
|
|
// ========== VARIANT: edit single record =====================================
|
|
|
|
$sql = "SELECT mname, nval, val1, val2, val3, unit, accuracy, note "
|
|
. "FROM measurement "
|
|
. "WHERE mid=?";
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute([$id]);
|
|
$measurement = $sth->fetch(PDO::FETCH_OBJ);
|
|
|
|
echo '<h2>', _('Edit measurement'), "</h2>\n";
|
|
?>
|
|
<form method="post" action="<?=$g_scriptname?>">
|
|
<input type="hidden" name="id" value="<?=$id?>">
|
|
<div class="mb-3">
|
|
<label for="mname" class="form-label"><?=_('Name')?></label>
|
|
<input type="text" class="form-control" id="name" name="mname" value="<?=$measurement->mname ?>">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="note" class="form-label"><?=_('Note')?></label>
|
|
<input type="text" class="form-control" id="note" name="note" value="<?=$measurement->note ?>">
|
|
</div>
|
|
<?php
|
|
form_create_select('nval', _('Dimensions'), $opt_dimensions, $measurement->nval);
|
|
?>
|
|
<div class="mb-3">
|
|
<label for="val1"><?=_('Value 1')?></label>
|
|
<input type="number" min="0" class="form-control" id="val1" name="val1" value="<?=$measurement->val1 ?>">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="val2"><?=_('Value 2')?></label>
|
|
<input type="number" min="0" class="form-control" id="val2" name="val2" value="<?=$measurement->val2 ?>">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="val3"><?=_('Value 3')?></label>
|
|
<input type="number" min="0" class="form-control" id="val3" name="val3" value="<?=$measurement->val3 ?>">
|
|
</div>
|
|
<?php
|
|
form_create_select('unit', _('Unit'), $opt_unit, $measurement->unit);
|
|
form_create_select('accuracy', _('Accuracy'), $opt_accuracy, $measurement->accuracy);
|
|
form_create_select('eid', _('Equipment'), $opt_equipment, $measurement->eid);
|
|
|
|
form_edit_buttons($g_scriptname, $id);
|
|
echo "</form>\n";
|
|
|
|
elseif ($action == ACT_DELETE):
|
|
// ========== VARIANT: delete record ==========================================
|
|
|
|
else:
|
|
// ========== ERROR UNKNOWN VARIANT ===========================================
|
|
|
|
echo '<p>', _('Unknown function call: Please report to system development!'), "</p>\n";
|
|
|
|
endif; // $action == ...
|
|
// ========== END OF VARIANTS =================================================
|
|
|
|
include 'footer.php';
|