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/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'] ?? [];
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';