Merge branch '1.11.x' of github.com:chamilo/chamilo-lms into 1.11.x

pull/2990/head
Angel Fernando Quiroz Campos 6 years ago
commit 04281bce3d
  1. 1
      .travis.yml
  2. 2
      main/admin/questions.php
  3. 2
      main/admin/teachers_time_by_session_report.php
  4. 4
      main/exercise/exercise.class.php
  5. 20
      main/gradebook/lib/be/category.class.php
  6. 15
      main/gradebook/lib/fe/catform.class.php
  7. 4
      main/session/about.php
  8. 2
      main/template/default/admin/user_information.tpl
  9. 2
      main/template/default/my_space/user_details.tpl
  10. 28
      plugin/studentfollowup/StudentFollowUpPlugin.php
  11. 28
      plugin/studentfollowup/demo_content.php
  12. 103
      plugin/studentfollowup/my_students.php
  13. 4
      plugin/studentfollowup/view/my_students.html.twig

@ -18,7 +18,6 @@ cache:
directories:
- $HOME/.composer/cache/files
php:
- 5.5
- 5.6
- 7.0
- 7.1

@ -52,6 +52,8 @@ if ($formSent) {
if (!empty($description)) {
$criteria->orWhere($criteria->expr()->contains('description', $description."\r"));
$criteria->orWhere($criteria->expr()->eq('description', $description));
$criteria->orWhere($criteria->expr()->eq('description', '<p>'.$description.'</p>'));
}
if (!empty($title)) {

@ -41,7 +41,7 @@ foreach ($sessionsInfo as $sessionInfo) {
if (isset($_GET['session']) && intval($_GET['session'])) {
$form->setDefaults(['session' => intval($_GET['session'])]);
$session = $em->find('ChamiloCoreBundle:Session', intval($_GET['session']));
$session = api_get_session_entity($_GET['session']);
}
$data = [];

@ -8596,7 +8596,7 @@ class Exercise
'results_disabled',
null,
get_lang('ExerciseRankingMode'),
'6',
RESULT_DISABLE_RANKING,
['id' => 'result_disabled_6']
);
@ -8613,7 +8613,7 @@ class Exercise
'radio',
'results_disabled',
null,
get_lang('ExerciseShowOnlyGlobalScoreAndCorrectAnswersAndRankingMode'),
get_lang('ExerciseAutoEvaluationAndRankingMode'),
RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER_AND_RANKING,
['id' => 'result_disabled_8']
);

@ -34,6 +34,7 @@ class Category implements GradebookItem
private $isRequirement;
private $courseDependency;
private $minimumToValidate;
private $documentId;
/** @var int */
private $gradeBooksToValidateInDependence;
@ -56,6 +57,7 @@ class Category implements GradebookItem
$this->generateCertificates = false;
$this->isRequirement = false;
$this->courseDependency = [];
$this->documentId = 0;
$this->minimumToValidate = null;
}
@ -2622,7 +2624,7 @@ class Category implements GradebookItem
$cat->setCourseListDependency(isset($data['depends']) ? $data['depends'] : []);
$cat->setMinimumToValidate(isset($data['minimum_to_validate']) ? $data['minimum_to_validate'] : null);
$cat->setGradeBooksToValidateInDependence(isset($data['gradebooks_to_validate_in_dependence']) ? $data['gradebooks_to_validate_in_dependence'] : null);
$cat->setDocumentId($data['document_id']);
if ($allow) {
$cat->entity = $repo->find($data['id']);
}
@ -2802,4 +2804,20 @@ class Category implements GradebookItem
return $category[0];
}
/**
* @param int $value
*/
public function setDocumentId($value)
{
$this->documentId = (int) $value;
}
/**
* @return int
*/
public function getDocumentId()
{
return $this->documentId;
}
}

