Passed
Push — master ( 2f87b4...a0f968 )
by MusikAnimal
05:26
created

ApiController::assessments()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 28
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3.7085

Importance

Changes 0
Metric Value
cc 3
eloc 13
nc 3
nop 1
dl 0
loc 28
ccs 8
cts 14
cp 0.5714
crap 3.7085
rs 8.8571
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 = null)
97
    {
98 1
        if ($project === null) {
99
            return new View(
100
                [
101
                    'projects' => array_keys($this->container->getParameter('assessments')),
102
                ],
103
                Response::HTTP_OK
104
            );
105
        }
106
107 1
        $proj = ProjectRepository::getProject($project, $this->container);
108
109 1
        if (!$proj->exists()) {
110
            return new View(
111
                [
112
                    'error' => "$project is not a valid project",
113
                ],
114
                Response::HTTP_NOT_FOUND
115
            );
116
        }
117
118 1
        return new View(
119
            [
120 1
                'project' => $proj->getDomain(),
121 1
                'assessments' => $proj->getPageAssessments()->getConfig(),
122
            ],
123 1
            Response::HTTP_OK
124
        );
125
    }
126
127
    /**
128
     * Transform given wikitext to HTML using the XTools parser.
129
     * Wikitext must be passed in as the query 'wikitext'.
130
     * @Rest\Get("/api/project/parser/{project}")
131
     * @param  Request $request Provided by Symfony.
132
     * @param  string $project Project domain such as en.wikipedia.org
133
     * @return string Safe HTML.
134
     */
135
    public function wikify(Request $request, $project)
136
    {
137
        $projectData = ProjectRepository::getProject($project, $this->container);
138
        return Edit::wikifyString($request->query->get('wikitext'), $projectData);
139
    }
140
}
141