<?php
namespace CoreBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use FOS\UserBundle\Model\User;
use Doctrine\ORM\Mapping as ORM;
use JsonSerializable;
/**
* @ORM\Table("classroom")
* @ORM\Entity(repositoryClass="CoreBundle\Entity\ClassroomRepository")
*/
class Classroom implements JsonSerializable
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, nullable = false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=255)
*/
private $password;
/**
* @var User[]
*
* @ORM\ManyToMany(targetEntity="UserBundle\Entity\User")
* @ORM\JoinTable(name="classroom_teacher",
* joinColumns={@ORM\JoinColumn(name="classroom", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="teacher", referencedColumnName="id")})
*/
private $teachers;
/**
* @var ClassroomStudent[]
*
* @ORM\OneToMany(targetEntity="ClassroomStudent", mappedBy="classroom", cascade={"persist","remove"})
*/
private $members;
/**
* @var Session[]
*
* @ORM\OneToMany(targetEntity="Session", mappedBy="classroom", cascade={"persist"})
*/
private $sessions;
/**
* @var ArrayCollection PeerSession
*
* @ORM\OneToMany(targetEntity="CoreBundle\Entity\PeerSession", mappedBy="classroom", cascade={"persist"})
*/
private $peerSessions;
/**
* @var QuizSession[]
*
* @ORM\OneToMany(targetEntity="CoreBundle\Entity\QuizSession", mappedBy="classroom", cascade={"persist"})
*/
private $quizSessions;
/**
* @var bool
*
* @ORM\Column(name="is_demo", type="boolean", options={"default" : false})
*/
private $isDemo;
/**
* @var bool
*
* @ORM\Column(name="is_active", type="boolean", options={"default" : true})
*/
private $isActive;
/**
* @var bool
*
* @ORM\Column(type="boolean", nullable=true)
*/
private $customer;
/**
* @var Institution
*
* @ORM\ManyToOne(targetEntity="CoreBundle\Entity\Institution")
* @ORM\JoinColumn(name="institution", referencedColumnName="id", onDelete="CASCADE", nullable=true)
*/
protected $institution = null;
/**
* @var ClassroomType
*
* @ORM\ManyToOne(targetEntity="CoreBundle\Entity\ClassroomType")
* @ORM\JoinColumn(name="type", referencedColumnName="id", nullable=true)
*/
private $type = null;
/**
* @var \DateTime
*
* @ORM\Column(name="timestamp", type="datetime", nullable=true)
*/
private $timestamp;
public function __construct()
{
$this->members = new ArrayCollection();
$this->teachers = new ArrayCollection();
$this->sessions = new ArrayCollection();
$this->peerSessions = new ArrayCollection();
$this->quizSessions = new ArrayCollection();
$bytes = random_bytes(4);
$this->password = bin2hex($bytes);
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name.
*
* @param string $name
*
* @return Classroom
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
public function setNameForDemoClassroom(User $user)
{
$this->name = "Testklasse ({$user->getUsername()})";
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
public function getTeachers()
{
return $this->teachers;
}
/**
* @param User $teacher
*
* @return Classroom
*/
public function addTeacher(User $teacher)
{
$this->teachers->add($teacher);
return $this;
}
/**
* @param User $teacher
*
* @return bool
*/
public function removeTeacher(User $teacher)
{
return $this->teachers->removeElement($teacher);
}
/**
* @return ClassroomStudent[]
*/
public function getMembers()
{
return $this->members;
}
/**
* @return array
*/
public function getMembersIds()
{
$membersIds = [];
foreach ($this->members as $member) {
$membersIds[] = $member->getStudent()->getId();
}
return $membersIds;
}
/**
* @param ClassroomStudent $ClassroomStudent
*
* @return Classroom
*/
public function addMember(ClassroomStudent $ClassroomStudent)
{
$ClassroomStudent->setClassroom($this);
$this->members->add($ClassroomStudent);
return $this;
}
/**
* @param ClassroomStudent $ClassroomStudent
*
* @return bool
*/
public function removeMember(ClassroomStudent $ClassroomStudent)
{
$ClassroomStudent->setClassroom(null);
return $this->members->removeElement($ClassroomStudent);
}
/**
* @return Session[]
*/
public function getSessions()
{
return $this->sessions;
}
/**
* @param Session $session
*
* @return Classroom
*/
public function addSession(Session $session)
{
$session->setClassroom($this);
$this->sessions->add($session);
return $this;
}
/**
* @param Session $session
*
* @return bool
*/
public function removeSession(Session $session)
{
$session->setClassroom(null);
return $this->sessions->removeElement($session);
}
/**
* @param \FOS\UserBundle\Model\User[] $teachers
*
* @return $this
*/
public function setTeachers(array $teachers)
{
$this->teachers = $teachers;
return $this;
}
/**
* @return Institution
*/
public function getInstitution()
{
return $this->institution;
}
/**
* @param Institution $institution
*
* @return $this
*/
public function setInstitution(Institution $institution)
{
$this->institution = $institution;
return $this;
}
/**
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* @param string $password
*
* @return $this
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* @return ArrayCollection
*/
public function getPeerSessions()
{
return $this->peerSessions;
}
/**
* @return bool
*/
public function isDemo()
{
return $this->isDemo;
}
/**
* @param bool $isDemo
*
* @return $this
*/
public function setIsDemo(bool $isDemo)
{
$this->isDemo = $isDemo;
return $this;
}
/**
* @return bool
*/
public function isActive()
{
return $this->isActive;
}
/**
* @param bool $isActive
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
}
/**
* @return \DateTime
*/
public function getTimestamp()
{
return $this->timestamp;
}
/**
* @param \DateTime $timestamp
*/
public function setTimestamp($timestamp)
{
$this->timestamp = $timestamp;
}
public function isCustomer(): ?bool
{
return $this->customer;
}
public function setCustomer(bool $customer)
{
$this->customer = $customer;
}
public function getType(): ?ClassroomType
{
return $this->type;
}
public function setType(?ClassroomType $type): void
{
$this->type = $type;
}
public function hasTeacher(User $user): bool
{
foreach ($this->getTeachers() as $teacher) {
if ($teacher->getId() === $user->getId())
return true;
}
return false;
}
public function jsonSerialize(): mixed
{
return [
"id" => $this->getId(),
"name" => $this->getName(),
"type" => $this->getType(),
"timeStamp" => $this->getTimestamp(),
"institution" => $this->getInstitution(),
"members" => $this->getMembers()->toArray(),
"memberIds" => $this->getMembersIds(),
"teachers" => $this->getTeachers()->toArray()
];
}
}