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

174 lines
5.0 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 Chamilo\CourseBundle\Entity\CAnnouncement;
use Chamilo\CourseBundle\Entity\CItemProperty;
use Chamilo\CourseBundle\Entity\CTool;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria;
use Overblog\GraphQLBundle\Definition\Argument;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
/**
* Class CourseResolver.
*
* @package Chamilo\ApiBundle\GraphQL\Resolver
*/
class CourseResolver implements ContainerAwareInterface
{
use ApiGraphQLTrait;
/**
* @param Course $course
* @param Argument $args
*
* @return null|string
*/
public function getPicture(Course $course, Argument $args)
{
return \CourseManager::getPicturePath($course, $args['fullSize']);
}
/**
* @param Course $course
* @param Argument $args
* @param \ArrayObject $context
*
* @return array
*/
public function getTeachers(Course $course, Argument $args, \ArrayObject $context): array
{
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 ArrayCollection
*/
public function getTools(Course $course, Argument $args, \ArrayObject $context): ArrayCollection
{
$session = null;
if ($context->offsetExists('session')) {
/** @var Session $session */
$session = $context->offsetGet('session');
}
if (empty($args['type'])) {
return $course->getTools($session);
}
$criteria = Criteria::create()
->where(
Criteria::expr()->eq('name', $args['type'])
);
return $course->getTools($session)->matching($criteria);
}
/**
* @param CTool $tool
* @param \ArrayObject $context
*
* @return array
*/
public function getDescriptions(Ctool $tool, \ArrayObject $context)
{
/** @var Session $session */
$session = $context->offsetGet('session');
$cd = new \CourseDescription();
$cd->set_course_id($tool->getCourse()->getId());
if ($session) {
$cd->set_session_id($session->getId());
}
$descriptions = $cd->get_description_data();
if (empty($descriptions)) {
return [];
}
$qb = $this->em->createQueryBuilder();
$qb
->select('d')
->from('ChamiloCourseBundle:CCourseDescription', 'd')
->where(
$qb->expr()->in('d.id', array_keys($descriptions['descriptions']))
);
return $qb->getQuery()->getResult();
}
/**
* @param CTool $tool
* @param \ArrayObject $context
*
* @return array
*/
public function getAnnouncements(CTool $tool, \ArrayObject $context): array
{
$announcementManager = $this->container->get('chamilo_course.entity.manager.announcement_manager');
$announcementsInfo = $announcementManager->getAnnouncements(
$this->getCurrentUser(),
$tool->getCourse(),
null,
$context->offsetGet('session'),
api_get_course_setting('allow_user_edit_announcement') === 'true',
api_get_configuration_value('hide_base_course_announcements_in_group') === true
);
$announcements = [];
for ($z = 0; $z < count($announcementsInfo); $z += 2) {
/** @var CAnnouncement $a */
$a = $announcementsInfo[$z];
/** @var CItemProperty $ip */
$ip = $announcementsInfo[$z + 1];
$announcement = new \stdClass();
$announcement->id = $a->getIid();
$announcement->title = $a->getTitle();
$announcement->content = $a->getContent();
$announcement->author = $ip->getInsertUser();
$announcement->lastUpdateDate = $ip->getLasteditDate();
$announcements[] = $announcement;
}
return $announcements;
}
}