Exemplo n.º 1
0
 /**
  * This code is executed when a new session is created.
  *
  * new object : prePersist
  * edited object: preUpdate
  *
  * @param Session $session
  * @param LifecycleEventArgs $args
  *
  * @throws \Exception
  */
 public function prePersist(Session $session, LifecycleEventArgs $args)
 {
     /** @var AccessUrlRelSession $urlRelSession */
     $urlRelSession = $session->getUrls()->first();
     $url = $urlRelSession->getUrl();
     $repo = $args->getEntityManager()->getRepository('ChamiloCoreBundle:Session');
     $this->checkLimit($repo, $url);
 }
Exemplo n.º 2
0
 /**
  * @Given I have a session :arg1
  */
 public function iHaveASession($arg1)
 {
     $em = $this->getEntityManager();
     $entity = new Session();
     $entity->setName($arg1);
     $em->persist($entity);
     $em->flush();
 }
Exemplo n.º 3
0
 /**
  * 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();
 }
Exemplo n.º 4
0
 /**
  * Check if user has access to a session
  *
  * @param string $attribute
  * @param Session $session
  * @param User $user
  * @return bool
  */
 protected function isGranted($attribute, $session, $user = null)
 {
     // make sure there is a user object (i.e. that the user is logged in)
     if (!$user instanceof UserInterface) {
         return false;
     }
     // Checks if the current user was set up
     $course = $session->getCurrentCourse();
     if ($course == false) {
         error_log('sss');
         return false;
     }
     $authChecker = $this->container->get('security.authorization_checker');
     // Admins have access to everything
     if ($authChecker->isGranted('ROLE_ADMIN')) {
         return true;
     }
     if (!$session->isActive()) {
         return false;
     }
     switch ($attribute) {
         case self::VIEW:
             if (!$session->hasUserInCourse($user, $course)) {
                 $user->addRole('ROLE_CURRENT_SESSION_COURSE_STUDENT');
                 return true;
             }
             break;
         case self::EDIT:
         case self::DELETE:
             // General coach check
             $generalCoach = $session->getGeneralCoach();
             if ($generalCoach) {
                 $coachId = $generalCoach->getId();
                 $userId = $user->getId();
                 if ($coachId == $userId) {
                     $user->addRole('ROLE_CURRENT_SESSION_COURSE_TEACHER');
                     return true;
                 }
             }
             // Course session coach check
             if (!$session->hasCoachInCourseWithStatus($user, $course)) {
                 $user->addRole('ROLE_CURRENT_SESSION_COURSE_TEACHER');
                 return true;
             }
             break;
     }
     // User don't have access to the session
     return false;
 }
Exemplo n.º 5
0
 /**
  * Get session's courses ordered by position in session_rel_course
  * @param Session $session The session
  *
  * @return \Doctrine\ORM\QueryBuilder
  */
 public function getCoursesOrderedByPosition(Session $session)
 {
     $queryBuilder = $this->createQueryBuilder('s');
     $queryBuilder->select('DISTINCT c ')->innerJoin('s.courses', 'src')->innerJoin('ChamiloCoreBundle:Course', 'c', Join::WITH, 'src.course = c.id')->where($queryBuilder->expr()->eq('s.id', $session->getId()))->orderBy('src.position');
     return $queryBuilder->getQuery()->getResult();
 }
Exemplo n.º 6
0
 /**
  * Get the coaches for a course within a session
  * @param Session $session The session
  * @param Course $course The course
  * @return \Doctrine\ORM\QueryBuilder
  */
 public function getCoachesForSessionCourse(Session $session, Course $course)
 {
     $queryBuilder = $this->createQueryBuilder('u');
     $queryBuilder->select('u')->innerJoin('ChamiloCoreBundle:SessionRelCourseRelUser', 'scu', Join::WITH, 'scu.user = u')->where($queryBuilder->expr()->andX($queryBuilder->expr()->eq('scu.session', $session->getId()), $queryBuilder->expr()->eq('scu.course', $course->getId()), $queryBuilder->expr()->eq('scu.status', SessionRelCourseRelUser::STATUS_COURSE_COACH)));
     return $queryBuilder->getQuery()->getResult();
 }
Exemplo n.º 7
0
 /**
  * @inheritdoc
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builderData = $builder->getData();
     $builder->add('name', 'text')->add('general_coach', 'entity', array('class' => 'ChamiloUserBundle:User', 'property' => 'username'))->add('session_admin_id', 'entity', array('class' => 'ChamiloUserBundle:User', 'property' => 'username'))->add('visibility', 'choice', array('choices' => Session::getStatusList()))->add('session_category_id', 'entity', array('class' => 'ChamiloCoreBundle:SessionCategory', 'property' => 'name'))->add('promotion_id', 'entity', array('class' => 'ChamiloCoreBundle:Promotion', 'property' => 'name'))->add('display_start_date', 'sonata_type_datetime_picker')->add('display_end_date', 'sonata_type_datetime_picker')->add('access_start_date', 'sonata_type_datetime_picker')->add('access_end_date', 'sonata_type_datetime_picker')->add('coach_access_start_date', 'sonata_type_datetime_picker')->add('coach_access_end_date', 'sonata_type_datetime_picker')->add('save', 'submit', array('label' => 'Update'));
 }
Exemplo n.º 8
0
 /**
  * @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;
             }
         }
     }
 }
Exemplo n.º 9
0
 /**
  * Very important in order to save the related entities!
  * @param \Chamilo\CoreBundle\Entity\Session $session
  * @return mixed|void
  */
 public function preUpdate($session)
 {
     $session->setCourses($session->getCourses());
 }
