/** * @param UserRepository $repo * @param User $user * @param AccessUrl $url * @throws \Exception */ private function checkLimit($repo, User $user, AccessUrl $url) { /*$limit = $url->getLimitUsers(); if (!empty($limit)) { $count = $repo->getCountUsersByUrl($url); if ($count >= $limit) { api_warn_hosting_contact('hosting_limit_users', $limit); throw new \Exception('PortalUsersLimitReached'); } }*/ $groups = $user->getGroups(); /*if (in_array('ROLE_USER', $roles)) { $limit = $url->getLimitTeachers(); if (!empty($limit)) { $count = $repo->getCountTeachersByUrl($url); var_dump($count);exit; if ($count >= $limit) { api_warn_hosting_contact('hosting_limit_users', $limit); throw new \Exception('PortalUsersLimitReached'); } } }*/ }
/** * @author Sebastien Piraux <*****@*****.**> old code * @author Julio Montoya 2013 * @desc Record information for login event when an user identifies himself with username & password */ function event_login(User $user) { $userId = $user->getUserId(); $TABLETRACK_LOGIN = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $reallyNow = api_get_utc_datetime(); $sql = "INSERT INTO " . $TABLETRACK_LOGIN . " (login_user_id, login_ip, login_date, logout_date) VALUES\n ('" . $userId . "',\n '" . Database::escape_string(api_get_real_ip()) . "',\n '" . $reallyNow . "',\n '" . $reallyNow . "'\n )"; Database::query($sql); $roles = $user->getRoles(); // auto subscribe foreach ($roles as $role) { $userStatusParsed = 'student'; switch ($role) { case 'ROLE_SESSION_MANAGER': $userStatusParsed = 'sessionadmin'; break; case 'ROLE_TEACHER': $userStatusParsed = 'teacher'; break; case 'ROLE_RRHH': $userStatusParsed = 'DRH'; break; } $autoSubscribe = api_get_setting($userStatusParsed . '_autosubscribe'); if ($autoSubscribe) { $autoSubscribe = explode('|', $autoSubscribe); foreach ($autoSubscribe as $code) { if (CourseManager::course_exists($code)) { CourseManager::subscribe_user($userId, $code); } } } } }
/** * Get the last registered access by an user * @param \Chamilo\UserBundle\Entity\User $user The user * @return \ChamiloCoreBundle\TrackECourseAcess The access if exists. * Otherwise return null */ public function getLastAccessByUser(User $user) { if (empty($user)) { return null; } $lastAccess = $this->findBy(['userId' => $user->getId()], ['courseAccessId' => 'DESC'], 1); if (!empty($lastAccess)) { return $lastAccess[0]; } return null; }
/** * Get the last acquired skill by a user on course and/or session * @param User $user The user * @param Course $course The course * @param Session $session The session * @return Skill */ public function getLastByUser(User $user, Course $course = null, Session $session = null) { $qb = $this->createQueryBuilder('s'); $qb->innerJoin('ChamiloCoreBundle:SkillRelUser', 'su', Join::WITH, $qb->expr()->eq('s', 'su.skill'))->where($qb->expr()->eq('su.user', $user->getId())); if ($course) { $qb->andWhere($qb->expr()->eq('su.course', $course->getId())); } if ($session) { $qb->andWhere($qb->expr()->eq('su.session', $session->getId())); } $qb->setMaxResults(1)->orderBy('su.id', 'DESC'); return $qb->getQuery()->getOneOrNullResult(); }
/** * @param string $attribute * @param CGroupInfo $group * @param User $user * @return bool */ protected function isGranted($attribute, $group, $user = null) { // make sure there is a user object (i.e. that the user is logged in) if (!$user instanceof UserInterface) { return false; } if ($group == false) { return false; } $authChecker = $this->container->get('security.authorization_checker'); // Admins have access to everything if ($authChecker->isGranted('ROLE_ADMIN')) { return true; } $groupInfo = ['id' => $group->getId(), 'session_id' => 0, 'status' => $group->getStatus()]; // Legacy return \GroupManager::userHasAccessToBrowse($user->getId(), $groupInfo); switch ($attribute) { case self::VIEW: if (!$group->hasUserInCourse($user, $course)) { $user->addRole('ROLE_CURRENT_SESSION_COURSE_STUDENT'); return true; } break; case self::EDIT: case self::DELETE: if (!$session->hasCoachInCourseWithStatus($user, $course)) { $user->addRole('ROLE_CURRENT_SESSION_COURSE_TEACHER'); return true; } break; } dump("You don't have access to this group!!"); return false; }
/** * Creates the users/upload/X/my_files folder * @param User $user */ public function createMyFilesFolder(User $user) { $userId = $user->getUserId(); $path = \UserManager::get_user_picture_path_by_id($userId, 'system'); if (!$this->fs->exists($path['dir'] . 'my_files')) { $this->createFolders(array($path['dir'] . 'my_files')); } }
/** * @param User $user */ public static function sendResetEmail(User $user) { //if (null === $user->getConfirmationToken()) { $uniqueId = api_get_unique_id(); $user->setConfirmationToken($uniqueId); $user->setPasswordRequestedAt(new \DateTime()); Database::getManager()->persist($user); Database::getManager()->flush(); $url = api_get_path(WEB_CODE_PATH) . 'auth/reset.php?token=' . $uniqueId; $mailTemplate = new Template(null, false, false, false, false, false); $mailTemplate->assign('complete_user_name', $user->getCompleteName()); $mailTemplate->assign('link', $url); $mailLayout = $mailTemplate->get_template('mail/reset_password.tpl'); $mailSubject = get_lang('ResetPasswordInstructions'); $mailBody = $mailTemplate->fetch($mailLayout); api_mail_html($user->getCompleteName(), $user->getEmail(), $mailSubject, $mailBody); Display::addFlash(Display::return_message(get_lang('CheckYourEmailAndFollowInstructions'))); //} }
/** * Check if the $fromUser can comment the $toUser skill issue * @param Chamilo\UserBundle\Entity\User $fromUser * @param Chamilo\UserBundle\Entity\User $toUser * @return boolean */ public static function userCanAddFeedbackToUser(User $fromUser, User $toUser) { if (api_is_platform_admin()) { return true; } $entityManager = Database::getManager(); $userRepo = $entityManager->getRepository('ChamiloUserBundle:User'); $fromUserStatus = $fromUser->getStatus(); switch ($fromUserStatus) { case SESSIONADMIN: if (api_get_setting('allow_session_admins_to_manage_all_sessions') === 'true') { if ($toUser->getCreatorId() === $fromUser->getId()) { return true; } } $sessionAdmins = $userRepo->getSessionAdmins($toUser); foreach ($sessionAdmins as $sessionAdmin) { if ($sessionAdmin->getId() !== $fromUser->getId()) { continue; } return true; } break; case STUDENT_BOSS: $studentBosses = $userRepo->getStudentBosses($toUser); foreach ($studentBosses as $studentBoss) { if ($studentBoss->getId() !== $fromUser->getId()) { continue; } return true; } case DRH: return UserManager::is_user_followed_by_drh($toUser->getId(), $fromUser->getId()); } return false; }
/** * Get the student bosses for a user * @param User $user The user * @return array */ public function getStudentBosses(User $user) { $queryBuilder = $this->createQueryBuilder('u'); $queryBuilder->distinct()->innerJoin('ChamiloCoreBundle:UserRelUser', 'uu', Join::WITH, $queryBuilder->expr()->eq('u.id', 'uu.friendUserId'))->where($queryBuilder->expr()->eq('uu.relationType', USER_RELATION_TYPE_BOSS))->andWhere($queryBuilder->expr()->eq('uu.userId', $user->getId())); return $queryBuilder->getQuery()->getResult(); }
/** * @param $status * @param User $user * @param Course $course * @param Session $session */ private function addUserInCourse($status, User $user, Course $course, Session $session) { if ($session->isActive() && $user->getIsActive() && $course->isActive()) { if ($session->hasCourse($course)) { switch ($status) { case Session::DRH: if ($user->hasRole('ROLE_RRHH')) { $session->addUserInSession(Session::DRH, $user); } break; case Session::STUDENT: $session->addUserInSession(Session::STUDENT, $user); $session->addUserInCourse(Session::STUDENT, $user, $course); break; case Session::COACH: if ($user->hasRole('ROLE_TEACHER')) { $session->addUserInCourse(Session::COACH, $user, $course); } break; } } } }
/** * Checks a password to see wether it is OK to use. * @param string $password * @return true if the password is acceptable, false otherwise * Notes about what a password "OK to use" is: * 1. The password should be at least 5 characters long. * 2. Only English letters (uppercase or lowercase, it doesn't matter) and digits are allowed. * 3. The password should contain at least 3 letters. * 4. It should contain at least 2 digits. * 5. It should not contain 3 or more consequent (according to ASCII table) characters. */ function api_check_password($password) { global $app; $constraints = User::getPasswordConstraints(); $errors = $app['validator']->validateValue($password, $constraints); return count($errors) > 0 ? false : true; }
/** * Get the course template for a user * @param Course $course * @param User $user * @return ArrayCollection */ public function getCourseTemplates(Course $course, User $user) { $qb = $this->createQueryBuilder('t'); $qb->select('t', 'd.path')->innerJoin('ChamiloCoreBundle:Course', 'c', Join::WITH, $qb->expr()->eq('t.courseCode', 'c.code'))->innerJoin('ChamiloCourseBundle:CDocument', 'd', Join::WITH, $qb->expr()->eq('c.id', 'd.cId'))->where($qb->expr()->eq('d.iid', 't.refDoc'))->andWhere($qb->expr()->eq('c.id', $course->getId()))->andWhere($qb->expr()->eq('t.userId', $user->getId())); return $qb->getQuery()->getResult(); }
/** * @param User $user */ public static function remove_user_admin($user) { $user->removeRole('ROLE_ADMIN'); self::getManager()->updateUser($user, true); }
/** * @param User $insertUser * * @return $this */ public function setInsertUser(User $insertUser) { $this->insertUser = $insertUser; $this->lasteditUserId = $insertUser->getId(); return $this; }
/** * Get all users that are registered in the course. No matter the status * * @param \Chamilo\CoreBundle\Entity\CurriculumItem $course * @return bool */ public function isAllowToInsert(\Chamilo\CoreBundle\Entity\CurriculumItem $item, \Chamilo\UserBundle\Entity\User $user) { $max = $item->getMaxRepeat(); $count = $this->createQueryBuilder('a')->select('COUNT(a)')->where('a.itemId = :itemId')->andWhere('a.userId = :userId')->setParameters(array('itemId' => $item->getId(), 'userId' => $user->getUserId()))->getQuery()->getSingleScalarResult(); return $count <= $max ? true : false; }