diff --git a/Deep Learning/CHANGEDB.php b/Deep Learning/CHANGEDB.php
index 3fa92a4..f0d8da6 100644
--- a/Deep Learning/CHANGEDB.php
+++ b/Deep Learning/CHANGEDB.php
@@ -117,3 +117,9 @@
$sql[$count][0] = '0.2.02';
$sql[$count][1] = "
";
+
+//v0.3.00
+++$count;
+$sql[$count][0] = '0.3.00';
+$sql[$count][1] = "
+";
\ No newline at end of file
diff --git a/Deep Learning/CHANGELOG.txt b/Deep Learning/CHANGELOG.txt
index 59df085..513a763 100644
--- a/Deep Learning/CHANGELOG.txt
+++ b/Deep Learning/CHANGELOG.txt
@@ -1,5 +1,10 @@
CHANGELOG
=========
+
+v0.3.00
+-------
+Added comprehensive file upload tracking system to monitor and manage all file uploads across the system
+
v0.2.01
-------
Removed deprecated function calls
diff --git a/Deep Learning/events_manage_addProcess.php b/Deep Learning/events_manage_addProcess.php
index 695f996..aa160e8 100755
--- a/Deep Learning/events_manage_addProcess.php
+++ b/Deep Learning/events_manage_addProcess.php
@@ -21,6 +21,7 @@
use Gibbon\Data\Validator;
use Gibbon\Services\Format;
+use Gibbon\Contracts\Filesystem\FileHandler;
use Gibbon\Module\DeepLearning\Domain\EventGateway;
use Gibbon\Module\DeepLearning\Domain\EventDateGateway;
@@ -78,6 +79,7 @@
}
// Move attached file, if there is one
+ $fileMetaData = null;
if (!empty($_FILES['backgroundImageFile']['tmp_name'])) {
$fileUploader = new Gibbon\FileUploader($pdo, $session);
$fileUploader->getFileExtensions('Graphics/Design');
@@ -89,12 +91,23 @@
if (empty($data['backgroundImage'])) {
$partialFail = true;
+ } else {
+ $fileMetaData = $fileUploader->getFileMetaData($data['backgroundImage']);
}
}
// Create the record
$deepLearningEventID = $eventGateway->insert($data);
+ // Record file tracking for background image (UL055)
+ if (!empty($fileMetaData) && !empty($deepLearningEventID)) {
+ $gibbonFileID = $container->get(FileHandler::class)->recordFileUpload($fileMetaData, 'deepLearningEvent', $deepLearningEventID, 'backgroundImage');
+
+ if (empty($gibbonFileID)) {
+ $partialFail = true;
+ }
+ }
+
$dates = $_POST['dates'] ?? [];
foreach ($dates as $i) {
$data = [
@@ -108,7 +121,7 @@
$URL .= !$deepLearningEventID
? "&return=error2"
- : "&return=success0&editID=$deepLearningEventID";
+ : ($partialFail ? "&return=success1" : "&return=success0&editID=$deepLearningEventID");
header("Location: {$URL}");
}
diff --git a/Deep Learning/events_manage_editProcess.php b/Deep Learning/events_manage_editProcess.php
index 9128c12..222acf0 100755
--- a/Deep Learning/events_manage_editProcess.php
+++ b/Deep Learning/events_manage_editProcess.php
@@ -21,6 +21,7 @@
use Gibbon\Data\Validator;
use Gibbon\Services\Format;
+use Gibbon\Contracts\Filesystem\FileHandler;
use Gibbon\Module\DeepLearning\Domain\EventGateway;
use Gibbon\Module\DeepLearning\Domain\EventDateGateway;
@@ -87,7 +88,12 @@
exit;
}
+ // Get old record to check if headImage is deleted
+ $oldRecord = $eventGateway->getByID($deepLearningEventID);
+ $fileHandler = $container->get(FileHandler::class);
+
// Move attached file, if there is one
+ $fileMetaData = null;
if (!empty($_FILES['backgroundImageFile']['tmp_name'])) {
$fileUploader = new Gibbon\FileUploader($pdo, $session);
$fileUploader->getFileExtensions('Graphics/Design');
@@ -99,14 +105,29 @@
if (empty($data['backgroundImage'])) {
$partialFail = true;
+ } else {
+ $fileMetaData = $fileUploader->getFileMetaData($data['backgroundImage']);
}
-
} else {
$data['backgroundImage'] = $_POST['backgroundImage'] ?? '';
}
// Update the record
$updated = $eventGateway->update($deepLearningEventID, $data);
+
+ // Record file tracking for background image
+ if (!empty($fileMetaData) && !empty($deepLearningEventID)) {
+ $gibbonFileID = $fileHandler->recordFileUpload($fileMetaData, 'deepLearningEvent', $deepLearningEventID, 'backgroundImage');
+
+ if (empty($gibbonFileID)) {
+ $partialFail = true;
+ }
+ }
+
+ // Handle file deletion when user removes background image
+ if (empty($data['backgroundImage']) && !empty($oldRecord['backgroundImage'])) {
+ $deleted = $fileHandler->deleteFile('deepLearningEvent', $deepLearningEventID, 'backgroundImage');
+ }
// Update blocks
$dates = $_POST['dates'] ?? [];
diff --git a/Deep Learning/manifest.php b/Deep Learning/manifest.php
index 3159093..4ea29be 100644
--- a/Deep Learning/manifest.php
+++ b/Deep Learning/manifest.php
@@ -25,7 +25,7 @@
$entryURL = "view.php";
$type = "Additional";
$category = 'Learn';
-$version = '0.2.02';
+$version = '0.3.00';
$author = "Gibbon Foundation";
$url = "https://gibbonedu.org";
diff --git a/Deep Learning/unit_manage_addProcess.php b/Deep Learning/unit_manage_addProcess.php
index 426be16..b9ff73f 100755
--- a/Deep Learning/unit_manage_addProcess.php
+++ b/Deep Learning/unit_manage_addProcess.php
@@ -19,8 +19,8 @@
along with this program. If not, see .
*/
-use Gibbon\Services\Format;
use Gibbon\Data\Validator;
+use Gibbon\Contracts\Filesystem\FileHandler;
use Gibbon\Module\DeepLearning\Domain\UnitGateway;
use Gibbon\Module\DeepLearning\Domain\UnitTagGateway;
use Gibbon\Module\DeepLearning\Domain\UnitAuthorGateway;
@@ -78,6 +78,7 @@
}
// Move attached file, if there is one
+ $fileMetaData = null;
if (!empty($_FILES['headerImageFile']['tmp_name'])) {
$fileUploader = new Gibbon\FileUploader($pdo, $session);
$fileUploader->getFileExtensions('Graphics/Design');
@@ -85,10 +86,12 @@
$file = $_FILES['headerImageFile'] ?? null;
// Upload the file, return the /uploads relative path
- $data['headerImage'] = $fileUploader->uploadFromPost($file, $data['name']);
+ $data['headerImage'] = $fileUploader->uploadFromPost($file, $data['name'], true);
if (empty($data['headerImage'])) {
$partialFail = true;
+ } else {
+ $fileMetaData = $fileUploader->getFileMetaData($data['headerImage']);
}
}
@@ -114,6 +117,14 @@
exit;
}
+ if (!empty($fileMetaData) && !empty($deepLearningUnitID)) {
+ $gibbonFileID = $container->get(FileHandler::class)->recordFileUpload($fileMetaData, 'deepLearningUnit', $deepLearningUnitID, 'headerImage');
+
+ if (empty($gibbonFileID)) {
+ $partialFail = true;
+ }
+ }
+
// Create the author
$inserted = $unitAuthorGateway->insert([
'deepLearningUnitID' => $deepLearningUnitID,
diff --git a/Deep Learning/unit_manage_editProcess.php b/Deep Learning/unit_manage_editProcess.php
index 9c9fc2c..5daaf23 100755
--- a/Deep Learning/unit_manage_editProcess.php
+++ b/Deep Learning/unit_manage_editProcess.php
@@ -19,9 +19,9 @@
along with this program. If not, see .
*/
-use Gibbon\Services\Format;
use Gibbon\Data\Validator;
use Gibbon\FileUploader;
+use Gibbon\Contracts\Filesystem\FileHandler;
use Gibbon\Module\DeepLearning\Domain\UnitGateway;
use Gibbon\Module\DeepLearning\Domain\UnitTagGateway;
use Gibbon\Module\DeepLearning\Domain\UnitAuthorGateway;
@@ -113,6 +113,7 @@
$fileUploader->getFileExtensions('Graphics/Design');
// Move attached file, if there is one
+ $fileMetaData = null;
if (!empty($_FILES['headerImageFile']['tmp_name'])) {
$file = $_FILES['headerImageFile'] ?? null;
@@ -121,15 +122,35 @@
if (empty($data['headerImage'])) {
$partialFail = true;
+ } else {
+ $fileMetaData = $fileUploader->getFileMetaData($data['headerImage']);
}
} else {
$data['headerImage'] = $_POST['headerImage'] ?? '';
}
+ // Get old record for file deletion check
+ $oldRecord = $unitGateway->getByID($deepLearningUnitID);
+ $fileHandler = $container->get(FileHandler::class);
+
// Update the record
$updated = $unitGateway->update($deepLearningUnitID, $data);
$partialFail = !$updated;
+
+ // Record file tracking for header image
+ if (!empty($fileMetaData) && !empty($deepLearningUnitID)) {
+ $gibbonFileID = $fileHandler->recordFileUpload($fileMetaData, 'deepLearningUnit', $deepLearningUnitID, 'headerImage');
+
+ if (empty($gibbonFileID)) {
+ $partialFail = true;
+ }
+ }
+
+ // Handle file deletion when user removes header image
+ if (empty($data['headerImage']) && !empty($oldRecord['headerImage'])) {
+ $deleted = $fileHandler->deleteFile('deepLearningUnit', $deepLearningUnitID, 'headerImage');
+ }
// Update the authors
$authors = $_POST['authors'] ?? '';
@@ -210,6 +231,7 @@
'sequenceNumber' => array_search($index, $photoOrder) ?? false,
];
+ $photoFileMetaData = null;
if (!empty($_FILES['photos']['tmp_name'][$index]['fileUpload'])) {
$file = [
'name' => $_FILES['photos']['name'][$index]['fileUpload'] ?? '',
@@ -226,6 +248,8 @@
if (empty($photoData['filePath'])) {
$partialFail = true;
continue;
+ } else {
+ $photoFileMetaData = $fileUploader->getFileMetaData($photoData['filePath']);
}
if ($photoData['sequenceNumber'] === false) {
@@ -243,17 +267,26 @@
}
$photoIDs[] = str_pad($deepLearningUnitPhotoID, 12, '0', STR_PAD_LEFT);
+
+ // Record file tracking for photo
+ if (!empty($photoFileMetaData) && !empty($deepLearningUnitPhotoID)) {
+ $gibbonFileID = $fileHandler->recordFileUpload($photoFileMetaData, 'deepLearningUnitPhoto', $deepLearningUnitPhotoID, 'filePath');
+
+ if (empty($gibbonFileID)) {
+ $partialFail = true;
+ }
+ }
}
// Remove photos that have been deleted from the filesystem
$cleanupPhotos = $unitPhotoGateway->selectPhotosNotInList($deepLearningUnitID, $photoIDs)->fetchAll();
foreach ($cleanupPhotos as $photo) {
- $unitPhotoGateway->delete($photo['deepLearningUnitPhotoID']);
-
$photoPath = $session->get('absolutePath').'/'.$photo['filePath'];
if (!empty($photo['filePath']) && file_exists($photoPath)) {
- unlink($photoPath);
+ $fileHandler->deleteFile('deepLearningUnitPhoto', $photo['deepLearningUnitPhotoID'], 'filePath');
}
+
+ $unitPhotoGateway->delete($photo['deepLearningUnitPhotoID']);
}
// Update the tags
diff --git a/Deep Learning/version.php b/Deep Learning/version.php
index 2fe8909..1c03eb5 100644
--- a/Deep Learning/version.php
+++ b/Deep Learning/version.php
@@ -22,5 +22,5 @@
/**
* Sets version information
*/
-$moduleVersion = '0.2.02';
+$moduleVersion = '0.3.00';
$coreVersion = '28.0.00';