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';