Fix entities

pull/3924/head
Julio Montoya 4 years ago
parent 18afd677b9
commit a2e21e5edc
  1. 80
      src/CoreBundle/Entity/User.php
  2. 17
      src/CoreBundle/Entity/UserRelUser.php
  3. 12
      src/CoreBundle/Repository/Node/UserRepository.php
  4. 6
      src/CoreBundle/Traits/TimestampableTypedEntity.php

@ -38,21 +38,6 @@ use UserManager;
/**
* EquatableInterface is needed to check if the user needs to be refreshed.
*
* @ApiResource(
* attributes={"security"="is_granted('ROLE_ADMIN')"},
* iri="http://schema.org/Person",
* normalizationContext={"groups"={"user:read"}},
* denormalizationContext={"groups"={"user:write"}},
* collectionOperations={
* "get"={"security"="is_granted('ROLE_ADMIN')"},
* "post"={"security"="is_granted('ROLE_ADMIN')"}
* },
* itemOperations={
* "get"={"security"="is_granted('ROLE_ADMIN')"},
* "put"={"security"="is_granted('ROLE_ADMIN')"},
* },
* )
*
* @ORM\Table(
* name="user",
* indexes={
@ -63,6 +48,37 @@ use UserManager;
* @ORM\Entity
* @ORM\EntityListeners({"Chamilo\CoreBundle\Entity\Listener\UserListener"})
*/
#[ApiResource(
collectionOperations: [
'get' => [
'security' => "is_granted('ROLE_ADMIN')",
],
'post' => [
'security' => "is_granted('ROLE_ADMIN')",
],
],
itemOperations: [
'get' => [
'security' => "is_granted('ROLE_ADMIN')",
],
'put' => [
'security' => "is_granted('ROLE_ADMIN')",
],
'delete' => [
'security' => "is_granted('ROLE_ADMIN')",
],
],
iri: 'http://schema.org/Person',
attributes: [
'security' => 'is_granted("ROLE_USER")',
],
denormalizationContext: [
'groups' => ['user:write'],
],
normalizationContext: [
'groups' => ['user:read'],
],
)]
#[ApiFilter(SearchFilter::class, properties: [
'username' => 'partial',
'firstname' => 'partial',
@ -86,13 +102,12 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
public const ANONYMOUS = 6;
/**
* @Groups({"user_json:read"})
*
* @ORM\OneToOne(
* targetEntity="Chamilo\CoreBundle\Entity\ResourceNode", cascade={"remove"}, orphanRemoval=true
* )
* @ORM\JoinColumn(name="resource_node_id", onDelete="CASCADE")
*/
#[Groups(['user_json:read'])]
public ?ResourceNode $resourceNode = null;
/**
@ -109,6 +124,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
'course_rel_user:read',
'user_json:read',
'message:read',
'user_rel_user:read',
])]
public ?string $illustrationUrl = null;
@ -121,10 +137,18 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
protected ?int $id = null;
/**
* @Groups({"user:read", "user:write", "course:read", "resource_node:read", "user_json:read", "message:read"})
* @Assert\NotBlank()
* @ORM\Column(name="username", type="string", length=100, unique=true)
*/
#[Assert\NotBlank]
#[Groups([
'user:read',
'user:write',
'course:read',
'resource_node:read',
'user_json:read',
'message:read',
'user_rel_user:read',
])]
protected string $username;
/**
@ -135,15 +159,25 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
/**
* @Assert\NotBlank()
* @ApiProperty(iri="http://schema.org/name")
* @Groups({"user:read", "user:write", "resource_node:read", "user_json:read"})
* @ORM\Column(name="firstname", type="string", length=64, nullable=true)
*/
#[Groups([
'user:read',
'user:write',
'resource_node:read',
'user_json:read',
])]
protected ?string $firstname = null;
/**
* @Groups({"user:read", "user:write", "resource_node:read", "user_json:read"})
* @ORM\Column(name="lastname", type="string", length=64, nullable=true)
*/
#[Groups([
'user:read',
'user:write',
'resource_node:read',
'user_json:read',
])]
protected ?string $lastname = null;
/**
@ -250,8 +284,6 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
*/
protected ?string $address = null;
protected AccessUrl $currentUrl;
/**
* @ORM\Column(type="string", length=255)
*/
@ -689,6 +721,8 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
*/
protected ?int $hrDeptId = null;
protected AccessUrl $currentUrl;
/**
* @var Collection<int, MessageTag>|MessageTag[]
*/

