Browse Source

resolve conflicts

Olivier Massot 1 năm trước cách đây
mục cha
commit
931b45f5b9

+ 1 - 0
config/opentalent/products.yaml

@@ -132,6 +132,7 @@ parameters:
             - Categories
             - EventReport
             - AttendanceBooking
+            - AttendanceBookingReason
           roles:
             - ROLE_EVENTS
 

+ 37 - 0
src/Doctrine/Booking/AttendanceBookingReasonExtension.php

@@ -0,0 +1,37 @@
+<?php
+declare(strict_types=1);
+
+namespace App\Doctrine\Booking;
+
+use ApiPlatform\Metadata\Operation;
+use App\Doctrine\AbstractExtension;
+use App\Entity\Access\Access;
+use App\Entity\Booking\AttendanceBookingReason;
+use App\Entity\Booking\Course;
+use Doctrine\ORM\QueryBuilder;
+use Symfony\Bundle\SecurityBundle\Security;
+
+/**
+ * Class AttendanceBookingReasonExtension : Filtre de sécurité par défaut pour une resource AttendanceBookingReason
+ * @package App\Doctrine\Core
+ */
+final class AttendanceBookingReasonExtension extends AbstractExtension
+{
+    public function __construct(private Security $security)
+    { }
+
+    public function supports(string $resourceClass, ?Operation $operation): bool {
+        return $resourceClass === AttendanceBookingReason::class;
+    }
+
+    protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
+    {
+        /** @var Access $currentUser */
+        $currentUser = $this->security->getUser();
+        $rootAlias = $queryBuilder->getRootAliases()[0];
+        $queryBuilder
+            ->andWhere(sprintf('%s.organization = :organization', $rootAlias))
+            ->setParameter('organization', $currentUser->getOrganization())
+        ;
+    }
+}

+ 15 - 0
src/Entity/Booking/AttendanceBooking.php

@@ -40,6 +40,10 @@ class AttendanceBooking
     #[ORM\ManyToOne(inversedBy: 'attendanceBooking')]
     private Examen $examen;
 
+    #[ORM\ManyToOne(inversedBy: 'attendanceBookings')]
+    #[ORM\JoinColumn(nullable: true)]
+    private ?AttendanceBookingReason $reason;
+
     public function getId(): ?int
     {
         return $this->id;
@@ -116,4 +120,15 @@ class AttendanceBooking
 
         return $this;
     }
+
+    public function getReason(): AttendanceBookingReason
+    {
+        return $this->reason;
+    }
+
+    public function setReason(?AttendanceBookingReason $reason): self
+    {
+        $this->reason = $reason;
+        return $this;
+    }
 }

+ 125 - 0
src/Entity/Booking/AttendanceBookingReason.php

