Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/src/ApiBundle/GraphQL/Resolver/CourseResolver.php

136 lines
3.8 KiB

<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\ApiBundle\GraphQL\Resolver;
use Chamilo\ApiBundle\GraphQL\ApiGraphQLTrait;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
use GraphQL\Type\Definition\ResolveInfo;
use Overblog\GraphQLBundle\Definition\Argument;
use Overblog\GraphQLBundle\Definition\Resolver\ResolverInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
/**
* Class CourseResolver.
*
* @package Chamilo\ApiBundle\GraphQL\Resolver
*/
class CourseResolver implements ResolverInterface, ContainerAwareInterface
{
use ApiGraphQLTrait;
/**
* @param Course $course
* @param Argument $args
* @param ResolveInfo $info
* @param \ArrayObject $context
*/
public function __invoke(Course $course, Argument $args, ResolveInfo $info, \ArrayObject $context)
{
$context->offsetSet('course', $course);
$method = 'resolve'.ucfirst($info->fieldName);
if (method_exists($this, $method)) {
return $this->$method($course, $args, $context);
}
$method = 'get'.ucfirst($info->fieldName);
if (method_exists($course, $method)) {
return $course->$method();
}
return null;
}
/**
* @param Course $course
* @param Argument $args
*
* @return null|string
*/
public function resolvePicture(Course $course, Argument $args)
{
return \CourseManager::getPicturePath($course, $args['fullSize']);
}
/**
* @param Course $course
* @param Argument $args
* @param \ArrayObject $context
*
* @return array
*/
public function resolveTeachers(Course $course, Argument $args, \ArrayObject $context)
{
if ($context->offsetExists('session')) {
/** @var Session $session */
$session = $context->offsetGet('session');
if ($session) {
$coaches = [];
$coachSubscriptions = $session->getUserCourseSubscriptionsByStatus($course, Session::COACH);
/** @var SessionRelCourseRelUser $coachSubscription */
foreach ($coachSubscriptions as $coachSubscription) {
$coaches[] = $coachSubscription->getUser();
}
return $coaches;
}
}
$courseRepo = $this->em->getRepository('ChamiloCoreBundle:Course');
$teachers = $courseRepo
->getSubscribedTeachers($course)
->getQuery()
->getResult();
return $teachers;
}
/**
* @param Course $course
* @param Argument $args
* @param \ArrayObject $context
*
* @return array
*/
public function resolveTools(Course $course, Argument $args, \ArrayObject $context)
{
$sessionId = 0;
if ($context->offsetExists('session')) {
/** @var Session $session */
$session = $context->offsetGet('session');
$sessionId = $session->getId();
}
$tools = \CourseHome::get_tools_category(TOOL_STUDENT_VIEW, $course->getId(), $sessionId);
$tools = array_filter($tools, function ($tool) {
switch ($tool['name']) {
case TOOL_COURSE_DESCRIPTION:
case TOOL_ANNOUNCEMENT:
return true;
default:
return false;
}
});
$ids = array_column($tools, 'iid');
$qb = $this->em->createQueryBuilder();
$qb
->select('t')
->from('ChamiloCourseBundle:CTool', 't')
->where(
$qb->expr()->in('t.id', $ids)
);
return $qb->getQuery()->getResult();
}
}