Ongoing webgui work
This commit is contained in:
@@ -11,10 +11,14 @@ YMS Installation
|
|||||||
|
|
||||||
1.2 Native GUI
|
1.2 Native GUI
|
||||||
- Python GTK3
|
- Python GTK3
|
||||||
|
- python3-gi
|
||||||
|
- gir1.2-gtk-3.0
|
||||||
|
|
||||||
1.3 Web GUI
|
1.3 Web GUI
|
||||||
- Webserver
|
- Webserver
|
||||||
- PHP
|
- PHP
|
||||||
|
- php-mysql
|
||||||
|
- php-xml
|
||||||
|
|
||||||
|
|
||||||
2. Create database
|
2. Create database
|
||||||
|
|||||||
+4
-2
@@ -146,11 +146,12 @@ CREATE TABLE inventory (
|
|||||||
conttype enum('storage','box') NOT NULL DEFAULT 'storage',
|
conttype enum('storage','box') NOT NULL DEFAULT 'storage',
|
||||||
sid smallint(6) NOT NULL DEFAULT 1,
|
sid smallint(6) NOT NULL DEFAULT 1,
|
||||||
boxid smallint(6) NOT NULL DEFAULT 1,
|
boxid smallint(6) NOT NULL DEFAULT 1,
|
||||||
|
eid smallint(6) DEFAULT NULL,
|
||||||
number smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
number smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
||||||
weight float(5,2) UNSIGNED DEFAULT NULL,
|
weight float(5,2) UNSIGNED DEFAULT NULL,
|
||||||
price decimal(12,2) DEFAULT NULL,
|
price decimal(12,2) DEFAULT NULL,
|
||||||
purchdate date DEFAULT NULL,
|
purchdate date DEFAULT NULL,
|
||||||
invcond enum('unknown','good','normal','bad','repairable','defect') NOT NULL default 'unknown',
|
invcond enum('unknown','new','good','normal','bad','repairable','defect') NOT NULL default 'unknown',
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (invid),
|
PRIMARY KEY (invid),
|
||||||
INDEX ix_invname (invname)
|
INDEX ix_invname (invname)
|
||||||
@@ -174,6 +175,7 @@ CREATE TABLE measurement (
|
|||||||
CREATE TABLE provisions (
|
CREATE TABLE provisions (
|
||||||
provid int(10) NOT NULL AUTO_INCREMENT,
|
provid int(10) NOT NULL AUTO_INCREMENT,
|
||||||
provname varchar(40) NOT NULL,
|
provname varchar(40) NOT NULL,
|
||||||
|
provcat tinyint(3) DEFAULT NULL,
|
||||||
sid smallint(6) DEFAULT NULL,
|
sid smallint(6) DEFAULT NULL,
|
||||||
number smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
number smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
||||||
unit tinyint(3) DEFAULT NULL,
|
unit tinyint(3) DEFAULT NULL,
|
||||||
@@ -228,7 +230,7 @@ CREATE TABLE company (
|
|||||||
contractno varchar(20),
|
contractno varchar(20),
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (compid),
|
PRIMARY KEY (compid),
|
||||||
UNIQUE INDEX ix_compname (compname)
|
UNIQUE INDEX ix_compname (compname, comptype)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -157,7 +157,7 @@ echo '<tr><th style="width:20%">', _('Box type'),"</th><td>", ($opt_boxtype[$box
|
|||||||
echo '<tr><th>', _('Content'),"</th><td>", $box->content, "</td></tr>\n";
|
echo '<tr><th>', _('Content'),"</th><td>", $box->content, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Color'), '</th><td>', format_color($box->color), "</td></tr>\n";
|
echo '<tr><th>', _('Color'), '</th><td>', format_color($box->color), "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Weight'), '</th><td>', format_float($box->weight, 2, 'kg'), "</td></tr>\n";
|
echo '<tr><th>', _('Weight'), '</th><td>', format_float($box->weight, 2, 'kg'), "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Storage'),"</th><td>", $box->sname;
|
echo '<tr><th>', _('Storage'),"</th><td>", $box->sname, ' ';
|
||||||
echo '<a title="', _('View'), '" href="storage.php?f=view&id=', $box->sid, '"><i class="bi-eye"></i></a>';
|
echo '<a title="', _('View'), '" href="storage.php?f=view&id=', $box->sid, '"><i class="bi-eye"></i></a>';
|
||||||
echo "</td></tr>\n";
|
echo "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Remarks'),"</th><td>", $box->remarks, "</td></tr>\n";
|
echo '<tr><th>', _('Remarks'),"</th><td>", $box->remarks, "</td></tr>\n";
|
||||||
|
|||||||
+33
-5
@@ -87,6 +87,8 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
// load filter from db
|
// load filter from db
|
||||||
$flt = db_get_filter($user->id, 208);
|
$flt = db_get_filter($user->id, 208);
|
||||||
|
|
||||||
@@ -103,10 +105,34 @@ if (strlen($flt->txt) > 1) {
|
|||||||
$where = join(' AND ', $w);
|
$where = join(' AND ', $w);
|
||||||
$order = ' ORDER BY comptype, compname';
|
$order = ' ORDER BY comptype, compname';
|
||||||
|
|
||||||
|
// grand total of records for current vessel
|
||||||
|
$grandtotal = $pdo->query("SELECT COUNT(*) FROM company")->fetchColumn();
|
||||||
|
|
||||||
|
// get total record count for pagination and limit
|
||||||
|
$sql = "SELECT COUNT(*) FROM company";
|
||||||
|
if ($where) {
|
||||||
|
$sql .= " WHERE $where";
|
||||||
|
}
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
try {
|
||||||
|
$sth->execute($p);
|
||||||
|
} catch(PDOException $e) {
|
||||||
|
$g_error->Add($e->getMessage());
|
||||||
|
$g_error->Add($sql);
|
||||||
|
$g_error->Add(print_r($p, true));
|
||||||
|
}
|
||||||
|
$numrows = $sth->fetchColumn();
|
||||||
|
$lastpage = ceil($numrows/$g_rows_pp);
|
||||||
|
$page = gpc_get_int($_REQUEST, 'p', 1);
|
||||||
|
|
||||||
$sql = "SELECT compid, compname, comptype, remarks "
|
$sql = "SELECT compid, compname, comptype, remarks "
|
||||||
. "FROM company";
|
. "FROM company";
|
||||||
if ($where) $sql .= ' WHERE ' . $where;
|
if ($where) $sql .= ' WHERE ' . $where;
|
||||||
$sql .= $order;
|
$sql .= $order;
|
||||||
|
|
||||||
|
// if pagination:
|
||||||
|
$sql .= ' LIMIT ' . ($page - 1) * $g_rows_pp . ',' . $g_rows_pp;
|
||||||
|
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
try {
|
try {
|
||||||
$sth->execute($p);
|
$sth->execute($p);
|
||||||
@@ -117,8 +143,6 @@ try {
|
|||||||
}
|
}
|
||||||
$res = $sth->fetchAll();
|
$res = $sth->fetchAll();
|
||||||
|
|
||||||
echo '<h1>', $pagetitle , "</h1>\n";
|
|
||||||
|
|
||||||
// Filter
|
// Filter
|
||||||
$opt_special = array(
|
$opt_special = array(
|
||||||
-2 => _('― all ―'),
|
-2 => _('― all ―'),
|
||||||
@@ -149,6 +173,9 @@ foreach ($opt_special + $opt_comptype as $k => $v) {
|
|||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
// Pagination on top
|
||||||
|
$pagination = get_pagination($g_scriptname, '', $page, $lastpage);
|
||||||
|
echo $pagination;
|
||||||
|
|
||||||
echo '<table class="table table-striped">', "\n";
|
echo '<table class="table table-striped">', "\n";
|
||||||
echo "<thead>\n";
|
echo "<thead>\n";
|
||||||
@@ -173,10 +200,12 @@ foreach ($res as $row) {
|
|||||||
}
|
}
|
||||||
// Table summary
|
// Table summary
|
||||||
echo "<tfoot>\n";
|
echo "<tfoot>\n";
|
||||||
echo '<tr><td colspan="6">', sprintf(_('%d records'), count($res)), '</td></tr>', "\n";
|
echo '<tr><td colspan="6">', sprintf(_('%d records out of total %d'), count($res), $grandtotal), '</td></tr>', "\n";
|
||||||
echo "</tfoot>\n";
|
echo "</tfoot>\n";
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
|
echo $pagination;
|
||||||
|
|
||||||
form_add_button($g_scriptname);
|
form_add_button($g_scriptname);
|
||||||
|
|
||||||
|
|
||||||
@@ -230,8 +259,7 @@ form_view_buttons($g_scriptname, $id);
|
|||||||
// show referenced equipment
|
// show referenced equipment
|
||||||
$sql = "SELECT eid, ename FROM equipment WHERE supplier=:id OR manufacturer=:id";
|
$sql = "SELECT eid, ename FROM equipment WHERE supplier=:id OR manufacturer=:id";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->bindValue(':id', $id, PDO::PARAM_INT);
|
$sth->execute([':id' => $id]);
|
||||||
$sth->execute();
|
|
||||||
if ($sth->rowCount() > 0) {
|
if ($sth->rowCount() > 0) {
|
||||||
echo "<p>Referenced in equipment:</p>\n";
|
echo "<p>Referenced in equipment:</p>\n";
|
||||||
echo "<ul>\n";
|
echo "<ul>\n";
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ $g_mailto = 'captain@example.com';
|
|||||||
$g_mailto_webmaster = 'webmaster@example.com';
|
$g_mailto_webmaster = 'webmaster@example.com';
|
||||||
|
|
||||||
// localization
|
// localization
|
||||||
|
$g_textdomain = 'yms';
|
||||||
$g_timezone = 'Europe/Berlin';
|
$g_timezone = 'Europe/Berlin';
|
||||||
$g_locale = 'de_DE.UTF-8';
|
$g_locale = 'de_DE.UTF-8';
|
||||||
|
|
||||||
|
|||||||
+107
-23
@@ -14,6 +14,11 @@ $pagetitle = _('Documents');
|
|||||||
$id = gpc_get_int($_REQUEST, 'id', 0);
|
$id = gpc_get_int($_REQUEST, 'id', 0);
|
||||||
$page = gpc_get_int($_REQUEST, 'p', 1);
|
$page = gpc_get_int($_REQUEST, 'p', 1);
|
||||||
|
|
||||||
|
$opt_doctype = db_load_enum('document', 'doctype', true, true);
|
||||||
|
asort($opt_doctype);
|
||||||
|
$opt_reftype = db_load_enum('docref', 'reftype', true, true);
|
||||||
|
asort($opt_reftype);
|
||||||
|
|
||||||
// ========== ACTIONS START ===================================================
|
// ========== ACTIONS START ===================================================
|
||||||
|
|
||||||
switch ($submit = form_get_action()) {
|
switch ($submit = form_get_action()) {
|
||||||
@@ -27,7 +32,8 @@ switch ($submit = form_get_action()) {
|
|||||||
|
|
||||||
case 'filter':
|
case 'filter':
|
||||||
$flt = array();
|
$flt = array();
|
||||||
$flt['doctype'] = gpc_get_string($_POST, 'flt_doctype');
|
$flt['doctype'] = gpc_get_enum($_POST, 'flt_doctype', array_keys($opt_doctype));
|
||||||
|
$flt['reftype'] = gpc_get_enum($_POST, 'flt_reftype', array_merge(array_keys($opt_reftype), ['none']));
|
||||||
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
|
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
|
||||||
db_save_filter($flt, 209);
|
db_save_filter($flt, 209);
|
||||||
$action = ACT_DEFAULT;
|
$action = ACT_DEFAULT;
|
||||||
@@ -155,9 +161,10 @@ switch ($submit = form_get_action()) {
|
|||||||
|
|
||||||
case 'addref':
|
case 'addref':
|
||||||
$opt_reftype = db_load_enum('docref', 'reftype');
|
$opt_reftype = db_load_enum('docref', 'reftype');
|
||||||
$refid = gpc_get_int($_POST, 'refid');
|
$p[':docid'] = $id;
|
||||||
$reftype = gpc_get_enum($_POST, 'reftype', $opt_reftype, 'equipment');
|
$p[':refid'] = gpc_get_int($_POST, 'refid');
|
||||||
$sql = "INSERT INTO docref "
|
$p[':reftype'] = gpc_get_enum($_POST, 'reftype', $opt_reftype, 'equipment');
|
||||||
|
/* $sql = "INSERT INTO docref "
|
||||||
. " (docid, refid, reftype) "
|
. " (docid, refid, reftype) "
|
||||||
. "VALUES "
|
. "VALUES "
|
||||||
. " (:docid, :refid, :reftype)";
|
. " (:docid, :refid, :reftype)";
|
||||||
@@ -165,7 +172,8 @@ switch ($submit = form_get_action()) {
|
|||||||
$sth->bindValue(':docid', $id, PDO::PARAM_INT);
|
$sth->bindValue(':docid', $id, PDO::PARAM_INT);
|
||||||
$sth->bindValue(':refid', $refid, PDO::PARAM_INT);
|
$sth->bindValue(':refid', $refid, PDO::PARAM_INT);
|
||||||
$sth->bindValue(':reftype', $reftype, PDO::PARAM_STR);
|
$sth->bindValue(':reftype', $reftype, PDO::PARAM_STR);
|
||||||
$sth->execute();
|
$sth->execute(); */
|
||||||
|
db_exec_insert('docref', $p);
|
||||||
$action = ACT_VIEW;
|
$action = ACT_VIEW;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -194,23 +202,24 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
// All documents
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
$flt = db_get_filter($user->id, 209);
|
$flt = db_get_filter($user->id, 209);
|
||||||
$opt_doctype = db_load_enum('document', 'doctype', true, true);
|
|
||||||
/* TODO show all documents which
|
|
||||||
- are completely unbound: no docref available
|
|
||||||
- assigned to the current boat: docref with doctype vessel
|
|
||||||
- are assigned to an equipment or project of current vesseö
|
|
||||||
There can be multiple docref entries for a document,
|
|
||||||
behavior still needs to be clarified. */
|
|
||||||
|
|
||||||
$w = array();
|
$w = array();
|
||||||
$p = array();
|
$p = array();
|
||||||
if ($flt->doctype != 'all') {
|
if (isset($flt->doctype) and $flt->doctype != 'all') {
|
||||||
$w[] = 'doctype=:doctype';
|
$w[] = 'doctype=:doctype';
|
||||||
$p[':doctype'] = $flt->doctype;
|
$p[':doctype'] = $flt->doctype;
|
||||||
}
|
}
|
||||||
|
if (isset($flt->reftype) and $flt->reftype != 'all') {
|
||||||
|
if ($flt->reftype == 'none') {
|
||||||
|
$w[] = 'reftype IS NULL';
|
||||||
|
} else {
|
||||||
|
$w[] = 'reftype=:reftype';
|
||||||
|
$p[':reftype'] = $flt->reftype;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (strlen($flt->txt) > 1) {
|
if (strlen($flt->txt) > 1) {
|
||||||
$w[] = '(filename LIKE :txt OR title LIKE :txt OR remarks LIKE :txt)';
|
$w[] = '(filename LIKE :txt OR title LIKE :txt OR remarks LIKE :txt)';
|
||||||
$p[':txt'] = '%'.$flt->txt.'%';
|
$p[':txt'] = '%'.$flt->txt.'%';
|
||||||
@@ -219,17 +228,34 @@ if (strlen($flt->txt) > 1) {
|
|||||||
$where = join(' AND ', $w);
|
$where = join(' AND ', $w);
|
||||||
$order = ' ORDER BY docid';
|
$order = ' ORDER BY docid';
|
||||||
|
|
||||||
|
// get total recond count for pagination and limit
|
||||||
|
$sql = "SELECT COUNT(*) FROM document LEFT OUTER JOIN docref USING (docid)";
|
||||||
|
if ($where) $sql .= ' WHERE ' . $where;
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
try {
|
||||||
|
$sth->execute($p);
|
||||||
|
} catch(PDOException $e) {
|
||||||
|
$g_error->Add($e->getMessage());
|
||||||
|
$g_error->Add($sql);
|
||||||
|
$g_error->Add(print_r($p, true));
|
||||||
|
}
|
||||||
|
$numrows = $sth->fetchColumn();
|
||||||
|
$lastpage = ceil($numrows/$g_rows_pp);
|
||||||
|
$page = gpc_get_int($_REQUEST, 'p', 1);
|
||||||
|
|
||||||
$sql = "SELECT d.docid, d.doctype, d.filename, d.title, COUNT(r.drid) AS refcount "
|
$sql = "SELECT d.docid, d.doctype, d.filename, d.title, COUNT(r.drid) AS refcount "
|
||||||
. "FROM document AS d LEFT OUTER JOIN docref AS r USING (docid)";
|
. "FROM document AS d LEFT OUTER JOIN docref AS r USING (docid)";
|
||||||
if ($where) $sql .= ' WHERE ' . $where;
|
if ($where) $sql .= ' WHERE ' . $where;
|
||||||
$sql .= " GROUP BY d.docid, d.doctype, d.filename, d.title";
|
$sql .= " GROUP BY d.docid, d.doctype, d.filename, d.title";
|
||||||
if ($order) $sql .= $order;
|
if ($order) $sql .= $order;
|
||||||
|
|
||||||
|
// if pagination:
|
||||||
|
$sql .= ' LIMIT ' . ($page - 1) * $g_rows_pp . ',' . $g_rows_pp;
|
||||||
|
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute($p);
|
$sth->execute($p);
|
||||||
$res = $sth->fetchAll();
|
$res = $sth->fetchAll();
|
||||||
|
|
||||||
echo "<h1>$pagetitle</h1>\n";
|
|
||||||
|
|
||||||
// Filter
|
// Filter
|
||||||
$opt_special = array(
|
$opt_special = array(
|
||||||
'all' => _('― all ―'),
|
'all' => _('― all ―'),
|
||||||
@@ -251,6 +277,19 @@ foreach ($opt_special + $opt_doctype as $k => $v) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</select>
|
</select>
|
||||||
|
<label for="flt_reftype"><?=_('Ref.-Type')?></label>
|
||||||
|
<select id="flt_reftype" name="flt_reftype">
|
||||||
|
<?php
|
||||||
|
$opt_special['none'] = _('― none ―');
|
||||||
|
foreach ($opt_special + $opt_reftype as $k => $v) {
|
||||||
|
echo '<option value="', $k,'"';
|
||||||
|
if ($k == $flt->reftype) {
|
||||||
|
echo ' selected';
|
||||||
|
}
|
||||||
|
echo '>', $v, '</option>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
<label for="flt_txt">Text</label>
|
<label for="flt_txt">Text</label>
|
||||||
<input type="text" name="flt_txt" size="15" maxlength="30" value="<?=$flt->txt?>">
|
<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>
|
<button name="submit[filter]" class="btn btn-sm btn-primary" title="<?=_('Apply')?>"><?=_('Go')?></button>
|
||||||
@@ -259,6 +298,11 @@ foreach ($opt_special + $opt_doctype as $k => $v) {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
// Pagination on top
|
||||||
|
$pagination = get_pagination($g_scriptname, '', $page, $lastpage);
|
||||||
|
echo $pagination;
|
||||||
|
|
||||||
|
// Data
|
||||||
echo '<table class="table table-striped">', "\n";
|
echo '<table class="table table-striped">', "\n";
|
||||||
echo "<thead>\n";
|
echo "<thead>\n";
|
||||||
echo "<tr>";
|
echo "<tr>";
|
||||||
@@ -290,6 +334,8 @@ echo '<tr><td colspan="6">', sprintf(_('%d records'), count($res)), '</td></tr>'
|
|||||||
echo "</tfoot>\n";
|
echo "</tfoot>\n";
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
|
echo $pagination;
|
||||||
|
|
||||||
form_add_button($g_scriptname);
|
form_add_button($g_scriptname);
|
||||||
|
|
||||||
elseif ($action == ACT_ADD):
|
elseif ($action == ACT_ADD):
|
||||||
@@ -300,11 +346,11 @@ echo '<h2>', _('Add Document'), "</h2>\n";
|
|||||||
<form method="post" enctype="multipart/form-data" action="<?=$g_scriptname?>">
|
<form method="post" enctype="multipart/form-data" action="<?=$g_scriptname?>">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="title" class="form-label"><?=_('Title')?></label>
|
<label for="title" class="form-label"><?=_('Title')?></label>
|
||||||
<input type="text" class="form-control" id="title" name="title" value="<?=$title?>">
|
<input type="text" class="form-control" id="title" name="title" value="<?=$title ?? ''?>">
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
||||||
<textarea class="form-control" id="remarks" name="remarks" rows="3"><?=$remarks?></textarea>
|
<textarea class="form-control" id="remarks" name="remarks" rows="3"><?=$remarks ?? ''?></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="files" class="form-label"><?=_('Document')?></label>
|
<label for="files" class="form-label"><?=_('Document')?></label>
|
||||||
@@ -356,9 +402,29 @@ echo '<tr><th scope="row" style="width:20%">', _('Document type'),"</th><td>", $
|
|||||||
if ($document->doctype == 'picture') {
|
if ($document->doctype == 'picture') {
|
||||||
$techname = sprintf('pic-%06d.%s', $document->docid, $document->extension);
|
$techname = sprintf('pic-%06d.%s', $document->docid, $document->extension);
|
||||||
echo '<tr><th scope="row">', _('Preview'), '</th><td>';
|
echo '<tr><th scope="row">', _('Preview'), '</th><td>';
|
||||||
echo '<a href="dl.php?id=', $document->docid, '" target="_blank">';
|
// echo '<a href="dl.php?id=', $document->docid, '" target="_blank">';
|
||||||
|
|
||||||
|
echo '<div class="image-gallery">';
|
||||||
|
echo '<a href="#" data-bs-toggle="modal" data-bs-target="#imageModal">';
|
||||||
echo '<img width="', $g_thumb_size, '" src="dl.php?id=', $document->docid, '" alt="', $document->title, '">';
|
echo '<img width="', $g_thumb_size, '" src="dl.php?id=', $document->docid, '" alt="', $document->title, '">';
|
||||||
echo '</a>';
|
echo '</a>';
|
||||||
|
echo '</div>'; // gallery
|
||||||
|
?>
|
||||||
|
<div class="modal fade" id="imageModal" tabindex="-1" aria-labelledby="imageModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<img src="dl.php?id=<?=$document->docid ?>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// echo '</a>';
|
||||||
echo "</td></tr>\n";
|
echo "</td></tr>\n";
|
||||||
} elseif (($document->doctype == 'drawing')) {
|
} elseif (($document->doctype == 'drawing')) {
|
||||||
$techname = sprintf('drw-%06d.%s', $document->docid, $document->extension);
|
$techname = sprintf('drw-%06d.%s', $document->docid, $document->extension);
|
||||||
@@ -391,7 +457,7 @@ echo "</table>\n";
|
|||||||
echo "</div>\n", '<div class="col text-center">', "\n"; // column break
|
echo "</div>\n", '<div class="col text-center">', "\n"; // column break
|
||||||
|
|
||||||
if ($document->mimetype == 'application/pdf') {
|
if ($document->mimetype == 'application/pdf') {
|
||||||
echo '<img src="dl.php?id=', $document->docid, '&p=', $page, '&t=l" alt="PDF-Preview">', "\n";
|
echo '<img id="preview" src="dl.php?id=', $document->docid, '&p=', $page, '&t=l" alt="PDF-Preview">', "\n";
|
||||||
if ($document->pages > 1) {
|
if ($document->pages > 1) {
|
||||||
$pagination = get_pagination($g_scriptname, 'f=view&id='.$id, $page, $document->pages, true);
|
$pagination = get_pagination($g_scriptname, 'f=view&id='.$id, $page, $document->pages, true);
|
||||||
echo $pagination;
|
echo $pagination;
|
||||||
@@ -407,6 +473,18 @@ form_view_buttons($g_scriptname, $id);
|
|||||||
echo '<h3>', _('Document references'), "</h3>\n";
|
echo '<h3>', _('Document references'), "</h3>\n";
|
||||||
$references = array();
|
$references = array();
|
||||||
|
|
||||||
|
// Vessel
|
||||||
|
$vids = array();
|
||||||
|
$sql = "SELECT drid, reftype, refid, vesselname AS target "
|
||||||
|
. "FROM docref INNER JOIN vessel ON (docref.reftype='vessel' AND docref.refid=vessel.vid) "
|
||||||
|
. "WHERE docid=?";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([$id]);
|
||||||
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
$references[] = $row;
|
||||||
|
$vids[] = $row['refid'];
|
||||||
|
}
|
||||||
|
|
||||||
// Equipment
|
// Equipment
|
||||||
$eids = array();
|
$eids = array();
|
||||||
$sql = "SELECT drid, reftype, refid, ename AS target "
|
$sql = "SELECT drid, reftype, refid, ename AS target "
|
||||||
@@ -458,6 +536,9 @@ echo "</table>\n";
|
|||||||
// New references
|
// New references
|
||||||
echo '<h4>', _('Add new reference'), "</h4>\n";
|
echo '<h4>', _('Add new reference'), "</h4>\n";
|
||||||
|
|
||||||
|
// enum('vessel','box','equipment','project','task','user','company')
|
||||||
|
//
|
||||||
|
|
||||||
// Equipment options
|
// Equipment options
|
||||||
// Do not include equipment that has already been referenced in the list!
|
// Do not include equipment that has already been referenced in the list!
|
||||||
$opt_equipment = array();
|
$opt_equipment = array();
|
||||||
@@ -470,7 +551,7 @@ foreach ($sth->fetchAll() as $row) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<form method="post" action="<?=$g_scriptname?>">
|
<form class="mb-3" method="post" action="<?=$g_scriptname?>">
|
||||||
<input type="hidden" name="id" value="<?=$id?>">
|
<input type="hidden" name="id" value="<?=$id?>">
|
||||||
<input type="hidden" name="reftype" value="equipment">
|
<input type="hidden" name="reftype" value="equipment">
|
||||||
<label for="eid"><?=_('Equipment')?></label>
|
<label for="eid"><?=_('Equipment')?></label>
|
||||||
@@ -485,19 +566,22 @@ foreach ($opt_equipment as $k => $v) {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
// Company options
|
||||||
|
// Do not include compamies that have already been referenced in this list
|
||||||
|
|
||||||
$opt_company = array();
|
$opt_company = array();
|
||||||
$sql = "SELECT compid, compname FROM company ORDER BY compname";
|
$sql = "SELECT compid, compname FROM company ORDER BY compname";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute();
|
$sth->execute();
|
||||||
foreach ($sth->fetchAll() as $row) {
|
foreach ($sth->fetchAll() as $row) {
|
||||||
if (!in_array($row['eid'], $compids)) {
|
if (!in_array($row['compid'], $compids)) {
|
||||||
$opt_company[$row['compid']] = $row['compname'];
|
$opt_company[$row['compid']] = $row['compname'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<form method="post" action="<?=$g_scriptname?>">
|
<form class="mb-3" method="post" action="<?=$g_scriptname?>">
|
||||||
<input type="hidden" name="id" value="<?=$id?>">
|
<input type="hidden" name="id" value="<?=$id?>">
|
||||||
<input type="hidden" name="reftype" value="company">
|
<input type="hidden" name="reftype" value="company">
|
||||||
<label for="compid"><?=_('Company')?></label>
|
<label for="compid"><?=_('Company')?></label>
|
||||||
|
|||||||
+5
-1
@@ -167,7 +167,7 @@ $listname = $sth->fetchColumn();
|
|||||||
|
|
||||||
echo '<h2>', sprintf(_('View List: %s'), $listname), "</h2>\n";
|
echo '<h2>', sprintf(_('View List: %s'), $listname), "</h2>\n";
|
||||||
|
|
||||||
$sql = "SELECT ddval, ddtext, ddshort, color, sort FROM dropdown WHERE ddid=?";
|
$sql = "SELECT ddval, ddtext, ddshort, color, sort, flags FROM dropdown WHERE ddid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute([$id]);
|
$sth->execute([$id]);
|
||||||
|
|
||||||
@@ -179,11 +179,14 @@ echo '<th>', _('Name'), "</th>";
|
|||||||
echo '<th>', _('Short'), "</th>";
|
echo '<th>', _('Short'), "</th>";
|
||||||
echo '<th>', _('Color'), "</th>";
|
echo '<th>', _('Color'), "</th>";
|
||||||
echo '<th>', _('Sort'), "</th>";
|
echo '<th>', _('Sort'), "</th>";
|
||||||
|
echo '<th>', _('Flags'), "</th>";
|
||||||
echo "<th></th>\n";
|
echo "<th></th>\n";
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
|
|
||||||
foreach ($sth->fetchAll() as $row) {
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
$flags = explode(',', $row['flags']);
|
||||||
|
$fixed = in_array('fixed', $flags);
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td>', $row['ddval'],'</td>';
|
echo '<td>', $row['ddval'],'</td>';
|
||||||
echo '<td>', $row['ddtext'], '</td>';
|
echo '<td>', $row['ddtext'], '</td>';
|
||||||
@@ -194,6 +197,7 @@ foreach ($sth->fetchAll() as $row) {
|
|||||||
echo '<td></td>';
|
echo '<td></td>';
|
||||||
}
|
}
|
||||||
echo '<td>', $row['sort'], '</td>';
|
echo '<td>', $row['sort'], '</td>';
|
||||||
|
echo '<td>', ($fixed ? '<i class="bi bi-lock"></i>' : ''), '</td>';
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|||||||
+42
-43
@@ -7,6 +7,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
require 'globals.inc';
|
require 'globals.inc';
|
||||||
|
require 'lib/fileutils.inc';
|
||||||
|
|
||||||
$pagetitle = _('Equipment');
|
$pagetitle = _('Equipment');
|
||||||
|
|
||||||
$id = gpc_get_int($_REQUEST, 'id', 0);
|
$id = gpc_get_int($_REQUEST, 'id', 0);
|
||||||
@@ -145,21 +147,23 @@ switch ($submit = form_get_action()) {
|
|||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute(['picture', $file_name, $file_ext, $file_hash, $file_timestamp, $file_size, $file_mimetype]);
|
$sth->execute(['picture', $file_name, $file_ext, $file_hash, $file_timestamp, $file_size, $file_mimetype]);
|
||||||
$docid = $pdo->lastInsertId();
|
$docid = $pdo->lastInsertId();
|
||||||
$file_techname = $g_doc_basepath . '/pic-'.$file_hash.'.'.$file_ext;
|
$file_techname = file_get_docname($docid, 'picture', $file_ext);
|
||||||
move_uploaded_file($file_tmp, $file_techname);
|
move_uploaded_file($file_tmp, $g_doc_basepath . '/' . $file_techname);
|
||||||
} else {
|
} else {
|
||||||
// A document record definitely exists here, now just
|
// A document record definitely exists here, now just
|
||||||
// connect it to the selected equipment
|
// connect it to the selected equipment
|
||||||
$docid = $row['docid'];
|
$docid = $row['docid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "INSERT INTO docref (docid, refid) VALUES (?, ?)";
|
$sql = "INSERT INTO docref (docid, refid, reftype) VALUES (?, ?, 'equipment')";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
// Reference may already exist!
|
// Reference may already exist!
|
||||||
try {
|
try {
|
||||||
$sth->execute([$docid, $id]);
|
$sth->execute([$docid, $id]);
|
||||||
} catch (PDOException $e) {
|
} catch (PDOException $e) {
|
||||||
$g_error->Add('SQL-Error: '. $e->getMessage());
|
$g_error->Add('SQL-Error: '. $e->getMessage());
|
||||||
|
$g_error->Add($sql);
|
||||||
|
// $g_error->Add(print_r($params, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // for
|
} // for
|
||||||
@@ -180,7 +184,8 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
// load filter from db
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
$flt = db_get_filter($user->id, 200);
|
$flt = db_get_filter($user->id, 200);
|
||||||
|
|
||||||
$sort = array(
|
$sort = array(
|
||||||
@@ -237,54 +242,22 @@ $sth = $pdo->prepare($sql);
|
|||||||
$sth->execute($p);
|
$sth->execute($p);
|
||||||
$res = $sth->fetchAll();
|
$res = $sth->fetchAll();
|
||||||
|
|
||||||
echo "<h1>$pagetitle</h1>\n";
|
|
||||||
|
|
||||||
// Filter
|
// Filter
|
||||||
$opt_special = array(
|
/*$opt_special = array(
|
||||||
-2 => _('― all ―'),
|
-2 => _('― all ―'),
|
||||||
-1 => _('― none ―')
|
-1 => _('― none ―')
|
||||||
);
|
); */
|
||||||
|
$opt_none_male = array(-1 => pgettext('male', '― none ―'));
|
||||||
?>
|
?>
|
||||||
<form method="post" action="<?=$g_scriptname?>">
|
<form method="post" action="<?=$g_scriptname?>">
|
||||||
<div id="filter" class="card">
|
<div id="filter" class="card">
|
||||||
<div class="card-header">Filter</div>
|
<div class="card-header">Filter</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<label for="flt_category"><?=_('Category')?></label>
|
|
||||||
<select id="flt_category" name="flt_category">
|
|
||||||
<?php
|
<?php
|
||||||
foreach ($opt_special + $opt_ecat as $k => $v) {
|
filter_create_select('flt_category', _('Category'), $g_opt_all + $g_opt_none + $opt_ecat, $flt->cat);
|
||||||
echo '<option value="', $k, '"';
|
filter_create_select('flt_manuf', _('Manufacturer'), $g_opt_all + $opt_none_male + $opt_manufacturer, $flt->manuf);
|
||||||
if ($k == $flt->cat) {
|
filter_create_select('flt_supp', _('Supplier'), $g_opt_all + $opt_none_male + $opt_supplier, $flt->supp);
|
||||||
echo ' selected';
|
|
||||||
}
|
|
||||||
echo '>', $v, '</option>';
|
|
||||||
}
|
|
||||||
?>
|
?>
|
||||||
</select>
|
|
||||||
<label for="flt_manuf"><?=_('Manufacturer')?></label>
|
|
||||||
<select id="flt_manuf" name="flt_manuf">
|
|
||||||
<?php
|
|
||||||
foreach ($opt_special + $opt_manufacturer as $k => $v) {
|
|
||||||
echo '<option value="', $k,'"';
|
|
||||||
if ($k == $flt->manuf) {
|
|
||||||
echo ' selected';
|
|
||||||
}
|
|
||||||
echo '>', $v, '</option>';
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</select>
|
|
||||||
<label for="flt_supp"><?=_('Supplier')?></label>
|
|
||||||
<select id="flt_supp" name="flt_supp">
|
|
||||||
<?php
|
|
||||||
foreach ($opt_special + $opt_supplier as $k => $v) {
|
|
||||||
echo '<option value="', $k,'"';
|
|
||||||
if ($k == $flt->supp) {
|
|
||||||
echo ' selected';
|
|
||||||
}
|
|
||||||
echo '>', $v, '</option>';
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</select>
|
|
||||||
<label for="flt_txt"><?=_('Text')?></label>
|
<label for="flt_txt"><?=_('Text')?></label>
|
||||||
<input type="text" name="flt_txt" size="15" maxlength="30" value="<?=$flt->txt?>">
|
<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>
|
<button name="submit[filter]" class="btn btn-sm btn-primary" title="<?=_('Apply')?>"><?=_('Go')?></button>
|
||||||
@@ -394,7 +367,7 @@ echo '<tr><th>', _('Serial'),"</th><td>", $equipment->serial, "</td></tr>\n";
|
|||||||
echo '<tr><th>', _('Weight'),"</th><td>", format_float($equipment->weight, 2, 'kg'), "</td></tr>\n";
|
echo '<tr><th>', _('Weight'),"</th><td>", format_float($equipment->weight, 2, 'kg'), "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Price'),"</th><td>", format_currency($equipment->price), "</td></tr>\n";
|
echo '<tr><th>', _('Price'),"</th><td>", format_currency($equipment->price), "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Purchase date'),"</th><td>", $equipment->purchdate, "</td></tr>\n";
|
echo '<tr><th>', _('Purchase date'),"</th><td>", $equipment->purchdate, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Supplier'),"</th><td>", $opt_supplier[$equipment->supplier], "</td></tr>\n";
|
echo '<tr><th>', _('Supplier'),"</th><td>", $equipment->supplier ? $opt_supplier[$equipment->supplier] : 'n/a', "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Category'),"</th><td>", $opt_ecat[$equipment->ecat], "</td></tr>\n";
|
echo '<tr><th>', _('Category'),"</th><td>", $opt_ecat[$equipment->ecat], "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Remarks'),"</th><td>", $equipment->remarks, "</td></tr>\n";
|
echo '<tr><th>', _('Remarks'),"</th><td>", $equipment->remarks, "</td></tr>\n";
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
@@ -422,6 +395,14 @@ foreach ($res as $row) {
|
|||||||
echo '<img width="120" src="dl.php?id=', $row['docid'], '&t=s" alt="', $row['title'], '">';
|
echo '<img width="120" src="dl.php?id=', $row['docid'], '&t=s" alt="', $row['title'], '">';
|
||||||
// echo $row['title'];
|
// echo $row['title'];
|
||||||
echo "</a>\n";
|
echo "</a>\n";
|
||||||
|
} elseif ($row['doctype'] == 'manual') {
|
||||||
|
echo "Manual: ";
|
||||||
|
echo '<a href="documents.php?f=view&id=', $row['docid'], '">';
|
||||||
|
echo $row['title'];
|
||||||
|
echo "</a>\n";
|
||||||
|
} else {
|
||||||
|
// unknown document type
|
||||||
|
echo "<span>Unknown document type:", $row['doctype'], "</span>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
@@ -487,6 +468,24 @@ echo '<a href="measurement.php?f=add&id=', $id, '" class="btn btn-primary" role=
|
|||||||
echo _('Add measurement'), "</a>\n";
|
echo _('Add measurement'), "</a>\n";
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
|
|
||||||
|
// Spare parts
|
||||||
|
echo '<h3>', _('Spare parts'), "</h3>";
|
||||||
|
|
||||||
|
$sql = "SELECT invid, invname FROM inventory WHERE eid=?";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([$id]);
|
||||||
|
if ($sth->rowCount() > 0) {
|
||||||
|
echo "<ul>\n";
|
||||||
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
echo "<li>", $row['invname'], ': ';
|
||||||
|
echo ' <a title="', _('View'), '" href="inventory.php?f=view&id=', $row['invid'], '"><i class="bi-eye"></i></a>';
|
||||||
|
echo "</li>\n";
|
||||||
|
}
|
||||||
|
echo "</ul>\n";
|
||||||
|
} else {
|
||||||
|
echo '<p>', _('No spare parts found.'), "<p>\n";
|
||||||
|
}
|
||||||
|
|
||||||
elseif ($action == ACT_EDIT):
|
elseif ($action == ACT_EDIT):
|
||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
|
|||||||
+21
-10
@@ -73,6 +73,9 @@ switch ($submit = form_get_action()) {
|
|||||||
$p[':beltpos_aft'] = gpc_get_float($_POST, 'beltpos_aft');
|
$p[':beltpos_aft'] = gpc_get_float($_POST, 'beltpos_aft');
|
||||||
$p[':beltpos_bow'] = gpc_get_float($_POST, 'beltpos_bow');
|
$p[':beltpos_bow'] = gpc_get_float($_POST, 'beltpos_bow');
|
||||||
$p[':shapefile'] = gpc_get_string($_POST, 'shapefile');
|
$p[':shapefile'] = gpc_get_string($_POST, 'shapefile');
|
||||||
|
if ($p[':shapefile'] == '-1') {
|
||||||
|
$p[':shapefile'] = NULL;
|
||||||
|
}
|
||||||
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
||||||
db_exec_update('vessel', $p, 'vid');
|
db_exec_update('vessel', $p, 'vid');
|
||||||
$action = ACT_DEFAULT;
|
$action = ACT_DEFAULT;
|
||||||
@@ -93,8 +96,7 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
|
page_caption_search(_('Yacht data'));
|
||||||
echo '<h1>', _('Yacht data'), "</h1>\n";
|
|
||||||
|
|
||||||
echo '<p>', _('User'), ': ', $user->displayname, ' (', $user->role, ')', "</p>\n";
|
echo '<p>', _('User'), ': ', $user->displayname, ' (', $user->role, ')', "</p>\n";
|
||||||
|
|
||||||
@@ -108,7 +110,7 @@ $vid = ($res[0]);
|
|||||||
// Switch between vessels
|
// Switch between vessels
|
||||||
$sth = $pdo->query("SELECT vid, vesselname, model FROM vessel ORDER BY vid");
|
$sth = $pdo->query("SELECT vid, vesselname, model FROM vessel ORDER BY vid");
|
||||||
$res = $sth->fetchAll();
|
$res = $sth->fetchAll();
|
||||||
echo '<form class="row" method="post">', "\n";
|
echo '<form class="row align-items-center" method="post">', "\n";
|
||||||
echo '<div class="col-1">', "\n";
|
echo '<div class="col-1">', "\n";
|
||||||
echo '<label class="form-label" for="vid">Yacht:</label>';
|
echo '<label class="form-label" for="vid">Yacht:</label>';
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
@@ -157,25 +159,29 @@ EOT;
|
|||||||
$shape = new SimpleXMLElement($baseshape);
|
$shape = new SimpleXMLElement($baseshape);
|
||||||
// $shape['width'], $shape['height']
|
// $shape['width'], $shape['height']
|
||||||
|
|
||||||
|
// offset for coordinate origin
|
||||||
|
$ox = 0;
|
||||||
|
$oy = 0;
|
||||||
|
|
||||||
$g = $shape->addChild('g');
|
$g = $shape->addChild('g');
|
||||||
$g->addAttribute('id', 'boxlayout');
|
$g->addAttribute('id', 'boxlayout');
|
||||||
|
|
||||||
// line for belt
|
// line for belt
|
||||||
if (isset($vessel->beltpos_aft) and isset($vessel->loa) and ($vessel->beltpos_aft < $vessel->loa)) {
|
if (isset($vessel->beltpos_aft) and isset($vessel->loa) and ($vessel->beltpos_aft < $vessel->loa)) {
|
||||||
$x = round($vessel->beltpos_aft / $vessel->loa * 1024);
|
$x = $ox + round($vessel->beltpos_aft / $vessel->loa * 1024);
|
||||||
$line = $g->addChild('line');
|
$line = $g->addChild('line');
|
||||||
$line->addAttribute('x1', $x);
|
$line->addAttribute('x1', $x);
|
||||||
$line->addAttribute('y1', '0');
|
$line->addAttribute('y1', $oy);
|
||||||
$line->addAttribute('x2', $x);
|
$line->addAttribute('x2', $x);
|
||||||
$line->addAttribute('y2', $shape['height']);
|
$line->addAttribute('y2', $shape['height']);
|
||||||
$line->addAttribute('style', 'stroke:#ff0000;stroke-width:1px');
|
$line->addAttribute('style', 'stroke:#ff0000;stroke-width:1px');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($vessel->beltpos_bow) and isset($vessel->loa) and ($vessel->beltpos_bow < $vessel->loa)) {
|
if (isset($vessel->beltpos_bow) and isset($vessel->loa) and ($vessel->beltpos_bow < $vessel->loa)) {
|
||||||
$x = round($vessel->beltpos_bow / $vessel->loa * 1024);
|
$x = $ox + round($vessel->beltpos_bow / $vessel->loa * 1024);
|
||||||
$line = $g->addChild('line');
|
$line = $g->addChild('line');
|
||||||
$line->addAttribute('x1', $x);
|
$line->addAttribute('x1', $x);
|
||||||
$line->addAttribute('y1', '0');
|
$line->addAttribute('y1', $oy);
|
||||||
$line->addAttribute('x2', $x);
|
$line->addAttribute('x2', $x);
|
||||||
$line->addAttribute('y2', $shape['height']);
|
$line->addAttribute('y2', $shape['height']);
|
||||||
$line->addAttribute('style', 'stroke:#ff0000;stroke-width:1px');
|
$line->addAttribute('style', 'stroke:#ff0000;stroke-width:1px');
|
||||||
@@ -240,7 +246,11 @@ $text->addAttribute('y', '95'); */
|
|||||||
|
|
||||||
?>
|
?>
|
||||||
<div class="container-fluid my-4">
|
<div class="container-fluid my-4">
|
||||||
<?=$shape->asXML()?>
|
<?php
|
||||||
|
$xml = $shape->asXML();
|
||||||
|
// strip first line: xml version ...
|
||||||
|
echo substr($xml, strpos($xml, "\n") + 1);
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
@@ -336,6 +346,7 @@ echo "</table>\n";
|
|||||||
<h5 class="card-title"><?=_('Base data')?></h5>
|
<h5 class="card-title"><?=_('Base data')?></h5>
|
||||||
<ul class="list-group list-group-flush">
|
<ul class="list-group list-group-flush">
|
||||||
<li class="list-group-item"><a href="dropdown.php"><?=_('Selection lists')?></a></li>
|
<li class="list-group-item"><a href="dropdown.php"><?=_('Selection lists')?></a></li>
|
||||||
|
<li class="list-group-item"><a href="tag.php"><?=_('Tags')?></a></li>
|
||||||
<li class="list-group-item"><a href="storage.php"><?=_('Storage')?></a></li>
|
<li class="list-group-item"><a href="storage.php"><?=_('Storage')?></a></li>
|
||||||
<li class="list-group-item"><a href="company.php"><?=_('Companies')?></a></li>
|
<li class="list-group-item"><a href="company.php"><?=_('Companies')?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -345,7 +356,6 @@ echo "</table>\n";
|
|||||||
<li class="list-group-item"><a href="task.php"><?=_('Tasks')?></a></li>
|
<li class="list-group-item"><a href="task.php"><?=_('Tasks')?></a></li>
|
||||||
<li class="list-group-item"><a href="measurement.php"><?=_('Measurements')?></a></li>
|
<li class="list-group-item"><a href="measurement.php"><?=_('Measurements')?></a></li>
|
||||||
<li class="list-group-item"><a href="checklist.php"><?=_('Checklists')?></a></li>
|
<li class="list-group-item"><a href="checklist.php"><?=_('Checklists')?></a></li>
|
||||||
<li class="list-group-item"><a href="search.php"><?=_('Search')?></a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -387,7 +397,8 @@ elseif ($action == ACT_EDIT):
|
|||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
// get list of shapefiles
|
// get list of shapefiles
|
||||||
$opt_shapefiles = array('' => _('--- none ---'));
|
//$opt_shapefiles = array('' => _('--- none ---'));
|
||||||
|
$opt_shapefiles = $g_opt_none;
|
||||||
foreach (glob($g_shapedir.'/*.svg') as $f) {
|
foreach (glob($g_shapedir.'/*.svg') as $f) {
|
||||||
$f = basename($f);
|
$f = basename($f);
|
||||||
$opt_shapefiles[$f] = $f;
|
$opt_shapefiles[$f] = $f;
|
||||||
|
|||||||
+45
-24
@@ -14,6 +14,7 @@ $id = gpc_get_int($_REQUEST, 'id', 0);
|
|||||||
$opt_storage = db_get_opt_storage($user->vid);
|
$opt_storage = db_get_opt_storage($user->vid);
|
||||||
$opt_box = db_get_opt_box($user->vid);
|
$opt_box = db_get_opt_box($user->vid);
|
||||||
$opt_invcond = db_load_enum('inventory', 'invcond', true, true);
|
$opt_invcond = db_load_enum('inventory', 'invcond', true, true);
|
||||||
|
$opt_equipment = db_get_opt_equip($user->vid, [-1 => _('― none ―')]);
|
||||||
|
|
||||||
// ========== ACTIONS START ===================================================
|
// ========== ACTIONS START ===================================================
|
||||||
|
|
||||||
@@ -59,6 +60,7 @@ switch ($submit = form_get_action()) {
|
|||||||
$p[':purchdate'] = gpc_get_date($_POST, 'purchdate');
|
$p[':purchdate'] = gpc_get_date($_POST, 'purchdate');
|
||||||
$p[':invcond'] = gpc_get_string($_POST, 'invcond');
|
$p[':invcond'] = gpc_get_string($_POST, 'invcond');
|
||||||
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
||||||
|
$p[':eid'] = gpc_get_int($_POST, 'eid');
|
||||||
db_exec_update('inventory', $p, 'invid');
|
db_exec_update('inventory', $p, 'invid');
|
||||||
$action = ACT_VIEW;
|
$action = ACT_VIEW;
|
||||||
break;
|
break;
|
||||||
@@ -92,6 +94,8 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
$flt = db_get_filter($user->id, 201);
|
$flt = db_get_filter($user->id, 201);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -99,8 +103,6 @@ The only way to find out whether the inventory is on the current boat is to use
|
|||||||
the box assignment. But this is also intentional to allow easy rearrangement.
|
the box assignment. But this is also intentional to allow easy rearrangement.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
echo "<h1>$pagetitle</h1>\n";
|
|
||||||
|
|
||||||
$w = array('vid=:vid');
|
$w = array('vid=:vid');
|
||||||
$p = array(':vid' => $user->vid);
|
$p = array(':vid' => $user->vid);
|
||||||
if ($flt->stor == -1) {
|
if ($flt->stor == -1) {
|
||||||
@@ -109,10 +111,10 @@ if ($flt->stor == -1) {
|
|||||||
$w[] = 'i.sid=:sid';
|
$w[] = 'i.sid=:sid';
|
||||||
$p[':sid'] = $flt->stor;
|
$p[':sid'] = $flt->stor;
|
||||||
}
|
}
|
||||||
/*if ($flt->cond <> 'all') {
|
if (strlen($flt->cond) > 2 ) {
|
||||||
$w[] = 'indcond=:indcond';
|
$w[] = 'invcond=:invcond';
|
||||||
$p[':indcond'] = $flt->cond;
|
$p[':invcond'] = $flt->cond;
|
||||||
}*/
|
}
|
||||||
if (strlen($flt->txt) > 1) {
|
if (strlen($flt->txt) > 1) {
|
||||||
$w[] = 'invname LIKE :txt';
|
$w[] = 'invname LIKE :txt';
|
||||||
$p[':txt'] = '%'.$flt->txt.'%';
|
$p[':txt'] = '%'.$flt->txt.'%';
|
||||||
@@ -120,6 +122,22 @@ if (strlen($flt->txt) > 1) {
|
|||||||
$where = join(' AND ', $w);
|
$where = join(' AND ', $w);
|
||||||
$order = ' ORDER BY invname';
|
$order = ' ORDER BY invname';
|
||||||
|
|
||||||
|
$sql = "SELECT "
|
||||||
|
. "(SELECT COUNT(*) FROM inventory AS i JOIN storage AS s ON (i.conttype='storage' AND i.sid=s.sid) WHERE $where)"
|
||||||
|
. "+"
|
||||||
|
. "(SELECT COUNT(*) FROM inventory AS i JOIN box AS b ON (i.conttype='box' AND i.boxid=b.boxid) JOIN storage AS s ON (b.sid=s.sid) WHERE $where)";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
try {
|
||||||
|
$sth->execute($p);
|
||||||
|
} catch(PDOException $e) {
|
||||||
|
$g_error->Add($e->getMessage());
|
||||||
|
$g_error->Add($sql);
|
||||||
|
$g_error->Add(print_r($p, true));
|
||||||
|
}
|
||||||
|
$numrows = $sth->fetchColumn();
|
||||||
|
$lastpage = ceil($numrows/$g_rows_pp);
|
||||||
|
$page = gpc_get_int($_REQUEST, 'p', 1);
|
||||||
|
|
||||||
$sql = "SELECT i.invid, i.invname, i.number, i.invcond, s.sname AS container "
|
$sql = "SELECT i.invid, i.invname, i.number, i.invcond, s.sname AS container "
|
||||||
. "FROM inventory AS i JOIN storage AS s ON (i.conttype='storage' AND i.sid=s.sid)";
|
. "FROM inventory AS i JOIN storage AS s ON (i.conttype='storage' AND i.sid=s.sid)";
|
||||||
$sql .= ' WHERE ' . $where;
|
$sql .= ' WHERE ' . $where;
|
||||||
@@ -128,6 +146,10 @@ $sql .= " UNION SELECT i.invid, i.invname, i.number, i.invcond, b.label AS conta
|
|||||||
. " JOIN storage AS s ON (b.sid=s.sid) ";
|
. " JOIN storage AS s ON (b.sid=s.sid) ";
|
||||||
$sql .= ' WHERE ' . $where;
|
$sql .= ' WHERE ' . $where;
|
||||||
$sql .= $order;
|
$sql .= $order;
|
||||||
|
|
||||||
|
// if pagination:
|
||||||
|
$sql .= ' LIMIT ' . ($page - 1) * $g_rows_pp . ',' . $g_rows_pp;
|
||||||
|
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
try {
|
try {
|
||||||
$sth->execute($p);
|
$sth->execute($p);
|
||||||
@@ -169,6 +191,9 @@ foreach ($opt_special + $opt_storage as $k => $v) {
|
|||||||
<label for="flt_cond"><?=_('Condition')?></label>
|
<label for="flt_cond"><?=_('Condition')?></label>
|
||||||
<select id="flt_cond" name="flt_cond">
|
<select id="flt_cond" name="flt_cond">
|
||||||
<?php
|
<?php
|
||||||
|
$opt_special = array(
|
||||||
|
-2 => _('― all ―'),
|
||||||
|
);
|
||||||
foreach ($opt_special + $opt_invcond as $k => $v) {
|
foreach ($opt_special + $opt_invcond as $k => $v) {
|
||||||
echo '<option value="', $k,'"';
|
echo '<option value="', $k,'"';
|
||||||
if ($k == $flt->cond) {
|
if ($k == $flt->cond) {
|
||||||
@@ -186,6 +211,10 @@ foreach ($opt_special + $opt_invcond as $k => $v) {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
// Pagination on top
|
||||||
|
$pagination = get_pagination($g_scriptname, '', $page, $lastpage);
|
||||||
|
echo $pagination;
|
||||||
|
|
||||||
echo '<table class="table table-striped">', "\n";
|
echo '<table class="table table-striped">', "\n";
|
||||||
echo "<thead>\n";
|
echo "<thead>\n";
|
||||||
echo "<tr>\n";
|
echo "<tr>\n";
|
||||||
@@ -213,6 +242,8 @@ echo '<tr><td colspan="5">', sprintf(_('%d records'), count($res)), '</td></tr>'
|
|||||||
echo "</tfoot>\n";
|
echo "</tfoot>\n";
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
|
echo $pagination;
|
||||||
|
|
||||||
form_add_button($g_scriptname);
|
form_add_button($g_scriptname);
|
||||||
|
|
||||||
elseif ($action == ACT_ADD):
|
elseif ($action == ACT_ADD):
|
||||||
@@ -299,10 +330,11 @@ echo "<tr><th>", _('Number'), "</th><td>", $inventory->number, "</td></tr>\n";
|
|||||||
echo "<tr><th>", _('Weight'), "</th><td>", format_float($inventory->weight, 2, 'kg'), "</td></tr>\n";
|
echo "<tr><th>", _('Weight'), "</th><td>", format_float($inventory->weight, 2, 'kg'), "</td></tr>\n";
|
||||||
echo "<tr><th>", _('Price'), "</th><td>", format_currency($inventory->price), "</td></tr>\n";
|
echo "<tr><th>", _('Price'), "</th><td>", format_currency($inventory->price), "</td></tr>\n";
|
||||||
echo "<tr><th>", _('Purchase date'), "</th><td>", $inventory->purchdate, "</td></tr>\n";
|
echo "<tr><th>", _('Purchase date'), "</th><td>", $inventory->purchdate, "</td></tr>\n";
|
||||||
echo "<tr><th>", _('Condition'), "</th><td>", $inventory->invcond, "</td></tr>\n";
|
echo "<tr><th>", _('Condition'), "</th><td>", $opt_invcond[$inventory->invcond], "</td></tr>\n";
|
||||||
echo "<tr><th>", _('Remarks'), "</th><td>", $inventory->remarks, "</td></tr>\n";
|
echo "<tr><th>", _('Remarks'), "</th><td>", $inventory->remarks, "</td></tr>\n";
|
||||||
|
|
||||||
form_tag_assignment($g_scriptname, $id);
|
$tags = db_load_taglist('inv', $id);
|
||||||
|
form_tag_assignment($g_scriptname, $id, $tags);
|
||||||
|
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
@@ -312,7 +344,7 @@ elseif ($action == ACT_EDIT):
|
|||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT invname, conttype, sid, boxid, number, weight, price, purchdate, "
|
$sql = "SELECT invname, conttype, sid, boxid, number, weight, price, purchdate, "
|
||||||
. " invcond, remarks "
|
. " invcond, eid, remarks "
|
||||||
. "FROM inventory "
|
. "FROM inventory "
|
||||||
. "WHERE invid=?";
|
. "WHERE invid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
@@ -335,14 +367,9 @@ $inventory = $sth->fetch(PDO::FETCH_OBJ);
|
|||||||
<label for="weight" class="form-label"><?=_('Weight, kg')?></label>
|
<label for="weight" class="form-label"><?=_('Weight, kg')?></label>
|
||||||
<input type="text" class="form-control" id="weight" name="weight" value="<?=format_float($inventory->weight); ?>">
|
<input type="text" class="form-control" id="weight" name="weight" value="<?=format_float($inventory->weight); ?>">
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
|
||||||
<label for="conttype" class="form-label"><?=_('Container type')?></label>
|
|
||||||
<select class="form-select" name="conttype" id="conttype">
|
|
||||||
<option value="box"><?=_('Box')?></option>
|
|
||||||
<option value="storage"><?=_('Storage')?></option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<?php
|
<?php
|
||||||
|
$opt_conttype = db_load_enum('inventory', 'conttype', true, true);
|
||||||
|
form_create_select('conttype', _('Container type'), $opt_conttype, $inventory->conttype);
|
||||||
form_create_select('sid', _('Storage'), $opt_storage, $inventory->sid);
|
form_create_select('sid', _('Storage'), $opt_storage, $inventory->sid);
|
||||||
form_create_select('boxid', _('Box'), $opt_box, $inventory->boxid);
|
form_create_select('boxid', _('Box'), $opt_box, $inventory->boxid);
|
||||||
?>
|
?>
|
||||||
@@ -358,14 +385,7 @@ form_create_select('boxid', _('Box'), $opt_box, $inventory->boxid);
|
|||||||
<label for="invcond" class="form-label"><?=_('Condition')?></label>
|
<label for="invcond" class="form-label"><?=_('Condition')?></label>
|
||||||
<select name="invcond" id="invcond" class="form-control">
|
<select name="invcond" id="invcond" class="form-control">
|
||||||
<?php
|
<?php
|
||||||
$cond = array(
|
$cond = db_load_enum('inventory', 'invcond', true, true);
|
||||||
'good' => _('Good'),
|
|
||||||
'normal' => _('Normal'),
|
|
||||||
'bad' => _('Bad'),
|
|
||||||
'repairable' => _('Repairable'),
|
|
||||||
'defect' => _('Defect'),
|
|
||||||
'unknown' => _('Unknown')
|
|
||||||
);
|
|
||||||
foreach ($cond as $k => $v) {
|
foreach ($cond as $k => $v) {
|
||||||
echo '<option value="', $k, '"';
|
echo '<option value="', $k, '"';
|
||||||
if ($k == $inventory->invcond) {
|
if ($k == $inventory->invcond) {
|
||||||
@@ -376,6 +396,7 @@ foreach ($cond as $k => $v) {
|
|||||||
?>
|
?>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<?php form_create_select('eid', _('Equipment'), $opt_equipment, $inventory->eid); ?>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
||||||
<textarea class="form-control" id="remarks" name="remarks" rows="3"><?=$inventory->remarks ?></textarea>
|
<textarea class="form-control" id="remarks" name="remarks" rows="3"><?=$inventory->remarks ?></textarea>
|
||||||
|
|||||||
@@ -66,11 +66,11 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
// load filter from db
|
// load filter from db
|
||||||
$flt = db_get_filter($user->id, 204);
|
$flt = db_get_filter($user->id, 204);
|
||||||
|
|
||||||
echo '<h1>', $pagetitle, "</h1>\n";
|
|
||||||
|
|
||||||
// Filter
|
// Filter
|
||||||
$opt_special = array(
|
$opt_special = array(
|
||||||
-2 => _('― all ―'),
|
-2 => _('― all ―'),
|
||||||
@@ -122,10 +122,11 @@ foreach ($res as $row) {
|
|||||||
echo "<td>". $row['ename'] ."</td>\n";
|
echo "<td>". $row['ename'] ."</td>\n";
|
||||||
echo "<td>". $row['remarks'] ."</td>\n";
|
echo "<td>". $row['remarks'] ."</td>\n";
|
||||||
// Action buttons
|
// Action buttons
|
||||||
echo "<td>";
|
/* echo "<td>";
|
||||||
echo '<a title="', _('View'), '" href="', $g_scriptname, '?f=view&id=', $row['maintid'], '"><i class="bi-eye"></i></a>', "\n";
|
echo '<a title="', _('View'), '" href="', $g_scriptname, '?f=view&id=', $row['maintid'], '"><i class="bi-eye"></i></a>', "\n";
|
||||||
echo '<a title="', _('Edit'), '" href="', $g_scriptname, '?f=edit&id=', $row['maintid'], '"><i class="bi-pencil"></i></a>', "\n";
|
echo '<a title="', _('Edit'), '" href="', $g_scriptname, '?f=edit&id=', $row['maintid'], '"><i class="bi-pencil"></i></a>', "\n";
|
||||||
echo "</td>\n";
|
echo "</td>\n"; */
|
||||||
|
form_action_buttons($g_scriptname, $row['maintid']);
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
}
|
}
|
||||||
// Table summary
|
// Table summary
|
||||||
@@ -202,7 +203,7 @@ echo '<div class="col">';
|
|||||||
echo '<table class="table">', "\n";
|
echo '<table class="table">', "\n";
|
||||||
echo '<tr><th>', _('Activities'),"</th><td>", $maint->activities, "</td></tr>\n";
|
echo '<tr><th>', _('Activities'),"</th><td>", $maint->activities, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Equipment'),"</th><td>", $maint->ename;
|
echo '<tr><th>', _('Equipment'),"</th><td>", $maint->ename;
|
||||||
if (isset($maint->eid)) {
|
if (isset($maint->eid) and $maint->eid>0) {
|
||||||
// Link to equipment
|
// Link to equipment
|
||||||
echo ' <a href="equipment.php?f=view&id=', $maint->eid, '"><i class="bi-eye"></i></a>';
|
echo ' <a href="equipment.php?f=view&id=', $maint->eid, '"><i class="bi-eye"></i></a>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,11 @@ oder nach Betriebsstunden definiert werden.</p>
|
|||||||
<p>Einem Projekt werden Aufgaben zugeordnet, es hat einen Status wie
|
<p>Einem Projekt werden Aufgaben zugeordnet, es hat einen Status wie
|
||||||
z.B. <em>neu</em>, <em>laufend</em> oder <em>erledigt</em>.</p>
|
z.B. <em>neu</em>, <em>laufend</em> oder <em>erledigt</em>.</p>
|
||||||
|
|
||||||
|
<h3>Aufgaben</h3>
|
||||||
|
<p>Aufgaben sind normalerweise den aktuell ausgewählten Boot zugeordnet,
|
||||||
|
können aber auch bootsunabhängig angelegt werden. Eine projektzuordnung
|
||||||
|
ist ebenfalls vorgesehen</p>
|
||||||
|
|
||||||
<h3>Firmen</h3>
|
<h3>Firmen</h3>
|
||||||
<p>Es können verschiedene Arten von Firmen hinterlegt werden, wie
|
<p>Es können verschiedene Arten von Firmen hinterlegt werden, wie
|
||||||
beispielsweise Hersteller, Lieferanten, Werften oder Dienstleister.</p>
|
beispielsweise Hersteller, Lieferanten, Werften oder Dienstleister.</p>
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ form_create_select('eid', _('Equipment'), $opt_equipment, $id);
|
|||||||
elseif ($action == ACT_VIEW):
|
elseif ($action == ACT_VIEW):
|
||||||
// ========== VARIANT: view single record =====================================
|
// ========== VARIANT: view single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT mname, unit, nval, val1, val2, val3, accuracy, mdate, note "
|
$sql = "SELECT mname, unit, nval, val1, val2, val3, accuracy, mdate, note, eid "
|
||||||
. "FROM measurement "
|
. "FROM measurement "
|
||||||
. "WHERE mid=?";
|
. "WHERE mid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
@@ -259,6 +259,7 @@ 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>', _('Accuracy'),"</th><td>$measurement->accuracy</td></tr>\n";
|
||||||
echo '<tr><th>', _('Date'),"</th><td>$measurement->mdate</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 '<tr><th>', _('Note'),"</th><td>$measurement->note</td></tr>\n";
|
||||||
|
echo '<tr><th>', _('Equipment'), '</th><td>', $opt_equipment[$measurement->eid], "</td></tr>\n";
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
form_view_buttons($g_scriptname, $id);
|
form_view_buttons($g_scriptname, $id);
|
||||||
@@ -267,7 +268,7 @@ form_view_buttons($g_scriptname, $id);
|
|||||||
elseif ($action == ACT_EDIT):
|
elseif ($action == ACT_EDIT):
|
||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT mname, nval, val1, val2, val3, unit, accuracy, note "
|
$sql = "SELECT mname, nval, val1, val2, val3, unit, accuracy, note, eid "
|
||||||
. "FROM measurement "
|
. "FROM measurement "
|
||||||
. "WHERE mid=?";
|
. "WHERE mid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
|
|||||||
+2
-3
@@ -62,7 +62,7 @@ switch ($submit = form_get_action()) {
|
|||||||
// now really delete
|
// now really delete
|
||||||
$sth = $pdo->prepare("DELETE FROM note WHERE noteid=?");
|
$sth = $pdo->prepare("DELETE FROM note WHERE noteid=?");
|
||||||
$sth->execute([$id]);
|
$sth->execute([$id]);
|
||||||
header_location($backlink);
|
header_location($backlink, ['info' => _('Note deleted.')]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -111,6 +111,7 @@ foreach ($res as $row) {
|
|||||||
echo "<td>", $row['refid'], "</td>\n";
|
echo "<td>", $row['refid'], "</td>\n";
|
||||||
echo "<td>", $row['notetype'], "</td>\n";
|
echo "<td>", $row['notetype'], "</td>\n";
|
||||||
echo "<td>", $row['annotation'], "</td>\n";
|
echo "<td>", $row['annotation'], "</td>\n";
|
||||||
|
form_action_buttons($g_scriptname, $row['noteid']);
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,8 +205,6 @@ echo "</form>\n";
|
|||||||
elseif ($action == ACT_DELETE):
|
elseif ($action == ACT_DELETE):
|
||||||
// ========== VARIANT: delete record ==========================================
|
// ========== VARIANT: delete record ==========================================
|
||||||
|
|
||||||
echo '<h2>', _('Delete Note'), "</h2>\n";
|
|
||||||
|
|
||||||
$sql = "SELECT notetype, annotation FROM note WHERE noteid=?";
|
$sql = "SELECT notetype, annotation FROM note WHERE noteid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute([$id]);
|
$sth->execute([$id]);
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
echo '<h1>', $pagetitle, "</h1>\n";
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
$sql = "SELECT projid, projname, startdate, duration, remarks "
|
$sql = "SELECT projid, projname, startdate, duration, remarks "
|
||||||
. "FROM project "
|
. "FROM project "
|
||||||
|
|||||||
+14
-5
@@ -12,7 +12,7 @@ $pagetitle=_('Provisions');
|
|||||||
$id = gpc_get_int($_REQUEST, 'id', 0);
|
$id = gpc_get_int($_REQUEST, 'id', 0);
|
||||||
|
|
||||||
$opt_storage = db_get_opt_storage($user->vid);
|
$opt_storage = db_get_opt_storage($user->vid);
|
||||||
$opt_catgory = db_get_options(5);
|
$opt_category = db_get_options(5);
|
||||||
$opt_unit = db_get_options(6);
|
$opt_unit = db_get_options(6);
|
||||||
|
|
||||||
// ========== ACTIONS START ===================================================
|
// ========== ACTIONS START ===================================================
|
||||||
@@ -28,6 +28,7 @@ switch ($submit = form_get_action()) {
|
|||||||
|
|
||||||
case 'filter':
|
case 'filter':
|
||||||
$flt = array();
|
$flt = array();
|
||||||
|
$flt['cat'] = gpc_get_enum($_POST, 'flt_cat', array_merge(array_keys($opt_category), ['-2', '-1']));
|
||||||
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
|
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
|
||||||
db_save_filter($flt, 202);
|
db_save_filter($flt, 202);
|
||||||
$action = ACT_DEFAULT;
|
$action = ACT_DEFAULT;
|
||||||
@@ -46,6 +47,7 @@ switch ($submit = form_get_action()) {
|
|||||||
case 'update':
|
case 'update':
|
||||||
$p[':provid'] = $id;
|
$p[':provid'] = $id;
|
||||||
$p[':provname'] = gpc_get_string($_POST, 'provname');
|
$p[':provname'] = gpc_get_string($_POST, 'provname');
|
||||||
|
$p[':provcat'] = gpc_get_int($_POST, 'provcat');
|
||||||
$p[':number'] = gpc_get_int($_POST, 'number');
|
$p[':number'] = gpc_get_int($_POST, 'number');
|
||||||
$p[':unit'] = gpc_get_int($_POST, 'unit');
|
$p[':unit'] = gpc_get_int($_POST, 'unit');
|
||||||
$p[':storedate'] = gpc_get_string($_POST, 'storedate');
|
$p[':storedate'] = gpc_get_string($_POST, 'storedate');
|
||||||
@@ -104,12 +106,15 @@ $sth = $pdo->prepare($sql);
|
|||||||
$sth->execute($p);
|
$sth->execute($p);
|
||||||
$res = $sth->fetchAll();
|
$res = $sth->fetchAll();
|
||||||
|
|
||||||
echo "<h1>", $pagetitle, "</h1>\n";
|
page_caption_search($pagetitle);
|
||||||
?>
|
?>
|
||||||
<form method="post" action="<?=$g_scriptname?>">
|
<form method="post" action="<?=$g_scriptname?>">
|
||||||
<div id="filter" class="card">
|
<div id="filter" class="card">
|
||||||
<div class="card-header">Filter</div>
|
<div class="card-header">Filter</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
<?php
|
||||||
|
filter_create_select('flt_cat', _('Category'), $g_opt_all + $g_opt_none + $opt_category, $flt->cat);
|
||||||
|
?>
|
||||||
<label for="flt_txt">Text</label>
|
<label for="flt_txt">Text</label>
|
||||||
<input type="text" name="flt_txt" size="15" maxlength="30" value="<?=$flt->txt?>">
|
<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>
|
<button name="submit[filter]" class="btn btn-sm btn-primary" title="<?=_('Apply')?>"><?=_('Go')?></button>
|
||||||
@@ -187,7 +192,7 @@ echo '<h2>', _('Add provisions'), "</h2>\n";
|
|||||||
elseif ($action == ACT_VIEW):
|
elseif ($action == ACT_VIEW):
|
||||||
// ========== VARIANT: view single record =====================================
|
// ========== VARIANT: view single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT provname, number, unit, storedate, shelflife, sid "
|
$sql = "SELECT provname, provcat, number, unit, storedate, shelflife, sid "
|
||||||
. "FROM provisions "
|
. "FROM provisions "
|
||||||
. "WHERE provid=?";
|
. "WHERE provid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
@@ -199,6 +204,7 @@ echo '<h2>', $prov->provname, "</h2>\n";
|
|||||||
echo '<table class="table">', "\n";
|
echo '<table class="table">', "\n";
|
||||||
echo '<tr><th style="width:20%">', _('Number'),"</th><td>", $prov->number, "</td></tr>\n";
|
echo '<tr><th style="width:20%">', _('Number'),"</th><td>", $prov->number, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Unit'),"</th><td>", $opt_unit[$prov->unit], "</td></tr>\n";
|
echo '<tr><th>', _('Unit'),"</th><td>", $opt_unit[$prov->unit], "</td></tr>\n";
|
||||||
|
echo '<tr><th>', _('Category'),"</th><td>", $opt_category[$prov->provcat] ?? 'n/a', "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Storedate'),"</th><td>", $prov->storedate, "</td></tr>\n";
|
echo '<tr><th>', _('Storedate'),"</th><td>", $prov->storedate, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Shelflife'),"</th><td>$prov->shelflife</td></tr>\n";
|
echo '<tr><th>', _('Shelflife'),"</th><td>$prov->shelflife</td></tr>\n";
|
||||||
echo '<tr><th>', _('Storage'),"</th><td>", ($opt_storage[$prov->sid] ?? ''), "</td></tr>\n";
|
echo '<tr><th>', _('Storage'),"</th><td>", ($opt_storage[$prov->sid] ?? ''), "</td></tr>\n";
|
||||||
@@ -209,7 +215,7 @@ form_view_buttons($g_scriptname, $id);
|
|||||||
elseif ($action == ACT_EDIT):
|
elseif ($action == ACT_EDIT):
|
||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT provname, number, unit, storedate, shelflife, sid "
|
$sql = "SELECT provname, provcat, number, unit, storedate, shelflife, sid "
|
||||||
. "FROM provisions "
|
. "FROM provisions "
|
||||||
. "WHERE provid=?";
|
. "WHERE provid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
@@ -228,7 +234,10 @@ echo '<h2>', _('Edit provision'), "</h2>\n";
|
|||||||
<label for="number"><?=_('Number')?></label>
|
<label for="number"><?=_('Number')?></label>
|
||||||
<input type="number" min="0" max="1000" class="form-control" id="number" name="number" value="<?=$prov->number ?>">
|
<input type="number" min="0" max="1000" class="form-control" id="number" name="number" value="<?=$prov->number ?>">
|
||||||
</div>
|
</div>
|
||||||
<?php form_create_select('unit', _('Unit'), $opt_unit, $prov->unit); ?>
|
<?php
|
||||||
|
form_create_select('unit', _('Unit'), $opt_unit, $prov->unit);
|
||||||
|
form_create_select('provcat', _('Category'), array_merge($g_opt_none, $opt_category), $prov->provcat);
|
||||||
|
?>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="storedate"><?=_('Storedate')?></label>
|
<label for="storedate"><?=_('Storedate')?></label>
|
||||||
<input type="date" class="form-control" id="storedate" name="storedate" value="<?=$prov->storedate ?>">
|
<input type="date" class="form-control" id="storedate" name="storedate" value="<?=$prov->storedate ?>">
|
||||||
|
|||||||
+73
-18
@@ -26,57 +26,112 @@ echo "<h1>$pagetitle</h1>\n";
|
|||||||
<label for="remarks">Bemerkungsfelder berücksichtigen</label>
|
<label for="remarks">Bemerkungsfelder berücksichtigen</label>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary" name="submit[search]"><?=_('Search')?></button>
|
<button type="submit" class="btn btn-primary" name="submit[search]"><?=_('Search')?></button>
|
||||||
</form>
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
if ($g_referrer != $g_scriptname) {
|
||||||
|
echo '<a class="btn btn-secondary" href="', $g_referrer, '">', _('Back'), "</a>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "</form>\n";
|
||||||
|
|
||||||
if (isset($needle)) {
|
if (isset($needle)) {
|
||||||
$sqlneedle = '%'.$needle.'%';
|
$sqlneedle = '%'.$needle.'%';
|
||||||
$remarks = isset($_POST['ck_remarks']) ? ' OR remarks LIKE :needle' : '';
|
|
||||||
|
|
||||||
// equipment
|
// equipment
|
||||||
|
$remarks = isset($_POST['ck_remarks']) ? ' OR remarks LIKE :needle' : '';
|
||||||
$sql = "SELECT eid, ename, model, remarks "
|
$sql = "SELECT eid, ename, model, remarks "
|
||||||
. "FROM equipment "
|
. "FROM equipment "
|
||||||
. "WHERE ename LIKE :needle OR model LIKE :needle" . $remarks;
|
. "WHERE vid=:vid AND (ename LIKE :needle OR model LIKE :needle)" . $remarks;
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute([':needle' => $sqlneedle]);
|
$sth->execute([':vid' => $user->vid, ':needle' => $sqlneedle]);
|
||||||
if ($sth->rowCount() > 0) {
|
if ($sth->rowCount() > 0) {
|
||||||
echo '<h3>', _('Equipment'), "</h3>\n";
|
echo '<h3>', _('Equipment'), "</h3>\n";
|
||||||
foreach ($sth->fetchAll() as $row) {
|
foreach ($sth->fetchAll() as $row) {
|
||||||
$out = $row['ename'] . ' ' . $row['model'];
|
$out = $row['ename'] . ' ' . $row['model'];
|
||||||
// mark needle in result
|
// mark needle in result
|
||||||
$p0 = strpos($out, $needle);
|
$p0 = stripos($out, $needle);
|
||||||
if ($p0 > 0) {
|
if ($p0 >= 0) {
|
||||||
$out = substr_replace($out, '</span>', $p0 + strlen($needle), 0);
|
$out = substr_replace($out, '</span>', $p0 + strlen($needle), 0);
|
||||||
$out = substr_replace($out, '<span style="background:#ffef00;">', $p0, 0);
|
$out = substr_replace($out, '<span style="background:#ffef00;">', $p0, 0);
|
||||||
}
|
}
|
||||||
echo '<p>', $out;
|
echo '<p>', $out, ' ';
|
||||||
echo '';
|
echo '<a href="equipment.php?f=view&id=', $row['eid'], '"><i class="bi-eye"></i></a>';
|
||||||
echo "</p>\n";
|
echo "</p>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// inventory
|
// inventory
|
||||||
$sql = "SELECT invid, invname, remarks "
|
$remarks = isset($_POST['ck_remarks']) ? 'OR i.remarks LIKE :needle ' : '';
|
||||||
. "FROM inventory "
|
$sql = "SELECT invid, invname, i.remarks "
|
||||||
. "WHERE invname LIKE :needle" . $remarks;
|
. "FROM inventory AS i JOIN storage AS s ON (i.conttype='storage' AND i.sid=s.sid) "
|
||||||
|
. "WHERE s.vid=:vid AND i.invname LIKE :needle " . $remarks
|
||||||
|
. "UNION "
|
||||||
|
. "SELECT invid, invname, i.remarks "
|
||||||
|
. "FROM inventory AS i JOIN box AS b ON (i.conttype='box' AND i.boxid=b.boxid) "
|
||||||
|
. " JOIN storage AS s ON (i.sid=s.sid) "
|
||||||
|
. "WHERE s.vid=:vid AND i.invname LIKE :needle " . $remarks;
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute([':needle' => $sqlneedle]);
|
$sth->execute([':vid' => $user->vid, ':needle' => $sqlneedle]);
|
||||||
if ($sth->rowCount() > 0) {
|
if ($sth->rowCount() > 0) {
|
||||||
echo '<h3>', _('Inventory'), "</h3>\n";
|
echo '<h3>', _('Inventory'), "</h3>\n";
|
||||||
foreach ($sth->fetchAll() as $row) {
|
foreach ($sth->fetchAll() as $row) {
|
||||||
$out = $row['invname'] . ' ' . $row['model'];
|
$out = rtrim($row['invname'] . ' ' . $row['model']);
|
||||||
// mark needle in result
|
// mark needle in result
|
||||||
$p0 = strpos($out, $needle);
|
$p0 = stripos($out, $needle);
|
||||||
if ($p0 > 0) {
|
if ($p0 >= 0) {
|
||||||
$out = substr_replace($out, '</span>', $p0 + strlen($needle), 0);
|
$out = substr_replace($out, '</span>', $p0 + strlen($needle), 0);
|
||||||
$out = substr_replace($out, '<span style="background:#ffef00;">', $p0, 0);
|
$out = substr_replace($out, '<span style="background:#ffef00;">', $p0, 0);
|
||||||
}
|
}
|
||||||
echo '<p>', $out;
|
echo '<p>', $out, ' ';
|
||||||
echo '';
|
echo '<a href="inventory.php?f=view&id=', $row['invid'], '"><i class="bi-eye"></i></a>';
|
||||||
|
echo "</p>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// notes
|
||||||
|
$sql = "SELECT taskid, taskname "
|
||||||
|
. "FROM task "
|
||||||
|
. "WHERE taskname LIKE :needle AND (vid IS NULL OR vid=:vid)";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([':needle' => $sqlneedle, ':vid' => $user->vid]);
|
||||||
|
if ($sth->rowCount() > 0) {
|
||||||
|
echo '<h3>', _('Tasks'), "</h3>\n";
|
||||||
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
// mark needle in result
|
||||||
|
$out = $row['taskname'];
|
||||||
|
$p0 = stripos($out, $needle);
|
||||||
|
if ($p0 >= 0) {
|
||||||
|
$out = substr_replace($out, '</span>', $p0 + strlen($needle), 0);
|
||||||
|
$out = substr_replace($out, '<span style="background:#ffef00;">', $p0, 0);
|
||||||
|
}
|
||||||
|
echo '<p>', $out, ' ';
|
||||||
|
echo '<a href="task.php?f=view&id=', $row['taskid'], '"><i class="bi-eye"></i></a>';
|
||||||
|
echo "</p>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// notes
|
||||||
|
$sql = "SELECT noteid, annotation "
|
||||||
|
. "FROM note "
|
||||||
|
. "WHERE annotation LIKE :needle";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([':needle' => $sqlneedle]);
|
||||||
|
if ($sth->rowCount() > 0) {
|
||||||
|
echo '<h3>', _('Annotations'), "</h3>\n";
|
||||||
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
// mark needle in result
|
||||||
|
$out = $row['annotation'];
|
||||||
|
$p0 = stripos($out, $needle);
|
||||||
|
if ($p0 >= 0) {
|
||||||
|
$out = substr_replace($out, '</span>', $p0 + strlen($needle), 0);
|
||||||
|
$out = substr_replace($out, '<span style="background:#ffef00;">', $p0, 0);
|
||||||
|
}
|
||||||
|
echo '<p>', $out, ' ';
|
||||||
|
echo '<a href="note.php?f=view&id=', $row['noteid'], '"><i class="bi-eye"></i></a>';
|
||||||
echo "</p>\n";
|
echo "</p>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
include 'footer.php';
|
include 'footer.php';
|
||||||
|
|||||||
+2
-2
@@ -91,7 +91,7 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
echo '<h1>', $pagetitle, "</h1>\n";
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
// Storage
|
// Storage
|
||||||
// stype from dropdown
|
// stype from dropdown
|
||||||
@@ -219,7 +219,7 @@ if (count($res) > 0) {
|
|||||||
foreach ($res as $row) {
|
foreach ($res as $row) {
|
||||||
echo "<tr>";
|
echo "<tr>";
|
||||||
echo '<td>', $row['label'], "</td>";
|
echo '<td>', $row['label'], "</td>";
|
||||||
echo '<td>', $row['color'], "</td>";
|
echo '<td>', format_color($row['color']), "</td>";
|
||||||
echo '<td><a title="', _('View'), '" href="box.php?f=view&id=', $row['boxid'], '"><i class="bi-eye"></i></a></td>';
|
echo '<td><a title="', _('View'), '" href="box.php?f=view&id=', $row['boxid'], '"><i class="bi-eye"></i></a></td>';
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
}
|
}
|
||||||
|
|||||||
+64
-3
@@ -38,7 +38,7 @@ switch ($submit = form_get_action()) {
|
|||||||
case 'update':
|
case 'update':
|
||||||
$p[':tagid'] = $id;
|
$p[':tagid'] = $id;
|
||||||
$p[':tagname'] = gpc_get_string($_POST, 'tagname');
|
$p[':tagname'] = gpc_get_string($_POST, 'tagname');
|
||||||
$p[':color'] = gpc_get_string($_POST, 'color');
|
$p[':color'] = gpc_get_color($_POST, 'color');
|
||||||
$p[':description'] = gpc_get_string($_POST, 'description');
|
$p[':description'] = gpc_get_string($_POST, 'description');
|
||||||
db_exec_update('tag', $p, 'tagid');
|
db_exec_update('tag', $p, 'tagid');
|
||||||
$action = ACT_VIEW;
|
$action = ACT_VIEW;
|
||||||
@@ -77,6 +77,8 @@ $flt = db_get_filter($user->id, 210);
|
|||||||
|
|
||||||
echo "<h1>$pagetitle</h1>\n";
|
echo "<h1>$pagetitle</h1>\n";
|
||||||
|
|
||||||
|
// db_save_taglist('inv', 1, 'apple, banana , , , orange, ddd');
|
||||||
|
|
||||||
// Filter
|
// Filter
|
||||||
?>
|
?>
|
||||||
<form method="post" action="<?=$g_scriptname?>">
|
<form method="post" action="<?=$g_scriptname?>">
|
||||||
@@ -85,7 +87,7 @@ echo "<h1>$pagetitle</h1>\n";
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<label for="flt_txt">Text</label>
|
<label for="flt_txt">Text</label>
|
||||||
<input type="text" name="flt_txt" size="15" maxlength="30" value="<?=$flt->txt?>">
|
<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>
|
<button name="submit[filter]" class="btn btn-sm btn-primary" title="<?=_('Apply')?>"><?=_('Go')?></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -110,7 +112,7 @@ foreach ($res as $row) {
|
|||||||
echo "<tr>\n";
|
echo "<tr>\n";
|
||||||
echo "<td>", $row['tagname'], "</td>\n";
|
echo "<td>", $row['tagname'], "</td>\n";
|
||||||
echo "<td>", $row['description'], "</td>\n";
|
echo "<td>", $row['description'], "</td>\n";
|
||||||
echo "<td>", $row['color'], "</td>\n";
|
echo "<td>", format_color($row['color']), "</td>\n";
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
// Action buttons
|
// Action buttons
|
||||||
form_action_buttons($g_scriptname, $row['tagid']);
|
form_action_buttons($g_scriptname, $row['tagid']);
|
||||||
@@ -147,6 +149,50 @@ echo "</form>\n";
|
|||||||
elseif ($action == ACT_VIEW):
|
elseif ($action == ACT_VIEW):
|
||||||
// ========== VARIANT: view single record =====================================
|
// ========== VARIANT: view single record =====================================
|
||||||
|
|
||||||
|
$sql = "SELECT tagname, description, color "
|
||||||
|
. "FROM tag "
|
||||||
|
. "WHERE tagid=?";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([$id]);
|
||||||
|
$tag = $sth->fetch(PDO::FETCH_OBJ);
|
||||||
|
|
||||||
|
echo '<h2>', _('View Tag'), "</h2>\n";
|
||||||
|
|
||||||
|
echo '<table class="table">', "\n";
|
||||||
|
echo '<tr><th style="width:20%">', _('Tag'),"</th><td>", $tag->tagname, "</td></tr>\n";
|
||||||
|
echo '<tr><th>', _('Color'),"</th><td>", format_color($tag->color), "</td></tr>\n";
|
||||||
|
echo '<tr><th>', _('Description'),"</th><td>", $tag->description, "</td></tr>\n";
|
||||||
|
echo "</table>\n";
|
||||||
|
|
||||||
|
form_view_buttons($g_scriptname, $id);
|
||||||
|
|
||||||
|
echo '<h3>', _('Tag usage'), "</h3>\n";
|
||||||
|
$sql = "SELECT objid, objtype FROM tagref WHERE tagid=?";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([$id]);
|
||||||
|
|
||||||
|
$link = array(
|
||||||
|
'equip' => 'equipment.php',
|
||||||
|
'inv' => 'inventory.php',
|
||||||
|
'prov' => 'provisions.php',
|
||||||
|
'doc' => 'documents.php',
|
||||||
|
'proj' => 'projects.php',
|
||||||
|
'task' => 'task.php',
|
||||||
|
'maint' => 'maintenance.php'
|
||||||
|
);
|
||||||
|
echo '<p>';
|
||||||
|
if ($sth->rowCount() > 0) {
|
||||||
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
echo '<a href="', $link[$row['objtype']], '?f=view&id=', $row['objid'], '">', $row['objid'], '/', $row['objtype'], "</a>\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo _('Tag is not used anywhere');
|
||||||
|
}
|
||||||
|
echo "</p>\n";
|
||||||
|
|
||||||
|
echo '<h3>', _('Related tags'), "</h3>\n";
|
||||||
|
echo '<p>', _('Not yet implemented'), "</p>\n";
|
||||||
|
|
||||||
elseif ($action == ACT_EDIT):
|
elseif ($action == ACT_EDIT):
|
||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
@@ -181,6 +227,21 @@ echo "</form>\n";
|
|||||||
elseif ($action == ACT_DELETE):
|
elseif ($action == ACT_DELETE):
|
||||||
// ========== VARIANT: delete record ==========================================
|
// ========== VARIANT: delete record ==========================================
|
||||||
|
|
||||||
|
echo '<h2>', _('Delete tag'), "</h2>\n";
|
||||||
|
|
||||||
|
$sql = "SELECT objid, objtype FROM tagref WHERE tagid=?";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([$id]);
|
||||||
|
if ($sth->rowCount() > 0) {
|
||||||
|
foreach ($sth->fetchAll() as $row) {
|
||||||
|
echo '<a href="', $link[$row['objtype']], '?f=view&id=', $row['objid'], '">', $row['objid'], '/', $row['objtype'], "</a>\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo _('Tag is not used anywhere');
|
||||||
|
$_SESSION['token'] = bin2hex(random_bytes(8));
|
||||||
|
form_delete_buttons($g_scriptname, $id, $_SESSION['token']);
|
||||||
|
}
|
||||||
|
|
||||||
else:
|
else:
|
||||||
// ========== ERROR UNKNOWN VARIANT ===========================================
|
// ========== ERROR UNKNOWN VARIANT ===========================================
|
||||||
|
|
||||||
|
|||||||
+138
-17
@@ -13,6 +13,7 @@ $id = gpc_get_int($_REQUEST, 'id', 0);
|
|||||||
|
|
||||||
$opt_projects = db_get_opt_proj($user->vid, array(-1 => _('unassigned')));
|
$opt_projects = db_get_opt_proj($user->vid, array(-1 => _('unassigned')));
|
||||||
$opt_priority = db_load_enum('task', 'priority', true, true);
|
$opt_priority = db_load_enum('task', 'priority', true, true);
|
||||||
|
$opt_state = db_load_enum('task', 'taskstate', true, true);
|
||||||
|
|
||||||
// ========== ACTIONS START ===================================================
|
// ========== ACTIONS START ===================================================
|
||||||
|
|
||||||
@@ -25,6 +26,15 @@ switch ($submit = form_get_action()) {
|
|||||||
case 'edit': $action = ACT_EDIT; break;
|
case 'edit': $action = ACT_EDIT; break;
|
||||||
case 'del': $action = ACT_DELETE; break;
|
case 'del': $action = ACT_DELETE; break;
|
||||||
|
|
||||||
|
case 'filter':
|
||||||
|
$flt = array();
|
||||||
|
$flt['prio'] = gpc_get_enum($_POST, 'flt_prio', array_merge(array_keys($opt_priority), ['-2', '-1']));
|
||||||
|
$flt['stat'] = gpc_get_enum($_POST, 'flt_stat', array_merge(array_keys($opt_state), ['-2', '-1']));
|
||||||
|
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
|
||||||
|
db_save_filter($flt, 206);
|
||||||
|
$action = ACT_DEFAULT;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'insert':
|
case 'insert':
|
||||||
$p[':vid'] = $user->vid;
|
$p[':vid'] = $user->vid;
|
||||||
$p[':projid'] = gpc_get_int($_POST, 'projid');
|
$p[':projid'] = gpc_get_int($_POST, 'projid');
|
||||||
@@ -39,21 +49,52 @@ switch ($submit = form_get_action()) {
|
|||||||
case 'update':
|
case 'update':
|
||||||
$p[':taskid'] = $id;
|
$p[':taskid'] = $id;
|
||||||
$p[':projid'] = gpc_get_int($_POST, 'projid');
|
$p[':projid'] = gpc_get_int($_POST, 'projid');
|
||||||
$p[':plandate'] = gpc_get_string($_POST, 'plandate');
|
$p[':plandate'] = gpc_get_date($_POST, 'plandate');
|
||||||
$p[':duedate'] = gpc_get_string($_POST, 'duedate');
|
$p[':duedate'] = gpc_get_date($_POST, 'duedate');
|
||||||
if ($p[':projid'] == -1) {
|
if ($p[':projid'] == -1) {
|
||||||
$p[':projid'] = NULL;
|
$p[':projid'] = NULL;
|
||||||
}
|
}
|
||||||
$p[':taskname'] = gpc_get_string($_POST, 'taskname');
|
$p[':taskname'] = gpc_get_string($_POST, 'taskname');
|
||||||
$p[':priority'] = gpc_get_string($_POST, 'priority', 10);
|
$p[':priority'] = gpc_get_string($_POST, 'priority', 10);
|
||||||
if ($p[':priority'] == 'X') {
|
if ($p[':priority'] == '-1') {
|
||||||
$p[':projid'] = NULL;
|
$p[':priority'] = NULL;
|
||||||
}
|
}
|
||||||
|
$p[':started'] = gpc_get_datetime($_POST, 'started');
|
||||||
|
$p[':finished'] = gpc_get_datetime($_POST, 'finished');
|
||||||
|
$p[':taskstate'] = gpc_get_enum($_POST, 'taskstate', array_keys($opt_state));
|
||||||
db_exec_update('task', $p, 'taskid');
|
db_exec_update('task', $p, 'taskid');
|
||||||
$action = ACT_VIEW;
|
$action = ACT_VIEW;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'delete':
|
case 'delete':
|
||||||
|
// Only captain is allowed to delete
|
||||||
|
if ($user->role != 'captain') {
|
||||||
|
$g_warning->Add('Only captain is allowed to delete tasks.');
|
||||||
|
$action = ACT_VIEW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Security token needed!
|
||||||
|
if (gpc_get_string($_POST, 'token', 16) != $_SESSION['token']) {
|
||||||
|
$g_error->Add(_('Delete prohibited, invalid security token!'));
|
||||||
|
$action = ACT_VIEW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
unset($_SESSION['token']);
|
||||||
|
// get information for possible redirect
|
||||||
|
$sth = $pdo->prepare("SELECT projid FROM task WHERE taskid=?");
|
||||||
|
$sth->execute([$id]);
|
||||||
|
$task = $sth->fetch(PDO::FETCH_OBJ);
|
||||||
|
if (isset($task->projid)) {
|
||||||
|
$backlink = 'project.php?id='.$task->projid;
|
||||||
|
}
|
||||||
|
// now really delete
|
||||||
|
$sth = $pdo->prepare("DELETE FROM task WHERE taskid=?");
|
||||||
|
$sth->execute([$id]);
|
||||||
|
$g_success->Add(_('Task deleted'));
|
||||||
|
if (isset($backlink)) {
|
||||||
|
header_location($backlink, ['info' => _('Note deleted.')]);
|
||||||
|
}
|
||||||
|
$action = ACT_DEFAULT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -71,20 +112,82 @@ require 'header.php';
|
|||||||
if ($action == ACT_DEFAULT):
|
if ($action == ACT_DEFAULT):
|
||||||
// ========== VARIANT: default behavior =======================================
|
// ========== VARIANT: default behavior =======================================
|
||||||
|
|
||||||
echo "<h1>$pagetitle</h1>\n";
|
page_caption_search($pagetitle);
|
||||||
|
|
||||||
|
// load filter from db
|
||||||
|
$flt = db_get_filter($user->id, 206);
|
||||||
|
|
||||||
|
$w = array('(t.vid=:vid OR t.vid IS NULL)');
|
||||||
|
$p = array(':vid' => $user->vid);
|
||||||
|
if (strlen($flt->txt) > 1) {
|
||||||
|
$w[] = '(taskname LIKE :txt)';
|
||||||
|
$p[':txt'] = '%'.$flt->txt.'%';
|
||||||
|
}
|
||||||
|
if (strlen($flt->prio) > 2 ) {
|
||||||
|
$w[] = 'priority=:priority';
|
||||||
|
$p[':priority'] = $flt->prio;
|
||||||
|
} elseif ($flt->prio == -1) {
|
||||||
|
$w[] = 'priority IS NULL';
|
||||||
|
}
|
||||||
|
if (strlen($flt->stat) > 2 ) {
|
||||||
|
$w[] = 'taskstate=:taskstate';
|
||||||
|
$p[':taskstate'] = $flt->stat;
|
||||||
|
}
|
||||||
|
$where = join(' AND ', $w);
|
||||||
|
$order = ' ORDER BY t.taskid';
|
||||||
|
|
||||||
|
// get total recond count for pagination and limit
|
||||||
|
$sql = "SELECT COUNT(*) FROM task";
|
||||||
|
if ($where) $sql .= " WHERE $where";
|
||||||
|
|
||||||
$sql = "SELECT t.taskid, t.projid, t.taskname, t.priority, p.projname "
|
|
||||||
. "FROM task AS t LEFT JOIN project AS p USING (projid) "
|
|
||||||
. "WHERE p.projid IS NULL OR p.vid=? "
|
|
||||||
. "ORDER BY t.taskid";
|
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
try {
|
try {
|
||||||
$sth->execute([$user->vid]);
|
$sth->execute($p);
|
||||||
|
} catch(PDOException $e) {
|
||||||
|
$g_error->Add($e->getMessage());
|
||||||
|
$g_error->Add($sql);
|
||||||
|
$g_error->Add(print_r($p, true));
|
||||||
|
}
|
||||||
|
$numrows = $sth->fetchColumn();
|
||||||
|
$lastpage = ceil($numrows/$g_rows_pp);
|
||||||
|
$page = gpc_get_int($_REQUEST, 'p', 1);
|
||||||
|
|
||||||
|
$sql = "SELECT t.taskid, t.vid, t.projid, t.taskname, t.priority, t.taskstate,"
|
||||||
|
. " p.projname "
|
||||||
|
. "FROM task AS t LEFT JOIN project AS p USING (projid) "
|
||||||
|
. "WHERE $where";
|
||||||
|
if ($order) $sql .= $order;
|
||||||
|
|
||||||
|
// if pagination:
|
||||||
|
// $sql .= ' LIMIT ' . ($page - 1) * $g_rows_pp . ',' . $g_rows_pp;
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
try {
|
||||||
|
$sth->execute($p);
|
||||||
} catch (PDOexception $e) {
|
} catch (PDOexception $e) {
|
||||||
$g_error->Add('SQL-Error: '. $e->getMessage());
|
$g_error->Add('SQL-Error: '. $e->getMessage());
|
||||||
|
$g_error->Add($sql);
|
||||||
|
$g_error->Add(print_r($p, true));
|
||||||
}
|
}
|
||||||
$res = $sth->fetchAll();
|
$res = $sth->fetchAll();
|
||||||
|
|
||||||
|
?>
|
||||||
|
<form method="post" action="<?=$g_scriptname?>">
|
||||||
|
<div id="filter" class="card">
|
||||||
|
<div class="card-header">Filter</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<?php
|
||||||
|
filter_create_select('flt_prio', _('Priority'), $g_opt_all + $g_opt_none + $opt_priority, $flt->prio);
|
||||||
|
filter_create_select('flt_stat', _('State'), $g_opt_all + $opt_state, $flt->stat);
|
||||||
|
?>
|
||||||
|
<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>
|
||||||
|
<input type="reset" class="btn btn-sm btn-secondary" value="<?=_('Clear')?>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<?php
|
||||||
|
|
||||||
echo '<table class="table table-striped">', "\n";
|
echo '<table class="table table-striped">', "\n";
|
||||||
echo "<thead>\n";
|
echo "<thead>\n";
|
||||||
echo "<tr>\n";
|
echo "<tr>\n";
|
||||||
@@ -92,16 +195,19 @@ echo '<th>#</th>';
|
|||||||
echo '<th>', _('Task'), "</th>";
|
echo '<th>', _('Task'), "</th>";
|
||||||
echo '<th>', _('Project'), "</th>";
|
echo '<th>', _('Project'), "</th>";
|
||||||
echo '<th>', _('Priority'), "</th>";
|
echo '<th>', _('Priority'), "</th>";
|
||||||
|
echo '<th>', _('Status'), "</th>";
|
||||||
echo "<th></th>";
|
echo "<th></th>";
|
||||||
echo "<th></th>\n";
|
echo "<th></th>\n";
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
foreach ($res as $row) {
|
foreach ($res as $row) {
|
||||||
echo "<tr>\n";
|
echo "<tr>\n";
|
||||||
echo "<td>", $row['taskid'], "</td>\n";
|
// mark generic tasks with braces
|
||||||
|
echo "<td>", $row['vid'] ? $row['taskid'] : '('.$row['taskid'].')', "</td>\n";
|
||||||
echo "<td>", $row['taskname'], "</td>\n";
|
echo "<td>", $row['taskname'], "</td>\n";
|
||||||
echo "<td>", $row['projname'], "</td>\n";
|
echo "<td>", $row['projname'], "</td>\n";
|
||||||
echo "<td>", ($opt_priority[$row['priority']] ?? ''), "</td>\n";
|
echo "<td>", ($opt_priority[$row['priority']] ?? ''), "</td>\n";
|
||||||
|
echo "<td>", ($opt_state[$row['taskstate']]), "</td>\n";
|
||||||
// Action buttons
|
// Action buttons
|
||||||
form_action_buttons($g_scriptname, $row['taskid']);
|
form_action_buttons($g_scriptname, $row['taskid']);
|
||||||
echo "</tr>\n";
|
echo "</tr>\n";
|
||||||
@@ -141,7 +247,7 @@ elseif ($action == ACT_VIEW):
|
|||||||
// ========== VARIANT: view single record =====================================
|
// ========== VARIANT: view single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT t.taskname, t.priority, t.plandate, t.duedate,"
|
$sql = "SELECT t.taskname, t.priority, t.plandate, t.duedate,"
|
||||||
. " t.started, t.finished, p.projname "
|
. " t.started, t.finished, t.taskstate, p.projname "
|
||||||
. "FROM task AS t LEFT JOIN project AS p USING (projid) "
|
. "FROM task AS t LEFT JOIN project AS p USING (projid) "
|
||||||
. "WHERE taskid=?";
|
. "WHERE taskid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
@@ -150,18 +256,19 @@ $task = $sth->fetch(PDO::FETCH_OBJ);
|
|||||||
|
|
||||||
echo '<h2>', _('View Task'), "</h2>\n";
|
echo '<h2>', _('View Task'), "</h2>\n";
|
||||||
echo '<table class="table">', "\n";
|
echo '<table class="table">', "\n";
|
||||||
echo '<tr><th>', _('Task'),"</th><td>", $task->taskname, "</td></tr>\n";
|
echo '<tr><th style="width:20%;">', _('Task'),"</th><td>", $task->taskname, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Project'),"</th><td>", ($task->projname ?? _('unassigned')), "</td></tr>\n";
|
echo '<tr><th>', _('Project'),"</th><td>", ($task->projname ?? _('unassigned')), "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Priority'),"</th><td>", ($task->priority ?? _('none')), "</td></tr>\n";
|
echo '<tr><th>', _('Priority'),"</th><td>", ($task->priority ?? _('none')), "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Plan date'),"</th><td>", $task->plandate, "</td></tr>\n";
|
echo '<tr><th>', _('Plan date'),"</th><td>", $task->plandate, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Due date'),"</th><td>", $task->duedate, "</td></tr>\n";
|
echo '<tr><th>', _('Due date'),"</th><td>", $task->duedate, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Started at'),"</th><td>", $task->started, "</td></tr>\n";
|
echo '<tr><th>', _('Started at'),"</th><td>", $task->started, "</td></tr>\n";
|
||||||
echo '<tr><th>', _('Finished at'),"</th><td>", $task->finished, "</td></tr>\n";
|
echo '<tr><th>', _('Finished at'),"</th><td>", $task->finished, "</td></tr>\n";
|
||||||
|
echo '<tr><th>', _('Status'),"</th><td>", $opt_state[$task->taskstate], "</td></tr>\n";
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
form_view_buttons($g_scriptname, $id);
|
form_view_buttons($g_scriptname, $id);
|
||||||
|
|
||||||
echo "<h3>Annotations</h3>";
|
echo '<h3>', _('Annotations'), "</h3>";
|
||||||
|
|
||||||
$sql = "SELECT noteid, annotation "
|
$sql = "SELECT noteid, annotation "
|
||||||
. "FROM note "
|
. "FROM note "
|
||||||
@@ -184,13 +291,14 @@ echo '<a href="note.php?f=add&t=task&id=', $id, '" class="btn btn-primary" role=
|
|||||||
echo _('Add note'), "</a>\n";
|
echo _('Add note'), "</a>\n";
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
|
|
||||||
echo "<h3>Documents</h3>";
|
echo '<h3>', _('Documents'), "</h3>";
|
||||||
echo "<p>Not yet implemented</p>";
|
echo '<p>', _('Not yet implemented'), "</p>";
|
||||||
|
|
||||||
elseif ($action == ACT_EDIT):
|
elseif ($action == ACT_EDIT):
|
||||||
// ========== VARIANT: edit single record =====================================
|
// ========== VARIANT: edit single record =====================================
|
||||||
|
|
||||||
$sql = "SELECT taskname, projid, priority, plandate, duedate, started, finished "
|
$sql = "SELECT taskname, projid, priority, plandate, duedate, started, finished,"
|
||||||
|
. " taskstate "
|
||||||
. "FROM task "
|
. "FROM task "
|
||||||
. "WHERE taskid=?";
|
. "WHERE taskid=?";
|
||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
@@ -228,13 +336,26 @@ form_create_select('priority', _('Priority'), $opt_none + $opt_priority, $task->
|
|||||||
<input type="datetime-local" class="form-control" id="finished" name="finished" value="<?=$task->finished ?>">
|
<input type="datetime-local" class="form-control" id="finished" name="finished" value="<?=$task->finished ?>">
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
form_create_select('taskstate', _('Status'), $opt_state, $task->taskstate);
|
||||||
|
|
||||||
form_edit_buttons($g_scriptname, $id);
|
form_edit_buttons($g_scriptname, $id);
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
|
|
||||||
elseif ($action == ACT_DELETE):
|
elseif ($action == ACT_DELETE):
|
||||||
// ========== VARIANT: delete record ==========================================
|
// ========== VARIANT: delete record ==========================================
|
||||||
|
|
||||||
|
$sql = "SELECT taskname FROM task WHERE taskid=?";
|
||||||
|
$sth = $pdo->prepare($sql);
|
||||||
|
$sth->execute([$id]);
|
||||||
|
$task = $sth->fetch(PDO::FETCH_OBJ);
|
||||||
|
|
||||||
echo '<h2>', _('Delete Task'), "</h2>\n";
|
echo '<h2>', _('Delete Task'), "</h2>\n";
|
||||||
|
echo '<p>', sprintf(_('Task no. %d'), $id), "</p>\n";
|
||||||
|
echo '<p>', $task->taskname, "</p>";
|
||||||
|
|
||||||
|
echo '<p>', _('Deleting a task item is final. There is no way back. Only delete if you are absolute sure.'), "</p>\n";
|
||||||
|
$_SESSION['token'] = bin2hex(random_bytes(8));
|
||||||
|
form_delete_buttons($g_scriptname, $id, $_SESSION['token']);
|
||||||
|
|
||||||
else:
|
else:
|
||||||
// ========== ERROR UNKNOWN VARIANT ===========================================
|
// ========== ERROR UNKNOWN VARIANT ===========================================
|
||||||
|
|||||||
Reference in New Issue
Block a user