Exemplo n.º 10
0
 /**
  * @param Session $session
  * @return $this
  */
 public function setCurrentSession(Session $session)
 {
     // If the session is registered in the course session list.
     if ($this->getSessions()->contains($session->getId())) {
         $this->currentSession = $session;
     }
     return $this;
 }
 /**
  * Get the user status for the session
  * @param int $userId The user ID
  * @param \Chamilo\CoreBundle\Entity\Session $session The session
  * @return string
  */
 private function getUserStatusForSession($userId, \Chamilo\CoreBundle\Entity\Session $session)
 {
     if (empty($userId)) {
         return 'NO';
     }
     $entityManager = Database::getManager();
     $scuRepo = $entityManager->getRepository('ChamiloCoreBundle:SessionRelCourseRelUser');
     $buySaleTable = Database::get_main_table(self::TABLE_SALE);
     // Check if user bought the course
     $sale = Database::select('COUNT(1) as qty', $buySaleTable, ['where' => ['user_id = ? AND product_type = ? AND product_id = ? AND status = ?' => [$userId, self::PRODUCT_TYPE_SESSION, $session->getId(), self::SALE_STATUS_PENDING]]], 'first');
     if ($sale['qty'] > 0) {
         return "TMP";
     }
     // Check if user is already subscribe to session
     $userSubscription = $scuRepo->findBy(['session' => $session, 'user' => $userId]);
     if (!empty($userSubscription)) {
         return 'YES';
     }
     return 'NO';
 }
Exemplo n.º 12
0
 /**
  * @param Session $session
  * @return $this
  */
 public function setCurrentSession(Session $session)
 {
     // If the session is registered in the course session list.
     /*if ($this->getSessions()->contains($session->getId())) {
           $this->currentSession = $session;
       }*/
     $list = $this->getSessions();
     /** @var SessionRelCourse $item */
     foreach ($list as $item) {
         if ($item->getSession()->getId() == $session->getId()) {
             $this->currentSession = $session;
             break;
         }
     }
     return $this;
 }
