Dateien am Beleg als „hochgeladen" indexieren — nur im Reiter, nicht vorne (1.7.2) [deploy]
All checks were successful
Deploy bericht / deploy (push) Successful in 14s
All checks were successful
Deploy bericht / deploy (push) Successful in 14s
Fotos, Notizen, Sprachnotizen, Scans (bisher ohne Indexeintrag → 'unknown') und Bericht-PDFs (bisher ohne Herkunft) werden mit gen_or_uploaded = 'uploaded' und Belegbezug indexiert; vorhandene Einträge werden aktualisiert statt verdoppelt. Neue lib/bericht_index.lib.php. Regel KB #1641. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
cf7471d2d2
commit
8606ecc50d
10 changed files with 99 additions and 0 deletions
21
ChangeLog.md
21
ChangeLog.md
|
|
@ -1,5 +1,26 @@
|
|||
# Changelog
|
||||
|
||||
## 1.7.2 — 2026-10-13
|
||||
|
||||
### Fotos, Notizen, Sprachnotizen, Scans und Bericht-PDFs als „hochgeladen" indexiert
|
||||
Eddys Regel (13.10.2026, KB #1641): Verknüpfungen, angehängte Dateien und Archiv-Dokumente stehen
|
||||
nur im Reiter am Beleg, nie vorne im Kasten der Belegkarte — „außer Dolibarr packt sie darein".
|
||||
Bericht legte seine Dateien ohne Indexeintrag in den Belegordner (Dolibarr führte sie dann als
|
||||
`unknown`, auf Prod über 560 Fotos/Notizen in Aufträgen), den Bericht-PDF mit leerer Herkunft.
|
||||
|
||||
- Neue `lib/bericht_index.lib.php` → `bericht_als_beilage_indexieren($pfad, $beleg)`: Eintrag mit
|
||||
`gen_or_uploaded = 'uploaded'` und Belegbezug; vorhandener Eintrag wird aktualisiert (Notiz neu
|
||||
gespeichert → neue Prüfsumme), nicht verdoppelt.
|
||||
- Aufgerufen bei: Foto-Upload der PWA (`api/orders.php`), Notiz neu/ändern (`api/note.php`),
|
||||
Sprachnotiz (`api/voice.php`), Handy-Upload per QR (`mobile_upload.php`), Scan-PDF
|
||||
(`ajax/process_document.php`).
|
||||
- Bericht-PDF (`ajax/generate_pdf.php`, `api/reports.php`): Herkunft `'uploaded'` gesetzt.
|
||||
- Unverändert: der unterschriebene Lieferschein (Dolibarrs eigenes Dokument) und die
|
||||
Unterschrift-PNG (liegt im Arbeitsordner von Bericht, nicht am Beleg).
|
||||
- Altbestand: vorne auf der Belegkarte blendet FileArchive 4.15.1 die Dateien schon über den
|
||||
Namen aus (`foto_…`, `notiz_…`, `voice_…`, `Bericht_…` sind keine Belegreferenz-Namen) —
|
||||
keine Datenmigration nötig.
|
||||
|
||||
## 1.7.1 — 2026-09-07
|
||||
|
||||
### Reiter am Kunden nur noch bei vorhandenen Berichten
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ $register_ecm = function ($obj_type, $obj_id, $filepath_dir, $filename, $target_
|
|||
$ecmfile->src_object_type = $obj_type;
|
||||
$ecmfile->src_object_id = $obj_id;
|
||||
$ecmfile->label = md5_file($target_path);
|
||||
$ecmfile->gen_or_uploaded = 'uploaded'; // Beilage, kein Belegdokument → nur im Reiter (KB #1641)
|
||||
@$ecmfile->create($user);
|
||||
};
|
||||
$register_ecm($dir_key, $parent->id, $dir_key.'/'.dol_sanitizeFileName($parent->ref), $filename, $target_path);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ if (!$res) die("Include of main fails");
|
|||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once __DIR__.'/../class/upload_token.class.php';
|
||||
require_once __DIR__.'/../lib/bericht_index.lib.php';
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
|
|
@ -237,6 +238,9 @@ if (!$pdf_created) {
|
|||
fail('PDF konnte nicht erstellt werden. Bitte prüfen Sie die Server-Konfiguration (ImageMagick/ocrmypdf).');
|
||||
}
|
||||
|
||||
// Scan-PDF ist eine Beilage → nur im Reiter am Beleg (KB #1641)
|
||||
bericht_als_beilage_indexieren($pdf_path, $tok->fetchParentObject());
|
||||
|
||||
// Token-Counter erhöhen
|
||||
$tok->incrementCount();
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ if (!empty($_GET['file'])) {
|
|||
if (@file_put_contents($path, note_build($subject, $text, $created, $stamp)) === false) {
|
||||
api_fail('Speichern fehlgeschlagen', 500);
|
||||
}
|
||||
bericht_als_beilage_indexieren($path, $cmd); // Prüfsumme nachziehen, Beilage (KB #1641)
|
||||
api_ok(array(
|
||||
'file' => basename($path),
|
||||
'subject' => $subject,
|
||||
|
|
@ -170,6 +171,7 @@ if (@file_put_contents($target, note_build($subject, $text, $stamp, '')) === fal
|
|||
api_fail('Speichern fehlgeschlagen', 500);
|
||||
}
|
||||
@chmod($target, 0664);
|
||||
bericht_als_beilage_indexieren($target, $cmd); // Beilage → nur im Reiter (KB #1641)
|
||||
|
||||
api_ok(array(
|
||||
'file' => $filename,
|
||||
|
|
|
|||
|
|
@ -257,6 +257,7 @@ if ($action === 'upload_photo' && $_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||
$filename = 'foto_'.dol_print_date(dol_now(), '%Y%m%d_%H%M%S').'_'.uniqid().'.'.$ext;
|
||||
$target = $upload_dir.'/'.$filename;
|
||||
if (!move_uploaded_file($_FILES['file']['tmp_name'], $target)) api_fail('Upload fehlgeschlagen', 500);
|
||||
bericht_als_beilage_indexieren($target, $cmd); // Beilage → nur im Reiter (KB #1641)
|
||||
|
||||
$relpath = str_replace(DOL_DATA_ROOT.'/', '', $target);
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ if ($action === 'finalize') {
|
|||
$ecmfile->src_object_type = $dir_key;
|
||||
$ecmfile->src_object_id = $parent->id;
|
||||
$ecmfile->label = md5_file($target_path);
|
||||
$ecmfile->gen_or_uploaded = 'uploaded'; // Beilage, kein Belegdokument → nur im Reiter (KB #1641)
|
||||
@$ecmfile->create($user);
|
||||
|
||||
$bericht->status = Bericht::STATUS_FINAL;
|
||||
|
|
|
|||
|
|
@ -35,5 +35,6 @@ elseif (strpos($mime, 'ogg') !== false) $ext = 'ogg';
|
|||
$filename = 'voice_'.dol_print_date(dol_now(), '%Y%m%d_%H%M%S').'.'.$ext;
|
||||
$target = $upload_dir.'/'.$filename;
|
||||
if (!move_uploaded_file($_FILES['file']['tmp_name'], $target)) api_fail('Upload fehlgeschlagen', 500);
|
||||
bericht_als_beilage_indexieren($target, $cmd); // Beilage → nur im Reiter (KB #1641)
|
||||
|
||||
api_ok(array('filename' => $filename, 'path' => 'commande/'.dol_sanitizeFileName($cmd->ref).'/'.$filename));
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
*/
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once __DIR__.'/bericht_index.lib.php';
|
||||
|
||||
/**
|
||||
* Erzeugt die Tab-Header-Leiste für die Editor-Seite (Übersicht / Editor).
|
||||
|
|
|
|||
66
lib/bericht_index.lib.php
Normal file
66
lib/bericht_index.lib.php
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
/* Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file bericht/lib/bericht_index.lib.php
|
||||
* \ingroup bericht
|
||||
* \brief Dateien, die Bericht in einen Belegordner legt, als „hochgeladen" indexieren.
|
||||
*
|
||||
* Fotos, Notizen, Sprachnotizen, Scans und Bericht-PDFs sind Beilagen, keine
|
||||
* Belegdokumente aus der Vorlage. Eddys Regel (13.10.2026, KB #1641): sie stehen nur im
|
||||
* Reiter am Beleg, nie vorne im Kasten der Belegkarte. Ohne Indexeintrag führt Dolibarr
|
||||
* sie als „unknown" — dann kann kein Modul sie sicher als Beilage erkennen.
|
||||
*
|
||||
* Eigene Datei ohne weitere Abhängigkeiten, damit auch Endpunkte sie laden können, die
|
||||
* bericht.lib.php nicht einbinden (ajax/process_document.php).
|
||||
*/
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
|
||||
|
||||
/**
|
||||
* Datei im ECM-Index als „uploaded" führen: vorhandenen Eintrag aktualisieren (Prüfsumme,
|
||||
* Herkunft, Belegbezug), sonst neu anlegen. addFileIntoDatabaseIndex() allein prüft nicht
|
||||
* auf Dubletten — eine überschriebene Notiz bekäme sonst bei jedem Speichern einen Eintrag.
|
||||
*
|
||||
* Fehler werden nur protokolliert: die Datei liegt bereits richtig, ein fehlender
|
||||
* Indexeintrag ist kein Grund, den Upload als gescheitert zu melden.
|
||||
*
|
||||
* @param string $fullpath Absoluter Pfad der Datei unter DOL_DATA_ROOT
|
||||
* @param CommonObject|null $beleg Beleg (für src_object_type/src_object_id), optional
|
||||
* @return void
|
||||
*/
|
||||
function bericht_als_beilage_indexieren($fullpath, $beleg = null)
|
||||
{
|
||||
global $db, $user;
|
||||
|
||||
if (empty($fullpath) || !is_file($fullpath) || strpos($fullpath, DOL_DATA_ROOT.'/') !== 0) {
|
||||
return;
|
||||
}
|
||||
$dir = dirname($fullpath);
|
||||
$name = basename($fullpath);
|
||||
$rel_dir = ltrim(substr($dir, strlen(DOL_DATA_ROOT)), '/');
|
||||
|
||||
$ecm = new EcmFiles($db);
|
||||
if ($ecm->fetch(0, '', $rel_dir.'/'.$name) > 0) {
|
||||
$ecm->gen_or_uploaded = 'uploaded';
|
||||
$ecm->label = md5_file($fullpath);
|
||||
if (is_object($beleg) && !empty($beleg->id)) {
|
||||
$ecm->src_object_type = $beleg->table_element;
|
||||
$ecm->src_object_id = (int) $beleg->id;
|
||||
}
|
||||
if ($ecm->update($user) < 0) {
|
||||
dol_syslog('bericht_als_beilage_indexieren: Update fehlgeschlagen für '.$rel_dir.'/'.$name.': '.$ecm->error, LOG_WARNING);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (addFileIntoDatabaseIndex($dir, $name, '', 'uploaded', 0, is_object($beleg) ? $beleg : null) < 0) {
|
||||
dol_syslog('bericht_als_beilage_indexieren: Anlegen fehlgeschlagen für '.$rel_dir.'/'.$name, LOG_WARNING);
|
||||
}
|
||||
}
|
||||
|
|
@ -78,6 +78,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_FILES['file']['tmp_name'])
|
|||
exit;
|
||||
}
|
||||
|
||||
bericht_als_beilage_indexieren($target, $tok->fetchParentObject()); // Beilage → nur im Reiter (KB #1641)
|
||||
$tok->incrementCount();
|
||||
echo json_encode(array('success' => true, 'filename' => $filename));
|
||||
exit;
|
||||
|
|
|
|||
Loading…
Reference in a new issue