123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?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';
- api_block_anonymous_users();
- $plugin = StudentFollowUpPlugin::create();
- $currentUserId = api_get_user_id();
- $currentPage = isset($_REQUEST['page']) ? (int) $_REQUEST['page'] : 1;
- $keyword = isset($_REQUEST['keyword']) ? Security::remove_XSS($_REQUEST['keyword']) : '';
- $sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : 0;
- $selectedTag = isset($_REQUEST['tag']) ? Security::remove_XSS($_REQUEST['tag']) : '';
- $totalItems = 0;
- $items = [];
- $tags = [];
- $showPrivate = false;
- $pageSize = StudentFollowUpPlugin::getPageSize();
- $firstResults = $pageSize * ($currentPage - 1);
- $pagesCount = 0;
- $isAdmin = api_is_platform_admin();
- $userList = [];
- if (!$isAdmin) {
- $status = COURSEMANAGER;
- if (api_is_drh()) {
- $status = DRH;
- }
- $data = StudentFollowUpPlugin::getUsers(
- $status,
- $currentUserId,
- $sessionId,
- $firstResults,
- $pageSize
- );
- $userList = $data['users'];
- $fullSessionList = $data['sessions'];
- } else {
- $fullSessionList = SessionManager::getSessionsCoachedByUser($currentUserId);
- }
- if (!empty($sessionId)) {
- $userList = SessionManager::get_users_by_session($sessionId);
- $userList = array_column($userList, 'user_id');
- }
- $tagList = [];
- if (!empty($userList) || $isAdmin) {
- $em = Database::getManager();
- $qb = $em->createQueryBuilder();
- $criteria = Criteria::create();
- if (!$isAdmin) {
- $criteria->where(Criteria::expr()->in('user', $userList));
- }
- if (!empty($sessionId)) {
- $criteria->where(Criteria::expr()->in('user', $userList));
- }
- if ($showPrivate === false) {
- $criteria->andWhere(Criteria::expr()->eq('private', false));
- }
- $qb
- ->select('p')
- ->distinct()
- ->from('ChamiloPluginBundle:StudentFollowUp\CarePost', 'p')
- ->join('p.user', 'u')
- ->addCriteria($criteria)
- ->setFirstResult($firstResults)
- ->setMaxResults($pageSize)
- ->groupBy('p.user')
- ->orderBy('p.createdAt', 'desc')
- ;
- if (!empty($keyword)) {
- $keywordToArray = explode(' ', $keyword);
- if (is_array($keywordToArray)) {
- foreach ($keywordToArray as $key) {
- $key = trim($key);
- if (empty($key)) {
- continue;
- }
- $qb
- ->andWhere('u.firstname LIKE :keyword OR u.lastname LIKE :keyword OR u.username LIKE :keyword')
- ->setParameter('keyword', "%$key%")
- ;
- }
- } else {
- $qb
- ->andWhere('u.firstname LIKE :keyword OR u.lastname LIKE :keyword OR u.username LIKE :keyword')
- ->setParameter('keyword', "%$keyword%")
- ;
- }
- }
- $queryBuilderOriginal = clone $qb;
- if (!empty($selectedTag)) {
- $qb->andWhere('p.tags LIKE :tags ');
- $qb->setParameter('tags', "%$selectedTag%");
- }
- $query = $qb->getQuery();
- $items = new Paginator($query);
- $queryBuilderOriginal->select('p.tags')
- ->distinct(false)
- ->setFirstResult(null)
- ->setMaxResults(null)
- ->groupBy('p.id')
- ;
- $tags = $queryBuilderOriginal->getQuery()->getResult();
- //var_dump($queryBuilderOriginal->getQuery()->getSQL());
- $tagList = [];
- foreach ($tags as $tag) {
- $itemTags = $tag['tags'];
- foreach ($itemTags as $itemTag) {
- if (in_array($itemTag, array_keys($tagList))) {
- $tagList[$itemTag]++;
- } else {
- $tagList[$itemTag] = 1;
- }
- }
- }
- $totalItems = $items->count();
- $pagesCount = ceil($totalItems / $pageSize);
- }
- $pagination = '';
- $url = api_get_self().'?session_id='.$sessionId.'&tag='.$selectedTag.'&keyword='.$keyword.'&';
- if ($totalItems > 1 && $pagesCount > 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, FormValidator::LAYOUT_HORIZONTAL);
- $form->addText(
- 'keyword',
- get_lang('Search'),
- false,
- [
- 'aria-label' => get_lang('Search users'),
- ]
- );
- if (!empty($fullSessionList)) {
- $options = array_column($fullSessionList, 'name', 'id');
- $options[0] = get_lang('Please select an option');
- ksort($options);
- $form->addSelect('session_id', get_lang('Session'), $options);
- }
- if (!empty($tagList)) {
- $tagOptions = [];
- arsort($tagList);
- foreach ($tagList as $tag => $counter) {
- $tagOptions[$tag] = $tag.' ('.$counter.')';
- }
- $form->addSelect('tag', get_lang('Tags'), $tagOptions, ['placeholder' => get_lang('Please select an option')]);
- }
- $form->addButtonSearch(get_lang('Search'));
- $defaults = [
- 'session_id' => $sessionId,
- 'keyword' => $keyword,
- 'tag' => $selectedTag,
- ];
- $form->setDefaults($defaults);
- $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);
- $url = api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?';
- $tpl->assign('my_students_url', $url);
- $tpl->assign('pagination', $pagination);
- $tpl->assign('care_title', $plugin->get_lang('Student care detail view'));
- $content = $tpl->fetch('/'.$plugin->get_name().'/view/my_students.html.twig');
- $tpl->assign('content', $content);
- $tpl->display_one_col_template();
|