Check session requirements on session catalog - refs BT#9893 #TMI

1.10.x
Angel Fernando Quiroz Campos 10 years ago
parent b74faed41f
commit 4957604803
  1. 62
      main/auth/courses_controller.php
  2. 33
      main/gradebook/lib/be/category.class.php
  3. 84
      main/inc/ajax/sequence.ajax.php
  4. 32
      main/template/default/sequence_resource/session_requirements.tpl
  5. 39
      src/Chamilo/CoreBundle/Entity/Repository/SequenceRepository.php

@ -491,15 +491,43 @@ class CoursesController
* Get a HTML button for subscribe to session
* @param int $sessionId The session ID
* @param string $sessionName The session name
* @param boolean Optional. Session autosubscription set. Default is false
* @param boolean $checkRequirements Optional.
* Whether the session has requirement. Default is false
* @return string The button HTML
*/
public function getRegisteredInSessionButton(
$sessionId,
$sessionName,
$catalogSessionAutoSubscriptionAllowed = false
$checkRequirements = false
)
{
if ($checkRequirements) {
$url = api_get_path(WEB_AJAX_PATH);
$url .= 'sequence.ajax.php?';
$url .= http_build_query([
'a' => 'get_requirements',
'id' => intval($sessionId),
'type' => SequenceResource::SESSION_TYPE,
'modal_size' => 'md'
]);
return Display::toolbarButton(
get_lang('CheckRequirements'),
$url,
'check-circle',
'primary',
['class' => 'btn-block ajax']
);
}
$catalogSessionAutoSubscriptionAllowed = false;
if (
api_get_setting('catalog_allow_session_auto_subscription') === 'true'
) {
$catalogSessionAutoSubscriptionAllowed = true;
}
$url = api_get_path(WEB_CODE_PATH);
if ($catalogSessionAutoSubscriptionAllowed) {
@ -517,13 +545,12 @@ class CoursesController
]);
}
$result = Display::url(
'<i class="fa fa-check-circle"></i> ' . get_lang('Subscribe'),
$result = Display::toolbarButton(
get_lang('Subscribe'),
$url,
array(
'class' => 'btn btn-large btn-primary s-c-subscription',
'data-session' => intval($sessionId)
)
'check-circle',
'primary',
['class' => 'btn-large']
);
$hook = HookResubscribe::create();
@ -657,7 +684,6 @@ class CoursesController
*/
private function getFormatedSessionsBlock(array $sessions)
{
$catalogSessionAutoSubscriptionAllowed = false;
$extraFieldValue = new ExtraFieldValue('session');
$userId = api_get_user_id();
$sessionsBlocks = [];
@ -672,10 +698,6 @@ class CoursesController
'variable' => 'tags'
]);
if (api_get_setting('catalog_allow_session_auto_subscription') === 'true') {
$catalogSessionAutoSubscriptionAllowed = true;
}
foreach ($sessions as $session) {
$sessionDates = SessionManager::parseSessionDates([
'display_start_date' => $session->getDisplayStartDate(),
@ -711,6 +733,12 @@ class CoursesController
$sessionCourseTags = array_unique($sessionCourseTags);
}
$repo = $entityManager->getRepository('ChamiloCoreBundle:SequenceResource');
$requirementAndDependencies = $repo->getRequirementAndDependencies(
$session->getId(),
SequenceResource::SESSION_TYPE
);
$sessionsBlock = array(
'id' => $session->getId(),
'name' => $session->getName(),
@ -724,18 +752,12 @@ class CoursesController
'subscribe_button' => $this->getRegisteredInSessionButton(
$session->getId(),
$session->getName(),
$catalogSessionAutoSubscriptionAllowed
!empty($requirementAndDependencies['requirements'])
),
'show_description' => $session->getShowDescription(),
'tags' => $sessionCourseTags
);
$repo = $entityManager->getRepository('ChamiloCoreBundle:SequenceResource');
$requirementAndDependencies = $repo->getRequirementAndDependencies(
$session->getId(),
SequenceResource::SESSION_TYPE
);
$sessionsBlock = array_merge($sessionsBlock, $requirementAndDependencies);
$sessionsBlocks[] = $sessionsBlock;
}

@ -507,6 +507,39 @@ class Category implements GradebookItem
return $categories;
}
/**
* Create a category object from a GradebookCategory entity
* @param Chamilo\CoreBundle\Entity\GradebookCategory $gradebookCategory
* The entity
* @return \Category
*/
public static function createCategoryObjectFromEntity(
Chamilo\CoreBundle\Entity\GradebookCategory $gradebookCategory
)
{
$category = new Category();
$category->set_id($gradebookCategory->getId());
$category->set_name($gradebookCategory->getName());
$category->set_description($gradebookCategory->getDescription());
$category->set_user_id($gradebookCategory->getUserId());
$category->set_course_code($gradebookCategory->getCourseCode());
$category->set_parent_id($gradebookCategory->getParentId());
$category->set_weight($gradebookCategory->getWeight());
$category->set_visible($gradebookCategory->getVisible());
$category->set_session_id($gradebookCategory->getSessionId());
$category->set_certificate_min_score(
$gradebookCategory->getCertifMinScore()
);
$category->set_grade_model_id($gradebookCategory->getGradeModelId());
$category->set_locked($gradebookCategory->getLocked());
$category->setGenerateCertificates(
$gradebookCategory->getGenerateCertificates()
);
$category->setIsRequirement($gradebookCategory->getIsRequirement());
return $category;
}
/**
* Insert this category into the database
*/

