get('skipHooks')) { return; } // Nur wenn Entity bereits existiert (nicht bei Create) if ($entity->isNew()) { return; } try { // Hole alle verknüpften Dokumente mit ihren syncstatus-Werten aus der Junction-Tabelle $query = $this->entityManager->getQueryBuilder() ->select(['syncstatus']) ->from('CAIKnowledgeDokumente') ->where([ 'cAIKnowledgeId' => $entity->getId(), 'deleted' => false ]) ->build(); $pdoStatement = $this->entityManager->getQueryExecutor()->execute($query); $rows = $pdoStatement->fetchAll(\PDO::FETCH_ASSOC); // Wenn keine Dokumente verknüpft, setze auf "unclean" if (empty($rows)) { $entity->set('syncStatus', 'unclean'); return; } // Prüfe, ob irgendein Dokument "new" oder "unclean" ist $hasUnsynced = false; foreach ($rows as $row) { $status = $row['syncstatus'] ?? null; if ($status === 'new' || $status === 'unclean' || $status === null || $status === '') { $hasUnsynced = true; break; } } // Setze globalen Status if ($hasUnsynced) { $entity->set('syncStatus', 'unclean'); } else { // Alle Dokumente sind "synced" $entity->set('syncStatus', 'synced'); $entity->set('lastSync', date('Y-m-d H:i:s')); } } catch (\Exception $e) { // Bei Fehler loggen und Status auf "unclean" setzen $GLOBALS['log']->error('CAIKnowledge CheckGlobalSyncStatus Hook Error: ' . $e->getMessage()); $entity->set('syncStatus', 'unclean'); } } }