aboutsummaryrefslogtreecommitdiff
path: root/app/Http/Controllers/AdminImportController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Controllers/AdminImportController.php')
-rw-r--r--app/Http/Controllers/AdminImportController.php69
1 files changed, 69 insertions, 0 deletions
diff --git a/app/Http/Controllers/AdminImportController.php b/app/Http/Controllers/AdminImportController.php
new file mode 100644
index 0000000..dc32cec
--- /dev/null
+++ b/app/Http/Controllers/AdminImportController.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\BookmarkCategory;
+use App\Models\BookmarkSite;
+use App\Models\GuestbookEntry;
+use Exception;
+use Illuminate\Http\Request;
+use Illuminate\View\View;
+
+class AdminImportController extends Controller
+{
+ public function show() : View {
+ return view('admin.import');
+ }
+
+ public function submit(Request $request)
+ {
+ $request->validate([
+ 'data_file' => 'required|mimes:json',
+ ]);
+
+ $file = $request->file('data_file');
+ $jsonContent = file_get_contents($file->getRealPath());
+ $data = json_decode($jsonContent, true);
+ $tables = [];
+ foreach($data as $item) {
+ if ($item['type'] !== "table") continue;
+ $tables[$item['name']] = [
+ 'data' => $item['data'],
+ 'count' => count($item['data'])
+ ];
+
+ if ($item['name'] === "guestbook__entries") {
+ GuestbookEntry::importGuestbookEntry($item['data']);
+ }
+ $this->import($item['data'], $item['name']);
+ }
+ return view('admin.import-success', ['tables' => $tables]);
+ }
+
+ /**
+ * Imports the given data to the specified table
+ *
+ * @param array $data The data to import
+ * @param string $table_name The name of the table to import to
+ * @return void
+ * @throws Exception Invalid table specified, to be replaced with custom exception
+ */
+ public function import(array $data, string $table_name): void {
+ switch ($table_name) {
+ case 'guestbook__entries':
+ GuestbookEntry::importGuestbookEntry($data);
+ break;
+ case 'bookmark__categories' :
+ BookmarkCategory::importBookmarkCategory($data);
+ break;
+ case 'bookmark__sites':
+ BookmarkSite::importBookmark($data);
+ break;
+ case 'guestbook__bans':
+ break;
+ default:
+ // TODO: Replace with custom exception
+ throw new Exception("Invalid table specified ($table_name)");
+ }
+ }
+}