@ -283,4 +283,88 @@ switch ($action) {
break;
}
break;
case 'get_requirements':
$userId = api_get_user_id();
switch ($type) {
case SequenceResource::SESSION_TYPE:
$session = api_get_session_info($id);
$gradebookCategoryRepo = $em->getRepository(
'ChamiloCoreBundle:GradebookCategory'
);
$sessionRequirements = $repository->getRequirements(
$session['id'],
$type
);
$requiredGradebooks = [];
foreach ($sessionRequirements as $sessionRequired) {
$sessionsCourses = $sessionRequired->getCourses();
foreach ($sessionsCourses as $sessionCourse) {
$course = $sessionCourse->getCourse();
$gradebooks = $gradebookCategoryRepo->findBy([
'courseCode' => $course->getCode(),
'sessionId' => $sessionRequired->getId(),
'isRequirement' => true
]);
$requiredGradebooks = array_merge(
$requiredGradebooks,
$gradebooks
);
}
}
if (count($requiredGradebooks) === 0) {
break;
}
$data = [];
foreach ($requiredGradebooks as $gradebook) {
$category = Category::createCategoryObjectFromEntity(
$gradebook
);
if (array_key_exists($gradebook->getSessionId(), $data)) {
continue;
}
$data[$gradebook->getSessionId()] = [
'session' => api_get_session_info(
$gradebook->getSessionId()
),
'status' => Category::userFinishedCourse(
$userId,
$category
)
];
}
$courseController = new CoursesController();
$view = new Template(null, false, false, false, false, false);
$view->assign(
'subscribe_button',
$courseController->getRegisteredInSessionButton(
$session['id'],
$session['name'],
false
)
);
$view->assign('data', $data);
$template = $view->get_template(
'sequence_resource/session_requirements.tpl'
);
$view->display($template);
break;
}
break;
}

@ -0,0 +1,32 @@
<h2 class="page-header">{{ 'SessionRequirements'|get_lang }}</h2>
{% set finishedSessions = 0 %}
{% for item in data %}
{% if item.status %}
{% set finishedSessions = finishedSessions + 1 %}
<p class="bg-success" style="padding: 10px;">
<span class="pull-right">
<i class="fa fa-check"></i>
</span>
{{ item.session.name }}
</p>
{% else %}
<p class="bg-danger" style="padding: 10px;">
<span class="pull-right">
<i class="fa fa-exclamation-triangle"></i>
</span>
{{ item.session.name }}
</p>
{% endif %}
{% endfor %}
<hr>
<p>
{% if finishedSessions == data|length %}
{{ subscribe_button }}
{% else %}
{{ 'YouNeedCompleteAllSessions'|get_lang }}
{% endif %}
</p>

@ -103,4 +103,43 @@ class SequenceRepository extends EntityRepository
}
}
/**
* Get the requirements for a resource only
* @param int $resourceId The resource ID
* @param int $type The type of sequence resource
* @return array
*/
public function getRequirements($resourceId, $type)
{
$sequence = $this->findRequirementForResource($resourceId, $type);
$result = [];
if ($sequence && $sequence->hasGraph()) {
$graph = $sequence->getSequence()->getUnSerializeGraph();
$vertex = $graph->getVertex($resourceId);
$from = $vertex->getVerticesEdgeFrom();
foreach ($from as $subVertex) {
$vertexId = $subVertex->getId();
switch ($type) {
case SequenceResource::SESSION_TYPE:
$session = $this->getEntityManager()->getReference(
'ChamiloCoreBundle:Session',
$vertexId
);
if (empty($session)) {
break;
}
$result[] = $session;
break;
}
}
}
return $result;
}
}

Loading…
Cancel
Save