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>
66 lines
2.7 KiB
PHP
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);
|
|
}
|
|
}
|