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/CourseBundle/Repository/CForumForumRepository.php

109 lines
3.1 KiB

<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CourseBundle\Repository;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Chamilo\CourseBundle\Entity\CForumCategory;
use Chamilo\CourseBundle\Entity\CForumForum;
use Chamilo\CourseBundle\Entity\CItemProperty;
final class CForumForumRepository extends ResourceRepository
{
/**
* @param bool $isAllowedToEdit
* @param bool $includeGroupsForums
*
* @todo Remove api_get_session_condition
*/
public function findAllInCourseByCategory(
$isAllowedToEdit,
CForumCategory $category,
Course $course,
Session $session = null,
$includeGroupsForums = true
): array {
$conditionSession = api_get_session_condition(
$session ? $session->getId() : 0,
true,
true,
'f.sessionId'
);
$conditionVisibility = $isAllowedToEdit ? 'ip.visibility != 2' : 'ip.visibility = 1';
$conditionGroups = $includeGroupsForums
? 'AND (f.forumOfGroup = 0 OR f.forumOfGroup IS NULL)'
: '';
$dql = "SELECT f, ip
FROM ChamiloCourseBundle:CForumForum AS f
INNER JOIN ChamiloCourseBundle:CItemProperty AS ip
WITH (f.iid = ip.ref AND f.cId = ip.course)
WHERE
f.forumCategory = :category AND
ip.tool = :tool AND
f.cId = :course
$conditionSession AND
$conditionVisibility
$conditionGroups
ORDER BY f.forumOrder ASC";
$result = $this
->_em
->createQuery($dql)
->setParameters(['category' => $category, 'course' => $course, 'tool' => TOOL_FORUM])
->getResult();
$forums = [];
for ($i = 0; $i < count($result); $i += 2) {
/** @var CForumForum $f */
$f = $result[$i];
/** @var CItemProperty $ip */
$ip = $result[$i + 1];
$f->setItemProperty($ip);
$forums[] = $f;
}
return $forums;
}
/**
* @param int $id
*
* @return CForumForum
*/
public function findOneInCourse($id, Course $course)
{
$dql = 'SELECT f, ip
FROM ChamiloCourseBundle:CForumForum AS f
INNER JOIN ChamiloCourseBundle:CItemProperty AS ip
WITH (f.iid = ip.ref AND f.cId = ip.course)
WHERE
f.iid = :id AND
ip.tool = :tool AND
f.cId = :course AND
ip.visibility != 2';
$result = $this
->_em
->createQuery($dql)
->setParameters(['id' => (int) $id, 'course' => $course, 'tool' => TOOL_FORUM])
->getResult();
if (empty($result)) {
return null;
}
/** @var CForumForum $f */
$f = $result[0];
/** @var CItemProperty $ip */
$ip = $result[1];
$f->setItemProperty($ip);
return $f;
}
}