@ -134,7 +134,7 @@ class CatForm extends FormValidator
$course_code = api_get_course_id();
$session_id = api_get_session_id();
//Freeze or not
$test_cats = Category::load(
null,
null,
@ -143,7 +143,7 @@ class CatForm extends FormValidator
null,
$session_id,
false
); //already init
);
$links = null;
if (isset($test_cats[0])) {
@ -179,6 +179,7 @@ class CatForm extends FormValidator
'is_requirement' => $this->category_object->getIsRequirement(),
]
);
$this->addElement('hidden', 'hid_id', $this->category_object->get_id());
$this->addElement(
'hidden',
@ -376,6 +377,16 @@ class CatForm extends FormValidator
$isRequirementCheckbox->setChecked(true);
}
$documentId = $this->category_object->getDocumentId();
if (!empty($documentId)) {
$documentData = DocumentManager::get_document_data_by_id($documentId, api_get_course_id());
if (!empty($documentData)) {
$this->addLabel(get_lang('Certificate'), $documentData['title']);
}
}
if ($this->form_type == self::TYPE_ADD) {
$this->addButtonCreate(get_lang('AddCategory'));
} else {

@ -5,7 +5,6 @@ use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ExtraField;
use Chamilo\CoreBundle\Entity\Repository\SequenceRepository;
use Chamilo\CoreBundle\Entity\SequenceResource;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CourseBundle\Entity\CCourseDescription;
use Chamilo\UserBundle\Entity\User;
@ -26,8 +25,7 @@ $sessionId = isset($_GET['session_id']) ? (int) $_GET['session_id'] : 0;
$em = Database::getManager();
/** @var Session $session */
$session = $em->find('ChamiloCoreBundle:Session', $sessionId);
$session = api_get_session_entity($sessionId);
if (!$session) {
api_not_allowed(true);

@ -1,4 +1,4 @@
{% import 'macro/macro.tpl'|get_template as display %}
{% import 'default/macro/macro.tpl' as display %}
<div class="details">
<div class="row">

@ -1,4 +1,4 @@
{% import 'macro/macro.tpl'|get_template as display %}
{% import 'default/macro/macro.tpl' as display %}
{% if title %}
<h2 class="details-title"><img src="{{ 'course.png'|icon(32) }}"> {{ title }}</h2>

@ -173,20 +173,27 @@ class StudentFollowUpPlugin extends Plugin
/**
* @param string $status
* @param int $currentUserId
* @param int $sessionId
* @param int $start
* @param int $limit
*
* @return array
*/
public static function getUsers($status, $currentUserId, $start, $limit)
public static function getUsers($status, $currentUserId, $sessionId, $start, $limit)
{
$sessions = [];
$courses = [];
$sessionsFull = [];
switch ($status) {
case COURSEMANAGER:
/*$sessions = SessionManager::get_sessions_by_user($currentUserId);
$sessions = array_column($sessions, 'session_id');*/
$sessions = SessionManager::getSessionsCoachedByUser($currentUserId);
$sessions = array_column($sessions, 'id');
$sessionsFull = SessionManager::getSessionsCoachedByUser($currentUserId);
$sessions = array_column($sessionsFull, 'id');
if (!empty($sessionId)) {
$sessions = [$sessionId];
}
// Get session courses where I'm coach
$courseList = SessionManager::getCoursesListByCourseCoach($currentUserId);
$courses = [];
@ -196,8 +203,12 @@ class StudentFollowUpPlugin extends Plugin
}
break;
case DRH:
$sessions = SessionManager::get_sessions_followed_by_drh($currentUserId);
$sessions = array_column($sessions, 'id');
$sessionsFull = SessionManager::get_sessions_followed_by_drh($currentUserId);
$sessions = array_column($sessionsFull, 'id');
if (!empty($sessionId)) {
$sessions = [$sessionId];
}
$courses = [];
foreach ($sessions as $sessionId) {
$sessionDrhInfo = SessionManager::getSessionFollowedByDrh(
@ -231,7 +242,10 @@ class StudentFollowUpPlugin extends Plugin
$userList = array_unique($userList);
}*/
return $userList;
return [
'users' => $userList,
'sessions' => $sessionsFull,
];
}
/**

@ -0,0 +1,28 @@
<?php
exit;
require_once __DIR__.'/../../main/inc/global.inc.php';
$em = Database::getManager();
$insertUserInfo = api_get_user_entity(api_get_user_id());
$userInfo = api_get_user_entity(16);
$title = uniqid('title', true);
$post = new \Chamilo\PluginBundle\Entity\StudentFollowUp\CarePost();
$post
->setTitle($title)
->setContent($title)
->setExternalCareId(2)
->setCreatedAt(new DateTime())
->setUpdatedAt(new DateTime())
->setPrivate(false)
->setInsertUser($insertUserInfo)
->setExternalSource(0)
//->setParent($parent)
->setTags(['php', 'react'])
->setUser($userInfo)
;
$em->persist($post);
$em->flush();

@ -11,38 +11,60 @@ 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'] : '';
$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 (!api_is_platform_admin()) {
if (!$isAdmin) {
$status = COURSEMANAGER;
if (api_is_drh()) {
$status = DRH;
}
$userList = StudentFollowUpPlugin::getUsers(
$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) || api_is_platform_admin()) {
if (!empty($userList) || $isAdmin) {
$em = Database::getManager();
$qb = $em->createQueryBuilder();
$criteria = Criteria::create();
if (!api_is_platform_admin()) {
if (!$isAdmin) {
$criteria->where(Criteria::expr()->in('user', $userList));
}
if (!empty($sessionId)) {
$criteria->where(Criteria::expr()->in('user', $userList));
}
if ($showPrivate == false) {
if ($showPrivate === false) {
$criteria->andWhere(Criteria::expr()->eq('private', false));
}
@ -59,9 +81,9 @@ if (!empty($userList) || api_is_platform_admin()) {
;
if (!empty($keyword)) {
$keyword = explode(' ', $keyword);
if (is_array($keyword)) {
foreach ($keyword as $key) {
$keywordToArray = explode(' ', $keyword);
if (is_array($keywordToArray)) {
foreach ($keywordToArray as $key) {
$key = trim($key);
if (empty($key)) {
continue;
@ -79,15 +101,45 @@ if (!empty($userList) || api_is_platform_admin()) {
}
}
$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().'?';
if ($totalItems > 1) {
$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;
@ -101,7 +153,7 @@ if ($totalItems > 1) {
}
// Create a search-box
$form = new FormValidator('search_simple', 'get', null, null, null, 'inline');
$form = new FormValidator('search_simple', 'get', null, null, null, FormValidator::LAYOUT_HORIZONTAL);
$form->addText(
'keyword',
get_lang('Search'),
@ -110,8 +162,33 @@ $form->addText(
'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'));
$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());

@ -3,8 +3,8 @@
{% if users %}
<table class="data_table">
<tr>
<th>Student</th>
<th>Action</th>
<th>{{'Student' | get_lang }}</th>
<th>{{'Action' | get_lang }}</th>
</tr>
{% for user in users %}
<tr>

Loading…
Cancel
Save