- AkteLib: added optional params "archiv", "signiert", "stud_selfservice", removed "uid"

- AkteLib and DmsLib: added comments, added fallback default user for insertvon
- FS_Model: added TempFS_model.php for writing temp files, added comments
This commit is contained in:
KarpAlex
2021-12-17 18:03:34 +01:00
parent 8c2af28595
commit 40493936c3
4 changed files with 164 additions and 46 deletions
+5
View File
@@ -114,15 +114,20 @@ class FS_Model extends CI_Model
return success($writeResult);
}
/**
* Removes a given file
*/
public function remove($filename)
{
// Check if the property _path represents a valid directory
$checkResult = $this->_checkPath();
if (isError($checkResult)) return $checkResult; // If not then return the error
// Check filename
if (isEmptyString($filename)) return error('The given filename is not valid');
// remove file
if (unlink($this->_path.DIRECTORY_SEPARATOR.$filename) === true)
{
return success();
+64 -25
View File
@@ -4,10 +4,11 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
class AkteLib
{
const AKTE_KATEGORIE_KURZBZ = 'Akte';
const AKTE_KATEGORIE_KURZBZ = 'Akte'; // kategorie_kurzbz of dms when inserting for akte
const DEFAULT_USER = 'Akte'; // fallback string for insertvon if no logged user
private $_ci; // Code igniter instance
private $_uid;
private $_uid; // uid of logged user
/**
* Object initialization
@@ -23,17 +24,23 @@ class AkteLib
$this->_ci->load->library('DmsLib');
}
public function add($person_id, $dokument_kurzbz, $titel, $mimetype, $fileHandle, $bezeichnung = null, $uid = null)
/**
* Writes a new file, adds a new dms entry with given akte data,
* adds a new dms version 0 for the written file, and adds Akte if dms add was successfull
* Returns success with inserted akte id or error
*/
public function add($person_id, $dokument_kurzbz, $titel, $mimetype, $fileHandle, $bezeichnung = null, $archiv = false, $signiert = false, $stud_selfservice = false)
{
$dmsAddResult = $this->_ci->dmslib->add($titel, self::AKTE_KATEGORIE_KURZBZ, $mimetype, $fileHandle, $dokument_kurzbz, $bezeichnung);
// add new dms entry and new dms version for the Akte, using Akte data (title, mimetype, file content as handle)
$dmsAddResult = $this->_ci->dmslib->add($titel, $mimetype, $fileHandle, self::AKTE_KATEGORIE_KURZBZ, $dokument_kurzbz, $bezeichnung);
if (isError($dmsAddResult)) return $dmsAddResult;
if (!hasData($dmsAddResult))
return error("Dms document could not be added");
if (!hasData($dmsAddResult)) return error("Dms document could not be added");
$dmsAddData = getData($dmsAddResult);
// insert the Akte
return $this->_ci->AkteModel->insert(
array(
'person_id' => $person_id,
@@ -42,36 +49,42 @@ class AkteLib
'mimetype' => $mimetype,
'bezeichnung' => $bezeichnung,
'erstelltam' => date('Y-m-d'),
'uid' => $uid,
'dms_id' => $dmsAddData->dms_id,
'archiv' => $archiv,
'signiert' => $signiert,
'stud_selfservice' => $stud_selfservice,
'insertamum' => date('Y-m-d H:i:s'),
'insertvon' => $this->_uid
'insertvon' => isEmptyString($this->_uid) ? self::DEFAULT_USER : $this->_uid
)
);
}
public function update($akte_id, $titel, $mimetype, $fileHandle, $bezeichnung = null)
/**
* Writes a new file, adds a new dms version 0 for the written file, and updates Akte if dms version add was successfull
* Returns success with updated akte id or error
*/
public function update($akte_id, $titel, $mimetype, $fileHandle, $bezeichnung = null, $archiv = false, $signiert = false, $stud_selfservice = false)
{
// check if Akte with dms exists
$this->_ci->AkteModel->addSelect('dms_id');
$akteResult = $this->_ci->AkteModel->load($akte_id);
if (isError($akteResult)) return $akteResult;
if (!hasData($akteResult))
return error("Akte not found");
if (!hasData($akteResult)) return error("Akte not found");
$dms_id = getData($akteResult)[0]->dms_id;
if (isEmptyString($dms_id))
return error("Akte has no dms document");
if (isEmptyString($dms_id)) return error("Akte has no dms document");
// if Akte with dms found, update the last dms version
$dmsUpdateResult = $this->_ci->dmslib->updateLastVersion($dms_id, $fileHandle, $titel, $mimetype, $bezeichnung);
if (isError($dmsUpdateResult)) return $dmsUpdateResult;
if (!hasData($dmsUpdateResult))
return error("Dms document could not be updated");
if (!hasData($dmsUpdateResult)) return error("Dms document could not be updated");
// update the Akte
return $this->_ci->AkteModel->update(
$akte_id,
array(
@@ -80,12 +93,19 @@ class AkteLib
'bezeichnung' => $bezeichnung,
'erstelltam' => date('Y-m-d'),
'dms_id' => $dms_id,
'archiv' => $archiv,
'signiert' => $signiert,
'stud_selfservice' => $stud_selfservice,
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
);
}
/**
* Gets akte data and associated dms data by akte Id
* Returns success with akte and dms data or error
*/
public function get($akte_id)
{
// get Akte data
@@ -98,19 +118,22 @@ class AkteLib
if (isError($akteResult)) return $akteResult;
if (!hasData($akteResult))
return error("Akte not found");
if (!hasData($akteResult)) return error("Akte not found");
$resultObject = getData($akteResult)[0];
// set properties with same name in Akte and Dms table
$resultObject->akte_mimetype = $resultObject->mimetype;
// get dms data
$dmsResult = $this->_ci->dmslib->getLastVersion($resultObject->dms_id);
$dmsProperties = array('version', 'filename', 'mimetype', 'name', 'beschreibung', 'cis_suche', 'schlagworte', DmsLib::FILE_CONTENT_PROPERTY);
if (isError($dmsResult)) return $dmsResult;
// properties to retrieve from dms
$dmsProperties = array('version', 'filename', 'mimetype', 'name', 'beschreibung', 'cis_suche', 'schlagworte', DmsLib::FILE_CONTENT_PROPERTY);
// set dms properties
if (hasData($dmsResult))
{
$dmsData = getData($dmsResult);
@@ -122,17 +145,24 @@ class AkteLib
}
else
{
// set null if no dms result found
foreach ($dmsProperties as $dmsProperty)
{
$resultObject->{$dmsProperty} = null;
}
}
// return the object containing akte and dms data
return success($resultObject);
}
/**
* Gets Akte data and associated dms data by person Id and dokument_kurzbz
* Returns success with result array with akte and dms data or error
*/
public function getByPersonIdAndDocumentType($person_id, $dokument_kurzbz)
{
// load all Akte entries for given person and dokument_kurzbz
$this->_ci->AkteModel->addSelect('akte_id');
$akteResult = $this->_ci->AkteModel->loadWhere(
array(
@@ -141,40 +171,45 @@ class AkteLib
)
);
if (!hasData($akteResult))
return error("Akte not found");
if (!hasData($akteResult)) return error("Akte not found");
$akteData = getData($akteResult);
$resultArr = array();
// for each found akte entry
foreach ($akteData as $akte)
{
// get dms and akte data from akte Id
$getAkteDmsResult = $this->get($akte->akte_id);
if (isError($getAkteDmsResult))
return $getAkteDmsResult;
if (isError($getAkteDmsResult)) return $getAkteDmsResult;
$resultArr[] = getData($getAkteDmsResult);
}
// return all found entries
return success($resultArr);
}
/**
* Removes Akte by akte Id, removes all associated dms entries and versions, and deletes all associated files
* Returns success with removed version numbers or error
*/
public function remove($akte_id)
{
// get dms_id for akte
$this->_ci->AkteModel->addSelect('dms_id');
$akteResult = $this->_ci->AkteModel->load($akte_id);
if (isError($akteResult)) return $akteResult;
if (!hasData($akteResult))
return error("Akte not found");
if (!hasData($akteResult)) return error("Akte not found");
$dms_id = getData($akteResult)[0]->dms_id;
$error = null;
// Start DB transaction
// Start DB transaction to avoid deleting only part of the data
$this->_ci->db->trans_begin();
// delete Akte
@@ -186,6 +221,7 @@ class AkteLib
}
else
{
// remove all dms entry for dms of the akte
$removeAllResult = $this->_ci->dmslib->removeAll($dms_id);
if (isError($removeAllResult))
@@ -200,6 +236,7 @@ class AkteLib
{
$this->_ci->db->trans_rollback();
// return occured error
if (isset($error))
return $error;
else
@@ -208,6 +245,8 @@ class AkteLib
else
{
$this->_ci->db->trans_commit();
// return removed dms entry data
return $removeAllResult;
}
}
+79 -21
View File
@@ -4,10 +4,11 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
class DmsLib
{
const FILE_CONTENT_PROPERTY = 'file_content';
const FILE_CONTENT_PROPERTY = 'file_content'; // property name for file content
const DEFAULT_USER = 'DMS'; // fallback string for insertvon if no logged user
private $_ci; // code igniter instance
private $_uid;
private $_uid; // uid of logged user
/**
* Object initialization
@@ -26,8 +27,13 @@ class DmsLib
// -----------------------------------------------------------------------------------------------------------
// Public methods
public function add($name, $kategorie_kurzbz, $mimetype, $fileHandle, $dokument_kurzbz = null, $beschreibung = null, $cis_suche = false, $schlagworte = null)
/**
* Writes a new file, adds a new dms entry and a new dms version 0 for the written file
* Returns success info of added dms entry (dms_id, version, filename) or error
*/
public function add($name, $mimetype, $fileHandle, $kategorie_kurzbz = null, $dokument_kurzbz = null, $beschreibung = null, $cis_suche = false, $schlagworte = null)
{
// write file with content of fileHandle
$writeFileResult = $this->_writeNewFile($name, $fileHandle);
if (isError($writeFileResult)) return $writeFileResult;
@@ -62,7 +68,7 @@ class DmsLib
'beschreibung' => $beschreibung,
'cis_suche' => $cis_suche,
'schlagworte' => $schlagworte,
'insertvon' => $this->_uid,
'insertvon' => isEmptyString($this->_uid) ? self::DEFAULT_USER : $this->_uid,
'insertamum' => date('Y-m-d H:i:s')
);
@@ -70,6 +76,7 @@ class DmsLib
if (isError($dmsVersionResult)) return $dmsVersionResult;
// return dms info
$resObj = new stdClass();
$resObj->dms_id = $dms_id;
$resObj->version = $version;
@@ -84,6 +91,10 @@ class DmsLib
return error("file could not be written");
}
/**
* Writes a new file with content of fileHandle, adds a new dms version (max version number + 1) for the written file
* Returns success with info of added dms version (version, filename) or error
*/
public function addNewVersion($dms_id, $fileHandle, $name = null, $mimetype = null, $beschreibung = null, $cis_suche = false, $schlagworte = null)
{
// get the latest version
@@ -97,7 +108,7 @@ class DmsLib
$originalName = isset($name) ? $name : $lastVersion->name;
// write new file
// write new file with content of fileHandle
$writeFileResult = $this->_writeNewFile($originalName, $fileHandle);
if (isError($writeFileResult)) return $writeFileResult;
@@ -120,15 +131,15 @@ class DmsLib
'beschreibung' => isset($beschreibung) ? $beschreibung : $lastVersion->beschreibung,
'cis_suche' => isset($cis_suche) ? $cis_suche : $lastVersion->cis_suche,
'schlagworte' => isset($schlagworte) ? $schlagworte : $lastVersion->schlagworte,
'insertvon' => $this->_uid,
'insertvon' => isEmptyString($this->_uid) ? self::DEFAULT_USER : $this->_uid,
'insertamum' => date('Y-m-d H:i:s')
);
$addVersionResult = $this->_ci->DmsVersionModel->insert($newVersion);
if (isError($addVersionResult))
return $addVersionResult;
if (isError($addVersionResult)) return $addVersionResult;
// return dms info
$resObj = new stdClass();
$resObj->version = $newVersionNumber;
$resObj->filename = $filename;
@@ -142,6 +153,11 @@ class DmsLib
return error("last version not found");
}
/**
* Updates the last version (max version number) of a dms entry
* Overwrites the file associated with this version with content read from fileHandle
* Returns success with info of added dms version (version, filename) or error
*/
public function updateLastVersion($dms_id, $fileHandle, $name = null, $mimetype = null, $beschreibung = null, $cis_suche = false, $schlagworte = null)
{
// get the latest version
@@ -179,9 +195,9 @@ class DmsLib
$newVersion
);
if (isError($addVersionResult))
return $addVersionResult;
if (isError($addVersionResult)) return $addVersionResult;
// return dms info
$resObj = new stdClass();
$resObj->version = $lastVersion->version;
$resObj->filename = $filename;
@@ -195,8 +211,13 @@ class DmsLib
return error("last version not found");
}
/**
* Gets dms version with highest number
* Returns success with dms data and fileHandle with file content or error
*/
public function getLastVersion($dms_id)
{
// get the latest version number
$this->_ci->DmsVersionModel->addSelect('version');
$this->_ci->DmsVersionModel->addOrder('version', 'DESC');
$this->_ci->DmsVersionModel->addOrder('insertamum', 'DESC');
@@ -212,12 +233,17 @@ class DmsLib
$lastDmsVersionData = getData($lastDmsVersionResult)[0];
$lastDmsVersion = $lastDmsVersionData->version;
// call get Version with last version number
return $this->getVersion($dms_id, $lastDmsVersion);
}
else
return error("Dms last version not found");
}
/**
* Gets specified dms version
* Returns success with dms data and fileHandle with file content or error
*/
public function getVersion($dms_id, $version)
{
$this->_ci->DmsVersionModel->addSelect('dms_id, version, filename, mimetype, name, beschreibung, cis_suche, schlagworte');
@@ -234,7 +260,7 @@ class DmsLib
{
$dmsVersion = getData($dmsVersionResult)[0];
// file content as file pointer
// get file content as file pointer
$fileHandleResult = $this->_ci->DmsFSModel->openRead($dmsVersion->filename);
if (isError($fileHandleResult)) return $fileHandleResult;
@@ -244,6 +270,7 @@ class DmsLib
$fileHandle = getData($fileHandleResult);
$dmsVersion->{self::FILE_CONTENT_PROPERTY} = $fileHandle;
// close file pointer
$closeResult = $this->_ci->DmsFSModel->close($fileHandle);
if (isError($closeResult)) return $closeResult;
@@ -257,9 +284,13 @@ class DmsLib
return error("Dms version not found");
}
/**
* Removes dms entry and all its versions, deletes all associated files
* Returns success with removed version numbers or error
*/
public function removeAll($dms_id)
{
$versions_removed = array();
$versionsRemoved = array();
$this->_ci->DmsVersionModel->addSelect('version, filename');
$allVersionsResult = $this->_ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
@@ -270,10 +301,10 @@ class DmsLib
$error = null;
// Start DB transaction
// Start DB transaction to avoid deleting only part of the data
$this->_ci->db->trans_begin();
// remove all versions
// remove all versions of the dms Id
foreach ($allVersionsData as $version)
{
$removeVersionResult = $this->removeVersion($dms_id, $version->version);
@@ -284,7 +315,7 @@ class DmsLib
break;
}
else
$versions_removed[] = $version;
$versionsRemoved[] = $version; // return removed versions
}
// Transaction complete!
@@ -306,9 +337,13 @@ class DmsLib
}
}
return success($versions_removed);
return success($versionsRemoved);
}
/**
* Removes latest version and its associated file
* Returns success with removed dms version data (dms_id, version, filename) or error
*/
public function removeLastVersion($dms_id)
{
$lastVersionNumber = 0;
@@ -323,9 +358,14 @@ class DmsLib
$lastVersionNumber = $lastVersion->version;
}
// call remove method for latest version
return $this->removeVersion($dms_id, $lastVersionNumber);
}
/**
* Removes latest version and its associated file
* Returns success with removed dms version data (dms_id, version, filename) or error
*/
public function removeVersion($dms_id, $version)
{
$removeVersionResultObj = new stdClass();
@@ -333,7 +373,7 @@ class DmsLib
$removeVersionResultObj->version = null;
$removeVersionResultObj->filename = null;
// load version and check how many versions there are
// load dms version and check how many versions there are
$db = new DB_Model();
$checkDeleteResult = $db->execReadOnlyQuery(
@@ -353,6 +393,7 @@ class DmsLib
{
$checkDeleteData = getData($checkDeleteResult)[0];
// delete version
$deleteVersionResult = $this->_ci->DmsVersionModel->delete(array($dms_id, $version));
if (isError($deleteVersionResult)) return $deleteVersionResult;
@@ -373,8 +414,7 @@ class DmsLib
// delete file from file system
$removeResult = $this->_ci->DmsFSModel->remove($checkDeleteData->filename);
if (isError($removeResult))
return $removeResult;
if (isError($removeResult)) return $removeResult;
}
return success($removeVersionResultObj);
@@ -382,17 +422,26 @@ class DmsLib
// -----------------------------------------------------------------------------------------------------------
// Private methods
/**
* Writes file with content of fileHandle using original document name for file extension
*/
private function _writeNewFile($originalName, $fileHandle)
{
// create unique filename
// create unique filename, using original document name to detect file extension
$filename = $this->_getUniqueFilename($originalName);
// write the file
return $this->_writeFile($filename, $fileHandle);
}
/**
* Writes file with content of fileHandle
* Returns number of bytes written and filename
*/
private function _writeFile($filename, $fileHandle)
{
// copy file content provided by fileHandle
// file content provided by fileHandle
$fileContent = '';
$readBlockResult = success();
@@ -421,6 +470,7 @@ class DmsLib
if (isError($writeFileResult)) return $writeFileResult;
// return number of bytes written and filename
$resObj = new stdClass();
$resObj->bytesWritten = 0;
$resObj->filename = '';
@@ -439,11 +489,19 @@ class DmsLib
return success($resObj);
}
/**
* Generates unique filename, appends file extension from document name
* Returns the filename string
*/
private function _getUniqueFilename($dokname)
{
// create unique id
$uniqueFilename = uniqid();
// getting extension of file from document name
$fileExtension = pathinfo($dokname, PATHINFO_EXTENSION);
// if file extension found, append it
if (!isEmptyString($fileExtension))
$uniqueFilename .= '.'.$fileExtension;
@@ -0,0 +1,16 @@
<?php
/**
* Model for writing temporary files
*/
class TempFS_model extends FS_Model
{
/**
* Constructor
*/
public function __construct()
{
// default temp directory of server is used
parent::__construct(sys_get_temp_dir());
}
}