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

klinge / sl-webapp / 18972011891

31 Oct 2025 12:06PM UTC coverage: 74.73% (+11.1%) from 63.602%
18972011891

push

github

klinge
Fixed phpcs errors

1662 of 2224 relevant lines covered (74.73%)

3.82 hits per line

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

88.37
/App/Controllers/ReportController.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace App\Controllers;
6

7
use App\Services\UrlGeneratorService;
8
use App\Utils\View;
9
use App\Models\MedlemRepository;
10
use Psr\Http\Message\ServerRequestInterface;
11
use Psr\Http\Message\ResponseInterface;
12
use PDO;
13
use Monolog\Logger;
14
use League\Container\Container;
15

16
class ReportController extends BaseController
17
{
18
    private View $view;
19
    private MedlemRepository $medlemRepo;
20
    private PDO $conn;
21

22
    public function __construct(
23
        UrlGeneratorService $urlGenerator,
24
        ServerRequestInterface $request,
25
        Logger $logger,
26
        Container $container,
27
        PDO $conn,
28
        View $view
29
    ) {
30
        parent::__construct($urlGenerator, $request, $logger, $container);
4✔
31
        $this->conn = $conn;
4✔
32
        $this->view = $view;
4✔
33
        $this->medlemRepo = new MedlemRepository($this->conn, $this->logger);
4✔
34
    }
35

36
    public function show(): ResponseInterface
37
    {
38
        $data = [
1✔
39
            "title" => "Rapporter",
1✔
40
        ];
1✔
41
        return $this->view->render('reports/viewRapporter', $data);
1✔
42
    }
43

44
    public function showPaymentReport(): ResponseInterface
45
    {
46
        //Set current year
47
        $currentYear = (int) date('Y');
2✔
48
        //Get the parameter on what years to check from the form
49
        $year_param = $this->request->getParsedBody()['yearRadio'];
2✔
50

51
        // Build arrays of years and placeholders based on year_param
52
        for ($i = 0; $i < $year_param; $i++) {
2✔
53
            $years[] = $currentYear - $i;
2✔
54
        }
55

56
        $query = "SELECT m.* FROM medlem m
2✔
57
                WHERE m.standig_medlem != 1
58
                AND NOT EXISTS (
59
                    SELECT 1
60
                    FROM betalning b
61
                    WHERE b.medlem_id = m.id";
2✔
62

63
        switch ($year_param) {
64
            case 1:
2✔
65
                $query .= " AND b.avser_ar = :year0)";
×
66
                break;
×
67
            case 2:
2✔
68
                $query .= " AND b.avser_ar IN (:year0, :year1))";
×
69
                break;
×
70
            case 3:
2✔
71
                $query .= " AND b.avser_ar IN (:year0, :year1, :year2))";
1✔
72
                break;
1✔
73
            default:
74
                throw new \InvalidArgumentException("Invalid year parameter. Must be 1, 2 or 3.");
1✔
75
        }
76

77
        $stmt = $this->conn->prepare($query);
1✔
78
        // Bind all year parameters
79
        $stmt->bindParam(':year0', $currentYear, PDO::PARAM_INT);
1✔
80
        if ($year_param === 2) {
1✔
81
            $stmt->bindValue(':year1', $currentYear - 1, PDO::PARAM_INT);
×
82
        }
83
        if ($year_param === 3) {
1✔
84
            $stmt->bindValue(':year2', $currentYear - 2, PDO::PARAM_INT);
1✔
85
        }
86

87
        $stmt->execute();
1✔
88
        $result =  $stmt->fetchAll(PDO::FETCH_ASSOC);
1✔
89

90
        $data = [
1✔
91
            "title" => "Rapport: Ej gottstående medlemmar",
1✔
92
            "items" => $result
1✔
93
        ];
1✔
94
        return $this->view->render('reports/viewReportResults', $data);
1✔
95
    }
96

97
    public function showMemberEmails(): ResponseInterface
98
    {
99
        $mailList = $this->medlemRepo->getEmailForActiveMembers();
1✔
100

101
        $data = [
1✔
102
            "title" => "Rapport: Email till aktiva medlemmar",
1✔
103
            "items" => $mailList
1✔
104
        ];
1✔
105
        return $this->view->render('reports/viewReportResults', $data);
1✔
106
    }
107
}
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