parent
d0c1a68e27
commit
a191dac57e
@ -0,0 +1,418 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PluginBundle\Entity\StudentFollowUp; |
||||
|
||||
use Gedmo\Mapping\Annotation as Gedmo; |
||||
use Doctrine\ORM\Mapping as ORM; |
||||
|
||||
/** |
||||
* CarePost |
||||
* |
||||
* @ORM\Table(name="sfu_post") |
||||
* @ORM\Entity |
||||
* @Gedmo\Tree(type="nested") |
||||
*/ |
||||
class CarePost |
||||
{ |
||||
/** |
||||
* @var integer |
||||
* |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="title", type="string", length=255, nullable=false) |
||||
*/ |
||||
protected $title; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="content", type="text", nullable=true) |
||||
*/ |
||||
protected $content; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="external_care_id", type="integer", nullable=true) |
||||
*/ |
||||
protected $externalCareId; |
||||
|
||||
/** |
||||
* @ORM\ManyToOne(targetEntity="Chamilo\UserBundle\Entity\User", cascade={"persist"}) |
||||
* @ORM\JoinColumn(name="insert_user_id", referencedColumnName="id", nullable=false) |
||||
*/ |
||||
private $insertUser; |
||||
|
||||
/** |
||||
* @ORM\ManyToOne(targetEntity="Chamilo\UserBundle\Entity\User", cascade={"persist"}) |
||||
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) |
||||
*/ |
||||
private $user; |
||||
|
||||
/** |
||||
* @Gedmo\Timestampable(on="create") |
||||
* @ORM\Column(name="created_at", type="datetime") |
||||
*/ |
||||
protected $createdAt; |
||||
|
||||
/** |
||||
* @Gedmo\Timestampable(on="update") |
||||
* @ORM\Column(name="updated_at", type="datetime") |
||||
*/ |
||||
protected $updatedAt; |
||||
|
||||
/** |
||||
* @var bool |
||||
* |
||||
* @ORM\Column(name="private", type="boolean") |
||||
*/ |
||||
protected $private; |
||||
|
||||
/** |
||||
* @var bool |
||||
* |
||||
* @ORM\Column(name="external_source", type="boolean") |
||||
*/ |
||||
protected $externalSource; |
||||
|
||||
/** |
||||
* @var array |
||||
* |
||||
* @ORM\Column(name="tags", type="array") |
||||
*/ |
||||
protected $tags; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="attachment", type="string", length=255) |
||||
*/ |
||||
protected $attachment; |
||||
|
||||
/** |
||||
* @Gedmo\TreeParent |
||||
* @ORM\ManyToOne(targetEntity="CarePost", inversedBy="children") |
||||
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL") |
||||
*/ |
||||
private $parent; |
||||
|
||||
/** |
||||
* @ORM\OneToMany(targetEntity="CarePost", mappedBy="parent") |
||||
* @ORM\OrderBy({"lft" = "ASC"}) |
||||
*/ |
||||
private $children; |
||||
|
||||
/** |
||||
* @var integer |
||||
* @Gedmo\TreeLeft |
||||
* @ORM\Column(name="lft", type="integer", nullable=true, unique=false) |
||||
*/ |
||||
private $lft; |
||||
|
||||
/** |
||||
* @var integer |
||||
* @Gedmo\TreeRight |
||||
* @ORM\Column(name="rgt", type="integer", nullable=true, unique=false) |
||||
*/ |
||||
private $rgt; |
||||
|
||||
/** |
||||
* @var integer |
||||
* @Gedmo\TreeLevel |
||||
* @ORM\Column(name="lvl", type="integer", nullable=true, unique=false) |
||||
*/ |
||||
private $lvl; |
||||
|
||||
/** |
||||
* @var integer |
||||
* @Gedmo\TreeRoot |
||||
* @ORM\Column(name="root", type="integer", nullable=true, unique=false) |
||||
*/ |
||||
private $root; |
||||
|
||||
/** |
||||
* Project constructor. |
||||
*/ |
||||
public function __construct() |
||||
{ |
||||
$this->createdAt = new \DateTime(); |
||||
$this->attachment = ''; |
||||
} |
||||
|
||||
/** |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* @param int $id |
||||
* @return $this |
||||
*/ |
||||
public function setId($id) |
||||
{ |
||||
$this->id = $id; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getTitle() |
||||
{ |
||||
return $this->title; |
||||
} |
||||
|
||||
/** |
||||
* @param string $title |
||||
* @return CarePost |
||||
*/ |
||||
public function setTitle($title) |
||||
{ |
||||
$this->title = $title; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getContent() |
||||
{ |
||||
return $this->content; |
||||
} |
||||
|
||||
/** |
||||
* @param string $content |
||||
* @return CarePost |
||||
*/ |
||||
public function setContent($content) |
||||
{ |
||||
$this->content = $content; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getExternalCareId() |
||||
{ |
||||
return $this->externalCareId; |
||||
} |
||||
|
||||
/** |
||||
* @param string $externalCareId |
||||
* @return CarePost |
||||
*/ |
||||
public function setExternalCareId($externalCareId) |
||||
{ |
||||
$this->externalCareId = $externalCareId; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function getUser() |
||||
{ |
||||
return $this->user; |
||||
} |
||||
|
||||
/** |
||||
* @param mixed $user |
||||
* @return CarePost |
||||
*/ |
||||
public function setUser($user) |
||||
{ |
||||
$this->user = $user; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return bool |
||||
*/ |
||||
public function isPrivate() |
||||
{ |
||||
return $this->private; |
||||
} |
||||
|
||||
/** |
||||
* @param bool $private |
||||
* @return CarePost |
||||
*/ |
||||
public function setPrivate($private) |
||||
{ |
||||
$this->private = $private; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return bool |
||||
*/ |
||||
public function isExternalSource() |
||||
{ |
||||
return $this->externalSource; |
||||
} |
||||
|
||||
/** |
||||
* @param bool $externalSource |
||||
* @return CarePost |
||||
*/ |
||||
public function setExternalSource($externalSource) |
||||
{ |
||||
$this->externalSource = $externalSource; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getAttachment() |
||||
{ |
||||
return $this->attachment; |
||||
} |
||||
|
||||
/** |
||||
* @param string $attachment |
||||
* @return CarePost |
||||
*/ |
||||
public function setAttachment($attachment) |
||||
{ |
||||
$this->attachment = $attachment; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function getParent() |
||||
{ |
||||
return $this->parent; |
||||
} |
||||
|
||||
/** |
||||
* @param mixed $parent |
||||
* @return CarePost |
||||
*/ |
||||
public function setParent($parent) |
||||
{ |
||||
$this->parent = $parent; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function getChildren() |
||||
{ |
||||
return $this->children; |
||||
} |
||||
|
||||
/** |
||||
* @param mixed $children |
||||
* @return CarePost |
||||
*/ |
||||
public function setChildren($children) |
||||
{ |
||||
$this->children = $children; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function getCreatedAt() |
||||
{ |
||||
return $this->createdAt; |
||||
} |
||||
|
||||
/** |
||||
* @param mixed $createdAt |
||||
* @return CarePost |
||||
*/ |
||||
public function setCreatedAt($createdAt) |
||||
{ |
||||
$this->createdAt = $createdAt; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function getUpdatedAt() |
||||
{ |
||||
return $this->updatedAt; |
||||
} |
||||
|
||||
/** |
||||
* @param mixed $updatedAt |
||||
* @return CarePost |
||||
*/ |
||||
public function setUpdatedAt($updatedAt) |
||||
{ |
||||
$this->updatedAt = $updatedAt; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return array |
||||
*/ |
||||
public function getTags() |
||||
{ |
||||
return $this->tags; |
||||
} |
||||
|
||||
/** |
||||
* @param array $tags |
||||
* @return CarePost |
||||
*/ |
||||
public function setTags($tags) |
||||
{ |
||||
$this->tags = $tags; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return mixed |
||||
*/ |
||||
public function getInsertUser() |
||||
{ |
||||
return $this->insertUser; |
||||
} |
||||
|
||||
/** |
||||
* @param mixed $insertUser |
||||
* @return CarePost |
||||
*/ |
||||
public function setInsertUser($insertUser) |
||||
{ |
||||
$this->insertUser = $insertUser; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,106 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
use Doctrine\Common\Collections\Criteria; |
||||
use Doctrine\ORM\Tools\Pagination\Paginator; |
||||
|
||||
require_once __DIR__.'/../../main/inc/global.inc.php'; |
||||
|
||||
$plugin = StudentFollowUpPlugin::create(); |
||||
|
||||
$currentUserId = api_get_user_id(); |
||||
$studentId = isset($_GET['student_id']) ? (int) $_GET['student_id'] : api_get_user_id(); |
||||
$currentPage = isset($_GET['page']) ? (int) $_GET['page'] : 1; |
||||
$postId = isset($_GET['post_id']) ? (int) $_GET['post_id'] : 1; |
||||
|
||||
if (empty($studentId)) { |
||||
api_not_allowed(true); |
||||
} |
||||
|
||||
$isAllow = false; |
||||
$showPrivate = false; |
||||
if ($studentId === $currentUserId) { |
||||
$isAllow = true; |
||||
} else { |
||||
// Only admins and DRH that follow the user |
||||
$isAdminOrDrh = UserManager::is_user_followed_by_drh($studentId, $currentUserId) || api_is_platform_admin(); |
||||
|
||||
// Check if course session coach |
||||
$sessions = SessionManager::get_sessions_by_user($studentId); |
||||
|
||||
$isCourseCoach = false; |
||||
if (!empty($sessions)) { |
||||
foreach ($sessions as $session) { |
||||
$sessionId = $session['session_id']; |
||||
foreach ($session['courses'] as $course) { |
||||
//$isCourseCoach = api_is_coach($sessionId, $course['real_id']); |
||||
$coachList = SessionManager::getCoachesByCourseSession($sessionId, $course['real_id']); |
||||
if (!empty($coachList) && in_array($currentUserId, $coachList)) { |
||||
$isCourseCoach = true; |
||||
break(2); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
$isAllow = $isAdminOrDrh || $isCourseCoach; |
||||
$showPrivate = $isAdminOrDrh; |
||||
} |
||||
|
||||
if ($isAllow === false) { |
||||
api_not_allowed(true); |
||||
} |
||||
|
||||
$em = Database::getManager(); |
||||
$qb = $em->createQueryBuilder(); |
||||
$criteria = Criteria::create(); |
||||
$criteria->where(Criteria::expr()->eq('user', $studentId)); |
||||
|
||||
if ($showPrivate == false) { |
||||
$criteria->andWhere(Criteria::expr()->eq('private', false)); |
||||
} |
||||
|
||||
if (!empty($postId)) { |
||||
//$criteria->andWhere(Criteria::expr()->eq('private', false)); |
||||
} |
||||
|
||||
$pageSize = 2; |
||||
|
||||
$qb |
||||
->select('p') |
||||
->from('ChamiloPluginBundle:StudentFollowUp\CarePost', 'p') |
||||
->addCriteria($criteria) |
||||
->setFirstResult($pageSize * ($currentPage-1)) |
||||
->setMaxResults($pageSize) |
||||
->orderBy('p.createdAt', 'desc') |
||||
; |
||||
|
||||
$query = $qb->getQuery(); |
||||
|
||||
$posts = new Paginator($query, $fetchJoinCollection = true); |
||||
|
||||
$totalItems = count($posts); |
||||
$pagesCount = ceil($totalItems / $pageSize); |
||||
$pagination = ''; |
||||
$url = api_get_self().'?student_id='.$studentId; |
||||
$pagination .= '<ul class="pagination">'; |
||||
for ($i = 0; $i < $pagesCount; $i++) { |
||||
$newPage = $i + 1; |
||||
if ($currentPage == $newPage) { |
||||
$pagination .= '<li class="active"><a href="'.$url.'&page='.$newPage.'">'.$newPage.'</a></li>'; |
||||
} else { |
||||
$pagination .= '<li><a href="'.$url.'&page='.$newPage.'">'.$newPage.'</a></li>'; |
||||
} |
||||
} |
||||
$pagination .= '</ul>'; |
||||
|
||||
$tpl = new Template($plugin->get_lang('plugin_title')); |
||||
$tpl->assign('posts', $posts); |
||||
$tpl->assign('current_url', $url); |
||||
|
||||
$tpl->assign('pagination', $pagination); |
||||
$content = $tpl->fetch('/'.$plugin->get_name().'/view/post.html.twig'); |
||||
// Assign into content |
||||
$tpl->assign('content', $content); |
||||
// Display |
||||
$tpl->display_one_col_template(); |
||||
@ -0,0 +1,45 @@ |
||||
<h1>Care detail view</h1> |
||||
{% if posts %} |
||||
{% for post in posts %} |
||||
<h2>{{ post.title }}</h2> |
||||
<p>{{ post.content }}</p> |
||||
<p>{{ post.createdAt |date('d/m/Y') }}</p> |
||||
|
||||
{% if post.private %} |
||||
<p><span class="label label-warning">Private</span></p> |
||||
{% endif %} |
||||
|
||||
<p>{{ post.insertUser.completeName }}</p> |
||||
|
||||
{% if post.tags %} |
||||
{% for tag in post.tags %} |
||||
{{ tag }} |
||||
{% if not loop.last %} |
||||
, |
||||
{% endif %} |
||||
{% endfor %} |
||||
{% endif %} |
||||
|
||||
{% if post.parent %} |
||||
<h3>Parent</h3> |
||||
<a href="{{ current_url }}&post_id={{ post.parent.id }}"> |
||||
{{ post.parent.title }} |
||||
</a> |
||||
{% endif %} |
||||
|
||||
{% if post.children.count %} |
||||
<h3>Children</h3> |
||||
{% for child in post.children %} |
||||
<p> |
||||
<a href="{{ current_url }}&post_id={{ child.id }}"> |
||||
{{ child.title }} |
||||
</a> |
||||
</p> |
||||
{% endfor %} |
||||
{% endif %} |
||||
|
||||
{% endfor %} |
||||
<div> |
||||
{{ pagination }} |
||||
</div> |
||||
{% endif %} |
||||
Loading…
Reference in new issue