uuid = Uuid::uuid4()->toString(); $this->status = self::STUDENT; $this->salt = sha1(uniqid(null, true)); $this->active = true; $this->registrationDate = new \DateTime(); $this->authSource = 'platform'; $this->courses = new ArrayCollection(); //$this->items = new ArrayCollection(); $this->classes = new ArrayCollection(); $this->curriculumItems = new ArrayCollection(); $this->portals = new ArrayCollection(); $this->dropBoxSentFiles = new ArrayCollection(); $this->dropBoxReceivedFiles = new ArrayCollection(); $this->groups = new ArrayCollection(); //$this->extraFields = new ArrayCollection(); $this->createdAt = new \DateTime(); $this->updatedAt = new \DateTime(); $this->enabled = false; $this->locked = false; $this->expired = false; $this->roles = []; $this->credentialsExpired = false; $this->courseGroupsAsMember = new ArrayCollection(); $this->courseGroupsAsTutor = new ArrayCollection(); } /** * @return string */ public function __toString() { return $this->username; } /** * @return int */ public function getId() { return $this->id; } /** * @param int $userId */ public function setId($userId) { $this->id = $userId; } public function getUuid(): UuidInterface { return $this->uuid; } public function setResourceNode(ResourceNode $resourceNode): self { $this->resourceNode = $resourceNode; return $this; } public function getResourceNode(): ResourceNode { return $this->resourceNode; } /** * @return ArrayCollection|ResourceNode[] */ public function getResourceNodes() { return $this->resourceNodes; } /** * @return User */ public function setResourceNodes($resourceNodes) { $this->resourceNodes = $resourceNodes; return $this; } /** * @ORM\PostPersist() */ public function postPersist(LifecycleEventArgs $args) { /*$user = $args->getEntity(); */ } /** * @return ArrayCollection */ public function getDropBoxSentFiles() { return $this->dropBoxSentFiles; } /** * @return ArrayCollection */ public function getDropBoxReceivedFiles() { return $this->dropBoxReceivedFiles; } /** * @param ArrayCollection $value */ public function setDropBoxSentFiles($value) { $this->dropBoxSentFiles = $value; } /** * @param ArrayCollection $value */ public function setDropBoxReceivedFiles($value) { $this->dropBoxReceivedFiles = $value; } /** * @param ArrayCollection $courses */ public function setCourses($courses): self { $this->courses = $courses; return $this; } public function getCourses() { return $this->courses; } /** * @return array */ public static function getPasswordConstraints() { return [ new Assert\Length(['min' => 5]), // Alpha numeric + "_" or "-" new Assert\Regex( [ 'pattern' => '/^[a-z\-_0-9]+$/i', 'htmlPattern' => '/^[a-z\-_0-9]+$/i', ] ), // Min 3 letters - not needed /*new Assert\Regex(array( 'pattern' => '/[a-z]{3}/i', 'htmlPattern' => '/[a-z]{3}/i') ),*/ // Min 2 numbers new Assert\Regex( [ 'pattern' => '/[0-9]{2}/', 'htmlPattern' => '/[0-9]{2}/', ] ), ] ; } public static function loadValidatorMetadata(ClassMetadata $metadata) { //$metadata->addPropertyConstraint('firstname', new Assert\NotBlank()); //$metadata->addPropertyConstraint('lastname', new Assert\NotBlank()); //$metadata->addPropertyConstraint('email', new Assert\Email()); /* $metadata->addPropertyConstraint('password', new Assert\Collection(self::getPasswordConstraints()) );*/ /*$metadata->addConstraint(new UniqueEntity(array( 'fields' => 'username', 'message' => 'This value is already used.', )));*/ /*$metadata->addPropertyConstraint( 'username', new Assert\Length(array( 'min' => 2, 'max' => 50, 'minMessage' => 'This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.', 'maxMessage' => 'This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.', )) );*/ } /** * @return ArrayCollection */ public function getPortals() { return $this->portals; } /** * @param $portal */ public function setPortal($portal) { $this->portals->add($portal); } public function setPortals(array $value) { $this->portals = $value; } /** * @return ArrayCollection */ public function getCurriculumItems() { return $this->curriculumItems; } public function setCurriculumItems(array $items): self { $this->curriculumItems = $items; return $this; } public function getIsActive(): bool { return true === $this->active; } public function isActive(): bool { return $this->getIsActive(); } public function isEnabled() { return $this->isActive(); } /** * Set salt. * * @param string $salt * * @return User */ public function setSalt($salt) { $this->salt = $salt; return $this; } /** * Get salt. * * @return string */ public function getSalt() { return $this->salt; } /** * @param ArrayCollection $classes * * @return $this */ public function setClasses($classes) { $this->classes = $classes; return $this; } /** * @return ArrayCollection */ public function getClasses() { return $this->classes; } public function getLps() { //return $this->lps; /*$criteria = Criteria::create() ->where(Criteria::expr()->eq("id", "666")) //->orderBy(array("username" => "ASC")) //->setFirstResult(0) //->setMaxResults(20) ; $lps = $this->lps->matching($criteria);*/ /*return $this->lps->filter( function($entry) use ($idsToFilter) { return $entry->getId() == 1; });*/ } /** * Returns the list of classes for the user. * * @return string */ public function getCompleteNameWithClasses() { $classSubscription = $this->getClasses(); $classList = []; /** @var UsergroupRelUser $subscription */ foreach ($classSubscription as $subscription) { $class = $subscription->getUsergroup(); $classList[] = $class->getName(); } $classString = !empty($classList) ? ' ['.implode(', ', $classList).']' : null; return \UserManager::formatUserFullName($this).$classString; } /** * Set lastname. * * @return User */ public function setLastname(string $lastname): self { $this->lastname = $lastname; return $this; } /** * Set firstname. * * @return User */ public function setFirstname(string $firstname): self { $this->firstname = $firstname; return $this; } public function getPassword() { return $this->password; } public function setPassword(string $password): self { $this->password = $password; return $this; } /** * Set authSource. * * @param string $authSource * * @return User */ public function setAuthSource($authSource) { $this->authSource = $authSource; return $this; } /** * Get authSource. * * @return string */ public function getAuthSource() { return $this->authSource; } /** * Set email. * * @param string $email * * @return User */ public function setEmail($email) { $this->email = $email; return $this; } /** * Get email. * * @return string */ public function getEmail() { return $this->email; } /** * Set status. * * @return User */ public function setStatus(int $status) { $this->status = $status; return $this; } /** * Get status. * * @return int */ public function getStatus() { return (int) $this->status; } /** * Set officialCode. * * @param string $officialCode * * @return User */ public function setOfficialCode($officialCode) { $this->officialCode = $officialCode; return $this; } /** * Get officialCode. * * @return string */ public function getOfficialCode() { return $this->officialCode; } /** * Set phone. * * @param string $phone * * @return User */ public function setPhone($phone) { $this->phone = $phone; return $this; } /** * Get phone. * * @return string */ public function getPhone() { return $this->phone; } /** * Set address. * * @param string $address * * @return User */ public function setAddress($address) { $this->address = $address; return $this; } /** * Get address. * * @return string */ public function getAddress() { return $this->address; } /** * Set creatorId. * * @param int $creatorId * * @return User */ public function setCreatorId($creatorId) { $this->creatorId = $creatorId; return $this; } /** * Get creatorId. * * @return int */ public function getCreatorId() { return $this->creatorId; } /** * Set competences. * * @param string $competences * * @return User */ public function setCompetences($competences) { $this->competences = $competences; return $this; } /** * Get competences. * * @return string */ public function getCompetences() { return $this->competences; } /** * Set diplomas. * * @param string $diplomas * * @return User */ public function setDiplomas($diplomas) { $this->diplomas = $diplomas; return $this; } /** * Get diplomas. * * @return string */ public function getDiplomas() { return $this->diplomas; } /** * Set openarea. * * @param string $openarea * * @return User */ public function setOpenarea($openarea) { $this->openarea = $openarea; return $this; } /** * Get openarea. * * @return string */ public function getOpenarea() { return $this->openarea; } /** * Set teach. * * @param string $teach * * @return User */ public function setTeach($teach) { $this->teach = $teach; return $this; } /** * Get teach. * * @return string */ public function getTeach() { return $this->teach; } /** * Set productions. * * @param string $productions * * @return User */ public function setProductions($productions) { $this->productions = $productions; return $this; } /** * Get productions. * * @return string */ public function getProductions() { return $this->productions; } /** * Set language. * * @param string $language * * @return User */ public function setLanguage($language) { $this->language = $language; return $this; } /** * Get language. * * @return string */ public function getLanguage() { return $this->language; } /** * Set registrationDate. * * @param \DateTime $registrationDate * * @return User */ public function setRegistrationDate($registrationDate) { $this->registrationDate = $registrationDate; return $this; } /** * Get registrationDate. * * @return \DateTime */ public function getRegistrationDate() { return $this->registrationDate; } /** * Set expirationDate. * * @param \DateTime $expirationDate * * @return User */ public function setExpirationDate($expirationDate) { $this->expirationDate = $expirationDate; return $this; } /** * Get expirationDate. * * @return \DateTime */ public function getExpirationDate() { return $this->expirationDate; } /** * Set active. * * @param bool $active * * @return User */ public function setActive($active) { $this->active = $active; return $this; } /** * Get active. * * @return bool */ public function getActive() { return $this->active; } /** * Set openid. * * @param string $openid * * @return User */ public function setOpenid($openid) { $this->openid = $openid; return $this; } /** * Get openid. * * @return string */ public function getOpenid() { return $this->openid; } /** * Set theme. * * @param string $theme * * @return User */ public function setTheme($theme) { $this->theme = $theme; return $this; } /** * Get theme. * * @return string */ public function getTheme() { return $this->theme; } /** * Set hrDeptId. * * @param int $hrDeptId * * @return User */ public function setHrDeptId($hrDeptId) { $this->hrDeptId = $hrDeptId; return $this; } /** * Get hrDeptId. * * @return int */ public function getHrDeptId() { return $this->hrDeptId; } /** * @return \DateTime */ public function getMemberSince() { return $this->registrationDate; } /** * @return bool */ public function isOnline() { return false; } /** * @return int */ public function getIdentifier() { return $this->getId(); } /** * @return string */ public function getSlug() { return $this->getUsername(); } /** * @param string $slug * * @return User */ public function setSlug($slug) { return $this->setUsername($slug); } public function setUsername($username): self { $this->username = $username; return $this; } public function setUsernameCanonical($usernameCanonical) { $this->usernameCanonical = $usernameCanonical; return $this; } public function setEmailCanonical($emailCanonical): self { $this->emailCanonical = $emailCanonical; return $this; } /** * Set lastLogin. * * @param \DateTime $lastLogin */ public function setLastLogin(\DateTime $lastLogin = null): self { $this->lastLogin = $lastLogin; return $this; } /** * Get lastLogin. * * @return \DateTime */ public function getLastLogin() { return $this->lastLogin; } /** * Get sessionCourseSubscription. * * @return ArrayCollection */ public function getSessionCourseSubscriptions() { return $this->sessionCourseSubscriptions; } public function setSessionCourseSubscriptions(array $value): self { $this->sessionCourseSubscriptions = $value; return $this; } /** * @return string */ public function getConfirmationToken() { return $this->confirmationToken; } /** * @param string $confirmationToken */ public function setConfirmationToken($confirmationToken): self { $this->confirmationToken = $confirmationToken; return $this; } /** * @return \DateTime */ public function getPasswordRequestedAt() { return $this->passwordRequestedAt; } /*public function isPasswordRequestNonExpired($ttl) { return $this->getPasswordRequestedAt() instanceof \DateTime && $this->getPasswordRequestedAt()->getTimestamp() + $ttl > time(); }*/ public function getUsername(): string { return (string) $this->username; } public function getPlainPassword(): ?string { return $this->plainPassword; } public function setPlainPassword(string $password): self { $this->plainPassword = $password; // forces the object to look "dirty" to Doctrine. Avoids // Doctrine *not* saving this entity, if only plainPassword changes $this->password = null; return $this; } /** * Returns the expiration date. * * @return \DateTime|null */ public function getExpiresAt() { return $this->expiresAt; } /** * Returns the credentials expiration date. * * @return \DateTime */ public function getCredentialsExpireAt() { return $this->credentialsExpireAt; } /** * Sets the credentials expiration date. */ public function setCredentialsExpireAt(\DateTime $date = null): self { $this->credentialsExpireAt = $date; return $this; } public function addGroup($group): self { if (!$this->getGroups()->contains($group)) { $this->getGroups()->add($group); } return $this; } /** * Sets the user groups. * * @param array $groups */ public function setGroups($groups): self { foreach ($groups as $group) { $this->addGroup($group); } return $this; } public function getFullname(): string { return sprintf('%s %s', $this->getFirstname(), $this->getLastname()); } public function getGroups() { return $this->groups; } public function getGroupNames(): array { $names = []; foreach ($this->getGroups() as $group) { $names[] = $group->getName(); } return $names; } /** * @param string $name */ public function hasGroup($name): bool { return in_array($name, $this->getGroupNames()); } public function removeGroup($group): self { if ($this->getGroups()->contains($group)) { $this->getGroups()->removeElement($group); } return $this; } /** * @param string $role */ public function addRole($role): self { $role = strtoupper($role); if ($role === static::ROLE_DEFAULT) { return $this; } if (!in_array($role, $this->roles, true)) { $this->roles[] = $role; } return $this; } /** * Returns the user roles. * * @return array The roles */ public function getRoles() { $roles = $this->roles; foreach ($this->getGroups() as $group) { $roles = array_merge($roles, $group->getRoles()); } // we need to make sure to have at least one role $roles[] = 'ROLE_USER'; return array_unique($roles); } public function isAccountNonExpired() { /*if (true === $this->expired) { return false; } if (null !== $this->expiresAt && $this->expiresAt->getTimestamp() < time()) { return false; }*/ return true; } public function isAccountNonLocked() { return true; //return !$this->locked; } public function isCredentialsNonExpired() { /*if (true === $this->credentialsExpired) { return false; } if (null !== $this->credentialsExpireAt && $this->credentialsExpireAt->getTimestamp() < time()) { return false; }*/ return true; } /** * @return bool */ public function getCredentialsExpired() { return $this->credentialsExpired; } /** * @param bool $boolean */ public function setCredentialsExpired($boolean): self { $this->credentialsExpired = $boolean; return $this; } /** * @param $boolean */ public function setEnabled($boolean): self { $this->enabled = (bool) $boolean; return $this; } /** * @return bool */ public function getExpired() { return $this->expired; } /** * Sets this user to expired. * * @param bool $boolean */ public function setExpired($boolean): self { $this->expired = (bool) $boolean; return $this; } public function setExpiresAt(\DateTime $date): self { $this->expiresAt = $date; return $this; } public function getLocked(): bool { return $this->locked; } /** * @param $boolean */ public function setLocked($boolean): self { $this->locked = $boolean; return $this; } public function setRoles(array $roles): self { $this->roles = []; foreach ($roles as $role) { $this->addRole($role); } return $this; } /** * Get achievedSkills. * * @return ArrayCollection */ public function getAchievedSkills() { return $this->achievedSkills; } /** * @param string[] $value */ public function setAchievedSkills(array $value): self { $this->achievedSkills = $value; return $this; } /** * Check if the user has the skill. * * @param Skill $skill The skill */ public function hasSkill(Skill $skill): bool { $achievedSkills = $this->getAchievedSkills(); foreach ($achievedSkills as $userSkill) { if ($userSkill->getSkill()->getId() !== $skill->getId()) { continue; } return true; } } /** * @return bool */ public function isProfileCompleted() { return $this->profileCompleted; } public function setProfileCompleted($profileCompleted): self { $this->profileCompleted = $profileCompleted; return $this; } /** * Sets the AccessUrl for the current user in memory. */ public function setCurrentUrl(AccessUrl $url): self { $urlList = $this->getPortals(); /** @var AccessUrlRelUser $item */ foreach ($urlList as $item) { if ($item->getUrl()->getId() === $url->getId()) { $this->currentUrl = $url; break; } } return $this; } /** * @return AccessUrl */ public function getCurrentUrl() { return $this->currentUrl; } /** * Get sessionAsGeneralCoach. * * @return ArrayCollection */ public function getSessionAsGeneralCoach() { return $this->sessionAsGeneralCoach; } /** * Get sessionAsGeneralCoach. * * @param ArrayCollection $value */ public function setSessionAsGeneralCoach($value): self { $this->sessionAsGeneralCoach = $value; return $this; } public function getCommentedUserSkills() { return $this->commentedUserSkills; } /** * @return User */ public function setCommentedUserSkills(array $commentedUserSkills): self { $this->commentedUserSkills = $commentedUserSkills; return $this; } /** * @return bool */ public function isEqualTo(UserInterface $user) { if ($this->password !== $user->getPassword()) { return false; } if ($this->salt !== $user->getSalt()) { return false; } if ($this->username !== $user->getUsername()) { return false; } return true; } /** * Get sentMessages. * * @return ArrayCollection */ public function getSentMessages() { return $this->sentMessages; } /** * Get receivedMessages. * * @return ArrayCollection */ public function getReceivedMessages() { return $this->receivedMessages; } /** * @param int $lastId Optional. The ID of the last received message */ public function getUnreadReceivedMessages($lastId = 0): ArrayCollection { $criteria = Criteria::create(); $criteria->where( Criteria::expr()->eq('msgStatus', MESSAGE_STATUS_UNREAD) ); if ($lastId > 0) { $criteria->andWhere( Criteria::expr()->gt('id', (int) $lastId) ); } $criteria->orderBy(['sendDate' => Criteria::DESC]); return $this->receivedMessages->matching($criteria); } public function getCourseGroupsAsMember(): Collection { return $this->courseGroupsAsMember; } public function getCourseGroupsAsTutor(): Collection { return $this->courseGroupsAsTutor; } public function getCourseGroupsAsMemberFromCourse(Course $course): ArrayCollection { $criteria = Criteria::create(); $criteria->where( Criteria::expr()->eq('cId', $course) ); return $this->courseGroupsAsMember->matching($criteria); } public function getFirstname() { return $this->firstname; } public function getLastname() { return $this->lastname; } public function eraseCredentials() { $this->plainPassword = null; } public function hasRole($role) { return in_array(strtoupper($role), $this->getRoles(), true); } public function isSuperAdmin() { return $this->hasRole('ROLE_SUPER_ADMIN'); } public function isUser(UserInterface $user = null) { return null !== $user && $this->getId() === $user->getId(); } public function removeRole($role) { if (false !== $key = array_search(strtoupper($role), $this->roles, true)) { unset($this->roles[$key]); $this->roles = array_values($this->roles); } return $this; } public function getUsernameCanonical() { return $this->usernameCanonical; } public function getEmailCanonical() { return $this->emailCanonical; } /** * @param string $timezone * * @return User */ public function setTimezone($timezone) { $this->timezone = $timezone; return $this; } /** * @return string */ public function getTimezone() { return $this->timezone; } /** * @param string $locale * * @return User */ public function setLocale($locale) { $this->locale = $locale; return $this; } /** * @return string */ public function getLocale() { return $this->locale; } /** * @return string */ public function getApiToken() { return $this->apiToken; } /** * @param string $apiToken * * @return User */ public function setApiToken($apiToken) { $this->apiToken = $apiToken; return $this; } public function getWebsite(): ?string { return $this->website; } public function setWebsite(string $website): self { $this->website = $website; return $this; } public function getBiography(): ?string { return $this->biography; } public function setBiography(string $biography): self { $this->biography = $biography; return $this; } /** * @param \DateTime $dateOfBirth */ public function setDateOfBirth($dateOfBirth): self { $this->dateOfBirth = $dateOfBirth; return $this; } /** * @return \DateTime */ public function getDateOfBirth() { return $this->dateOfBirth; } public function getCourseGroupsAsTutorFromCourse(Course $course): ArrayCollection { $criteria = Criteria::create(); $criteria->where( Criteria::expr()->eq('cId', $course->getId()) ); return $this->courseGroupsAsTutor->matching($criteria); } /** * Retreives this user's related sessions. * * @param int $relationType \Chamilo\CoreBundle\Entity\SessionRelUser::relationTypeList key * * @return Session[] */ public function getSessions($relationType) { $sessions = []; foreach ($this->sessions as $sessionRelUser) { if ($sessionRelUser->getRelationType() == $relationType) { $sessions[] = $sessionRelUser->getSession(); } } return $sessions; } /** * Retreives this user's related student sessions. * * @return Session[] */ public function getStudentSessions() { return $this->getSessions(0); } /** * Retreives this user's related DRH sessions. * * @return Session[] */ public function getDRHSessions() { return $this->getSessions(1); } /** * Get this user's related accessible sessions of a type, student by default. * * @param int $relationType \Chamilo\CoreBundle\Entity\SessionRelUser::relationTypeList key * * @return Session[] */ public function getCurrentlyAccessibleSessions($relationType = 0) { $sessions = []; foreach ($this->getSessions($relationType) as $session) { if ($session->isCurrentlyAccessible()) { $sessions[] = $session; } } return $sessions; } /** * Find the largest sort value in a given UserCourseCategory * This method is used when we are moving a course to a different category * and also when a user subscribes to courses (the new course is added at the end of the main category). * * Used to be implemented in global function \api_max_sort_value. * Reimplemented using the ORM cache. * * @param UserCourseCategory|null $userCourseCategory the user_course_category * * @return int|mixed */ public function getMaxSortValue($userCourseCategory = null) { $categoryCourses = $this->courses->matching( Criteria::create() ->where(Criteria::expr()->neq('relationType', COURSE_RELATION_TYPE_RRHH)) ->andWhere(Criteria::expr()->eq('userCourseCat', $userCourseCategory)) ); return $categoryCourses->isEmpty() ? 0 : max( $categoryCourses->map( /** @var CourseRelUser $courseRelUser */ function ($courseRelUser) { return $courseRelUser->getSort(); } )->toArray() ); } }