@@ -0,0 +1,125 @@
+<?php
+namespace App\Entity\Booking;
+
+use ApiPlatform\Metadata\ApiResource;
+use ApiPlatform\Metadata\Delete;
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\GetCollection;
+use ApiPlatform\Metadata\Post;
+use ApiPlatform\Metadata\Put;
+use App\Attribute\OrganizationDefaultValue;
+use App\Entity\Organization\Organization;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * Motif d'absence ou de retard
+ *
+ * Security :
+ *
+ *   @see \App\Doctrine\Education\AttendanceBookingReasonExtension.php
+ */
+#[ApiResource(
+
+    operations: [
+        new Get(
+            security: 'is_granted(\'ROLE_ORGANIZATION_VIEW\') and object.getOrganization().getId() == user.getOrganization().getId()'
+        ),
+        new Put(
+            security: 'is_granted(\'ROLE_ORGANIZATION_VIEW\') and is_granted(\'ROLE_GENERAL_CONFIG\') and object.getOrganization().getId() == user.getOrganization().getId()'
+        ),
+        new Delete(
+            security: 'is_granted(\'ROLE_ORGANIZATION_VIEW\') and is_granted(\'ROLE_GENERAL_CONFIG\') and object.getOrganization().getId() == user.getOrganization().getId()'
+        ),
+        new GetCollection(
+            security: 'is_granted(\'ROLE_ORGANIZATION_VIEW\')'
+        ),
+        new Post(
+            security: 'is_granted(\'ROLE_ORGANIZATION_VIEW\') and is_granted(\'ROLE_GENERAL_CONFIG\')'
+        )]
+)]
+//#[Auditable]
+#[ORM\Table(name: 'AttendanceBookingReason')]
+#[OrganizationDefaultValue(fieldName: "organization")]
+#[ORM\Entity]
+class AttendanceBookingReason
+{
+    #[ORM\Id]
+    #[ORM\Column]
+    #[ORM\GeneratedValue]
+    private ?int $id = null;
+
+    #[ORM\ManyToOne(inversedBy: 'attendanceBookingReasons')]
+    #[ORM\JoinColumn(nullable: false)]
+    protected Organization $organization;
+
+    #[ORM\Column(length: 255, nullable: false)]
+    private string $reason;
+
+    #[ORM\OneToMany(mappedBy: 'reason', targetEntity: AttendanceBooking::class, cascade: ['persist'], orphanRemoval: true)]
+    private Collection $attendanceBookings;
+
+    public function __construct()
+    {
+        $this->attendanceBookings = new ArrayCollection();
+    }
+
+    public function getId(): ?int
+    {
+        return $this->id;
+    }
+
+    public function setId(?int $id): self
+    {
+        $this->id = $id;
+        return $this;
+    }
+
+    public function getOrganization(): Organization
+    {
+        return $this->organization;
+    }
+
+    public function setOrganization(?Organization $organization): self
+    {
+        $this->organization = $organization;
+        return $this;
+    }
+
+    public function getReason(): string
+    {
+        return $this->reason;
+    }
+
+    public function setReason(string $reason): self
+    {
+        $this->reason = $reason;
+        return $this;
+    }
+
+    public function getAttendanceBookings(): Collection
+    {
+        return $this->attendanceBookings;
+    }
+
+    public function addAttendanceBookings(AttendanceBooking $attendanceBooking): self
+    {
+        if (!$this->attendanceBookings->contains($attendanceBooking)) {
+            $this->attendanceBookings[] = $attendanceBooking;
+            $attendanceBooking->setReason($this);
+        }
+        return $this;
+    }
+
+    public function removeAttendanceBooking(AttendanceBooking $attendanceBooking): self
+    {
+        if ($this->attendanceBookings->removeElement($attendanceBooking)) {
+            // set the owning side to null (unless already changed)
+            if ($attendanceBooking->getReason() === $this) {
+                $attendanceBooking->setReason(null);
+            }
+        }
+        return $this;
+    }
+}

+ 1 - 1
src/Entity/Education/EducationTiming.php

@@ -21,7 +21,7 @@ use Doctrine\ORM\Mapping as ORM;
 /**
  * Temps d'un enseignement.
  *
- * Security:
+ * Security :
  *
  *    @see \App\Doctrine\Education\CurrentEducationTimingExtension
  */

+ 3 - 6
tests/ci_docker_install.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
-# Setup a php:8.2.1-fpm docker image
+# Setup a php:8.2-fpm docker image
 
 # We need to install dependencies only for Docker
 [[ ! -e /.dockerenv ]] && exit 0
@@ -11,10 +11,6 @@ set -xe
 apt-get update
 apt-get install -yqq --fix-missing apt-utils gnupg git build-essential openssh-client zip
 
-apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E9C74FEEA2098A6E
-echo "deb https://packages.dotdeb.org jessie all" >> /etc/apt/sources.list
-echo "deb-src https://packages.dotdeb.org jessie all" >> /etc/apt/sources.list
-
 apt-get update
 
 apt-get install -yqq --fix-missing --no-install-recommends unzip zlib1g-dev libicu-dev g++ \
@@ -60,7 +56,8 @@ php -r "if (hash_file('SHA384', 'composer-setup.php') === file_get_contents('ins
 php composer-setup.php
 php -r "unlink('composer-setup.php'); unlink('installer.sig');"
 
-echo "memory_limit = 512M" >> /usr/local/etc/php/conf.d/memory-limit.ini
+# Config php
+echo "memory_limit=2096M" > /usr/local/etc/php/conf.d/memory-limit.ini
 
 # Install modules
 HOST=ci php composer.phar install --no-interaction --ignore-platform-reqs