ofaj
Alex Aragon 9 years ago
commit 4959ff9236
  1. 4
      index.php
  2. 57
      load_search.php
  3. 65
      main/auth/inscription.php
  4. 8
      main/inc/lib/api.lib.php
  5. 4
      main/inc/lib/certificate.lib.php
  6. 50
      main/inc/lib/course.lib.php
  7. 16
      main/inc/lib/extra_field.lib.php
  8. 10
      main/inc/lib/extra_field_value.lib.php
  9. 9
      main/inc/lib/pear/HTML/QuickForm/select.php
  10. 13
      main/inc/lib/usermanager.lib.php
  11. 16
      main/inc/lib/userportal.lib.php
  12. 63
      main/inc/local.inc.php
  13. 23
      main/mySpace/myStudents.php
  14. 6
      main/template/rainbow/layout/layout_2_col.tpl

@ -150,6 +150,10 @@ $controller->tpl->assign('navigation_course_links', $controller->return_navigati
$controller->tpl->assign('notice_block', $controller->return_notice());
//$controller->tpl->assign('main_navigation_block', $controller->return_navigation_links());
$controller->tpl->assign('help_block', $controller->return_help());
$controller->tpl->assign('total_users', UserManager::getCountActiveUsers());
$controller->tpl->assign('total_courses', CourseManager::getCountOpenCourses());
$controller->tpl->assign('total_exercises', CourseManager::getCountExercisesFromOpenCourse());
if (api_is_platform_admin() || api_is_drh()) {
$controller->tpl->assign('skills_block', $controller->return_skills_links());

@ -276,8 +276,44 @@ $extra = $extraFieldUser->addElements(
// Session fields
$showOnlyThisFields = [
'access_start_date',
'access_end_date',
//'heures_disponibilite_par_semaine', this is only for user
'access_end_date'
];
$extra = $extraField->addElements(
$form,
'',
[],
false, //filter
true,
$showOnlyThisFields,
$showOnlyThisFields,
$defaults,
[],
false, //$orderDependingDefaults
true, // force
[], // $separateExtraMultipleSelect
[]
);
$fieldsToShow = [
'heures_disponibilite_par_semaine',
];
$extra = $extraFieldUser->addElements(
$form,
$userToLoad,
[],
$filter,
true,
$fieldsToShow,
$fieldsToShow,
[],
[],
false,
$forceShowFields //$forceShowFields = false
);
$showOnlyThisFields = [
'domaine',
'filiere',
$theme,
@ -335,7 +371,6 @@ $column_model = $result['column_model'];
$form->setDefaults($defaults);
/** @var HTML_QuickForm_select $element */
$domaine1 = $form->getElementByName('extra_domaine[0]');
$domaine2 = $form->getElementByName('extra_domaine[1]');
@ -453,7 +488,17 @@ if ($form->validate()) {
}
if ($save) {
$userData = $params;
// Update extra_heures_disponibilite_par_semaine
$extraFieldValue = new ExtraFieldValue('user');
$userDataToSave = [
'item_id' => $userToLoad,
'extra_heures_disponibilite_par_semaine' => isset($userData['extra_heures_disponibilite_par_semaine']) ? $userData['extra_heures_disponibilite_par_semaine'] : ''
];
$extraFieldValue->saveFieldValues($userDataToSave, true, false, ['heures_disponibilite_par_semaine']);
// Save session search
/** @var \Chamilo\UserBundle\Entity\User $user */
$user = $em->getRepository('ChamiloUserBundle:User')->find($userToLoad);
$extraFieldValueSession = new ExtraFieldValue('session');
@ -476,17 +521,11 @@ if ($form->validate()) {
'extra_ecrire'
];
$userData = $params;
foreach ($userData as $key => $value) {
$found = strpos($key, '__persist__');
if ($found === false) {
continue;
}
}
if (isset($userData['extra_filiere_want_stage']) &&

@ -670,38 +670,57 @@ if (api_get_setting('allow_terms_conditions') == 'true') {
}
}
$language = api_get_interface_language();
$language = api_get_language_id($language);
$term_preview = LegalManager::get_last_condition($language);
if (!$term_preview) {
//we load from the platform
$language = api_get_setting('platformLanguage');
// Ofaj
if (!api_is_anonymous()) {
$language = api_get_interface_language();
$language = api_get_language_id($language);
$term_preview = LegalManager::get_last_condition($language);
//if is false we load from english
if (!$term_preview) {
$language = api_get_language_id('english'); //this must work
//we load from the platform
$language = api_get_setting('platformLanguage');
$language = api_get_language_id($language);
$term_preview = LegalManager::get_last_condition($language);
}
}
// Version and language
$form->addElement('hidden', 'legal_accept_type', $term_preview['version'].':'.$term_preview['language_id']);
$form->addElement('hidden', 'legal_info', $term_preview['id'].':'.$term_preview['language_id']);
//if is false we load from english
if (!$term_preview) {
$language = api_get_language_id('english'); //this must work
$term_preview = LegalManager::get_last_condition($language);
}
}
if ($term_preview['type'] == 1) {
// Version and language
$form->addElement(
'checkbox',
'legal_accept',
null,
get_lang('IHaveReadAndAgree').'&nbsp;<a href="inscription.php?legal" target="_blank">'.get_lang('TermsAndConditions').'</a>'
'hidden',
'legal_accept_type',
$term_preview['version'].':'.$term_preview['language_id']
);
$form->addRule('legal_accept', get_lang('ThisFieldIsRequired'), 'required');
} else {
$preview = LegalManager::show_last_condition($term_preview);
$form->addElement('label', null, $preview);
$form->addElement(
'hidden',
'legal_info',
$term_preview['id'].':'.$term_preview['language_id']
);
if ($term_preview['type'] == 1) {
$form->addElement(
'checkbox',
'legal_accept',
null,
get_lang(
'IHaveReadAndAgree'
).'&nbsp;<a href="inscription.php?legal" target="_blank">'.get_lang(
'TermsAndConditions'
).'</a>'
);
$form->addRule(
'legal_accept',
get_lang('ThisFieldIsRequired'),
'required'
);
} else {
$preview = LegalManager::show_last_condition($term_preview);
$form->addElement('label', null, $preview);
}
}
}

@ -2564,7 +2564,7 @@ function api_get_user_platform_status($user_id = null) {
case 5:
$course_status['status'] = 'student';
//check if tutor
$tutor_course_status = CourseManager::get_tutor_in_course_status($user_id, $course_code);
$tutor_course_status = CourseManager::get_tutor_in_course_status($user_id, $course_id);
if ($tutor_course_status) {
$course_status['status'] = 'tutor';
}
@ -6979,7 +6979,7 @@ function api_detect_user_roles($user_id, $courseId, $session_id = 0)
if (CourseManager::is_course_teacher($user_id, $course_code)) {
$user_roles[] = COURSEMANAGER;
}
if (CourseManager::get_tutor_in_course_status($user_id, $course_code)) {
if (CourseManager::get_tutor_in_course_status($user_id, $courseInfo['real_id'])) {
$user_roles[] = COURSE_TUTOR;
}
@ -8249,3 +8249,7 @@ function api_remove_uploaded_file($type, $file)
}
}
function api_student_boss_access_to_course_and_session()
{
return true;
}

@ -316,9 +316,11 @@ class Certificate extends Model
$path_certificate
) {
$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
$now = api_get_utc_datetime();
if (!UserManager::is_user_certified($cat_id, $user_id)) {
$sql = 'UPDATE '.$table_certificate.' SET
path_certificate="'.Database::escape_string($path_certificate).'"
path_certificate="'.Database::escape_string($path_certificate).'",
created_at = "'.$now.'"
WHERE cat_id="'.intval($cat_id).'" AND user_id="'.intval($user_id).'" ';
Database::query($sql);
}

@ -343,14 +343,14 @@ class CourseManager
*
* @return mixed
*/
public static function get_tutor_in_course_status($user_id, $course_code)
public static function get_tutor_in_course_status($user_id, $courseId)
{
$result = Database::fetch_array(
Database::query("
SELECT is_tutor
FROM " . Database::get_main_table(TABLE_MAIN_COURSE_USER) . "
WHERE
course_code = '" . Database::escape_string($course_code) . "' AND
c_id = '" . Database::escape_string($courseId) . "' AND
user_id = " . intval($user_id)
)
);
@ -2481,7 +2481,7 @@ class CourseManager
public static function course_exists($course_code)
{
$sql = 'SELECT 1 FROM ' . Database::get_main_table(TABLE_MAIN_COURSE) . '
WHERE code="' . Database::escape_string($course_code) . '"';
WHERE code="' . Database::escape_string($course_code) . '"';
return Database::num_rows(Database::query($sql));
}
@ -6190,4 +6190,48 @@ class CourseManager
$courseFieldValue = new ExtraFieldValue('course');
$courseFieldValue->saveFieldValues($params);
}
/**
* @return int
*/
public static function getCountOpenCourses()
{
$visibility = [
COURSE_VISIBILITY_REGISTERED,
COURSE_VISIBILITY_OPEN_PLATFORM,
COURSE_VISIBILITY_OPEN_WORLD
];
$table = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "SELECT count(id) count
FROM $table
WHERE visibility IN (".implode(',', $visibility).")";
$result = Database::query($sql);
$row = Database::fetch_array($result);
return $row['count'];
}
/**
* @return int
*/
public static function getCountExercisesFromOpenCourse()
{
$visibility = [
COURSE_VISIBILITY_REGISTERED,
COURSE_VISIBILITY_OPEN_PLATFORM,
COURSE_VISIBILITY_OPEN_WORLD
];
$table = Database::get_main_table(TABLE_MAIN_COURSE);
$tableExercise = Database::get_course_table(TABLE_QUIZ_TEST);
$sql = "SELECT count(e.iid) count
FROM $table c INNER JOIN $tableExercise e
ON (c.id = e.c_id)
WHERE e.active <> -1 AND visibility IN (".implode(',', $visibility).")";
$result = Database::query($sql);
$row = Database::fetch_array($result);
return $row['count'];
}
}

@ -1196,13 +1196,27 @@ class ExtraField extends Model
);
}
} else {
// Ofaj
$attributes = array('multiple' => 'multiple', 'id' => 'extra_'.$field_details['variable']);
$chosenSelect = [
'ecouter',
'lire',
'participer_a_une_conversation',
's_exprimer_oralement_en_continu',
'ecrire'
];
if (in_array($field_details['variable'], $chosenSelect)) {
$attributes['select_chosen'] = true;
}
// default behaviour
$form->addElement(
'select',
'extra_'.$field_details['variable'],
$field_details['display_text'],
$options,
array('multiple' => 'multiple', 'id' => 'extra_'.$field_details['variable'])
$attributes
);
}

