User management with native gui and further improvements

This commit is contained in:
2026-08-17 10:37:19 +02:00
parent 41556cfe73
commit a3c8b4083d
24 changed files with 1004 additions and 159 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ define('APP_ILLUSTRATION', 'sailboat.svg');
// database connection
$g_db_host = 'localhost';
$g_db_username = 'yms';
$g_db_username = 'ymsweb';
$g_db_password = 'changeme!';
$g_db_schema = 'yms';
+1
View File
File diff suppressed because one or more lines are too long
+5 -1
View File
@@ -57,6 +57,7 @@ switch ($submit = form_get_action()) {
// WIP New standalone document
// debug $g_message->Add(print_r($_FILES, true));
// check for possible errors
// TODO use "noscale" option for images
if (!isset($_FILES['files']['error']) || is_array($_FILES['files']['error'])) {
$g_error->Add(_("Invalid file upload parameters."));
$action = ACT_ADD;
@@ -434,7 +435,7 @@ echo '<h2>', _('Add Document'), "</h2>\n";
<label for="files" class="form-label"><?=_('Document')?></label>
<input class="form-control" type="file" id="files" name="files" onchange="preview()">
<img id="frame" src="" class="img-fluid">
<button type="button" class="btn btn-secondary" onclick="clearimg();return false;"><?=_('Clear selection')?></button>
<button type="button" class="btn btn-secondary mt-2" onclick="clearimg();return false;"><?=_('Clear selection')?></button>
<script>
function preview() {
var images = ["image/png", "image/jpeg", "image/svg+xml"];
@@ -451,6 +452,9 @@ echo '<h2>', _('Add Document'), "</h2>\n";
}
</script>
</div>
<?php
form_create_check('noscale', _('Do not scale image'), FALSE);
?>
<div class="container-fluid px-0 my-3">
<button type="submit" name="submit[insert]" class="btn btn-primary"><?=_('Save')?></button>
<a href="<?=$g_scriptname?>" class="btn btn-secondary"><?=_('Back')?></a>
+1 -1
View File
@@ -420,7 +420,7 @@ $flt = db_get_filter($user->id, 200);
<input type="text" class="form-control" id="ename" name="ename">
</div>
<?php
form_create_select('category', _('Category'), [-1 => '--- none ---'] + $opt_ecat, $flt->cat);
form_create_select('category', _('Category'), $g_opt_none + $opt_ecat, $flt->cat);
form_create_select('manufacturer', _('Manufacturer'), $opt_manufacturer, $flt->manuf);
?>
<div class="mb-3">
+24 -2
View File
@@ -904,7 +904,8 @@ function db_get_opt_user($userid, $default=NULL) {
return $list;
}
function db_get_opt_proj($vid, $default=NULL) {
function db_get_opt_proj($vid, $exclude=[], $default=NULL) {
// exclude is a list of project states
global $pdo;
global $g_error;
if (isset($default)) {
@@ -912,7 +913,15 @@ function db_get_opt_proj($vid, $default=NULL) {
} else {
$list = array();
}
$sql = "SELECT projid, projname FROM project WHERE vid=? ORDER BY projname";
$sql = "SELECT projid, projname FROM project WHERE vid=?";
$where = [];
foreach ($exclude as $excl) {
$where[] = "NOT FIND_IN_SET('$excl',projstate)";
}
if (! empty($where)) {
$sql .= ' AND '. implode(' AND ', $where);
}
$sql .= " ORDER BY projname";
$sth = $pdo->prepare($sql);
try {
$sth->execute([$vid]);
@@ -1047,6 +1056,18 @@ function form_create_text($fieldname, $label, $value) {
echo "</div>\n";
}
function form_create_check($fieldname, $label, $checked) {
// create single checkbox with assigned label
echo '<div class="mb-3">', "\n";
echo '<input type="checkbox" class="form-check-input" name="', $fieldname, '" id="', $fieldname, '"';
if ($checked) {
echo ' checked';
}
echo ">\n";
echo '<label for="', $fieldname, '">', $label, "</label>\n";
echo "</div>\n";
}
function form_create_select($fieldname, $label, $optlist, $selval=NULL, $multiple=FALSE) {
echo '<div class="mb-3">', "\n";
echo '<label for="', $fieldname, '">', $label, "</label>\n";
@@ -1063,6 +1084,7 @@ function form_create_select($fieldname, $label, $optlist, $selval=NULL, $multipl
}
function form_create_checks($fieldname, $label, $optlist, $selected = []) {
// create multiple combined checkboxes with title
echo '<fieldset class="mb-3">';
echo '<legend class="fs-6 mb-1 border-bottom pb-1">', $label, "</legend>\n";
echo '<div class="d-flex flex-wrap gap-3">';
+2
View File
File diff suppressed because one or more lines are too long
+167
View File
@@ -0,0 +1,167 @@
let db;
const request = indexedDB.open("shopping", 1);
request.onupgradeneeded = function(event) {
db = event.target.result;
const store = db.createObjectStore(
"items",
{ keyPath: "provid" }
);
};
request.onsuccess = function(event) {
db = event.target.result;
checkDatabase();
};
function checkDatabase()
{
let tx = db.transaction(
"items",
"readonly"
);
let store = tx.objectStore("items");
let request = store.count();
request.onsuccess = function(){
if (request.result > 0) {
renderLists();
} else {
importList(initialList);
}
};
}
function importList(list)
{
let tx = db.transaction(
"items",
"readwrite"
);
let store = tx.objectStore("items");
list.forEach(item => {
item.done = false;
store.put(item);
});
tx.oncomplete = function(){
renderLists();
};
}
function renderLists()
{
let tx = db.transaction(
"items",
"readonly"
);
let store = tx.objectStore("items");
let request = store.getAll();
request.onsuccess = function(){
let pending = "";
let completed = "";
request.result.forEach(item => {
let html = `
<div class="item">
<span class="name">
${item.provname}
</span>
<span>
${item.buy} ${item.unit}
</span>
<button onclick="completeItem(${item.provid})">
</button>
</div>
`;
if (item.completed) {
completed += html;
} else {
pending += html;
}
});
document.getElementById("shoppingList").innerHTML = pending || "No items";
document.getElementById("completedList").innerHTML = completed || "No completed items";
};
}
function plus(id)
{
let tx = db.transaction(
"items",
"readwrite"
);
let store = tx.objectStore("items");
let req = store.get(id);
req.onsuccess = function(){
let item = req.result;
item.buy++;
store.put(item);
renderLists();
};
}
function minus(id)
{
let tx = db.transaction(
"items",
"readwrite"
);
let store = tx.objectStore("items");
let req = store.get(id);
req.onsuccess = function(){
let item = req.result;
item.buy--;
store.put(item);
renderLists();
};
}
function completeItem(id)
{
let tx = db.transaction(
"items",
"readwrite"
);
let store = tx.objectStore("items");
let request = store.get(id);
request.onsuccess = function(){
let item = request.result;
item.completed = true;
store.put(item);
renderLists();
};
}
function undo(id)
{
let tx = db.transaction(
"items",
"readwrite"
);
let store = tx.objectStore("items");
let req = store.get(id);
req.onsuccess = function(){
let item = req.result;
item.done = false;
store.put(item);
showList();
};
}
function done(id)
{
let tx = db.transaction(
"items",
"readwrite"
);
let store = tx.objectStore("items");
let req = store.get(id);
req.onsuccess = function(){
let item = req.result;
item.done = true;
store.put(item);
showList();
};
}
+58 -58
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: YMS 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-27 08:02+0200\n"
"POT-Creation-Date: 2026-08-14 08:33+0200\n"
"PO-Revision-Date: 2024-03-15 13:50+0100\n"
"Last-Translator: Thomas Hooge <thomas@hoogi.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: box.php:19 index.php:353 globals.inc:1536
#: box.php:19 index.php:357 globals.inc:1536
msgid "Boxes"
msgstr "Kisten"
@@ -48,7 +48,7 @@ msgid "Content"
msgstr "Inhalt"
#: box.php:98 box.php:183 box.php:248 cable.php:211 equipment.php:464
#: index.php:361 index.php:377 inventory.php:381 provisions.php:284
#: index.php:365 index.php:381 inventory.php:384 provisions.php:284
msgid "Weight"
msgstr "Gewicht"
@@ -64,7 +64,7 @@ msgid "View"
msgstr "Ansehen"
#: box.php:115 cable.php:151 company.php:231 documents.php:407 dropdown.php:162
#: equipment.php:399 equipment_js.php:247 fuse.php:176 index.php:318
#: equipment.php:399 equipment_js.php:247 fuse.php:176 index.php:322
#: inventory.php:284 maintenance.php:197 maintenance.php:318
#: measurement.php:235 projects.php:219 projects.php:264 projects.php:351
#: provisions.php:219 storage.php:143 storage.php:182 tag.php:136 task.php:256
@@ -77,7 +77,7 @@ msgid "Add Box"
msgstr "Kiste hinzufügen"
#: box.php:138 box.php:184 box.php:311 inventory.php:208 inventory.php:313
#: inventory.php:320 inventory.php:374 inventory.php:424 provisions.php:260
#: inventory.php:320 inventory.php:374 inventory.php:427 provisions.php:260
#: provisions.php:290 provisions.php:344 storage.php:12 storage.php:225
#: globals.inc:564 globals.inc:1532
msgid "Storage"
@@ -87,7 +87,7 @@ msgstr "Stauraum"
#: company.php:206 company.php:295 company.php:420 documents.php:430
#: documents.php:538 documents.php:778 equipment.php:360 equipment.php:431
#: equipment.php:469 equipment.php:684 equipment_js.php:69 fuse.php:237
#: index.php:445 index.php:555 inventory.php:385 inventory.php:452
#: index.php:449 index.php:559 inventory.php:388 inventory.php:455
#: maintenance.php:180 maintenance.php:280 maintenance.php:350 projects.php:176
#: projects.php:200 projects.php:290 projects.php:317 projects.php:403
#: provisions.php:291 provisions.php:347 storage.php:122 storage.php:234
@@ -97,7 +97,7 @@ msgstr "Bemerkungen"
#: box.php:156 company.php:255 company.php:427 documents.php:455
#: documents.php:781 equipment.php:435 equipment.php:691 equipment_js.php:116
#: equipment_js.php:283 index.php:449 inventory.php:324 maintenance.php:238
#: equipment_js.php:283 index.php:453 inventory.php:324 maintenance.php:238
#: measurement.php:284 note.php:158 projects.php:293 projects.php:406
#: provisions.php:262 settings.php:146 storage.php:208 storage.php:363
#: task.php:286 globals.inc:1112 globals.inc:1119
@@ -107,7 +107,7 @@ msgstr "Speichern"
#: box.php:157 company.php:256 company.php:428 company.php:454
#: documents.php:456 documents.php:782 dropdown.php:214 dropdown.php:281
#: equipment.php:436 equipment.php:692 equipment_js.php:117
#: equipment_js.php:251 equipment_js.php:284 index.php:450 inventory.php:325
#: equipment_js.php:251 equipment_js.php:284 index.php:454 inventory.php:325
#: maintenance.php:239 measurement.php:285 note.php:159 projects.php:294
#: projects.php:407 provisions.php:263 provisions.php:385 search.php:36
#: settings.php:147 storage.php:209 storage.php:364 task.php:287
@@ -139,12 +139,12 @@ msgstr "Keine verknüpften Bilder"
msgid "Inventory in box"
msgstr "Inventar in der Kiste"
#: box.php:246 index.php:375 inventory.php:12 search.php:80 globals.inc:1500
#: box.php:246 index.php:379 inventory.php:12 search.php:80 globals.inc:1500
msgid "Inventory"
msgstr "Inventar"
#: box.php:247 dropdown.php:150 inventory.php:261 inventory.php:307
#: inventory.php:380 inventory.php:414 provisions.php:183 provisions.php:248
#: inventory.php:383 inventory.php:417 provisions.php:183 provisions.php:248
#: provisions.php:282 provisions.php:316
msgid "Number"
msgstr "Anzahl"
@@ -162,13 +162,13 @@ msgstr "&horbar; keine &horbar;"
msgid "Edit Box"
msgstr "Kiste bearbeiten"
#: box.php:308 equipment.php:668 inventory.php:418 provisions.php:324
#: box.php:308 equipment.php:668 inventory.php:421 provisions.php:324
msgid "Weight, kg"
msgstr "Gewicht, kg"
#: box.php:327 cable.php:298 checklist.php:170 company.php:465
#: documents.php:815 dropdown.php:287 equipment.php:718 equipment_js.php:293
#: fuse.php:290 index.php:566 inventory.php:480 maintenance.php:371
#: fuse.php:290 index.php:570 inventory.php:483 maintenance.php:371
#: measurement.php:369 note.php:226 projects.php:419 provisions.php:391
#: settings.php:153 storage.php:390 tag.php:294 task.php:415
msgid "Unknown function call: Please report to system development!"
@@ -222,8 +222,8 @@ msgstr "Kabel"
#: cable.php:127 cable.php:169 cable.php:235 checklist.php:153 company.php:204
#: company.php:251 company.php:274 company.php:355 dropdown.php:185
#: dropdown.php:233 equipment.php:419 equipment.php:651 equipment_js.php:101
#: equipment_js.php:268 index.php:437 inventory.php:259 inventory.php:303
#: inventory.php:410 measurement.php:256 measurement.php:303
#: equipment_js.php:268 index.php:441 inventory.php:259 inventory.php:303
#: inventory.php:413 measurement.php:256 measurement.php:303
#: measurement.php:333 projects.php:169 projects.php:196 projects.php:245
#: projects.php:283 projects.php:310 projects.php:377 provisions.php:244
#: provisions.php:312 storage.php:120 storage.php:202 storage.php:316
@@ -244,7 +244,7 @@ msgid "Cross section"
msgstr "Querschnitt"
#: cable.php:132 cable.php:213 cable.php:266 inventory.php:222
#: inventory.php:262 inventory.php:384 inventory.php:436
#: inventory.php:262 inventory.php:387 inventory.php:439
msgid "Condition"
msgstr "Zustand"
@@ -429,7 +429,7 @@ msgstr "Stadt"
msgid "Delete Company"
msgstr "Firma löschen"
#: company.php:441 documents.php:802 equipment.php:707 inventory.php:470
#: company.php:441 documents.php:802 equipment.php:707 inventory.php:473
#: note.php:217 storage.php:379
#, php-format
msgid "Record no. %d"
@@ -455,7 +455,7 @@ msgstr "Neuer GD Imagestream kann nicht initialisiert werden"
msgid "Resource not found!"
msgstr "Resource nicht gefunden!"
#: documents.php:21 index.php:381 task.php:343 globals.inc:1516
#: documents.php:21 index.php:385 task.php:343 globals.inc:1516
msgid "Documents"
msgstr "Dokumente"
@@ -515,7 +515,7 @@ msgstr "SQL-Fehler: %s"
msgid "Removed document reference"
msgstr "Dokumentreferenz wurde entfernt"
#: documents.php:345 note.php:103
#: documents.php:345 note.php:103 note.php:178
msgid "Reference"
msgstr "Referenz"
@@ -537,7 +537,7 @@ msgstr "Dokument"
#: documents.php:437
msgid "Clear selection"
msgstr "Auswah leeren"
msgstr "Auswahl leeren"
#: documents.php:473
msgid "View Document"
@@ -597,14 +597,14 @@ msgid "Add new reference"
msgstr "Neue Referenz hinzufügen"
#: documents.php:654 equipment.php:13 equipment_js.php:14 fuse.php:236
#: index.php:359 inventory.php:450 maintenance.php:95 maintenance.php:179
#: index.php:363 inventory.php:453 maintenance.php:95 maintenance.php:179
#: maintenance.php:225 maintenance.php:274 maintenance.php:348
#: measurement.php:281 measurement.php:312 measurement.php:358 search.php:52
#: globals.inc:532 globals.inc:1496
msgid "Equipment"
msgstr "Ausrüstung"
#: documents.php:700 inventory.php:314 inventory.php:321 inventory.php:425
#: documents.php:700 inventory.php:314 inventory.php:321 inventory.php:428
#: storage.php:155 globals.inc:522
msgid "Box"
msgstr "Kiste"
@@ -750,7 +750,7 @@ msgstr ""
#: equipment.php:357 equipment.php:427 equipment.php:462 equipment.php:660
#: equipment_js.php:67 equipment_js.php:109 equipment_js.php:138
#: equipment_js.php:276 index.php:441 index.php:505
#: equipment_js.php:276 index.php:445 index.php:509
msgid "Model"
msgstr "Modell"
@@ -785,11 +785,11 @@ msgstr "Entfernt"
msgid "Add Equipment"
msgstr "Ausrüstung hinzufügen"
#: equipment.php:465 inventory.php:382
#: equipment.php:465 inventory.php:385
msgid "Price"
msgstr "Preis"
#: equipment.php:466 equipment.php:676 inventory.php:383 inventory.php:432
#: equipment.php:466 equipment.php:676 inventory.php:386 inventory.php:435
msgid "Purchase date"
msgstr "Kaufdatum"
@@ -841,7 +841,7 @@ msgstr "Keine Ersatzteile gefunden."
msgid "Edit Equipment"
msgstr "Ausrüstung bearbeiten"
#: equipment.php:672 inventory.php:428
#: equipment.php:672 inventory.php:431
#, php-format
msgid "Price, %s"
msgstr "Preis, %s"
@@ -968,99 +968,99 @@ msgstr "Eigenbau"
msgid "Built by %s"
msgstr "Gebaut von %s"
#: index.php:303
#: index.php:307
msgid "Boat data"
msgstr "Bootsdaten"
#: index.php:305
#: index.php:309
msgid "Loa"
msgstr "LüA"
#: index.php:306
#: index.php:310
msgid "Lwl"
msgstr "LWL"
#: index.php:307 index.php:517
#: index.php:311 index.php:521
msgid "Beam"
msgstr "Breite"
#: index.php:308 index.php:521
#: index.php:312 index.php:525
msgid "Draught"
msgstr "Tiefgang"
#: index.php:309 index.php:525
#: index.php:313 index.php:529
msgid "Draught, min."
msgstr "Tiefgang, min."
#: index.php:310 index.php:529
#: index.php:314 index.php:533
msgid "Displacement"
msgstr "Verdrängung"
#: index.php:311 index.php:533
#: index.php:315 index.php:537
msgid "Ballast"
msgstr "Ballast"
#: index.php:312 index.php:537
#: index.php:316 index.php:541
msgid "Belt position aft"
msgstr "Gurtposition achtern"
#: index.php:313 index.php:541
#: index.php:317 index.php:545
msgid "Belt position bow"
msgstr "Gurtposition vorne"
#: index.php:329
#: index.php:333
msgid "Statistics"
msgstr "Statistik"
#: index.php:345
#: index.php:349
msgid "Storage type"
msgstr "Stauraumart"
#: index.php:360 index.php:376 index.php:382
#: index.php:364 index.php:380 index.php:386
msgid "Count"
msgstr "Anzahl"
#: index.php:397
#: index.php:401
msgid "Base data"
msgstr "Stammdaten"
#: index.php:409
#: index.php:413
msgid "Additional modules"
msgstr "Zusatzmodule"
#: index.php:432
#: index.php:436
msgid "Add additional yacht"
msgstr "Zusätzliche Yacht hinzufügen"
#: index.php:481
#: index.php:485
msgid "&horbar; Custom-built &horbar;"
msgstr "&horbar; Eigenbau &horbar;"
#: index.php:497
#: index.php:501
msgid "Edit Yacht"
msgstr "Yacht bearbeiten"
#: index.php:501
#: index.php:505
msgid "Vesselname"
msgstr "Yachtname"
#: index.php:509
#: index.php:513
msgid "LoA"
msgstr "LüA"
#: index.php:513
#: index.php:517
msgid "LwL"
msgstr "LWL"
#: index.php:549
#: index.php:553
msgid "Shape file"
msgstr "Rumpfform-Datei"
#: index.php:550
#: index.php:554
msgid "Shipyard"
msgstr "Werft"
#: index.php:551
#: index.php:555
msgid "Default Storage"
msgstr "Standard-Stauraum"
@@ -1085,7 +1085,7 @@ msgstr "Keine Tags zugeordnet"
msgid "Add Inventory"
msgstr "Inventar hinzufügen"
#: inventory.php:311 inventory.php:423
#: inventory.php:311 inventory.php:426
msgid "Container type"
msgstr "Behälterart"
@@ -1094,19 +1094,23 @@ msgstr "Behälterart"
msgid "%s in %s"
msgstr ""
#: inventory.php:379
#: inventory.php:378
msgid "View Box"
msgstr "Box ansehen"
#: inventory.php:382
msgid "Location ID"
msgstr "Position (x, y, z)"
#: inventory.php:406
#: inventory.php:409
msgid "Edit Inventory"
msgstr "Inventar bearbeiten"
#: inventory.php:469
#: inventory.php:472
msgid "Delete Inventory"
msgstr "Inventar löschen"
#: inventory.php:473
#: inventory.php:476
msgid ""
"Deleting an inventory item is final. There is no way back. Only delete if "
"you are absolute sure."
@@ -1323,10 +1327,6 @@ msgstr "Notiz"
msgid "View Note"
msgstr "Notiz ansehen"
#: note.php:178
msgid "Referenz"
msgstr ""
#: note.php:196
msgid "Edit Note"
msgstr "Notiz bearbeiten"
Binary file not shown.
+2
View File
@@ -75,6 +75,8 @@ Es wird das Einlagerungsdatum erfaßt und das Haltbarkeitsdatum</p>
oder aber <em>frei</em>.
Freier Proviant kann später zugeordnet
werden. Er ist erkennbar am Einkaufswagen-Symbol <i class="bi bi-cart3"></i>.<p>
<p>Proviant wird mit Brutto- und Nettogewicht geführt, hat einen Energiegehalt in kCal
und ggf. einen Preis</p>
<p>TODO/Noch nichtimplementiert: Proviant kann auch in eine Kiste gelegt werden</p>
+1 -1
View File
@@ -175,7 +175,7 @@ $note = $sth->fetch(PDO::FETCH_OBJ);
// edit button
// list where annotaion used
echo '<table class="table">', "\n";
echo '<tr><th>', _('Referenz'),"</th><td>", $note->refid, "</td></tr>\n";
echo '<tr><th>', _('Reference'),"</th><td>", $note->refid, "</td></tr>\n";
echo '<tr><th>', _('Type'),"</th><td>", $note->notetype, "</td></tr>\n";
echo '<tr><th>', _('Annotation'),"</th><td>", nl2br($note->annotation), "</td></tr>\n";
echo "</table>\n";
+16 -2
View File
@@ -61,8 +61,10 @@ switch ($submit = form_get_action()) {
$p[':weight'] = min(gpc_get_float($_POST, 'weight'), 999.99); // limit max value
$p[':weight_net'] = min(gpc_get_float($_POST, 'weight_net'), 999.99);
$p[':unit'] = gpc_get_int($_POST, 'unit');
$p[':calories'] = gpc_get_uint($_POST, 'calories');
$p[':storedate'] = gpc_get_string($_POST, 'storedate');
$p[':shelflife'] = gpc_get_string($_POST, 'shelflife');
$p[':price'] = gpc_get_currency($_POST, 'price');
$p[':sid'] = gpc_get_int($_POST, 'sid');
if ($p[':sid'] <= 0) $p[':sid'] = NULL;
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
@@ -269,7 +271,7 @@ elseif ($action == ACT_VIEW):
// ========== VARIANT: view single record =====================================
$sql = "SELECT provname, provcat, number, target, unit, weight, weight_net,"
. " storedate, shelflife, sid, remarks "
. " calories, storedate, shelflife, price, sid, remarks "
. "FROM provisions "
. "WHERE provid=?";
$sth = $pdo->prepare($sql);
@@ -284,9 +286,11 @@ echo "<tr><th>", _('Target'), "</th><td>", $prov->target, "</td></tr>\n";
echo "<tr><th>", _('Weight'), "</th><td>", format_float($prov->weight, 2, 'kg'), "</td></tr>\n";
echo "<tr><th>", _('Weight net'), "</th><td>", format_float($prov->weight_net, 2, 'kg'), "</td></tr>\n";
echo '<tr><th>', _('Unit'),"</th><td>", $opt_unit[$prov->unit], "</td></tr>\n";
echo "<tr><th>", _('Calories'), "</th><td>", $prov->calories, " kcal</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>', _('Shelflife'),"</th><td>", $prov->shelflife, "</td></tr>\n";
echo '<tr><th>', _('Price'), "</th><td>", format_currency($prov->price), "</td></tr>\n";
echo '<tr><th>', _('Storage'),"</th><td>", ($opt_storage[$prov->sid] ?? ''), "</td></tr>\n";
echo '<tr><th>', _('Remarks'),"</th><td>", nl2br($prov->remarks), "</td></tr>\n";
echo "</table>\n";
@@ -297,7 +301,7 @@ elseif ($action == ACT_EDIT):
// ========== VARIANT: edit single record =====================================
$sql = "SELECT provname, provcat, number, target, unit, weight, weight_net,"
. " storedate, shelflife, sid, remarks "
. " calories, storedate, shelflife, price, sid, remarks "
. "FROM provisions "
. "WHERE provid=?";
$sth = $pdo->prepare($sql);
@@ -330,6 +334,12 @@ echo '<h2>', _('Edit provision'), "</h2>\n";
</div>
<?php
form_create_select('unit', _('Unit'), $opt_unit, $prov->unit);
?>
<div class="mb-3">
<label for="target"><?=_('Calories per Unit (kcal)')?></label>
<input type="number" min="0" max="65000" class="form-control" id="calories" name="calories" value="<?=$prov->calories ?>">
</div>
<?php
form_create_select('provcat', _('Category'), $g_opt_none + $opt_category, $prov->provcat);
?>
<div class="mb-3">
@@ -340,6 +350,10 @@ form_create_select('provcat', _('Category'), $g_opt_none + $opt_category, $prov-
<label for="shelflife"><?=_('Shelflife')?></label>
<input type="date" class="form-control" id="shelflife" name="shelflife" value="<?=$prov->shelflife ?>">
</div>
<div class="mb-3">
<label for="price" class="form-label"><?=sprintf(_('Price, %s'), $g_lconv['currency_symbol']); ?></label>
<input type="text" class="form-control" id="price" name="price" value="<?=format_float($prov->price) ?>">
</div>
<?php
form_create_select('sid', _('Storage'), $g_opt_none + $opt_storage, $prov->sid);
?>
+1 -1
View File
@@ -16,7 +16,7 @@
style="display:inline"><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00001;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:8, 4, 2.00001, 4;stroke-dashoffset:0;stroke-opacity:1"
d="M 42.346999,421.58603 H 1066.347"
id="path399" /><path
id="centerline" /><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 43.434741,421.43502 c 0,0 0.413166,-22.42089 3.894359,-39.92496 8.859879,-44.54909 33.485118,-67.94835 93.87163,-87.80423 71.79884,-23.60841 231.35367,-47.44953 338.07331,-45.17591 58.4656,1.24559 128.71431,3.06837 239.1874,30.59247 125.0131,31.14672 271.98631,88.99119 345.78696,137.98517 0,0 0.7865,1.03131 0.972,1.63871 0.3052,0.99905 0.1801,3.12866 0.1801,3.12866"
id="path1004" /><use

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

+138
View File
@@ -0,0 +1,138 @@
<svg
width="1024"
height="325"
viewBox="0 0 1024 325"
version="1.1"
id="svg5"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><title
id="title134">Colin Archer 40</title><defs
id="defs2" /><g
id="layer1"
style="display:inline"><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 32.902587,163.24723 c 0,0 -6.666293,-22.17724 51.732501,-67.565006 C 187.52515,15.715671 366.50013,5.7999235 433.65337,3.9666602 542.97458,0.98222366 704.13522,4.0275731 830.22893,58.523616 908.62334,92.40465 969.7182,149.13425 978.673,155.26415 c 5.4153,3.70695 4.5761,8.14666 4.5761,8.14666"
id="path951" /><use
x="0"
y="0"
xlink:href="#path951"
id="use1049"
transform="matrix(1,0,0,-1,-0.05781152,326.36779)" /><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 895.985,92.86984 V 232.55335"
id="path1051" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 689.37014,17.637239 V 195.72401"
id="path1051-36" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 540.10735,3.0789488 V 91.21857"
id="path1051-36-7" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 690.02348,237.42732 V 307.8727"
id="path1051-36-7-2" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 416.49715,4.2620683 V 132.78882"
id="path1051-36-5" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 310.10943,14.105407 V 136.19705"
id="path1051-36-3" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 113.52266,76.302173 V 251.83248"
id="path1051-36-56" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 690.08485,105.08884 28.07694,0.60163"
id="path1051-36-7-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 786.68796,42.130597 0.25367,46.194127 -16.3841,16.832756 -12.41255,0.48582"
id="path1051-36-7-1" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 502.13905,196.92602 6.32096,0.0627 31.73427,26.11546 -0.69919,99.59481"
id="path1051-36-7-27" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 417.82431,321.48565 0.004,-123.99946"
id="path1051-36-7-0" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 308.66858,312.05474 0.81755,-70.25663"
id="path1051-36-7-0-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 310.24697,200.53963 0.007,-13.8616"
id="path1051-36-7-0-6-0" /><rect
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
id="rect625"
width="152.16988"
height="11.532784"
x="866.78735"
y="157.73856"
rx="1.3628241"
ry="1.3045897" /><rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect640"
width="43.70451"
height="5.1411266"
x="2.7056627"
y="160.75401"
rx="1.3628241"
ry="1.3045897" /><ellipse
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path1248"
cx="657.82275"
cy="163.56593"
rx="12.162697"
ry="7.8855205" /><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:8, 4, 2, 4;stroke-dashoffset:0;stroke-opacity:1"
d="M 3.2714902e-6,163.30965 1024,163.3063"
id="path271" /></g><g
id="layer2"
style="display:inline"
transform="translate(-25.319896,5.562848)"><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 565.67989,236.15227 148.94077,0.58894"
id="path1051-3" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 567.16163,86.445447 148.94077,0.58894"
id="path1051-3-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 811.98823,83.068113 57.1816,30.733537 48.6489,-26.735129"
id="path1051-3-2" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 854.02272,105.74204 876.63281,63.267145"
id="path1051-3-2-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 715.48091,236.62096 39.15964,0.46197 -0.0963,57.26552"
id="path1051-3-2-6-8" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 831.33681,93.198753 854.85906,52.701572"
id="path1051-3-2-1" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 334.88168,257.06299 108.33469,-0.0336"
id="path1051-3-7" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 335.54514,66.093576 106.51923,-0.0336"
id="path1051-3-7-23" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 304.78037,14.051838 0.25341,67.943863 30.47429,-0.462178"
id="path1051-3-7-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 248.70861,289.07127 14.00732,-51.92697 71.96665,5.09935"
id="path1051-3-7-2" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 298.75245,239.75719 -7.2046,59.2492"
id="path1051-3-7-0" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.99999899,1.99999797;stroke-opacity:1;stroke-dashoffset:0"
d="m 444.22245,247.11088 63.11081,0.2124 13.52892,-40.80411 0.425,-100.58449 -13.78927,-39.435166 -65.58989,0.129781"
id="path1051-3-7-7" /><rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1, 2;stroke-dashoffset:0"
id="rect1606"
width="74.914055"
height="69.12413"
x="570.22064"
y="122.47643"
rx="1.3628241"
ry="1.3045897" /></g><metadata
id="metadata132"><rdf:RDF><cc:Work
rdf:about=""><dc:title>Colin Archer 40</dc:title><dc:creator><cc:Agent><dc:title>Thomas Hooge</dc:title></cc:Agent></dc:creator></cc:Work></rdf:RDF></metadata></svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

+1 -1
View File
@@ -30,7 +30,7 @@
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.268;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.072, 0.536, 0.268, 0.536;stroke-dashoffset:0;stroke-opacity:1"
d="m 297.50974,51.957452 c -2.54837,0.522337 -297.50950858727,0 -297.50950858727,0"
id="path857" />
id="centerline" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:98%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

+1 -1
View File
@@ -28,7 +28,7 @@
transform="matrix(1,0,0,-1,-0.02583644,109.41506)" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529169;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:2.11667, 1.05833, 0.529169, 1.05833;stroke-dashoffset:0;stroke-opacity:1"
d="M 0.21617824,54.888403 270.69991,54.888402"
id="path271" /><path
id="centerline" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529168;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 141.00077,5.7751708 V 53.289576"
id="path1051-5-20-3-5-3" /><path

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

+289
View File
@@ -0,0 +1,289 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1024"
height="305"
viewBox="0 0 1024 305"
version="1.1"
id="svg5"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><title
id="title134">Gulfstar 41</title><defs
id="defs2" /><g
id="layer1"
style="display:inline"><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:8, 4, 2, 4;stroke-dashoffset:0;stroke-opacity:1"
d="M 3.3e-6,152.00334 1023.9982,151.99999"
id="path271" /><path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 4.541505,152.82638 c 0,0 0.729165,-54.491109 25.243635,-88.018502 C 94.775098,50.967238 140.69217,39.927662 199.55731,31.275058 297.4149,16.890941 397.62677,5.6293124 462.03098,4.859982 568.15897,3.5922467 688.37772,16.318765 809.42487,53.979712 912.75153,86.127351 1008.139,138.58129 1017.0525,144.71119 c 5.3903,3.70695 4.555,8.14666 4.555,8.14666"
id="path951" /><use
x="0"
y="0"
xlink:href="#path951"
id="use1049"
transform="matrix(1,0,0,-1,0.14093269,304.94033)" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 296.62649,18.557857 V 286.46486"
id="path1051-5" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 415.8873,227.21891 v 71.23063"
id="path1051-5-20" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 296.3826,153.91187 75.74474,30.18682 72.23129,0.21079 -0.0479,-57.74576 -27.76098,-0.14802 -0.69918,-119.2298423"
id="path1051-5-0" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 671.07416,20.286177 0.0415,128.557953 56.89431,-0.10936 29.62768,-23.18612 -0.78991,-85.78406"
id="path1051-5-2-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 220.55901,28.151512 v 92.906228 l 17.65895,30.72635 58.41003,0.0579"
id="path1051-7" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 296.53346,226.79659 -75.83471,-11.69391 -0.24255,61.15704"
id="path1051-35" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 914.04719,93.338688 V 212.03375"
id="path1051" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 755.60805,266.13836 -0.2572,-69.86532 -84.93468,-0.33711 -0.018,87.43233"
id="path1051-5-2" /><ellipse
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
id="path1640"
cx="594.63507"
cy="152.02142"
rx="8.7870979"
ry="4.8806257" /></g><g
id="layer2"
style="display:inline"><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:1.99999, 0.999997;stroke-dashoffset:0;stroke-opacity:1"
d="m 756.00672,238.37946 c 0,0 59.16733,-20.02492 85.38293,-30.44142 26.2156,-10.41649 71.66524,-31.86272 71.66524,-31.86272"
id="path1051-3" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 669.46008,195.69652 508.5147,213.65213"
id="path1051-3-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 822.22439,152.3697 758.17324,125.24424"
id="path1051-3-9-62" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 822.09326,152.28781 -66.36093,29.18905 -0.0239,14.78286"
id="path1051-3-9-62-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 508.55542,213.45397 0.0642,86.3025"
id="path1051-3-9-97" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 670.76127,237.09813 508.69631,255.16318"
id="path1051-3-9-75" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 670.66554,254.20123 508.64908,272.20918"
id="path1051-3-9-92" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 661.4627,142.51176 -0.7724,-79.741048 c 0,0 -37.56032,-7.039363 -56.42139,-6.896387 -18.86107,0.142976 -55.78157,7.771263 -55.78157,7.771263 l -0.14541,79.791092"
id="path1051-3-9-2" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 415.442,253.04762 295.11292,242.76125"
id="path1051-3-9-7" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 460.1918,231.34815 -8.69345,-0.0532"
id="path1051-3-9-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 416.39973,52.794624 297.21078,62.947673"
id="path1051-3-9-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 296.55075,62.8079 -76.00147,0.07026"
id="path1051-3-9-6-7" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 271.79139,151.82674 271.63843,63.050532"
id="path1051-3-9-6-7-0" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 271.73415,111.91673 -51.28978,0.0489"
id="path1051-3-9-6-7-0-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 671.34001,43.684548 541.56327,28.616168"
id="path1051-3-9-6-1" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 670.65715,142.55208 -39.25248,0.44377 -1.31417,-55.619742 -48.91307,-0.79758 v 57.313592 l -40.07981,0.0484 L 540.4774,7.3776096"
id="path1051-3-9-6-1-8" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:2, 0.999999;stroke-dashoffset:0;stroke-opacity:1"
d="m 416.30812,74.92521 c 0,0 -82.47253,15.144404 -122.81009,25.9362 -40.33756,10.7918 -119.21527,38.81458 -119.21527,38.81458 l -0.48224,29.55534 c 0,0 80.54391,27.12128 120.73218,37.21131 40.18827,10.09004 121.27862,23.76758 121.27862,23.76758"
id="path1051-3-7" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 219.67776,109.0587 93.855492,151.80189"
id="path1051-3-7-3" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 219.86139,195.03714 94.039117,152.29395"
id="path1051-3-7-3-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 220.0363,213.44097 219.71324,194.9243"
id="path1051-3-7-3-6-6" /><use
x="0"
y="0"
xlink:href="#path1051-6"
id="use457"
transform="matrix(1,0,0,-1,-0.13850787,304.9487)"
style="display:inline" /><rect
style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect1255"
width="28.664709"
height="25.4055"
x="444.12122"
y="150.14844" /><rect
style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect1255-1"
width="48.177208"
height="62.083755"
x="460.24216"
y="224.74203" /><rect
style="display:inline;fill:none;stroke:#000000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect1255-1-2"
width="35.377628"
height="52.031517"
x="416.01917"
y="228.25325" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 220.17782,38.804009 c 0,0 -56.08046,11.503545 -98.40722,29.919685 C 79.443836,87.139833 58.501345,112.47149 58.501345,112.47149 l -0.185798,40.1905"
id="path1051-6" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 671.50207,60.229759 84.47664,0.731761"
id="path1051-3-70" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 728.31329,60.955674 0.21143,87.895066"
id="path1051-3-70-9" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 671.31947,114.80366 57.0344,0.0153"
id="path1051-3-70-9-5" /><rect
style="display:inline;fill:none;stroke:#000000;stroke-width:0.999995;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect1255-3"
width="28.496277"
height="25.182354"
x="506.32599"
y="47.019566" /><rect
style="display:inline;fill:none;stroke:#000000;stroke-width:0.999995;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect1255-3-6"
width="40.192474"
height="30.994183"
x="453.94885"
y="42.663792" /><circle
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
id="path1537"
cx="473.59415"
cy="50.722347"
r="4.1049838" /><circle
style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
id="path1537-2"
cx="484.03549"
cy="64.60498"
r="4.1049838" /><circle
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.999999;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
id="path1537-2-3"
cx="511.54593"
cy="59.438629"
r="1.4208409" /><circle
style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
id="path1537-6"
cx="463.9982"
cy="64.60498"
r="4.1049838" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 670.94118,54.557571 c 0,0 -43.64416,-7.676983 -65.60103,-7.709096 -21.95686,-0.03211 -65.08605,7.813561 -65.08605,7.813561"
id="path1051-3-9-3" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 670.27867,245.85044 508.57702,264.03781"
id="path1051-3-9-28" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 540.61416,41.075906 500.33278,41.27855 V 14.68724 h -51.75124 v 54.26063 l -32.33807,0.248933"
id="path1051-3-9-36" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 541.01887,131.38337 -38.36889,-0.14689 0.35135,-55.159487 -58.43273,0.0059 0.12857,50.081065"
id="path1051-3-9-1" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 444.57231,76.176669 -0.002,-7.190214"
id="path1051-3-9-29" /><rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2020"
width="22.906216"
height="18.748451"
x="507.5379"
y="82.955887"
ry="1.3045897"
rx="1.3628241" /><rect
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2020-1"
width="22.906216"
height="18.748451"
x="507.51715"
y="106.56944"
ry="1.3045897"
rx="1.3628241" /><rect
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2020-1-3"
width="12.380301"
height="18.748451"
x="276.67719"
y="118.84782"
ry="1.3045897"
rx="1.3628241" /><rect
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2020-1-3-0"
width="12.380301"
height="18.748451"
x="736.40729"
y="103.76661"
ry="1.3045897"
rx="1.3628241" /><g
id="g1346"
transform="translate(1.6711347,1.1925367)"><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 711.61753,105.88116 2.65465,-0.01"
id="path1051-3-70-9-6" /><rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2591-3"
width="8.0729084"
height="10.706293"
x="714.31329"
y="101.32455"
ry="0" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 716.92538,107.04318 2.79647,-0.003"
id="path1051-3-70-9-6-7" /><path
id="rect2588"
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;fill-opacity:1"
d="m 686.24942,90.899539 20.82037,0.08492 c 0,0 5.06651,8.402799 4.39879,16.424111 -0.93076,11.18123 -8.47355,16.69152 -14.7092,16.79516 -6.23564,0.1036 -13.73785,-6.42007 -14.55567,-15.91907 -0.83507,-9.699525 4.04571,-17.385082 4.04571,-17.385082 z" /><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2591"
width="22.45204"
height="2.0430894"
x="685.52374"
y="88.79052" /></g><g
id="g1346-5"
transform="translate(-452.44821,-6.2064984)"
style="display:inline"><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 711.61753,105.88116 2.65465,-0.01"
id="path1051-3-70-9-6-6" /><rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2591-3-2"
width="8.0729084"
height="10.706293"
x="714.31329"
y="101.32455"
ry="0" /><path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 716.92538,107.04318 2.79647,-0.003"
id="path1051-3-70-9-6-7-9" /><path
id="rect2588-1"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
d="m 686.24942,90.899539 20.82037,0.08492 c 0,0 5.06651,8.402799 4.39879,16.424111 -0.93076,11.18123 -8.47355,16.69152 -14.7092,16.79516 -6.23564,0.1036 -13.73785,-6.42007 -14.55567,-15.91907 -0.83507,-9.699525 4.04571,-17.385082 4.04571,-17.385082 z" /><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2591-2"
width="22.45204"
height="2.0430894"
x="685.52374"
y="88.79052" /></g></g><metadata
id="metadata132"><rdf:RDF><cc:Work
rdf:about=""><dc:title>Shape template</dc:title><dc:creator><cc:Agent><dc:title>Thomas Hooge</dc:title></cc:Agent></dc:creator></cc:Work></rdf:RDF></metadata></svg>

After

Width:  |  Height:  |  Size: 20 KiB

+12 -8
View File
@@ -13,7 +13,7 @@ $pagetitle = _('Task');
$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_state = db_load_enum('task', 'taskstate', true, true);
@@ -30,6 +30,7 @@ switch ($submit = form_get_action()) {
case 'filter':
$flt = array();
$flt['proj'] = gpc_get_int($_POST, 'flt_proj');
$flt['prio'] = gpc_get_enum($_POST, 'flt_prio', array_merge(array_keys($opt_priority), ['-2', '-1']));
$flt['txt'] = gpc_get_string($_POST, 'flt_txt');
$allowed = db_load_enum('task', 'taskstate');
@@ -125,7 +126,7 @@ if ($action == ACT_DEFAULT):
page_caption_search($pagetitle);
// load filter from db
$flt = db_get_filter($user->id, 206, ['txt','prio', 'stat']);
$flt = db_get_filter($user->id, 206, ['txt', 'prio', 'stat', 'proj']);
$w = array('(t.vid=:vid OR t.vid IS NULL)');
$p = array(':vid' => $user->vid);
@@ -133,16 +134,18 @@ if (strlen($flt->txt) > 1) {
$w[] = '(taskname LIKE :txt)';
$p[':txt'] = '%'.$flt->txt.'%';
}
if ($flt->proj > 0) {
$w[] = 'projid=:projid';
$p[':projid'] = $flt->proj;
} elseif ($flt->proj == -1) {
$w[] = 'projid IS NULL';
}
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;
} */
$parts = ["taskstate=''", 'taskstate IS NULL'];
foreach ($flt->stat as $f) {
$parts[] = "FIND_IN_SET('$f', taskstate)";
@@ -201,9 +204,10 @@ $res = $sth->fetchAll();
<div id="filter" class="card">
<div class="card-header"><i class="bi bi-funnel me-2"></i>Filter</div>
<div class="card-body d-flex flex-wrap gap-3">
<?php
<?php
$opt_proj_filter = db_get_opt_proj($user->vid, ['finished']);
filter_create_select('flt_proj', _('Project'), $g_opt_all + $g_opt_none + $opt_proj_filter, $flt->proj);
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);
?>
<div class="d-flex flex-nowrap gap-2">
<label for="flt_txt">Text</label>