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.
		
		
		
		
		
			
		
			
				
					
					
						
							198 lines
						
					
					
						
							5.8 KiB
						
					
					
				
			
		
		
	
	
							198 lines
						
					
					
						
							5.8 KiB
						
					
					
				<?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($_GET['page']) ? (int) $_GET['page'] : 1;
 | 
						|
$keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['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)) {
 | 
						|
        $keyword = explode(' ', $keyword);
 | 
						|
        if (is_array($keyword)) {
 | 
						|
            foreach ($keyword 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'];
 | 
						|
        //var_dump($itemTags);
 | 
						|
        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('SearchUsers'),
 | 
						|
    ]
 | 
						|
);
 | 
						|
 | 
						|
if (!empty($fullSessionList)) {
 | 
						|
    $options = array_column($fullSessionList, 'name', 'id');
 | 
						|
    $options[0] = get_lang('SelectAnOption');
 | 
						|
    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('SelectAnOption')]);
 | 
						|
}
 | 
						|
 | 
						|
$form->addButtonSearch(get_lang('Search'));
 | 
						|
 | 
						|
$form->setDefaults(['session_id' => $sessionId]);
 | 
						|
 | 
						|
$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('CareDetailView'));
 | 
						|
$content = $tpl->fetch('/'.$plugin->get_name().'/view/my_students.html.twig');
 | 
						|
$tpl->assign('content', $content);
 | 
						|
$tpl->display_one_col_template();
 | 
						|
 |