/** * @param $params * @return null|soap_fault */ public static function WSSessionGetDetailsByUser($params) { global $debug; if ($debug) { error_log('WSUserSubscribedInCourse'); error_log('Params ' . print_r($params, 1)); } if (!WSHelperVerifyKey($params)) { return return_error(WS_ERROR_SECRET_KEY); } $result = return_error(WS_ERROR_NOT_FOUND_RESULT); // Check params if (is_array($params) && !empty($params['session_id']) && !empty($params['user_id'])) { $userId = UserManager::get_user_id_from_original_id($params['user_id'], $params['user_field']); $sessionId = (int) $params['session_id']; // Check if user exists if (UserManager::is_user_id_valid($userId) && SessionManager::isValidId($sessionId)) { // Check if student is already subscribed $plugin = AdvancedSubscriptionPlugin::create(); $isOpen = $plugin->isSessionOpen($sessionId); $status = $plugin->getQueueStatus($userId, $sessionId); $vacancy = $plugin->getVacancy($sessionId); $data = $plugin->getSessionDetails($sessionId); $isUserInTargetGroup = $plugin->isUserInTargetGroup($userId, $sessionId); if (!empty($data) && is_array($data)) { $data['status'] = $status; // Vacancy and queue status cases: if ($isOpen) { // Go to Course session $data['action_url'] = self::$plugin->getOpenSessionUrl($userId, $params); if (SessionManager::isUserSubscribedAsStudent($sessionId, $userId)) { $data['status'] = 10; } } else { if (!$isUserInTargetGroup) { $data['status'] = -2; } else { try { $isAllowed = self::$plugin->isAllowedToDoRequest($userId, $params); $data['message'] = self::$plugin->getStatusMessage($status, $isAllowed); } catch (\Exception $e) { $data['message'] = $e->getMessage(); } $params['action'] = 'subscribe'; $params['sessionId'] = intval($sessionId); $params['currentUserId'] = 0; // No needed $params['studentUserId'] = intval($userId); $params['queueId'] = 0; // No needed $params['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_START; if ($vacancy > 0) { // Check conditions if ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_NO_QUEUE) { // No in Queue, require queue subscription url action $data['action_url'] = self::$plugin->getTermsUrl($params); } elseif ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_APPROVED) { // send url action $data['action_url'] = self::$plugin->getSessionUrl($sessionId); } else { // In queue, output status message, no more info. } } else { if ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_APPROVED) { $data['action_url'] = self::$plugin->getSessionUrl($sessionId); } elseif ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_NO_QUEUE) { // in Queue or not, cannot be subscribed to session $data['action_url'] = self::$plugin->getTermsUrl($params); } else { // In queue, output status message, no more info. } } } } $result = $data; } else { // Return soap fault No result was found $result = return_error(WS_ERROR_NOT_FOUND_RESULT); } } else { // Return soap fault No result was found $result = return_error(WS_ERROR_NOT_FOUND_RESULT); } } else { // Return soap fault Not valid input params $result = return_error(WS_ERROR_INVALID_INPUT); } return $result; }
} } $courses[] = ['course' => $sessionCourse, 'description' => $courseDescription, 'tags' => $courseTags, 'objectives' => $courseObjectives, 'topics' => $courseTopics, 'coaches' => $coachesData, 'extra_fields' => $courseValues->getAllValuesForAnItem($sessionCourse->getId())]; } $sessionDates = SessionManager::parseSessionDates(['display_start_date' => $session->getDisplayStartDate(), 'display_end_date' => $session->getDisplayEndDate(), 'access_start_date' => $session->getAccessStartDate(), 'access_end_date' => $session->getAccessEndDate(), 'coach_access_start_date' => $session->getCoachAccessStartDate(), 'coach_access_end_date' => $session->getCoachAccessEndDate()]); $sessionRequirements = $sequenceResourceRepo->getRequirements($session->getId(), SequenceResource::SESSION_TYPE); $hasRequirements = false; foreach ($sessionRequirements as $sequence) { if (!empty($sequence['requirements'])) { $hasRequirements = true; break; } } $courseController = new CoursesController(); /* View */ //$template = new Template($session->getName(), true, true, false, true, false); $template = \Chamilo\CoreBundle\Framework\Container::getTwig(); $template->addGlobal('show_tutor', api_get_setting('session.show_session_coach') === 'true' ? true : false); $template->addGlobal('pageUrl', api_get_path(WEB_PATH) . "session/{$session->getId()}/about/"); $template->addGlobal('session', $session); $template->addGlobal('session_date', $sessionDates); $template->addGlobal('is_subscribed', SessionManager::isUserSubscribedAsStudent($session->getId(), api_get_user_id())); $template->addGlobal('subscribe_button', $courseController->getRegisteredInSessionButton($session->getId(), $session->getName(), $hasRequirements)); $template->addGlobal('courses', $courses); $template->addGlobal('essence', \Essence\Essence::instance()); $template->addGlobal('session_extra_fields', $sessionValues->getAllValuesForAnItem($session->getId(), true)); $template->addGlobal('has_requirements', $hasRequirements); $template->addGlobal('sequences', $sessionRequirements); //$templateFolder = api_get_configuration_value('default_template'); echo $template->render('@template_style/session/about.html.twig'); //$template->assign('header', $session->getName());
/** * Get the formated data for sessions block to be displayed on Session Catalog page * @param array $sessions The session list * @return array */ private function getFormatedSessionsBlock(array $sessions) { $extraFieldValue = new ExtraFieldValue('session'); $userId = api_get_user_id(); $sessionsBlocks = []; $entityManager = Database::getManager(); $sessionRelCourseRepo = $entityManager->getRepository('ChamiloCoreBundle:SessionRelCourse'); $extraFieldRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraField'); $extraFieldRelTagRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraFieldRelTag'); $tagsField = $extraFieldRepo->findOneBy(['extraFieldType' => Chamilo\CoreBundle\Entity\ExtraField::COURSE_FIELD_TYPE, 'variable' => 'tags']); /** @var \Chamilo\CoreBundle\Entity\Session $session */ foreach ($sessions as $session) { $sessionDates = SessionManager::parseSessionDates(['display_start_date' => $session->getDisplayStartDate(), 'display_end_date' => $session->getDisplayEndDate(), 'access_start_date' => $session->getAccessStartDate(), 'access_end_date' => $session->getAccessEndDate(), 'coach_access_start_date' => $session->getCoachAccessStartDate(), 'coach_access_end_date' => $session->getCoachAccessEndDate()]); $imageField = $extraFieldValue->get_values_by_handler_and_field_variable($session->getId(), 'image'); $sessionCourseTags = []; if (!is_null($tagsField)) { $sessionRelCourses = $sessionRelCourseRepo->findBy(['session' => $session]); foreach ($sessionRelCourses as $sessionRelCourse) { $courseTags = $extraFieldRelTagRepo->getTags($tagsField, $sessionRelCourse->getCourse()->getId()); foreach ($courseTags as $tag) { $sessionCourseTags[] = $tag->getTag(); } } } if (!empty($sessionCourseTags)) { $sessionCourseTags = array_unique($sessionCourseTags); } $repo = $entityManager->getRepository('ChamiloCoreBundle:SequenceResource'); $sequences = $repo->getRequirementsAndDependenciesWithinSequences($session->getId(), SequenceResource::SESSION_TYPE); $hasRequirements = false; foreach ($sequences['sequences'] as $sequence) { if (count($sequence['requirements']) === 0) { continue; } $hasRequirements = true; break; } $sessionsBlock = array('id' => $session->getId(), 'name' => $session->getName(), 'image' => isset($imageField['value']) ? $imageField['value'] : null, 'nbr_courses' => $session->getNbrCourses(), 'nbr_users' => $session->getNbrUsers(), 'coach_name' => $session->getGeneralCoach()->getCompleteName(), 'is_subscribed' => SessionManager::isUserSubscribedAsStudent($session->getId(), $userId), 'icon' => $this->getSessionIcon($session->getName()), 'date' => $sessionDates['display'], 'subscribe_button' => $this->getRegisteredInSessionButton($session->getId(), $session->getName(), $hasRequirements), 'show_description' => $session->getShowDescription(), 'tags' => $sessionCourseTags); $sessionsBlock = array_merge($sessionsBlock, $sequences); $sessionsBlocks[] = $sessionsBlock; } return $sessionsBlocks; }
api_not_allowed(true); } $userId = api_get_user_id(); $sessionId = isset($_GET['session_id']) ? intval($_GET['session_id']) : 0; $allowAccess = false; $userManager = UserManager::getManager(); $entityManager = Database::getManager(); $user = $userManager->findUserBy(['id' => $userId]); if (empty($sessionId)) { $trackCourseAccessRepository = $entityManager->getRepository('ChamiloCoreBundle:TrackECourseAccess'); $lastCourseAccess = $trackCourseAccessRepository->getLastAccessByUser($user); $lastSessionId = 0; if ($lastCourseAccess) { $lastSessionId = $lastCourseAccess->getSessionId(); } $UserIsSubscribedToSession = SessionManager::isUserSubscribedAsStudent($lastSessionId, $user->getId()); if (!empty($lastSessionId) && $UserIsSubscribedToSession) { $urlWithSession = api_get_self() . '?' . http_build_query(['session_id' => $lastCourseAccess->getSessionId()]); header("Location: {$urlWithSession}"); exit; } } $sessionCourseSubscriptions = $user->getSessionCourseSubscriptions(); $currentSession = $entityManager->find('ChamiloCoreBundle:Session', $sessionId); $sessionList = []; foreach ($sessionCourseSubscriptions as $subscription) { $session = $subscription->getSession(); if (array_key_exists($session->getId(), $sessionList)) { continue; } if ($currentSession && $currentSession->getId() === $session->getId()) {
<?php /* For licensing terms, see /license.txt */ /** * Validate requirements for a open session * @author Angel Fernando Quiroz Campos <*****@*****.**> * @package chamilo.plugin.advanced_subscription */ require_once __DIR__ . '/../config.php'; $plugin = AdvancedSubscriptionPlugin::create(); if (!isset($_GET['session_id'], $_GET['user_id'], $_GET['profile_completed'])) { die; } $sessionInfo = api_get_session_info($_GET['session_id']); $tpl = new Template($plugin->get_lang('plugin_title'), false, false, false, false, false); $tpl->assign('session', $sessionInfo); if (SessionManager::isUserSubscribedAsStudent($_GET['session_id'], $_GET['user_id'])) { $tpl->assign('is_subscribed', false); $tpl->assign('errorMessages', [sprintf($plugin->get_lang('YouAreAlreadySubscribedToSessionX'), $sessionInfo['name'])]); } else { if (!$plugin->isAllowedSubscribeToOpenSession($_GET)) { $tpl->assign('is_subscribed', false); $tpl->assign('errorMessages', $plugin->getErrorMessages()); } else { SessionManager::suscribe_users_to_session($_GET['session_id'], [$_GET['user_id']], SESSION_VISIBLE_READ_ONLY, false); $tpl->assign('is_subscribed', true); } } $content = $tpl->fetch('/advanced_subscription/views/open_session.tpl'); $tpl->assign('content', $content); $tpl->display_one_col_template();
/** * Get a url for subscribe a user in session * @param int $userId The user ID * @param array $params Params from WS * @return string */ public function getOpenSessionUrl($userId, $params) { $userIsSubscribed = SessionManager::isUserSubscribedAsStudent($params['session_id'], $userId); if ($userIsSubscribed) { return api_get_path(WEB_CODE_PATH) . 'session/index.php?session_id=' . intval($params['session_id']); } $params['secret_key'] = null; $params['user_id'] = null; $params['user_field'] = null; $params['is_connected'] = null; $urlParams = array_merge($params, ['user_id' => $userId]); $url = api_get_path(WEB_PLUGIN_PATH); $url .= 'advanced_subscription/src/open_session.php?'; $url .= http_build_query($urlParams); return 'javascript:void(window.open(\'' . $url . '\',\'AdvancedSubscriptionTerms\', \'toolbar=no,location=no,' . 'status=no,menubar=no,scrollbars=yes,resizable=yes,width=700px,' . 'height=600px\', \'100\' ))'; }