Add my_students page

pull/3063/head
jmontoyaa 9 years ago
parent cf283c784e
commit 93ee3550a2
  1. 8
      main/inc/lib/banner.lib.php
  2. 3
      main/inc/lib/sessionmanager.lib.php
  3. 58
      plugin/studentfollowup/StudentFollowUpPlugin.php
  4. 105
      plugin/studentfollowup/my_students.php
  5. 23
      plugin/studentfollowup/view/my_students.html.twig
  6. 8
      src/Chamilo/CoreBundle/Entity/SessionRelCourseRelUser.php

@ -345,7 +345,13 @@ function return_navigation_array()
$result = api_get_settings_params_simple($params);
$plugin = StudentFollowUpPlugin::create();
if (!empty($result) && $result['selected_value'] === 'installed') {
$navigation['follow_up']['url'] = api_get_path(WEB_PLUGIN_PATH).'studentfollowup/posts.php';
// Students
$url = api_get_path(WEB_PLUGIN_PATH).'studentfollowup/posts.php';
if (api_is_platform_admin() || api_is_drh() || api_is_teacher()) {
$url = api_get_path(WEB_PLUGIN_PATH).'studentfollowup/my_students.php';
}
$navigation['follow_up']['url'] = $url;
$navigation['follow_up']['title'] = $plugin->get_lang('CareDetailView');
$navigation['follow_up']['key'] = 'homepage';
$navigation['follow_up']['icon'] = 'homepage.png';

@ -1968,10 +1968,9 @@ class SessionManager
$status = null
) {
$sessionId = intval($sessionId);
$courseCode = $courseInfo['code'];
$courseId = $courseInfo['real_id'];
if (empty($sessionId) || empty($courseCode)) {
if (empty($sessionId) || empty($courseId)) {
return array();
}

@ -2,6 +2,7 @@
/* For licensing terms, see /license.txt */
use Symfony\Component\Filesystem\Filesystem;
use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
/**
* Class StudentFollowUpPlugin
@ -28,7 +29,7 @@ class StudentFollowUpPlugin extends Plugin
'0.1',
'Julio Montoya',
array(
'tool_enable' => 'boolean'
'tool_enable' => 'boolean',
)
);
}
@ -117,7 +118,7 @@ class StudentFollowUpPlugin extends Plugin
if ($isDrh) {
$criteria = [
'user' => $studentId,
'insertUser' => $currentUserId
'insertUser' => $currentUserId,
];
$repo = Database::getManager()->getRepository('ChamiloPluginBundle:StudentFollowUp\CarePost');
$post = $repo->findOneBy($criteria);
@ -165,4 +166,57 @@ class StudentFollowUpPlugin extends Plugin
'show_private' => $showPrivate,
];
}
/**
* @param string $status
* @param int $currentUserId
*
* @return array
*/
public static function getUsers($status, $currentUserId)
{
switch ($status) {
case COURSEMANAGER:
$sessions = SessionManager::get_sessions_by_user($currentUserId);
$sessions = array_column($sessions, 'session_id');
// Get session courses where I'm coach
$courseList = SessionManager::getCoursesListByCourseCoach($currentUserId);
$courses = [];
/** @var SessionRelCourseRelUser $courseItem */
foreach ($courseList as $courseItem) {
$courses[] = $courseItem->getCourse()->getId();
}
break;
case DRH:
$sessions = SessionManager::get_sessions_followed_by_drh($currentUserId);
$sessions = array_column($sessions, 'id');
$courses = [];
foreach ($sessions as $sessionId) {
$sessionDrhInfo = SessionManager::getSessionFollowedByDrh(
$currentUserId,
$sessionId
);
if ($sessionDrhInfo && isset($sessionDrhInfo['course_list'])) {
$courses = array_merge($courses, array_column($sessionDrhInfo['course_list'], 'id'));
}
}
break;
}
$userList = [];
foreach ($sessions as $sessionId) {
foreach ($courses as $courseId) {
$courseInfo = ['real_id' => $courseId];
$userFromSessionList = SessionManager::getUsersByCourseSession(
$sessionId,
$courseInfo
);
$userList = array_merge($userList, $userFromSessionList);
}
$userList = array_unique($userList);
}
return $userList;
}
}

@ -0,0 +1,105 @@
<?php
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Tools\Pagination\Paginator;
require_once __DIR__.'/../../main/inc/global.inc.php';
api_block_anonymous_users();
$plugin = StudentFollowUpPlugin::create();
$currentUserId = api_get_user_id();
$currentPage = isset($_GET['page']) ? (int) $_GET['page'] : 1;
$keyword = isset($_GET['keyword']) ? $_GET['keyword'] : '';
$totalItems = 0;
$items = [];
$showPrivate = false;
$userList = [];
if (!api_is_platform_admin()) {
$status = COURSEMANAGER;
if (api_is_drh()) {
$status = DRH;
}
$userList = StudentFollowUpPlugin::getUsers($status, $currentUserId);
}
if (!empty($userList) || api_is_platform_admin()) {
$em = Database::getManager();
$qb = $em->createQueryBuilder();
$criteria = Criteria::create();
if (!api_is_platform_admin()) {
$criteria->where(Criteria::expr()->in('user', $userList));
}
if ($showPrivate == false) {
$criteria->andWhere(Criteria::expr()->eq('private', false));
}
$pageSize = 2;
$qb
->select('p')
->distinct()
->from('ChamiloPluginBundle:StudentFollowUp\CarePost', 'p')
->join('p.user', 'u')
->addCriteria($criteria)
->setFirstResult($pageSize * ($currentPage - 1))
->setMaxResults($pageSize)
->groupBy('p.user')
->orderBy('p.createdAt', 'desc')
;
if (!empty($keyword)) {
$qb
->andWhere('u.firstname LIKE :keyword OR u.lastname LIKE :keyword OR u.username LIKE :keyword')
->setParameter('keyword', "%$keyword%")
;
}
$query = $qb->getQuery();
$items = new Paginator($query, $fetchJoinCollection = true);
$totalItems = count($items);
$pagesCount = ceil($totalItems / $pageSize);
}
$pagination = '';
$url = api_get_self().'?';
if ($totalItems > 1) {
$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>';
}
// Create a search-box
$form = new FormValidator('search_simple', 'get', null, null, null, 'inline');
$form->addText(
'keyword',
get_lang('Search'),
false,
array(
'aria-label' => get_lang("SearchUsers")
)
);
$form->addButtonSearch(get_lang('Search'));
$tpl = new Template($plugin->get_lang('plugin_title'));
$tpl->assign('users', $items);
$tpl->assign('form', $form->returnForm());
$url = api_get_path(WEB_PLUGIN_PATH).'studentfollowup/posts.php?';
$tpl->assign('post_url', $url);
$tpl->assign('pagination', $pagination);
$tpl->assign('care_title', $plugin->get_lang('CareDetailView'));
$content = $tpl->fetch('/'.$plugin->get_name().'/view/my_students.html.twig');
// Assign into content
$tpl->assign('content', $content);
// Display
$tpl->display_one_col_template();

@ -0,0 +1,23 @@
<h2>{{ 'Students' | get_lang}}</h2>
{{ form }}
{% if users %}
<table class="data_table">
<tr>
<th>Student</th>
<th>Action</th>
</tr>
{% for user in users %}
<tr>
<td>{{ user.user.completeNameWithUsername }}</td>
<td>
<a href="{{ post_url }}&student_id={{ user.user.id }}">
<img src="{{ '2rightarrow.png'|icon() }}">
</a>
</td>
</tr>
{% endfor %}
</table>
<div>
{{ pagination }}
</div>
{% endif %}

@ -104,7 +104,7 @@ class SessionRelCourseRelUser
}
/**
* @return mixed
* @return Session
*/
public function getSession()
{
@ -112,7 +112,7 @@ class SessionRelCourseRelUser
}
/**
* @param mixed $session
* @param Session $session
*/
public function setSession($session)
{
@ -120,7 +120,7 @@ class SessionRelCourseRelUser
}
/**
* @return mixed
* @return Course
*/
public function getCourse()
{
@ -128,7 +128,7 @@ class SessionRelCourseRelUser
}
/**
* @param mixed $course
* @param Course $course
*/
public function setCourse($course)
{

Loading…
Cancel
Save