@ -77,10 +77,11 @@ class ExtraFieldValue extends Model
* @param array $params array for the insertion into the *_field_values table
* @param bool $forceSave
* @param bool $showQuery
* @param array $saveOnlyThisFields
* @return mixed false on empty params, void otherwise
* @assert (array()) === false
*/
public function saveFieldValues($params, $forceSave = false, $showQuery = false)
public function saveFieldValues($params, $forceSave = false, $showQuery = false, $saveOnlyThisFields = [])
{
foreach ($params as $key => $value) {
$found = strpos($key, '__persist__');
@ -113,6 +114,13 @@ class ExtraFieldValue extends Model
}
$field_variable = $fieldDetails['variable'];
if (!empty($saveOnlyThisFields)) {
if (!in_array($field_variable, $saveOnlyThisFields)) {
continue;
}
}
if (isset($params['extra_'.$field_variable])) {
$value = $params['extra_'.$field_variable];
} else {

@ -78,8 +78,17 @@ class HTML_QuickForm_select extends HTML_QuickForm_element
if (!empty($attributes['class'])) {
$oldClass = $attributes['class'];
}
$attributes['class'] = $oldClass . ' selectpicker show-tick form-control';
$attributes['data-live-search'] = 'true';
// Ofaj
if (isset($attributes['disable_select_effect']) && $attributes['disable_select_effect']) {
$attributes['class'] = 'form-control';
}
// Ofaj
if (isset($attributes['select_chosen']) && $attributes['select_chosen']) {
$attributes['class'] = 'chzn-select';
}
if (isset($attributes['placeholder'])) {
$addBlank = $attributes['placeholder'];

@ -5557,4 +5557,17 @@ SQL;
return Display::tabsOnlyLink($headers, $optionSelected);
}
}
/**
* @return int
*/
public static function getCountActiveUsers()
{
$table = Database::get_main_table(TABLE_MAIN_USER);
$sql = "SELECT count(id) count FROM $table WHERE active = 1";
$result = Database::query($sql);
$row = Database::fetch_array($result);
return $row['count'];
}
}

