From f599b5ffc72db51d1efe809132ab6846346ed477 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Thu, 10 Sep 2026 23:59:19 +0300 Subject: [PATCH] Add publish_grade10_bundle.php management script --- backend/scripts/publish_grade10_bundle.php | 214 +++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 backend/scripts/publish_grade10_bundle.php diff --git a/backend/scripts/publish_grade10_bundle.php b/backend/scripts/publish_grade10_bundle.php new file mode 100644 index 0000000..3c57b36 --- /dev/null +++ b/backend/scripts/publish_grade10_bundle.php @@ -0,0 +1,214 @@ + $l) { + echo sprintf(" %2d. [%-12s] %-10s / %-10s : %s (Current: %s)\n", + $idx + 1, + $l['subject_key'], + $l['unit_key'], + $l['lesson_key'], + $l['title'], + $l['source_status'] + ); +} + +if (!$apply) { + echo "\n[Dry-run completed. To execute, append --apply to your command.]\n"; + exit(0); +} + +// 4. Apply changes inside a transaction +$pdo = Database::getConnection(); +$pdo->beginTransaction(); + +try { + if ($isRevert) { + // Revert to draft + Database::query( + "UPDATE curriculum_lessons SET source_status = 'unverified' WHERE id IN ({$idList})" + ); + Database::query( + "UPDATE publication_bundles SET status = 'draft', published_at = NULL WHERE curriculum_lesson_id IN ({$idList})" + ); + Database::query( + "UPDATE content_assets a + JOIN publication_bundle_assets pba ON pba.content_asset_id = a.id + JOIN publication_bundles pb ON pb.id = pba.publication_bundle_id + SET a.review_status = 'draft', a.rights_status = 'review_required' + WHERE pb.curriculum_lesson_id IN ({$idList})" + ); + } else { + // Publish and approve + Database::query( + "UPDATE curriculum_lessons SET source_status = 'approved', reviewed_at = CURRENT_TIMESTAMP WHERE id IN ({$idList})" + ); + Database::query( + "UPDATE publication_bundles SET status = 'published', published_at = CURRENT_TIMESTAMP WHERE curriculum_lesson_id IN ({$idList})" + ); + Database::query( + "UPDATE content_assets a + JOIN publication_bundle_assets pba ON pba.content_asset_id = a.id + JOIN publication_bundles pb ON pb.id = pba.publication_bundle_id + SET a.review_status = 'approved', a.rights_status = 'cleared' + WHERE pb.curriculum_lesson_id IN ({$idList})" + ); + } + + $pdo->commit(); + echo "\n=== SUCCESS: " . ($isRevert ? "Reverted" : "Published") . " " . count($targetLessons) . " lessons successfully. ===\n"; +} catch (\Throwable $e) { + if ($pdo->inTransaction()) { + $pdo->rollBack(); + } + fwrite(STDERR, "\nFAILED: Publication transaction rolled back: " . $e->getMessage() . "\n"); + exit(1); +}