Passed
Push — master ( ff8e4b...88fd0b )
by MusikAnimal
05:59
created

ApiController::assessments()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2.108

Importance

Changes 0
Metric Value
cc 2
eloc 9
nc 2
nop 1
dl 0
loc 19
ccs 7
cts 10
cp 0.7
crap 2.108
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * This file contains only the ApiController class.
4
 */
5
6
namespace AppBundle\Controller;
7
8
use Exception;
9
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
10
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\HttpFoundation\Response;
13
use Symfony\Component\Debug\Exception\FatalErrorException;
14
use FOS\RestBundle\Controller\Annotations as Rest;
15
use FOS\RestBundle\Controller\FOSRestController;
16
use FOS\RestBundle\View\View;
17
use Xtools\ProjectRepository;
18
use Xtools\UserRepository;
19
use Xtools\Page;
20
use Xtools\Edit;
21
use DateTime;
22
23
/**
24
 * Serves the external API of XTools.
25
 */
26
class ApiController extends FOSRestController
27
{
28
    /**
29
     * Get domain name, URL, and API URL of the given project.
30
     * @Rest\Get("/api/project/normalize/{project}")
31
     * @param string $project Project database name, URL, or domain name.
32
     * @return View
33
     */
34
    public function normalizeProject($project)
35
    {
36
        $proj = ProjectRepository::getProject($project, $this->container);
37
38
        if (!$proj->exists()) {
39
            return new View(
40
                [
41
                    'error' => "$project is not a valid project",
42
                ],
43
                Response::HTTP_NOT_FOUND
44
            );
45
        }
46
47
        return new View(
48
            [
49
                'domain' => $proj->getDomain(),
50
                'url' => $proj->getUrl(),
51
                'api' => $proj->getApiUrl(),
52
                'database' => $proj->getDatabaseName(),
53
            ],
54
            Response::HTTP_OK
55
        );
56
    }
57
58
    /**
59
     * Get all namespaces of the given project. This endpoint also does the same thing
60
     * as the /project/normalize endpoint, returning other basic info about the project.
61
     * @Rest\Get("/api/project/namespaces/{project}")
62
     * @param string $project The project name.
63
     * @return View
64
     */
65 1
    public function namespaces($project)
66
    {
67 1
        $proj = ProjectRepository::getProject($project, $this->container);
68
69 1
        if (!$proj->exists()) {
70
            return new View(
71
                [
72
                    'error' => "$project is not a valid project",
73
                ],
74
                Response::HTTP_NOT_FOUND
75
            );
76
        }
77
78 1
        return new View(
79
            [
80 1
                'domain' => $proj->getDomain(),
81 1
                'url' => $proj->getUrl(),
82 1
                'api' => $proj->getApiUrl(),
83 1
                'database' => $proj->getDatabaseName(),
84 1
                'namespaces' => $proj->getNamespaces(),
85
            ],
86 1
            Response::HTTP_OK
87
        );
88
    }
89
90
    /**
91
     * Get assessment data for a given project.
92
     * @Rest\Get("/api/project/assessments/{project}")
93
     * @param string $project The project name.
94
     * @return View
95
     */
96 1
    public function assessments($project)
97
    {
98 1
        $proj = ProjectRepository::getProject($project, $this->container);
99
100 1
        if (!$proj->exists()) {
101
            return new View(
102
                [
103
                    'error' => "$project is not a valid project",
104
                ],
105
                Response::HTTP_NOT_FOUND
106
            );
107
        }
108
109 1
        return new View(
110
            [
111 1
                'project' => $proj->getDomain(),
112 1
                'assessments' => $proj->getAssessmentsConfig(),
113
            ],
114 1
            Response::HTTP_OK
115
        );
116
    }
117
118
    /**
119
     * Transform given wikitext to HTML using the XTools parser.
120
     * Wikitext must be passed in as the query 'wikitext'.
121
     * @Rest\Get("/api/project/parser/{project}")
122
     * @param  Request $request Provided by Symfony.
123
     * @param  string $project Project domain such as en.wikipedia.org
124
     * @return string Safe HTML.
125
     */
126
    public function wikify(Request $request, $project)
127
    {
128
        $projectData = ProjectRepository::getProject($project, $this->container);
129
        return Edit::wikifyString($request->query->get('wikitext'), $projectData);
130
    }
131
}
132