Exemplo n.º 13
0
 /**
  * Create a session
  * @author Carlos Vargas <*****@*****.**>, from existing code
  * @param   string  $name
  * @param   string  $startDate (YYYY-MM-DD hh:mm:ss)
  * @param   string  $endDate (YYYY-MM-DD hh:mm:ss)
  * @param   string  $displayStartDate (YYYY-MM-DD hh:mm:ss)
  * @param   string  $displayEndDate (YYYY-MM-DD hh:mm:ss)
  * @param   string  $coachStartDate (YYYY-MM-DD hh:mm:ss)
  * @param   string  $coachEndDate (YYYY-MM-DD hh:mm:ss)
  * @param   mixed   $coachId If integer, this is the session coach id, if string, the coach ID will be looked for from the user table
  * @param   integer $sessionCategoryId ID of the session category in which this session is registered
  * @param   integer $visibility Visibility after end date (0 = read-only, 1 = invisible, 2 = accessible)
  * @param   bool    $fixSessionNameIfExists
  * @param   string  $duration
  * @param   string  $description Optional. The session description
  * @param   int     $showDescription Optional. Whether show the session description
  * @param   array   $extraFields
  * @param   int     $sessionAdminId Optional. If this sessions was created by a session admin, assign it to him
  * @param boolean $sendSubscritionNotification Optional.
  *          Whether send a mail notification to users being subscribed
  * @todo use an array to replace all this parameters or use the model.lib.php ...
  * @return mixed       Session ID on success, error message otherwise
  * */
 public static function create_session($name, $startDate, $endDate, $displayStartDate, $displayEndDate, $coachStartDate, $coachEndDate, $coachId, $sessionCategoryId, $visibility = 1, $fixSessionNameIfExists = false, $duration = null, $description = null, $showDescription = 0, $extraFields = array(), $sessionAdminId = 0, $sendSubscritionNotification = false)
 {
     $em = Database::getManager();
     /*
             if (is_array($_configuration[$access_url_id]) &&
                 isset($_configuration[$access_url_id]['hosting_limit_sessions']) &&
                 $_configuration[$access_url_id]['hosting_limit_sessions'] > 0
             ) {
                 $num = self::count_sessions();
                 if ($num >= $_configuration[$access_url_id]['hosting_limit_sessions']) {
                     api_warn_hosting_contact('hosting_limit_sessions');
                     return get_lang('PortalSessionsLimitReached');
                 }
             }*/
     $name = trim($name);
     $sessionCategoryId = intval($sessionCategoryId);
     $visibility = intval($visibility);
     $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
     if (empty($name)) {
         $msg = get_lang('SessionNameIsRequired');
         return $msg;
     } elseif (empty($coachId)) {
         $msg = get_lang('CoachIsRequired');
         return $msg;
     } elseif (!empty($startDate) && !api_is_valid_date($startDate, 'Y-m-d H:i') && !api_is_valid_date($startDate, 'Y-m-d H:i:s')) {
         $msg = get_lang('InvalidStartDate');
         return $msg;
     } elseif (!empty($endDate) && !api_is_valid_date($endDate, 'Y-m-d H:i') && !api_is_valid_date($endDate, 'Y-m-d H:i:s')) {
         $msg = get_lang('InvalidEndDate');
         return $msg;
     } elseif (!empty($startDate) && !empty($endDate) && $startDate >= $endDate) {
         $msg = get_lang('StartDateShouldBeBeforeEndDate');
         return $msg;
     } else {
         $ready_to_create = false;
         if ($fixSessionNameIfExists) {
             $name = self::generateNextSessionName($name);
             if ($name) {
                 $ready_to_create = true;
             } else {
                 $msg = get_lang('SessionNameAlreadyExists');
                 return $msg;
             }
         } else {
             $rs = Database::query("SELECT 1 FROM {$tbl_session} WHERE name='" . $name . "'");
             if (Database::num_rows($rs)) {
                 $msg = get_lang('SessionNameAlreadyExists');
                 return $msg;
             }
             $ready_to_create = true;
         }
         if ($ready_to_create) {
             $sessionAdminId = !empty($sessionAdminId) ? $sessionAdminId : api_get_user_id();
             $session = new Session();
             $session->setName($name)->setVisibility($visibility)->setDescription($description)->setShowDescription($showDescription)->setSendSubscriptionNotification($sendSubscritionNotification)->setSessionAdminId($sessionAdminId);
             if (!empty($coachId)) {
                 $coach = UserManager::getManager()->find($coachId);
                 if ($coach) {
                     $session->setGeneralCoach($coach);
                 }
             }
             if (!empty($startDate)) {
                 $session->setAccessStartDate(new \DateTime($startDate));
             }
             if (!empty($endDate)) {
                 $session->setAccessEndDate(new \DateTime($endDate));
             }
             if (!empty($displayStartDate)) {
                 $session->setDisplayStartDate(new \DateTime($displayStartDate));
             }
             if (!empty($displayEndDate)) {
                 $session->setDisplayEndDate(new \DateTime($displayEndDate));
             }
             if (!empty($coachStartDate)) {
                 $session->setCoachAccessStartDate(new \DateTime($coachStartDate));
             }
             if (!empty($coachEndDate)) {
                 $session->setCoachAccessEndDate(new \DateTime($coachEndDate));
             }
             if (!empty($sessionCategoryId)) {
                 $session->setCategory($sessionCategoryId);
             }
             $duration = intval($duration);
             if (!empty($duration)) {
                 $session->setDuration($duration);
                 $session->setAccessStartDate(null);
                 $session->setAccessEndDate(null);
                 $session->setDisplayStartDate(null);
                 $session->setDisplayEndDate(null);
                 $session->setCoachAccessStartDate(null);
                 $session->setCoachAccessEndDate(null);
             } else {
                 $session->setDuration(0);
             }
             $url = $em->getRepository('ChamiloCoreBundle:AccessUrl')->find(api_get_current_access_url_id());
             $accessRelSession = new \Chamilo\CoreBundle\Entity\AccessUrlRelSession();
             $accessRelSession->setUrl($url);
             $session->addUrls($accessRelSession);
             $em->persist($session);
             $em->flush();
             $session_id = $session->getId();
             if (!empty($session_id)) {
                 $extraFields['item_id'] = $session_id;
                 $sessionFieldValue = new ExtraFieldValue('session');
                 $sessionFieldValue->saveFieldValues($extraFields);
                 /*
                  Sends a message to the user_id = 1
                 
                  $user_info = api_get_user_info(1);
                  $complete_name = $user_info['firstname'].' '.$user_info['lastname'];
                  $subject = api_get_setting('platform.site_name').' - '.get_lang('ANewSessionWasCreated');
                  $message = get_lang('ANewSessionWasCreated')." <br /> ".get_lang('NameOfTheSession').' : '.$name;
                  api_mail_html($complete_name, $user_info['email'], $subject, $message);
                 *
                 */
                 //Adding to the correct URL
                 $access_url_id = api_get_current_access_url_id();
                 UrlManager::add_session_to_url($session_id, $access_url_id);
                 // add event to system log
                 $user_id = api_get_user_id();
                 Event::addEvent(LOG_SESSION_CREATE, LOG_SESSION_ID, $session_id, api_get_utc_datetime(), $user_id);
             }
             return $session_id;
         }
     }
 }