From 4bff9ce4a44fbab58dd0b554d18d70a785f1e728 Mon Sep 17 00:00:00 2001 From: Michael Joseph Date: Mon, 26 May 2003 13:56:43 +0000 Subject: [PATCH] added update method --- lib/archiving/DocumentArchiveSettingsFactory.inc | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+), 0 deletions(-) create mode 100644 lib/archiving/DocumentArchiveSettingsFactory.inc diff --git a/lib/archiving/DocumentArchiveSettingsFactory.inc b/lib/archiving/DocumentArchiveSettingsFactory.inc new file mode 100644 index 0000000..2cb010b --- /dev/null +++ b/lib/archiving/DocumentArchiveSettingsFactory.inc @@ -0,0 +1,128 @@ +fileSystemRoot/lib/archiving/DocumentArchiving.inc"); +require_once("$default->fileSystemRoot/lib/archiving/ArchivingUtilisationSettings.inc"); +require_once("$default->fileSystemRoot/lib/archiving/ArchivingDateSettings.inc"); +require_once("$default->fileSystemRoot/lib/archiving/TimePeriod.inc"); + +/** + * $Id$ + * + * Business logic for setting document archive settings + * + * Licensed under the GNU GPL. For full terms see the file DOCS/COPYING. + * + * @version $Revision$ + * @author Michael Joseph , Jam Warehouse (Pty) Ltd, South Africa + * @package lib.archiving + */ + +class DocumentArchiveSettingsFactory { + var $iArchivingTypeID; + var $sArchivingType; + + /** + * Constructs a new factory for the specified archiving type + */ + function DocumentArchiveSettingsFactory($iArchivingTypeID) { + global $default; + + $this->iArchivingTypeID = $iArchivingTypeID; + $this->sArchivingType = lookupName($default->owl_archiving_type_lookup_table, $iArchivingTypeID); + } + + function handleTimePeriod($iTimeUnitID, $iUnits) { + if ($iTimeUnitID && $iUnits) { + // search for an existing time period id + $aTimePeriod = TimePeriod::getList("time_unit_id=$iTimeUnitID AND units=$iUnits"); + if (count($aTimePeriod) > 0) { + $iTimePeriodID = $aTimePeriod[0]->getID(); + } else { + // create it + $oTimePeriod = new TimePeriod($iTimeUnitID, $iUnits); + if ($oTimePeriod->create()) { + $iTimePeriodID = $oTimePeriod->getID(); + } else { + $default->log->error("couldn't create time period- " . arrayToString($oTimePeriod)); + return false; + } + } + } else { + $iTimePeriodID = -1; + } + return $iTimePeriodID; + } + + function create($iDocumentID, $dExpirationDate, $iDocumentTransactionID, $iTimeUnitID, $iUnits) { + global $default; + + // process time period (if any) + $iTimePeriodID = $this->handleTimePeriod($iTimeUnitID, $iUnits); + + // construction strings + switch ($this->sArchivingType) { + case "Date" : $sSearchConstruction = "\$aArchiveSettings = ArchivingDateSettings::getList(\""; + $sSearchConstruction .= (isset($dExpirationDate) ? "expiration_date='$dExpirationDate'" : "time_period_id=$iTimePeriodID") . "\");"; + $sConstruction = "\$oArchiveSettings = new ArchivingDateSettings(\$dExpirationDate, $iTimePeriodID);"; + break; + case "Utilisation" : $sSearchConstruction = "\$aArchiveSettings = ArchivingUtilisationSettings::getList(\"document_transaction_id=$iDocumentTransactionID AND time_period_id=$iTimePeriodID\");"; + $sConstruction = "\$oArchiveSettings = new ArchivingUtilisationSettings($iDocumentTransactionID, $iTimePeriodID);"; + break; + } + + // search for the settings first + eval($sSearchConstruction); + if (count($aArchiveSettings) > 0) { + $iArchiveSettingsID = $aArchiveSettings[0]->getID(); + $default->log->info("looked up archive settings id=$iArchiveSettingsID"); + } else { + // create them + eval($sConstruction); + if ($oArchiveSettings->create()) { + $iArchiveSettingsID = $oArchiveSettings->getID(); + } else { + $default->log->error("couldn't create archive settings- " . arrayToString($oArchiveSettings)); + return false; + } + } + + // now link to the documents + $oDocumentArchiving = new DocumentArchiving($iDocumentID, $this->iArchivingTypeID, $iArchiveSettingsID); + if ($oDocumentArchiving->create()) { + return true; + } else { + $default->log->error("couldn't create document archiving - " . arrayToString($oDocumentArchiving)); + return false; + } + } + + function update($oDocumentArchiving, $dExpirationDate, $iDocumentTransactionID, $iTimeUnitID, $iUnits) { + global $default; + + // retrieve the settings + $sRetrieveConstruction = "\$oArchiveSettings = Archiving" . $this->sArchivingType . "Settings::get(\"" . $oDocumentArchiving->getArchivingSettingsID(). "\");"; + eval($sRetrieveConstruction); + if ($oArchiveSettings) { + + // process time period (if any) + $iTimePeriodID = $this->handleTimePeriod($iTimeUnitID, $iUnits); + $oArchiveSettings->setTimePeriodID($iTimePeriodID); + + // update it based on the type + switch ($this->sArchivingType) { + case "Date" : $oArchiveSettings->setExpirationDate($dExpirationDate); + break; + case "Utilisation" : $oArchiveSettings->setDocumentTransactionID($iDocumentTransactionID); + break; + } + if ($oArchiveSettings->update()) { + return true; + } else { + $default->log->error("error updating archive settings for documentID=" . $oArchiveSettings->getDocumentID()); + } + } else { + $default->log->error("couldn't retrieve archive settings"); + return false; + } + } +} +?> \ No newline at end of file -- libgit2 0.21.4