60 lines
1.7 KiB
PHP
60 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Espo\Custom\Hooks\CDokumente;
|
|
|
|
use Espo\ORM\Entity;
|
|
|
|
class CDokumente extends \Espo\Core\Hooks\Base
|
|
{
|
|
public function beforeSave(Entity $entity, array $options = [])
|
|
{
|
|
// Problem: isAttributeChanged('dokument') erkennt Datei-Änderungen nicht,
|
|
// da EspoCRM Datei-Uploads nicht als Feld-Änderung markiert.
|
|
// Daher läuft der Hook bei jeder beforeSave mit dokument-Feld,
|
|
// um sicherzustellen, dass Hashes bei Datei-Änderungen berechnet werden.
|
|
// Optimierung wäre wünschenswert, aber nicht möglich mit aktueller API.
|
|
|
|
$dokument = $entity->get('dokument');
|
|
|
|
if (!$dokument) {
|
|
return;
|
|
}
|
|
|
|
if (is_object($dokument)) {
|
|
$attachment = $dokument;
|
|
} else {
|
|
$attachment = $this->getEntityManager()->getEntity('Attachment', $dokument);
|
|
}
|
|
|
|
if (!$attachment) {
|
|
return;
|
|
}
|
|
|
|
$filePath = 'data/upload/' . $attachment->get('id');
|
|
if (!file_exists($filePath)) {
|
|
return;
|
|
}
|
|
|
|
// Berechne neue Hashes
|
|
$newMd5 = hash_file('md5', $filePath);
|
|
$newSha256 = hash_file('sha256', $filePath);
|
|
|
|
// Setze Hashes
|
|
$entity->set('md5sum', $newMd5);
|
|
$entity->set('sha256', $newSha256);
|
|
|
|
// Bestimme Status
|
|
if ($entity->isNew()) {
|
|
$entity->set('fileStatus', 'new');
|
|
} else {
|
|
$oldMd5 = $entity->getFetched('md5sum');
|
|
$oldSha256 = $entity->getFetched('sha256');
|
|
|
|
if ($oldMd5 !== $newMd5 || $oldSha256 !== $newSha256) {
|
|
$entity->set('fileStatus', 'changed');
|
|
} else {
|
|
$entity->set('fileStatus', 'synced');
|
|
}
|
|
}
|
|
}
|
|
} |