From fc477225d7467616409a68dfac4331e57f0a461a Mon Sep 17 00:00:00 2001 From: Ali Alam Date: Tue, 10 Mar 2026 13:52:08 +0800 Subject: [PATCH 1/2] Integrated fileHandler class into PD module --- .../pd_addExpenseRequestProcess.php | 15 +++++++++++++++ Professional Development/pd_addProcess.php | 19 ++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Professional Development/pd_addExpenseRequestProcess.php b/Professional Development/pd_addExpenseRequestProcess.php index 2ebed7b..25ea61f 100644 --- a/Professional Development/pd_addExpenseRequestProcess.php +++ b/Professional Development/pd_addExpenseRequestProcess.php @@ -27,6 +27,7 @@ use Gibbon\Domain\System\NotificationGateway; use Gibbon\Module\ProfessionalDevelopment\Domain\RequestCostGateway; use Gibbon\Module\ProfessionalDevelopment\Domain\RequestPersonGateway; +use Gibbon\Contracts\Filesystem\FileHandler; include '../../gibbon.php'; @@ -62,14 +63,19 @@ $status = 'Paid'; // Upload the receipt or ss of payment + $fileMetaData = null; $fileUploader = new Gibbon\FileUploader($pdo, $session); $file = (isset($_FILES['file']))? $_FILES['file'] : null; + // Upload the file, return the /uploads relative path $attachment = $fileUploader->uploadFromPost($file, $title); + if (!empty($file) && empty($attachment)) { $URL .= '&return=error5'; header("Location: {$URL}"); exit(); + } elseif (!empty($attachment)) { + $fileMetaData = $fileUploader->getFileMetaData($attachment); } // Get Reimbursement data if paid by "Self" @@ -115,6 +121,15 @@ $gibbonFinanceExpenseID = str_pad($connection2->lastInsertID(), 14, '0', STR_PAD_LEFT); + // Record file tracking + if (!empty($fileMetaData) && !empty($gibbonFinanceExpenseID)) { + $gibbonFileID = $container->get(FileHandler::class)->recordFileUpload($fileMetaData, 'gibbonFinanceExpense', $gibbonFinanceExpenseID, 'paymentReimbursementReceipt'); + + if (empty($gibbonFileID)) { + $partialFail = true; + } + } + $requestPersonGateway = $container->get(RequestPersonGateway::class); if (!empty($professionalDevelopmentRequestID)) { $updateResult = $requestPersonGateway->updateWhere(['professionalDevelopmentRequestID' => $professionalDevelopmentRequestID, 'gibbonPersonID' => $session->get('gibbonPersonID')], ['gibbonFinanceExpenseID' => $gibbonFinanceExpenseID]); diff --git a/Professional Development/pd_addProcess.php b/Professional Development/pd_addProcess.php index 65cc532..4feb823 100644 --- a/Professional Development/pd_addProcess.php +++ b/Professional Development/pd_addProcess.php @@ -19,7 +19,6 @@ along with this program. If not, see . */ -use Gibbon\Data\Validator; use Gibbon\Services\Format; use Gibbon\Comms\NotificationEvent; use Gibbon\Comms\NotificationSender; @@ -31,6 +30,7 @@ use Gibbon\Module\ProfessionalDevelopment\Domain\RequestDaysGateway; use Gibbon\Module\ProfessionalDevelopment\Domain\RequestPersonGateway; use Gibbon\Module\ProfessionalDevelopment\Domain\RequestApproversGateway; +use Gibbon\Contracts\Filesystem\FileHandler; require_once '../../gibbon.php'; require_once './moduleFunctions.php'; @@ -112,6 +112,7 @@ } // Move attached file, if there is one + $fileMetaData = null; if (!empty($_FILES['supportingEvidenceFile']['tmp_name'])) { $fileUploader = new Gibbon\FileUploader($pdo, $session); @@ -122,6 +123,8 @@ if (empty($requestData['supportingEvidence'])) { $partialFail = true; + } else { + $fileMetaData = $fileUploader->getFileMetaData($requestData['supportingEvidence']); } } elseif (empty($_POST['supportingEvidence'])) { $requestData['supportingEvidence'] = ''; @@ -148,6 +151,11 @@ if (!$requestsGateway->update($professionalDevelopmentRequestID, $requestData)) { $professionalDevelopmentRequestID = null; } + + // Handle file deletion when user removes logo + if (empty($requestData['supportingEvidence']) && !empty($pdRequest['supportingEvidence'])) { + $deleted = $container->get(FileHandler::class)->deleteFile('professionalDevelopmentRequest', $professionalDevelopmentRequestID, 'supportingEvidence'); + } } else { $professionalDevelopmentRequestID = $requestsGateway->insert($requestData); } @@ -160,6 +168,15 @@ exit; } + // Record file tracking (only if file uploaded) + if (!empty($fileMetaData) && !empty($professionalDevelopmentRequestID)) { + $gibbonFileID = $container->get(FileHandler::class)->recordFileUpload($fileMetaData, 'professionalDevelopmentRequest', $professionalDevelopmentRequestID, 'supportingEvidence'); + + if (empty($gibbonFileID)) { + $partialFail = true; + } + } + // Add or edit Request Days $dateIDs = []; $dateTimeOrder = $_POST['dateTimeOrder'] ?? []; From 40a66b74fcad6b61e0dafc539f8babaf6a2dccc6 Mon Sep 17 00:00:00 2001 From: Ali Alam Date: Fri, 13 Mar 2026 13:18:02 +0800 Subject: [PATCH 2/2] Added comprehensive file upload tracking system to monitor and manage all file uploads across the system --- Professional Development/CHANGEDB.php | 7 ++++++- Professional Development/CHANGELOG.txt | 4 ++++ Professional Development/manifest.php | 2 +- Professional Development/version.php | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Professional Development/CHANGEDB.php b/Professional Development/CHANGEDB.php index 1d0f4ed..a531205 100644 --- a/Professional Development/CHANGEDB.php +++ b/Professional Development/CHANGEDB.php @@ -143,4 +143,9 @@ $sql[$count][1] = " ALTER TABLE `professionalDevelopmentPortfolio` CHANGE `title` `title` VARCHAR(255) NOT NULL;end ALTER TABLE `professionalDevelopmentPortfolio` ADD `gibbonPersonIDCreated` INT(10) UNSIGNED ZEROFILL NULL;end -"; \ No newline at end of file +"; + +// v0.1.06 +$count++; +$sql[$count][0] = "0.1.06"; +$sql[$count][1] = ""; diff --git a/Professional Development/CHANGELOG.txt b/Professional Development/CHANGELOG.txt index c1d7e03..a721a6c 100644 --- a/Professional Development/CHANGELOG.txt +++ b/Professional Development/CHANGELOG.txt @@ -19,6 +19,10 @@ along with this program. If not, see . CHANGELOG ========= +v0.1.06 +------- +Added comprehensive file upload tracking system to monitor and manage all file uploads across the system + v0.1.05 ------- Added the feature for a staff to delete their own portfolio record. diff --git a/Professional Development/manifest.php b/Professional Development/manifest.php index f18ddc9..ceb6117 100644 --- a/Professional Development/manifest.php +++ b/Professional Development/manifest.php @@ -27,7 +27,7 @@ $entryURL = "pd_manage.php"; // The landing page for the unit, used in the main menu $type = "Additional"; $category = 'Other'; -$version = '0.1.05'; +$version = '0.1.06'; $author = 'Gibbon Foundation'; $url = 'https://github.com/GibbonEdu/module-professionalDevelopment'; diff --git a/Professional Development/version.php b/Professional Development/version.php index 700b10b..066c496 100644 --- a/Professional Development/version.php +++ b/Professional Development/version.php @@ -19,5 +19,5 @@ along with this program. If not, see . */ -$moduleVersion = '0.1.05'; +$moduleVersion = '0.1.06'; $coreVersion = '28.0.00';