bericht/lib/bericht_index.lib.php
Eduard Wisch 8606ecc50d
All checks were successful
Deploy bericht / deploy (push) Successful in 14s
Dateien am Beleg als „hochgeladen" indexieren — nur im Reiter, nicht vorne (1.7.2) [deploy]
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>
2026-10-13 21:49:38 +02:00

66 lines
2.7 KiB
PHP

<?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);
}
}