/**
  * @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');
                     }
                 }
             }*/
 }
Beispiel #2
0
 /**
  * @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();
 }
Beispiel #5
0
 /**
  * @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;
 }
Beispiel #6
0
 /**
  * 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'));
     }
 }
Beispiel #7
0
 /**
  * @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')));
     //}
 }
Beispiel #8
0
 /**
  * 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;
             }
         }
     }
 }
Beispiel #11
0
/**
 * 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();
 }
Beispiel #13
0
 /**
  * @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;
 }