Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,266 changes: 34 additions & 4,232 deletions phpstan-baseline.neon

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/Controller/Admin/GetContractsAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ final class GetContractsAction extends BaseController
#[IsGranted('ROLE_ADMIN')]
public function __invoke(Request $request): Response|JsonResponse
{
/** @var \App\Repository\ContractRepository $objectRepository */
/** @var \App\Repository\ContractRepository<Contract> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(Contract::class);

return new JsonResponse($objectRepository->getContracts());
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/GetCustomersAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ final class GetCustomersAction extends BaseController
public function __invoke(Request $request): Response|JsonResponse
{

/** @var \App\Repository\CustomerRepository $objectRepository */
/** @var \App\Repository\CustomerRepository<\App\Entity\Customer> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(\App\Entity\Customer::class);

return new JsonResponse($objectRepository->getAllCustomers());
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/GetPresetsAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ final class GetPresetsAction extends BaseController
public function __invoke(Request $request): Response|JsonResponse
{

/** @var \App\Repository\PresetRepository $objectRepository */
/** @var \App\Repository\PresetRepository<\App\Entity\Preset> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(\App\Entity\Preset::class);

return new JsonResponse($objectRepository->getAllPresets());
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/GetTeamsAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ final class GetTeamsAction extends BaseController
public function __invoke(Request $request): Response|JsonResponse
{

/** @var \App\Repository\TeamRepository $objectRepository */
/** @var \App\Repository\TeamRepository<\App\Entity\Team> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(\App\Entity\Team::class);

return new JsonResponse($objectRepository->getAllTeamsAsArray());
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/GetTicketSystemsAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ final class GetTicketSystemsAction extends BaseController
public function __invoke(Request $request): Response|JsonResponse
{

/** @var \App\Repository\TicketSystemRepository $objectRepository */
/** @var \App\Repository\TicketSystemRepository<TicketSystem> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(TicketSystem::class);
$ticketSystems = $objectRepository->getAllTicketSystems();

Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/GetUsersAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ final class GetUsersAction extends BaseController
public function __invoke(Request $request, #[\Symfony\Component\Security\Http\Attribute\CurrentUser] ?\App\Entity\User $user = null): Response|JsonResponse
{

/** @var \App\Repository\UserRepository $objectRepository */
/** @var \App\Repository\UserRepository<\App\Entity\User> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(\App\Entity\User::class);

return new JsonResponse($objectRepository->getAllUsers());
Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Admin/SaveActivityAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ final class SaveActivityAction extends BaseController
#[IsGranted('ROLE_ADMIN')]
public function __invoke(Request $request, #[MapRequestPayload] ActivitySaveDto $activitySaveDto, ObjectMapperInterface $objectMapper): Response|Error|JsonResponse
{
/** @var \App\Repository\ActivityRepository $objectRepository */
/** @var \App\Repository\ActivityRepository<Activity> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(Activity::class);

$id = $activitySaveDto->id;

if (0 !== $id) {
$activity = $objectRepository->find($id);
if (!$activity) {
if ($activity === null) {
$message = $this->translator->trans('No entry for id.');

return new Error($message, \Symfony\Component\HttpFoundation\Response::HTTP_NOT_FOUND);
Expand Down
6 changes: 3 additions & 3 deletions src/Controller/Admin/SaveContractAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ public function __invoke(Request $request, #[MapRequestPayload] ContractSaveDto
/** @var User $user */
$user = $this->doctrineRegistry->getRepository(User::class)->find($contractSaveDto->user_id);

/** @var \App\Repository\ContractRepository $objectRepository */
/** @var \App\Repository\ContractRepository<Contract> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(Contract::class);

if (0 !== $contractId) {
$contract = $objectRepository->find($contractId);
if (!$contract) {
if ($contract === null) {
$message = $this->translator->trans('No entry for id.');

return new \App\Response\Error($message, \Symfony\Component\HttpFoundation\Response::HTTP_NOT_FOUND);
Expand Down Expand Up @@ -127,7 +127,7 @@ protected function updateOldContract(User $user, DateTime $newStartDate, ?DateTi

/** @var array<int, Contract> $contractsOld */
$contractsOld = $objectRepository->findBy(['user' => $user]);
if (!$contractsOld) {
if ($contractsOld === []) {
return '';
}

Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Admin/SaveCustomerAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ public function __invoke(Request $request, #[MapRequestPayload] CustomerSaveDto
$customerId = $customerSaveDto->id;
$teamIds = $customerSaveDto->teams;

/** @var \App\Repository\CustomerRepository $objectRepository */
/** @var \App\Repository\CustomerRepository<Customer> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(Customer::class);

if (0 !== $customerId) {
$customer = $objectRepository->find($customerId);
if (!$customer) {
if ($customer === null) {
$message = $this->translator->trans('No entry for id.');

return new Error($message, \Symfony\Component\HttpFoundation\Response::HTTP_NOT_FOUND);
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/SaveProjectAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public function __invoke(Request $request, #[MapRequestPayload] ProjectSaveDto $
$offer = $projectSaveDto->offer;
$additionalInformationFromExternal = $projectSaveDto->additionalInformationFromExternal;

/** @var \App\Repository\ProjectRepository $objectRepository */
/** @var \App\Repository\ProjectRepository<Project> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(Project::class);

$internalJiraTicketSystem = $projectSaveDto->internalJiraTicketSystem;
Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Admin/SaveTeamAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ final class SaveTeamAction extends BaseController
#[IsGranted('ROLE_ADMIN')]
public function __invoke(Request $request, #[MapRequestPayload] TeamSaveDto $teamSaveDto): Response|JsonResponse|\App\Response\Error
{
/** @var \App\Repository\TeamRepository $objectRepository */
/** @var \App\Repository\TeamRepository<Team> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(Team::class);

$id = $teamSaveDto->id;
Expand All @@ -36,7 +36,7 @@ public function __invoke(Request $request, #[MapRequestPayload] TeamSaveDto $tea

if (0 !== $id) {
$team = $objectRepository->find($id);
if (!$team) {
if ($team === null) {
$message = $this->translator->trans('No entry for id.');

return new \App\Response\Error($message, \Symfony\Component\HttpFoundation\Response::HTTP_NOT_FOUND);
Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Admin/SaveTicketSystemAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ final class SaveTicketSystemAction extends BaseController
public function __invoke(Request $request, #[MapRequestPayload] TicketSystemSaveDto $ticketSystemSaveDto, ObjectMapperInterface $objectMapper): Response|Error|JsonResponse
{

/** @var \App\Repository\TicketSystemRepository $objectRepository */
/** @var \App\Repository\TicketSystemRepository<TicketSystem> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(TicketSystem::class);

$id = $ticketSystemSaveDto->id;

if (null !== $id) {
$ticketSystem = $objectRepository->find($id);
if (!$ticketSystem) {
if ($ticketSystem === null) {
$message = $this->translator->trans('No entry for id.');

return new Error($message, \Symfony\Component\HttpFoundation\Response::HTTP_NOT_FOUND);
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/SaveUserAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ final class SaveUserAction extends BaseController
public function __invoke(Request $request, #[MapRequestPayload] UserSaveDto $userSaveDto, ObjectMapperInterface $objectMapper): Response|Error|JsonResponse
{

/** @var \App\Repository\UserRepository $objectRepository */
/** @var \App\Repository\UserRepository<User> $objectRepository */
$objectRepository = $this->doctrineRegistry->getRepository(User::class);

$user = 0 !== $userSaveDto->id ? $objectRepository->find($userSaveDto->id) : new User();
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Admin/SyncJiraEntriesAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function __invoke(Request $request): JsonResponse
$user = $this->doctrineRegistry->getRepository(\App\Entity\User::class)->find($userId);
/** @var \App\Entity\TicketSystem|null $ticketSystem */
$ticketSystem = $this->doctrineRegistry->getRepository(\App\Entity\TicketSystem::class)->findOneBy([]);
$jiraApi = ($user && $ticketSystem) ? $this->jiraOAuthApiFactory->create($user, $ticketSystem) : null;
$jiraApi = ($user !== null && $ticketSystem !== null) ? $this->jiraOAuthApiFactory->create($user, $ticketSystem) : null;
if ($jiraApi instanceof \App\Service\Integration\Jira\JiraOAuthApiService) {
// Mirror earlier behavior: update entries limited window
// Choose a reasonable limit (null => all pending)
Expand Down
2 changes: 1 addition & 1 deletion src/Controller/Controlling/ExportAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public function __invoke(Request $request, #[MapQueryString] ExportQueryDto $exp
$lineNumber = 3;
$stats = [];
foreach ($entries as $entry) {
$abbr = $entry->getUser() ? (string) $entry->getUser()->getAbbr() : '';
$abbr = $entry->getUser() !== null ? (string) $entry->getUser()->getAbbr() : '';
if (!isset($stats[$abbr])) {
$stats[$abbr] = [
'holidays' => 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@ protected function sortByName(array $a, array $b): int
*
* @throws Exception
*
* @return Entry[]
*
* @psalm-return array<int, Entry>
* @return list<Entry>
*/
protected function getEntries(\Symfony\Component\HttpFoundation\Request $request, ?User $currentUser = null, ?int $maxResults = null): array
{
Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Interpretation/GetAllEntriesAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public function __invoke(Request $request, #[MapQueryString] InterpretationFilte
{
// Check if user is either admin or PL type
if (!$this->isGranted('ROLE_ADMIN')) {
if (!$user || !$user->getType() || 'PL' !== $user->getType()->value) {
if ($user === null || !$user->getType()->isPl()) {
return new Error($this->translate('You are not allowed to perform this action.'), \Symfony\Component\HttpFoundation\Response::HTTP_FORBIDDEN);
}
}
Expand All @@ -56,4 +56,4 @@ public function __invoke(Request $request, #[MapQueryString] InterpretationFilte

return new JsonResponse($responseData);
}
}
}
4 changes: 2 additions & 2 deletions src/Controller/Tracking/BaseTrackingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ protected function deleteJiraWorklog(
$ticketSystem = $project instanceof Project ? $project->getTicketSystem() : null;
}

if ($project && $project->hasInternalJiraProjectKey()) {
if ($project !== null && $project->hasInternalJiraProjectKey()) {
/** @var \App\Repository\TicketSystemRepository $ticketSystemRepo */
$ticketSystemRepo = $this->managerRegistry->getRepository(TicketSystem::class);
$ticketSystem = $ticketSystemRepo->find($project->getInternalJiraTicketSystem());
Expand Down Expand Up @@ -118,7 +118,7 @@ protected function calculateClasses(int $userId, string $day): void
];
}

if ([] === $normalizedEntries) {
if (count($normalizedEntries) === 0) {
return;
}

Expand Down
3 changes: 1 addition & 2 deletions src/Controller/Tracking/SaveEntryAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
use DateTime;
use Exception;
use InvalidArgumentException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
Expand All @@ -42,7 +41,7 @@ public function __invoke(
EntrySaveDto $entrySaveDto,
#[CurrentUser]
User $user,
): Response|JsonResponse|Error|RedirectResponse {
): Response|JsonResponse|Error {

/** @var \App\Repository\CustomerRepository $customerRepo */
$customerRepo = $this->managerRegistry->getRepository(Customer::class);
Expand Down
4 changes: 2 additions & 2 deletions src/Dto/BulkEntryDto.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public function validateTimeRange(ExecutionContextInterface $executionContext):
$startDateTime = DateTime::createFromFormat('H:i:s', $this->starttime);
$endDateTime = DateTime::createFromFormat('H:i:s', $this->endtime);

if ($startDateTime && $endDateTime && $startDateTime >= $endDateTime) {
if ($startDateTime !== false && $endDateTime !== false && $startDateTime >= $endDateTime) {
$executionContext->buildViolation('Die Aktivität muss mindestens eine Minute angedauert haben!')
->atPath('endtime')
->addViolation()
Expand All @@ -83,7 +83,7 @@ public function validateDateRange(ExecutionContextInterface $executionContext):
$startDate = DateTime::createFromFormat('Y-m-d', $this->startdate);
$endDate = DateTime::createFromFormat('Y-m-d', $this->enddate);

if ($startDate && $endDate && $startDate > $endDate) {
if ($startDate !== false && $endDate !== false && $startDate > $endDate) {
$executionContext->buildViolation('Start date must be before or equal to end date')
->atPath('enddate')
->addViolation()
Expand Down
8 changes: 1 addition & 7 deletions src/Dto/EntrySaveDto.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ public function getActivityId(): ?int

/**
* Convert date string to DateTime object.
*
* @throws Exception
*/
public function getDateAsDateTime(): ?DateTimeInterface
{
Expand All @@ -96,8 +94,6 @@ public function getDateAsDateTime(): ?DateTimeInterface

/**
* Convert start time string to DateTime object.
*
* @throws Exception
*/
public function getStartAsDateTime(): ?DateTimeInterface
{
Expand All @@ -116,8 +112,6 @@ public function getStartAsDateTime(): ?DateTimeInterface

/**
* Convert end time string to DateTime object.
*
* @throws Exception
*/
public function getEndAsDateTime(): ?DateTimeInterface
{
Expand Down Expand Up @@ -145,7 +139,7 @@ public function validateTimeRange(ExecutionContextInterface $executionContext):
$start = $this->getStartAsDateTime();
$end = $this->getEndAsDateTime();

if ($start && $end && $start >= $end) {
if ($start !== null && $end !== null && $start >= $end) {
$executionContext->buildViolation('Start time must be before end time')
->atPath('end')
->addViolation()
Expand Down
2 changes: 2 additions & 0 deletions src/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ class Kernel extends BaseKernel
public function registerBundles(): Generator
{
$contents = require $this->getProjectDir() . '/config/bundles.php';
assert(is_array($contents));
foreach ($contents as $class => $envs) {
assert(is_array($envs));
if ($envs[$this->environment] ?? $envs['all'] ?? false) {
yield new $class();
}
Expand Down
3 changes: 2 additions & 1 deletion src/Repository/ActivityRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
use Doctrine\Persistence\ManagerRegistry;

/**
* @extends ServiceEntityRepository<Activity>
* @template T of Activity
* @extends ServiceEntityRepository<T>
*/
class ActivityRepository extends ServiceEntityRepository
{
Expand Down
3 changes: 2 additions & 1 deletion src/Repository/ContractRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
* @author Tony Kreissl <kreissl@mogic.com>
*/
/**
* @extends ServiceEntityRepository<\App\Entity\Contract>
* @template T of \App\Entity\Contract
* @extends ServiceEntityRepository<T>
*/
class ContractRepository extends ServiceEntityRepository
{
Expand Down
3 changes: 2 additions & 1 deletion src/Repository/CustomerRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
use Doctrine\Persistence\ManagerRegistry;

/**
* @extends ServiceEntityRepository<\App\Entity\Customer>
* @template T of \App\Entity\Customer
* @extends ServiceEntityRepository<T>
*/
class CustomerRepository extends ServiceEntityRepository
{
Expand Down
Loading