Passed
Push — master ( 89a3e4...bc50e8 )
by Natan
02:06
created

MainController   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 9

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
c 1
b 0
f 0
lcom 0
cbo 9
dl 0
loc 71
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B processSniff() 0 57 9
1
<?php
2
3
namespace SnifferReport\Controller;
4
5
use Silex\Application;
6
use SnifferReport\Exception\SnifferReportException;
7
use SnifferReport\Model\Sniff;
8
use SnifferReport\Service\Validator;
9
use SnifferReport\Service\FilesHandler;
10
use SnifferReport\Service\GitHandler;
11
use SnifferReport\Service\Sniffer;
12
use SnifferReport\Service\SniffParser;
13
use Symfony\Component\Filesystem\Filesystem;
14
use Symfony\Component\HttpFoundation\Request;
15
use \Exception;
16
17
class MainController
18
{
19
20
  /**
21
   * Processes the POSTed data.
22
   *
23
   * @param Application $app
24
   * @param Request $request
25
   *
26
   * @return Sniff
27
   *
28
   * @throws SnifferReportException
29
   */
30
    public static function processSniff(Application $app, Request $request)
31
    {
32
        $file = $request->files->get('file');
33
        $git_url = $request->get('git_url');
34
        $options = $request->get('options');
35
36
        $valid_git_url = (is_null($git_url) || !Validator::isGitUrl($git_url));
37
        if ($valid_git_url && is_null($file)) {
38
            throw new SnifferReportException('File or Git URL required', 400);
39
        }
40
41
        if (!is_null($file)) {
42
            $file_name = $file->getClientOriginalName();
43
            $file->move(FILES_DIRECTORY_ROOT, $file_name);
44
            $files = FilesHandler::handle($file_name, $file->getClientMimeType());
45
        } else {
46
            try {
47
                $files = GitHandler::handle($git_url);
48
            } catch (Exception $e) {
49
                throw new SnifferReportException("Error when trying to clone git repository: {$e->getMessage()}", 500);
50
            }
51
        }
52
53
        $options = json_decode($options);
54
55
        if (!Validator::areStandardsValid($options->standards)) {
56
            throw new SnifferReportException(
57
                'One or more standards are not valid. Please try again with different values',
58
                400
59
            );
60
        }
61
62
        if (!Validator::areExtensionsValid($options->extensions)) {
63
            throw new SnifferReportException(
64
                'One or more extensions are not valid. Please try again with different values',
65
                400
66
            );
67
        }
68
69
        $standards = implode(',', $options->standards);
70
        $extensions = implode(',', $options->extensions);
71
72
        $sniff_result = Sniffer::sniffFiles($files, $standards, $extensions);
73
74
        // Delete all files that were generated in this request.
75
        $fs = new Filesystem();
76
        $fs->remove(FILES_DIRECTORY_ROOT);
77
78
        try {
79
            $sniffParser = new SniffParser($app['pdo']);
80
            $response = $sniffParser->parseSniff($sniff_result);
81
        } catch (\PDOException $e) {
82
            throw new SnifferReportException("Error when trying to save sniff: {$e->getMessage()}", 500);
83
        }
84
85
        return $response;
86
    }
87
}
88