diff --git a/grumphp.yml b/grumphp.yml index 0f012a7..a1a6cad 100644 --- a/grumphp.yml +++ b/grumphp.yml @@ -1,33 +1,33 @@ parameters: - git_dir: . - bin_dir: vendor/bin - testsuites: - phpstan: - tasks: [phpstan] - tasks: - phpcs: - standard: PSR2 - whitelist_patterns: - - src/ - phplint: ~ - yamllint: ~ - composer: - strict: false - no_check_publish: true - phpparser: - ignore_patterns: - - tests/phpunit/bootstrap.php - - config/bootstrap.php - visitors: - no_exit_statements: ~ - never_use_else: ~ - forbidden_function_calls: - blacklist: [var_dump, echo, print, dump, print_r] - phpstan: - level: 2 - configuration: "phpstan.neon" - ignore_patterns: - - "tests/" - - "vendor/" - - "var/" - phpunit: ~ \ No newline at end of file + git_dir: . + bin_dir: vendor/bin + testsuites: + phpstan: + tasks: [phpstan] + tasks: + phpcs: + standard: PSR2 + whitelist_patterns: + - src/ + phplint: ~ + yamllint: ~ + composer: + strict: false + no_check_publish: true + phpparser: + ignore_patterns: + - tests/phpunit/bootstrap.php + - config/bootstrap.php + visitors: + no_exit_statements: ~ + never_use_else: ~ + forbidden_function_calls: + blacklist: [var_dump, echo, print, dump, print_r] + phpstan: + level: 5 + configuration: "phpstan.neon" + ignore_patterns: + - "tests/" + - "vendor/" + - "var/" + phpunit: ~ \ No newline at end of file diff --git a/src/Console/GenerateTokenCommand.php b/src/Console/GenerateTokenCommand.php index 04f2053..66b1c5c 100644 --- a/src/Console/GenerateTokenCommand.php +++ b/src/Console/GenerateTokenCommand.php @@ -3,7 +3,7 @@ namespace App\Console; use App\Entity\Anplan\Scope; -use App\Repository\ScopeRepository; +use App\Repository\Anplan\ScopeRepository; use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface; use Lexik\Bundle\JWTAuthenticationBundle\Exception\JWTEncodeFailureException; use Symfony\Component\Console\Command\Command; diff --git a/src/Controller/.gitignore b/src/Controller/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/src/Controller/Security/CheckController.php b/src/Controller/Security/CheckController.php index 8911a06..6def527 100644 --- a/src/Controller/Security/CheckController.php +++ b/src/Controller/Security/CheckController.php @@ -2,7 +2,6 @@ namespace App\Controller\Security; -use KnpU\OAuth2ClientBundle\Client\ClientRegistry; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; @@ -21,6 +20,6 @@ public function handleRequest(): JsonResponse return new JsonResponse(['user' => null]); } - return new JsonResponse(['user' => $this->getUser()->getUsername(), 'roles' => $user->getRoles()]); + return new JsonResponse(['user' => $user->getUsername(), 'roles' => $user->getRoles()]); } } diff --git a/src/Controller/Security/ConnectController.php b/src/Controller/Security/ConnectController.php index 1806319..c110571 100644 --- a/src/Controller/Security/ConnectController.php +++ b/src/Controller/Security/ConnectController.php @@ -2,7 +2,6 @@ namespace App\Controller\Security; -use KnpU\OAuth2ClientBundle\Client\ClientRegistry; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Annotation\Route; diff --git a/src/DataProvider/Anplan/ActivityDataProvider.php b/src/DataProvider/Anplan/ActivityDataProvider.php index 47a3329..c862d70 100644 --- a/src/DataProvider/Anplan/ActivityDataProvider.php +++ b/src/DataProvider/Anplan/ActivityDataProvider.php @@ -8,7 +8,6 @@ use ApiPlatform\Core\Exception\ResourceClassNotSupportedException; use App\Entity\Anplan\Activity; use App\Repository\Anplan\ActivityRepository; -use App\Security\Jwt\User; use Symfony\Component\Security\Core\Security; class ActivityDataProvider implements @@ -18,7 +17,6 @@ class ActivityDataProvider implements { private ActivityRepository $activityRepository; private Security $security; - private ?User $user = null; public function __construct( ActivityRepository $activityRepository, @@ -38,14 +36,24 @@ public function supports(string $resourceClass, string $operationName = null, ar */ public function getItem(string $resourceClass, $id, string $operationName = null, array $context = []): ?Activity { - /** @var Activity $activity */ $activity = $this->activityRepository->find($id); + if ($activity === null) { + return null; + } if ($activity->isVisible()) { return $activity; } + if (!$this->isAllowedToViewHidden()) { + return null; + } - return $this->isAllowedToViewHidden() ? $activity : null; + return $activity; + } + + private function isAllowedToViewHidden(): bool + { + return $this->security->isGranted('ROLE_STAFF'); } /** @@ -54,7 +62,7 @@ public function getItem(string $resourceClass, $id, string $operationName = null public function getCollection(string $resourceClass, string $operationName = null) { if ($resourceClass !== Activity::class) { - throw new ResourceClassNotSupportedException(); + throw new ResourceClassNotSupportedException('Invalid resource ' . $resourceClass); } $queryBuilder = $this->activityRepository->createQueryBuilder('t'); @@ -65,13 +73,4 @@ public function getCollection(string $resourceClass, string $operationName = nul return $queryBuilder->getQuery()->getResult(); } - - private function isAllowedToViewHidden(): bool - { - if ($this->user === null) { - $this->user = $this->security->getUser(); - } - - return in_array('ROLE_STAFF', $this->user->getRoles()); - } } diff --git a/src/Entity/Anplan/Activity.php b/src/Entity/Anplan/Activity.php index e2068ee..1f4c98c 100644 --- a/src/Entity/Anplan/Activity.php +++ b/src/Entity/Anplan/Activity.php @@ -25,161 +25,137 @@ class Activity { //region Fields - /** - * @var int - * @ORM\Id() + * @ORM\Id * @ORM\GeneratedValue() * @ORM\Column(name="pac_id", type="integer") * @Groups({"read"}) */ - public $id; + public int $id; /** - * @var string * @ORM\Column(name="pac_title", type="string") * @Groups({"read"}) */ - public $title; + public string $title; /** - * @var string|null * @ORM\Column(name="pac_sponsor", type="string", nullable=true) * @Groups({"read"}) */ - public $sponsor; + public ?string $sponsor; /** - * @var string|null * @ORM\Column(name="pac_host", type="string", nullable=true) * @Groups({"read"}) */ - public $host; + public ?string $host; /** - * @var bool * @ORM\Column(name="pac_visible", type="boolean") * @Groups({"staff:read"}) */ - public $visible; + public bool $visible; /** - * @var string|null * @ORM\Column(name="pac_reason_invisible", type="string", nullable=true) * @Groups({"staff:read"}) */ - public $reasonInvisible; + public ?string $reasonInvisible; /** - * @var bool * @ORM\Column(name="pac_spell_checked", type="boolean") * @Groups({"staff:read"}) */ - public $spellChecked; + public bool $spellChecked; /** - * @var int|null * @ORM\Column(name="pac_max_visitors", type="boolean") * @Groups({"read"}) */ - public $maxVisitors; + public ?int $maxVisitors; /** - * @var float|null * @ORM\Column(name="pac_price", type="decimal", scale=2, precision=20) * @Groups({"read"}) */ - public $price; + public ?float $price; /** - * @var string|null * @ORM\Column(name="pac_rules", type="text", nullable=true) * @Groups({"read"}) */ - public $rules; + public ?string $rules; /** - * @var string|null * @ORM\Column(name="pac_description", type="text", nullable=true) * @Groups({"read"}) */ - public $description; + public ?string $description; /** - * @var string|null * @ORM\Column(name="pac_print_description", type="text", nullable=true) * @Groups({"read"}) */ - public $printDescription; + public ?string $printDescription; /** - * @var string|null * @ORM\Column(name="pac_web_description", type="text", nullable=true) * @Groups({"read"}) */ - public $webDescription; + public ?string $webDescription; /** - * @var string|null * @ORM\Column(name="pac_social_description", type="text", nullable=true) * @Groups({"read"}) */ - public $socialDescription; + public ?string $socialDescription; /** - * @var string|null * @ORM\Column(name="pac_url", type="string", nullable=true) * @Groups({"read"}) */ - public $url; + public ?string $url; /** - * @var string|null * @ORM\Column(name="pac_prizes", type="text", nullable=true) * @Groups({"read"}) */ - public $prizes; + public ?string $prizes; /** - * @var string|null * @ORM\Column(name="pac_tech_info", type="text", nullable=true) * @Groups({"staff:read", "tech-crew:read"}) */ - public $techInfo; + public ?string $techInfo; /** - * @var string|null * @ORM\Column(name="pac_logistics_info", type="text", nullable=true) * @Groups({"staff:read", "gopher:read"}) */ - public $logisticsInfo; + public ?string $logisticsInfo; /** - * @var string|null * @ORM\Column(name="pac_finance_info", type="text", nullable=true) * @Groups({"staff:read"}) */ - public $financeInfo; + public ?string $financeInfo; /** - * @var string|null * @ORM\Column(name="pac_tickets_info", type="text", nullable=true) * @Groups({"staff:read"}) */ - public $ticketsInfo; + public ?string $ticketsInfo; //endregion - //region Associations - /** - * @var ActivityType * @ORM\ManyToOne(targetEntity="App\Entity\Anplan\ActivityType") * @ORM\JoinColumn(name="pac_type_id", referencedColumnName="pat_id") * @ApiSubresource * @Groups({"read"}) */ - public $activityType; + public ?ActivityType $activityType; /** * @ORM\OneToMany(targetEntity="App\Entity\Anplan\Timeslot", mappedBy="activity") diff --git a/src/Entity/Anplan/ActivityType.php b/src/Entity/Anplan/ActivityType.php index 6b08d59..3246902 100644 --- a/src/Entity/Anplan/ActivityType.php +++ b/src/Entity/Anplan/ActivityType.php @@ -24,127 +24,109 @@ class ActivityType { //region Fields - /** - * @var int - * @ORM\Id() + * @ORM\Id * @ORM\GeneratedValue() * @ORM\Column(name="pat_id", type="integer") * @Groups({"read"}) */ - public $id; + public int $id; /** - * @var string * @ORM\Column(name="pat_description", type="string") * @Groups({"read"}) */ - public $description; + public string $description; /** - * @var string * @ORM\Column(name="pat_long_description", type="text") * @Groups({"read"}) */ - public $longDescription; + public string $longDescription; /** - * @var int * @ORM\Column(name="pat_order", type="integer") * @Groups({"read"}) */ - public $order; + public int $order; /** - * @var bool * @ORM\Column(name="pat_visible", type="boolean") * @Groups({"read"}) */ - public $visible; + public bool $visible; /** - * @var bool * @ORM\Column(name="pat_selectable", type="boolean") * @Groups({"read"}) */ - public $selectable; + public bool $selectable; /** - * @var bool * @ORM\Column(name="pat_18plus", type="boolean") * @Groups({"read"}) */ - public $adultsOnly; + public bool $adultsOnly; /** - * @var bool * @ORM\Column(name="pat_compo", type="boolean") * @Groups({"read"}) */ - public $competition; + public bool $competition; /** - * @var bool * @ORM\Column(name="pat_cosplay", type="boolean") * @Groups({"read"}) */ - public $cosplay; + public bool $cosplay; /** - * @var bool * @ORM\Column(name="pat_event", type="boolean") * @Groups({"read"}) */ - public $event; + public bool $event; /** - * @var bool * @ORM\Column(name="pat_gameroom", type="boolean") * @Groups({"read"}) */ - public $gameRoom; + public bool $gameRoom; /** - * @var bool * @ORM\Column(name="pat_video", type="boolean") * @Groups({"read"}) */ - public $video; + public bool $video; /** - * @var string * @ORM\Column(name="pat_class", type="string") * @Groups({"read"}) */ - public $cssClass; + public string $cssClass; /** - * @var string|null * @ORM\Column(name="pat_foreground_color", type="string") * @Groups({"read"}) */ - public $cssForegroundColor; + public ?string $cssForegroundColor; /** - * @var string|null * @ORM\Column(name="pat_background_color", type="string") * @Groups({"read"}) */ - public $cssBackgroundColor; + public string $cssBackgroundColor; /** - * @var bool * @ORM\Column(name="pat_is_bold", type="boolean") * @Groups({"read"}) */ - public $cssBold; + public bool $cssBold; /** - * @var bool * @ORM\Column(name="pat_is_strike_through", type="boolean") * @Groups({"read"}) */ - public $cssIsStrikeThrough; + public bool $cssIsStrikeThrough; //endregion diff --git a/src/Entity/Anplan/Floor.php b/src/Entity/Anplan/Floor.php index 5762509..757b925 100644 --- a/src/Entity/Anplan/Floor.php +++ b/src/Entity/Anplan/Floor.php @@ -21,38 +21,32 @@ class Floor { //region Fields - /** - * @var int - * @ORM\Id() + * @ORM\Id * @ORM\GeneratedValue() * @ORM\Column(name="pfl_id", type="integer") */ - public $id; + public int $id; /** - * @var int * @ORM\Column(name="pfl_year", type="integer") */ - public $year; + public int $year; /** - * @var string * @ORM\Column(name="pfl_name", type="string") */ - public $name; + public string $name; /** - * @var string|null * @ORM\Column(name="pfl_description", type="string", nullable=true) */ - public $description; + public ?string $description; /** - * @var string|null * @ORM\Column(name="pfl_background_color", type="string", nullable=true) */ - public $cssBackgroundColor; + public ?string $cssBackgroundColor; //endregion diff --git a/src/Entity/Anplan/Location.php b/src/Entity/Anplan/Location.php index 8d543ca..a0e587b 100644 --- a/src/Entity/Anplan/Location.php +++ b/src/Entity/Anplan/Location.php @@ -24,43 +24,37 @@ class Location { //region Fields - /** - * @var int - * @ORM\Id() + * @ORM\Id * @ORM\GeneratedValue() * @ORM\Column(name="plo_id", type="integer") * @Groups({"read"}) */ - public $id; + public int $id; /** - * @var int * @ORM\Column(name="plo_year", type="integer") * @Groups({"read"}) */ - public $year; + public int $year; /** - * @var string * @ORM\Column(name="plo_name", type="string") * @Groups({"read"}) */ - public $name; + public string $name; /** - * @var string|null * @ORM\Column(name="plo_use_name", type="string", nullable=true) * @Groups({"read"}) */ - public $useName; + public ?string $useName; /** - * @var string|null * @ORM\Column(name="plo_sponsor", type="string", nullable=true) * @Groups({"read"}) */ - public $sponsor; + public ?string $sponsor; //endregion diff --git a/src/Entity/Anplan/Scope.php b/src/Entity/Anplan/Scope.php index c49ccfb..49d290d 100644 --- a/src/Entity/Anplan/Scope.php +++ b/src/Entity/Anplan/Scope.php @@ -11,7 +11,7 @@ class Scope { /** - * @ORM\Id() + * @ORM\Id * @ORM\GeneratedValue() * @ORM\Column(type="integer", name="id") */ diff --git a/src/Entity/Anplan/Timeslot.php b/src/Entity/Anplan/Timeslot.php index ac7162b..01661e4 100644 --- a/src/Entity/Anplan/Timeslot.php +++ b/src/Entity/Anplan/Timeslot.php @@ -5,6 +5,7 @@ use ApiPlatform\Core\Annotation\ApiFilter; use ApiPlatform\Core\Annotation\ApiResource; use DateTime; +use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter; use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; @@ -31,34 +32,28 @@ class Timeslot { //region Fields - /** - * @var int - * @ORM\Id() + * @ORM\Id * @ORM\GeneratedValue() * @ORM\Column(name="pts_id", type="integer") * @Groups({"read"}) */ - public $id; + public int $id; /** - * @var DateTime * @ORM\Column(name="pts_starts_at", type="datetime") * @Groups({"read"}) */ - public $dateStartsAt; + public DateTimeInterface $dateStartsAt; /** - * @var DateTime * @ORM\Column(name="pts_ends_at", type="datetime") * @Groups({"read"}) */ - public $dateEndsAt; + public DateTimeInterface $dateEndsAt; //endregion - //region Associations - /** * @var Activity * @ORM\ManyToOne(targetEntity="App\Entity\Anplan\Activity", inversedBy="timeslots") @@ -66,16 +61,15 @@ class Timeslot * @ApiSubresource() * @Groups({"read-timeslot"}) */ - public $activity; + public ?Activity $activity; /** - * @var Location * @ORM\ManyToOne(targetEntity="App\Entity\Anplan\Location") * @ORM\JoinColumn(name="pts_location_id", referencedColumnName="plo_id") * @ApiSubresource() * @Groups({"read"}) */ - public $location; + public ?Location $location; //endregion @@ -86,12 +80,12 @@ public function getId(): int return $this->id; } - public function getDateStartsAt(): DateTime + public function getDateStartsAt(): DateTimeInterface { return $this->dateStartsAt; } - public function getDateEndsAt(): DateTime + public function getDateEndsAt(): DateTimeInterface { return $this->dateEndsAt; } diff --git a/src/Repository/Anplan/ActivityRepository.php b/src/Repository/Anplan/ActivityRepository.php index 33f69f4..deca6ce 100644 --- a/src/Repository/Anplan/ActivityRepository.php +++ b/src/Repository/Anplan/ActivityRepository.php @@ -6,6 +6,12 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +/** + * @method Activity|null find($id, $lockMode = null, $lockVersion = null) + * @method Activity|null findOneBy(array $criteria, array $orderBy = null) + * @method Activity[] findAll() + * @method Activity[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ class ActivityRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) diff --git a/src/Repository/ScopeRepository.php b/src/Repository/Anplan/ScopeRepository.php similarity index 95% rename from src/Repository/ScopeRepository.php rename to src/Repository/Anplan/ScopeRepository.php index 68eeef3..be2e8b9 100644 --- a/src/Repository/ScopeRepository.php +++ b/src/Repository/Anplan/ScopeRepository.php @@ -1,6 +1,6 @@