@ -380,6 +380,22 @@ class IndexManager
$searchItem = null;
$myCertificate = GradebookUtils::get_certificate_by_user_id(
0,
$this->user_id
);
if ($myCertificate) {
$content .= Display::tag(
'li',
Display::url(
Display::return_icon('skill-badges.png', get_lang('MyGeneralCertificate'), null, ICON_SIZE_SMALL).get_lang('MyGeneralCertificate'),
api_get_path(WEB_CODE_PATH).'social/my_skills_report.php?a=generate_custom_skill'
)
);
}
if (api_get_setting('allow_public_certificates') == 'true') {
$searchItem = Display::tag(
'li',

@ -1101,6 +1101,7 @@ $is_courseCoach = false; //course coach
$is_courseAdmin = false;
$is_courseTutor = false;
$is_courseMember = false;
$bossHasAccess = false;
if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
if (isset($_cid) && $_cid) {
@ -1190,7 +1191,6 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
}
if (isset($user_id) && $user_id && isset($_real_cid) && $_real_cid) {
//Check if user is subscribed in a course
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "SELECT * FROM $course_user_table
@ -1209,6 +1209,23 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
$is_courseMember = true;
}
// Ofaj - student boss can access course if he follows the user
if (isset($_user) && isset($_user['status']) && $_user['status'] == STUDENT_BOSS) {
if (isset($_REQUEST['log_as_user'])) {
$isBoss = UserManager::userIsBossOfStudent($_user['user_id'], $_REQUEST['log_as_user']);
$isUserFollowedInCourse = CourseManager::is_user_subscribed_in_course(
$_REQUEST['log_as_user'],
$_course['code'],
false
);
if ($isBoss && $isUserFollowedInCourse) {
$is_courseMember = true;
$bossHasAccess = true;
}
}
}
// We are in a session course? Check session permissions
if (!empty($session_id)) {
// I'm not the teacher of the course
@ -1236,19 +1253,22 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
// Am I a session admin?
if (isset($row) && isset($row[0]) && $row[0]['session_admin_id'] == $user_id) {
$is_courseMember = false;
$is_courseTutor = false;
$is_courseAdmin = false;
$is_courseCoach = false;
$is_sessionAdmin = true;
$is_courseMember = false;
$is_courseTutor = false;
$is_courseAdmin = false;
$is_courseCoach = false;
$is_sessionAdmin = true;
} else {
// Am I a session coach for this session?
$sql = "SELECT session.id, session.id_coach FROM $tbl_session session
$sql = "SELECT session.id, session.id_coach
FROM $tbl_session session
INNER JOIN $tbl_session_course sc
ON sc.session_id = session.id
WHERE session.id = $session_id
AND session.id_coach = $user_id
AND sc.c_id = '$_real_cid'";
WHERE
session.id = $session_id AND
session.id_coach = $user_id AND
sc.c_id = '$_real_cid'
";
$result = Database::query($sql);
if (Database::num_rows($result)) {
@ -1310,6 +1330,26 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
$is_sessionAdmin = false;
$is_courseCoach = false;
}
// Boss validation
if (isset($_REQUEST['log_as_user'])) {
$isBoss = UserManager::userIsBossOfStudent($user_id, $_REQUEST['log_as_user']);
$isUserFollowedInCourse = CourseManager::is_user_subscribed_in_course(
$_REQUEST['log_as_user'],
$_course['code'],
true,
$session_id
);
if ($isBoss && $isUserFollowedInCourse) {
$is_courseMember = true;
$is_courseTutor = false;
$is_courseAdmin = false;
$is_courseCoach = false;
$is_sessionAdmin = false;
$bossHasAccess = true;
}
}
}
}
@ -1345,7 +1385,6 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
$is_allowed_in_course = false;
if (isset($_course) && isset($_course['visibility'])) {
switch ($_course['visibility']) {
case COURSE_VISIBILITY_OPEN_WORLD: //3
$is_allowed_in_course = true;
@ -1357,7 +1396,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
$courseCode,
$session_id
);
if (isset($user_id) && ($is_platformAdmin || $isUserSubscribedInCourse === true) && !api_is_anonymous($user_id)) {
if (isset($user_id) && ($is_platformAdmin || $isUserSubscribedInCourse === true || $bossHasAccess) && !api_is_anonymous($user_id)) {
$is_allowed_in_course = true;
}
break;

@ -18,7 +18,7 @@ if (!api_is_allowed_to_create_course() &&
// Check if the user is tutor of the course
$user_course_status = CourseManager::get_tutor_in_course_status(
api_get_user_id(),
api_get_course_id()
api_get_course_int_id()
);
if ($user_course_status != 1) {
api_not_allowed(true);
@ -42,10 +42,6 @@ $student_id = intval($_GET['student']);
// time spent on the course
$courseInfo = api_get_course_info($course_code);
if (empty($sessionId)) {
$sessionId = api_get_session_id();
}
if ($export) {
ob_start();
}
@ -761,8 +757,13 @@ if (!empty($student_id)) {
$scoretotal_display
);
$extraParam = '';
if (api_is_student_boss()) {
$extraParam = '&log_as_user='.$student_id;
}
echo '<tr>
<td ><a href="' .$courseInfoItem['course_public_url'] .'?id_session=' . $sId . '">'.
<td ><a href="' .$courseInfoItem['course_public_url'] .'?id_session=' . $sId . $extraParam.'">'.
$courseInfoItem['title'].'</a></td>
<td >'.$time_spent_on_course .'</td>
<td >'.$progress.'</td>
@ -1077,6 +1078,12 @@ if (!empty($student_id)) {
$result_exercices = Database::query($sql);
$i = 0;
$extraParam = '';
if (api_is_student_boss()) {
$extraParam = '&log_as_user='.$student_id;
}
if (Database :: num_rows($result_exercices) > 0) {
while ($exercices = Database :: fetch_array($result_exercices)) {
$exercise_id = intval($exercices['id']);
@ -1156,14 +1163,14 @@ if (!empty($student_id)) {
if (Database :: num_rows($result_last_attempt) > 0) {
$id_last_attempt = Database :: result($result_last_attempt, 0, 0);
if ($count_attempts > 0)
echo '<a href="../exercise/exercise_show.php?id=' . $id_last_attempt . '&cidReq='.$course_code.'&session_id='.$sessionId.'&student='.$student_id.'&origin='.(empty($origin)?'tracking':$origin).'">
echo '<a href="../exercise/exercise_show.php?id=' . $id_last_attempt . $extraParam.'&cidReq='.$course_code.'&session_id='.$sessionId.'&student='.$student_id.'&origin='.(empty($origin)?'tracking':$origin).'">
'.Display::return_icon('quiz.gif').'
</a>';
}
echo '</td>';
echo '<td>';
$all_attempt_url = "../exercise/exercise_report.php?exerciseId=$exercise_id&cidReq=$course_code&filter_by_user=$student_id&id_session=$sessionId";
$all_attempt_url = "../exercise/exercise_report.php?exerciseId=".$exercise_id.$extraParam."&cidReq=$course_code&filter_by_user=$student_id&id_session=$sessionId";
echo Display::url(Display::return_icon('test_results.png', get_lang('AllAttempts'), array(), ICON_SIZE_SMALL), $all_attempt_url );
echo '</td></tr>';

@ -42,7 +42,7 @@
<ul class="items">
<li><i class="fa fa-user fa-4x icon-color" aria-hidden="true"></i></li>
<li>
<h2 class="number">450+</h2>
<h2 class="number">{{ total_users }}</h2>
<p class="text">{{ "RegisteredUsers"|get_lang }}</p>
</li>
</ul>
@ -51,7 +51,7 @@
<ul class="items">
<li><i class="fa fa-book fa-4x icon-color" aria-hidden="true"></i></li>
<li>
<h2 class="number">30</h2>
<h2 class="number">{{ total_courses }}</h2>
<p class="text">{{ "OpenCourses"|get_lang }}</p>
</li>
</ul>
@ -60,7 +60,7 @@
<ul class="items">
<li><i class="fa fa-signal fa-4x icon-color" aria-hidden="true"></i></li>
<li>
<h2 class="number">300+</h2>
<h2 class="number">{{ total_exercises }}</h2>
<p class="text">{{ "Certificates"|get_lang }}</p>
</li>
</ul>

Loading…
Cancel
Save