• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Yoast / Yoast-SEO-for-TYPO3 / 13327579701

14 Feb 2025 10:43AM UTC coverage: 1.276%. First build
13327579701

push

github

web-flow
Merge pull request #597 from Yoast/feature/v11

[FEATURE] Release 11.0.0

21 of 894 new or added lines in 76 files covered. (2.35%)

35 of 2744 relevant lines covered (1.28%)

0.04 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/Classes/Service/Ajax/CrawlerHandler.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace YoastSeoForTypo3\YoastSeo\Service\Ajax;
6

7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use TYPO3\CMS\Core\Error\Http\BadRequestException;
10
use TYPO3\CMS\Core\Http\JsonResponse;
11
use YoastSeoForTypo3\YoastSeo\Service\Crawler\CrawlerService;
12

13
class CrawlerHandler extends AbstractAjaxHandler
14
{
15
    public function __construct(
16
        protected CrawlerService $crawlerService
NEW
17
    ) {}
×
18

19
    public function handle(ServerRequestInterface $request): ResponseInterface
20
    {
NEW
21
        if ($request->getAttribute('handlerRequest') === 'determine') {
×
NEW
22
            return $this->determinePages($request);
×
23
        }
NEW
24
        if ($request->getAttribute('handlerRequest') === 'index') {
×
NEW
25
            return $this->indexPages($request);
×
26
        }
NEW
27
        throw new BadRequestException('Invalid request');
×
28
    }
29

30
    protected function determinePages(ServerRequestInterface $request): ResponseInterface
31
    {
NEW
32
        $crawlerData = $this->getCrawlerRequestData($request);
×
NEW
33
        $amount = $this->crawlerService->getAmountOfPages($crawlerData['site'], $crawlerData['language']);
×
NEW
34
        if ($amount > 0) {
×
NEW
35
            return new JsonResponse([
×
NEW
36
                'amount' => $amount,
×
NEW
37
            ]);
×
38
        }
NEW
39
        return new JsonResponse([
×
NEW
40
            'error' => 'No pages found to analyse',
×
NEW
41
        ]);
×
42
    }
43

44
    protected function indexPages(ServerRequestInterface $request): ResponseInterface
45
    {
NEW
46
        $crawlerData = $this->getCrawlerRequestData($request);
×
NEW
47
        $indexInformation = $this->crawlerService->getIndexInformation(
×
NEW
48
            $crawlerData['site'],
×
NEW
49
            $crawlerData['language'],
×
NEW
50
            $crawlerData['offset']
×
NEW
51
        );
×
NEW
52
        if (count($indexInformation['pages']) === 0) {
×
NEW
53
            return new JsonResponse(['status' => 'finished', 'total' => $indexInformation['total']]);
×
54
        }
NEW
55
        return new JsonResponse($indexInformation);
×
56
    }
57

58
    /**
59
     * @return array<string, int>
60
     */
61
    protected function getCrawlerRequestData(ServerRequestInterface $request): array
62
    {
NEW
63
        $crawlerData = $this->getJsonData($request);
×
NEW
64
        if (!isset($crawlerData['site'], $crawlerData['language'])) {
×
NEW
65
            die(json_encode(['error' => 'No site and language provided by request']));
×
66
        }
NEW
67
        return [
×
NEW
68
            'site' => (int)$crawlerData['site'],
×
NEW
69
            'language' => (int)$crawlerData['language'],
×
NEW
70
            'offset' => (int)($crawlerData['offset'] ?? 0),
×
NEW
71
        ];
×
72
    }
73
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc