render('settings/index.html.twig', [ 'controller_name' => 'SettingsController', ]); } #[Route('/settings/general', name: 'app_settings_general')] public function general(): Response { return $this->render('settings/index.html.twig', [ 'controller_name' => 'SettingsController', ]); } #[Route('/settings/folders', name: 'app_settings_folders')] public function folders(): Response { return $this->render('settings/index.html.twig', [ 'controller_name' => 'SettingsController', ]); } #[Route('/settings/scrappers/list', name: 'app_settings_scrappers_list')] public function list(ContentSourceRepository $repository): Response { $contentSources = $repository->findAll(); return $this->render('settings/scrapper_list.html.twig', [ 'contentSources' => $contentSources, ]); } #[Route('/settings/scrappers/{id}', name: 'app_settings_scrappers', defaults: ['id' => null])] public function scrappers(Request $request, ?ContentSource $contentSource): Response { $isNew = $contentSource === null; $contentSource = $contentSource ?? new ContentSource(); $form = $this->createForm(ContentSourceType::class, $contentSource); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $this->entityManager->persist($contentSource); $this->entityManager->flush(); $this->notificationService->sendUpdate(['status' => 'success', 'message' => ($isNew ? 'New scrapper configuration saved' : 'Scrapper configuration updated') . ' successfully.']); return $this->redirectToRoute('app_settings_scrappers_list'); } return $this->render('settings/scrappers.html.twig', [ 'form' => $form->createView(), 'isNew' => $isNew, ]); } /** * @throws GuzzleException */ #[Route('/settings/scrappers_test', name: 'app_settings_scrappers_test', methods: ['POST'])] public function scrapperTest(Request $request): JsonResponse { $contentSource = new ContentSource(); $form = $this->createForm(ContentSourceType::class, $contentSource); $form->submit($request->request->all()['content_source']); if ($form->isValid()) { $mangaSlug = $request->request->get('mangaSlug'); $chapterNumber = $request->request->get('chapterNumber'); try { $scrapedData = $this->mangaScraperService->testScrapingHtml($mangaSlug, $chapterNumber, $contentSource); }catch (\Exception $e){ $this->notificationService->sendUpdate(['status' => 'error', 'message' => $e->getMessage()]); return new JsonResponse([ 'success' => false, 'message' => $e->getMessage(), ]); } return new JsonResponse([ 'success' => true, 'message' => 'Test successful', 'data' => $scrapedData ]); } else { return new JsonResponse([ 'success' => false, 'message' => 'Invalid form submission', 'errors' => $this->getFormErrors($form) ]); } } private function getFormErrors($form): array { $errors = []; foreach ($form->getErrors(true) as $error) { $errors[] = $error->getMessage(); } return $errors; } #[Route('/settings/ui', name: 'app_settings_ui')] public function ui(): Response { return $this->render('settings/index.html.twig', [ 'controller_name' => 'SettingsController', ]); } }