@ -7,9 +7,10 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Chamilo\CoreBundle\Traits\TimestampableTypedEntity;
use Chamilo\CoreBundle\Traits\UserTrait;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -46,16 +47,16 @@ use Symfony\Component\Validator\Constraints as Assert;
'security' => 'is_granted("ROLE_USER")',
],
denormalizationContext: [
'groups' => ['message_tag:write'],
'groups' => ['user_rel_user:write'],
],
normalizationContext: [
'groups' => ['message_tag:read'],
'groups' => ['user_rel_user:read', 'timestampable_created:read'],
],
)]
class UserRelUser
{
use UserTrait;
use TimestampableEntity;
use TimestampableTypedEntity;
public const USER_RELATION_TYPE_UNKNOWN = 1;
public const USER_RELATION_TYPE_PARENT = 2;
@ -66,6 +67,7 @@ class UserRelUser
public const USER_RELATION_TYPE_RRHH = 7;
public const USER_RELATION_TYPE_BOSS = 8;
public const USER_RELATION_TYPE_HRM_REQUEST = 9;
public const USER_RELATION_TYPE_FRIEND_REQUEST = 10;
/**
* @ORM\Column(name="id", type="bigint")
@ -78,20 +80,23 @@ class UserRelUser
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\User", inversedBy="friends")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE", nullable=false)
*/
#[Assert\NotBlank]
#[Assert\NotNull]
#[Groups(['user_rel_user:read', 'user_rel_user:write'])]
protected User $user;
/**
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\User", inversedBy="friendsWithMe")
* @ORM\JoinColumn(name="friend_user_id", referencedColumnName="id", onDelete="CASCADE", nullable=false)
*/
#[Assert\NotBlank]
#[Assert\NotNull]
#[Groups(['user_rel_user:read', 'user_rel_user:write'])]
protected User $friend;
/**
* @ORM\Column(name="relation_type", type="integer", nullable=false)
*/
#[Assert\NotBlank]
#[Groups(['user_rel_user:read', 'user_rel_user:write'])]
protected int $relationType;
public function __construct()

@ -15,6 +15,7 @@ use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
use Chamilo\CoreBundle\Entity\TrackELogin;
use Chamilo\CoreBundle\Entity\TrackEOnline;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Entity\UserRelUser;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CourseBundle\Entity\CSurveyInvitation;
use Datetime;
@ -570,7 +571,7 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
$qb = $this->createQueryBuilder('u');
$this->addAccessUrlQueryBuilder($urlId, $qb);
$this->addActiveAndNotAnonUserQueryBuilder($qb);
$this->addUserRelUserQueryBuilder($userId, USER_RELATION_TYPE_RRHH, $qb);
$this->addUserRelUserQueryBuilder($userId, UserRelUser::USER_RELATION_TYPE_RRHH, $qb);
return $qb->getQuery()->getResult();
}
@ -688,7 +689,7 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
private function addUserRelUserQueryBuilder(int $userId, int $relationType, QueryBuilder $qb = null): QueryBuilder
{
$qb = $this->getOrCreateQueryBuilder($qb, 'u');
$qb->leftJoin('u.userRelUsers', 'relations');
$qb->leftJoin('u.friends', 'relations');
$qb
->andWhere('relations.relationType = :relationType')
->andWhere('relations.user = :userRelation AND relations.friend <> :userRelation')
@ -703,9 +704,12 @@ class UserRepository extends ResourceRepository implements PasswordUpgraderInter
{
$qb = $this->getOrCreateQueryBuilder($qb, 'u');
$qb
->leftJoin('u.userRelUsers', 'relations')
->leftJoin('u.friends', 'relations')
->andWhere(
$qb->expr()->notIn('relations.relationType', [USER_RELATION_TYPE_DELETED, USER_RELATION_TYPE_RRHH])
$qb->expr()->notIn(
'relations.relationType',
[UserRelUser::USER_RELATION_TYPE_DELETED, UserRelUser::USER_RELATION_TYPE_RRHH]
)
)
->andWhere('relations.user = :user AND relations.friend <> :user')
->setParameter('user', $userId, Types::INTEGER)

@ -4,9 +4,11 @@ declare(strict_types=1);
namespace Chamilo\CoreBundle\Traits;
use ApiPlatform\Core\Annotation\ApiProperty;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Serializer\Annotation\Groups;
trait TimestampableTypedEntity
{
@ -14,12 +16,16 @@ trait TimestampableTypedEntity
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
#[ApiProperty]
#[Groups(['timestampable_created:read'])]
protected DateTime $createdAt;
/**
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
#[ApiProperty]
#[Groups(['timestampable_updated:read'])]
protected DateTime $updatedAt;
/**

Loading…
Cancel
Save