From 7935ecaeafa9448589c0991ed018ab4f1dd436a0 Mon Sep 17 00:00:00 2001 From: Jerome_maarch Date: Wed, 13 Mar 2019 19:51:36 +0100 Subject: [PATCH] update archiveRelationshipController to add update --- data/maarchRM/sql/pgsql/demo.sql | 1 + data/maarchRM/sql/pgsql/lifeCycle.sql | 3 +- .../maarchRM/sql/pgsql/migrationV2.3_V2.4.sql | 3 +- .../Controller/archiveRelationship.php | 95 +++++++++++++++++-- 4 files changed, 94 insertions(+), 8 deletions(-) diff --git a/data/maarchRM/sql/pgsql/demo.sql b/data/maarchRM/sql/pgsql/demo.sql index 191ebf027..b380255b3 100755 --- a/data/maarchRM/sql/pgsql/demo.sql +++ b/data/maarchRM/sql/pgsql/demo.sql @@ -54,6 +54,7 @@ INSERT INTO "auth"."roleMember"("roleId", "userAccountId") VALUES INSERT INTO "lifeCycle"."eventFormat" ("type", "format", "notification", "message") VALUES ('recordsManagement/accessRuleModification', 'resId hashAlgorithm hash address accessRuleStartDate accessRuleDuration previousAccessRuleStartDate previousAccessRuleDuration originatorOrgRegNumber archiverOrgRegNumber', FALSE, 'Modification de la règle de communicabilité de l''archive %6$s'), ('recordsManagement/addRelationship', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber relatedArchiveId', FALSE, 'Relation ajoutée avec l''archive %6$s'), +('recordsManagement/updateRelationship', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber relatedArchiveId', FALSE, 'Relation mise à jour avec l''archive %6$s'), ('recordsManagement/archivalProfileModification', 'archivalProfileReference', FALSE, 'Modification du profil %6$s.'), ('recordsManagement/consultation', 'resId hash hashAlgorith address size', FALSE, 'Consultation de la ressource %9$s'), ('recordsManagement/conversion', 'resId hashAlgorithm hash address convertedResId convertedHashAlgorithm convertedHash convertedAddress software docId size', FALSE, 'Conversion du document %18$s'), diff --git a/data/maarchRM/sql/pgsql/lifeCycle.sql b/data/maarchRM/sql/pgsql/lifeCycle.sql index 43f1a1dc2..22e0fdcdb 100755 --- a/data/maarchRM/sql/pgsql/lifeCycle.sql +++ b/data/maarchRM/sql/pgsql/lifeCycle.sql @@ -5,6 +5,7 @@ INSERT INTO "lifeCycle"."eventFormat" ("type", "format", "notification", "messag ('recordsManagement/accessRuleModification', 'resId hashAlgorithm hash address accessRuleStartDate accessRuleDuration previousAccessRuleStartDate previousAccessRuleDuration originatorOrgRegNumber archiverOrgRegNumber', FALSE, 'Modification de la règle de communicabilité de l''archive %6$s'), ('recordsManagement/addRelationship', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber relatedArchiveId', FALSE, 'Relation ajoutée avec l''archive %6$s'), + ('recordsManagement/updateRelationship', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber relatedArchiveId', FALSE, 'Relation mise à jour avec l''archive %6$s'), ('recordsManagement/archivalProfileModification', 'archivalProfileReference', FALSE, 'Modification du profil %6$s.'), ('recordsManagement/consultation', 'resId hash hashAlgorith address size', FALSE, 'Consultation de la ressource %9$s'), ('recordsManagement/conversion', 'resId hashAlgorithm hash address convertedResId convertedHashAlgorithm convertedHash convertedAddress software docId size', FALSE, 'Conversion du document %18$s'), @@ -47,4 +48,4 @@ INSERT INTO "lifeCycle"."eventFormat" ("type", "format", "notification", "messag --('recordsManagement/profileDestruction', 'archivalProfileReference', FALSE, 'Destruction of profile %5$s'), --('recordsManagement/integrityCheck', 'startEventDate endEventDate endEventId', FALSE, 'Periodic validation of integrity'), --('recordsManagement/conversion', 'resId hashAlgorithm hash address convertedResId convertedHashAlgorithm convertedHash convertedAddress software docId', FALSE, 'Conversion of document %17$s'), - --('recordsManagement/resourceDestruction', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber', FALSE, 'Destruction of resource %9$s'); \ No newline at end of file + --('recordsManagement/resourceDestruction', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber', FALSE, 'Destruction of resource %9$s'); diff --git a/data/maarchRM/sql/pgsql/migrationV2.3_V2.4.sql b/data/maarchRM/sql/pgsql/migrationV2.3_V2.4.sql index 4cb5f5020..ba0b96c4c 100644 --- a/data/maarchRM/sql/pgsql/migrationV2.3_V2.4.sql +++ b/data/maarchRM/sql/pgsql/migrationV2.3_V2.4.sql @@ -23,7 +23,8 @@ ALTER TABLE "organization"."archivalProfileAccess" ADD COLUMN "userAccess" jsonb ALTER TABLE "recordsManagement"."archiveDescription" ADD COLUMN "isInList" boolean default false; INSERT INTO "lifeCycle"."eventFormat" ("type", "format", "notification", "message") VALUES -('recordsManagement/resourceDestruction', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber', FALSE, 'Destruction de la ressource %9$s'); +('recordsManagement/resourceDestruction', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber', FALSE, 'Destruction de la ressource %9$s'), +('recordsManagement/updateRelationship', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber relatedArchiveId', FALSE, 'Relation mise à jour avec l''archive %6$s'); -- New search index for special chars DROP INDEX "recordsManagement"."archive_to_tsvector_idx"; diff --git a/src/bundle/recordsManagement/Controller/archiveRelationship.php b/src/bundle/recordsManagement/Controller/archiveRelationship.php index 47c0ce656..1a53eb2af 100755 --- a/src/bundle/recordsManagement/Controller/archiveRelationship.php +++ b/src/bundle/recordsManagement/Controller/archiveRelationship.php @@ -31,7 +31,13 @@ class archiveRelationship { protected $sdoFactory; - + + /** + * Controller for life cycle journal events + * @var recordsManagement/Controller/lifeCycleJournal + */ + protected $lifeCycleJournalController; + /** * Constructor * @param \dependency\sdo\Factory $sdoFactory The sdo factory @@ -39,6 +45,7 @@ class archiveRelationship public function __construct(\dependency\sdo\Factory $sdoFactory) { $this->sdoFactory = $sdoFactory; + $this->lifeCycleJournalController = \laabs::newController("lifeCycle/journal"); } /** @@ -61,22 +68,48 @@ class archiveRelationship if (!$this->sdoFactory->exists("recordsManagement/archive", $archiveRelationship->relatedArchiveId)) { throw new \bundle\recordsManagement\Exception\unknownArchive($archiveRelationship->relatedArchiveId); } - - $this->sdoFactory->create($archiveRelationship, "recordsManagement/archiveRelationship"); + + try { + $this->sdoFactory->create($archiveRelationship, "recordsManagement/archiveRelationship"); + } catch (Exception $e) { + throw new \Exception("Error Processing Request", 1); + } + + $this->logEvent($archiveRelationship, 'recordsManagement/addRelationship'); return $archiveRelationship; } + public function update($archiveRelationship) + { + try { + $relation = $this->sdoFactory->update($archiveRelationship, "recordsManagement/archiveRelationship"); + } catch (Exception $e) { + throw new \Exception("Error Processing Request", 1); + } + + $this->logEvent($archiveRelationship, 'recordsManagement/updateRelationship'); + + return $relation; + } + /** * Delete a relationship * @param recordsManagement/archiveRelationship $archiveRelationship The archive relationship object * - * @return recordsManagement/archiveRelationship The archiveRelationship + * @return boolean The archiveRelationship */ public function delete($archiveRelationship) { - $archiveRelationship = \laabs::castCollection(get_object_vars($archiveRelationship), 'recordsManagement/archiveRelationship'); - $this->sdoFactory->delete($archiveRelationship); + //$archiveRelationship = \laabs::castCollection(get_object_vars($archiveRelationship), 'recordsManagement/archiveRelationship'); + + try { + $this->sdoFactory->delete($archiveRelationship); + } catch (Exception $e) { + throw new \Exception("Error Processing Request", 1); + } + + $this->logEvent($archiveRelationship, 'recordsManagement/deleteRelationship'); return true; } @@ -117,8 +150,58 @@ class archiveRelationship return $archiveRelationships; } + public function getUniqueRelationship($archiveId, $relatedArchiveId) + { + return $this->sdoFactory->find("recordsManagement/archiveRelationship", "archiveId='$archiveId' AND relatedArchiveId='$relatedArchiveId'")[0]; + } + protected function decodeDescription($relationship) { $relationship->description = json_decode($relationship->description); } + + protected function logEvent($archiveRelationship, $event) + { + $archiveController = \laabs::newController('recordsManagement/archive'); + $archive = $archiveController->read($archiveRelationship->archiveId); + $relatedArchive = $archiveController->read($archiveRelationship->relatedArchiveId); + + $archiveEventInfo = [ + 'resId' => (string) $archiveRelationship->archiveId, + 'hashAlgorithm' => '', + 'hash' => '', + 'address' => '', + 'originatorOrgRegNumber' => $archive->originatorOrgRegNumber, + 'archiverOrgRegNumber' => $archive->archiverOrgRegNumber, + 'relatedArchiveId' => (string) $archiveRelationship->relatedArchiveId + ]; + + $relatedArchiveEventInfo = [ + 'resId' => (string) $archiveRelationship->relatedArchiveId, + 'hashAlgorithm' => '', + 'hash' => '', + 'address' => '', + 'originatorOrgRegNumber' => $relatedArchive->originatorOrgRegNumber, + 'archiverOrgRegNumber' => $relatedArchive->archiverOrgRegNumber, + 'relatedArchiveId' => (string) $archiveRelationship->archiveId + ]; + + // Add relationship for archive to link + $this->lifeCycleJournalController->logEvent( + $event, + 'recordsManagement/archive', + $archiveRelationship->archiveId, + array_merge($archiveEventInfo, get_object_vars($archive)), + true + ); + + // Add relationship event for archive which is link with archive source + $this->lifeCycleJournalController->logEvent( + $event, + 'recordsManagement/archive', + $archiveRelationship->relatedArchiveId, + array_merge($relatedArchiveEventInfo, get_object_vars($relatedArchive)), + true + ); + } } -- GitLab