Sessions: add option to import student publication into a session

Replace base course student publication with the student publication
in the session if it has the same name.

See BT#17700
pull/3512/head
Julio Montoya 5 years ago
parent d8458553c2
commit 34fc8f00cc
  1. 37
      main/inc/lib/sessionmanager.lib.php
  2. 15
      main/inc/lib/webservices/Rest.php
  3. 31
      main/lp/learnpath.class.php
  4. 8
      main/session/add_courses_to_session.php
  5. 8
      main/work/work.lib.php

@ -2552,6 +2552,7 @@ class SessionManager
* existing courses and users (true, default) or not (false)
* @param bool $copyEvaluation from base course to session course
* @param bool $copyCourseTeachersAsCoach
* @param bool $importAssignments
*
* @throws Exception
*
@ -2562,7 +2563,8 @@ class SessionManager
$courseList,
$removeExistingCoursesWithUsers = true,
$copyEvaluation = false,
$copyCourseTeachersAsCoach = false
$copyCourseTeachersAsCoach = false,
$importAssignments = false
) {
$sessionId = (int) $sessionId;
@ -2570,6 +2572,10 @@ class SessionManager
return false;
}
if ($importAssignments) {
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
}
$em = Database::getManager();
/** @var Session $session */
@ -2754,6 +2760,35 @@ class SessionManager
}
}
if ($importAssignments) {
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
$sql = " SELECT * FROM $workTable
WHERE active = 1 AND
c_id = $courseId AND
parent_id = 0 AND
(session_id IS NULL OR session_id = 0)";
$result = Database::query($sql);
$workList = Database::store_result($result, 'ASSOC');
foreach ($workList as $work) {
$values = [
'work_title' => $work['title'],
'new_dir' => $work['url'].'_session_'.$sessionId,
'description' => $work['description'],
'qualification' => $work['qualification'],
'allow_text_assignment' => $work['allow_text_assignment'],
];
$result = addDir(
$values,
api_get_user_id(),
$courseInfo,
0,
$sessionId
);
}
}
// If the course isn't subscribed yet
$sql = "INSERT INTO $tbl_session_rel_course (session_id, c_id, nbr_users, position)
VALUES ($sessionId, $courseId, 0, 0)";

@ -1553,12 +1553,15 @@ class Rest extends WebService
{
$sessionId = $params['id_session'];
$courseList = $params['list_courses'];
$importAssignments = isset($params['import_assignments']) ? 1 === (int) $params['import_assignments'] : false;
$result = SessionManager::add_courses_to_session(
$sessionId,
$courseList,
true,
false
false,
false,
$importAssignments
);
if ($result) {
@ -1566,12 +1569,12 @@ class Rest extends WebService
'status' => $result,
'message' => get_lang('Updated'),
];
} else {
return [
'status' => $result,
'message' => get_lang('ErrorOccurred'),
];
}
return [
'status' => $result,
'message' => get_lang('ErrorOccurred'),
];
}
/**

@ -3572,7 +3572,8 @@ class learnpath
$course_id,
$this->get_id(),
$item_id,
$this->get_view_id()
$this->get_view_id(),
$this->get_lp_session_id()
);
switch ($lp_item_type) {
case 'document':
@ -12995,6 +12996,7 @@ EOD;
* @param int $learningPathId The learning path ID (in lp table)
* @param int $id_in_path the unique index in the items table
* @param int $lpViewId
* @param int $lpSessionId
*
* @return string
*/
@ -13002,7 +13004,8 @@ EOD;
$course_id,
$learningPathId,
$id_in_path,
$lpViewId
$lpViewId,
$lpSessionId = 0
) {
$session_id = api_get_session_id();
$course_info = api_get_course_info_by_id($course_id);
@ -13169,7 +13172,29 @@ EOD;
return $main_dir_path.'user/user.php?'.$extraParams;
case TOOL_STUDENTPUBLICATION:
if (!empty($rowItem->getPath())) {
return $main_dir_path.'work/work_list.php?id='.$rowItem->getPath().'&'.$extraParams;
$workId = $rowItem->getPath();
if (empty($lpSessionId) && !empty($session_id)) {
// Check if a student publication with the same name exists in this session see BT#17700
$title = Database::escape_string($rowItem->getTitle());
$table = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
$sql = "SELECT * FROM $table
WHERE
active = 1 AND
parent_id = 0 AND
c_id = $course_id AND
session_id = $session_id AND
title = '$title'
LIMIT 1";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$work = Database::fetch_array($result, 'ASSOC');
if ($work) {
$workId = $work['iid'];
}
}
}
return $main_dir_path.'work/work_list.php?id='.$workId.'&'.$extraParams;
}
return $main_dir_path.'work/work.php?'.api_get_cidreq().'&id='.$rowItem->getPath().'&'.$extraParams;

@ -84,13 +84,15 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
$courseList = $_POST['SessionCoursesList'];
$copyEvaluation = isset($_POST['copy_evaluation']);
$copyCourseTeachersAsCoach = isset($_POST['import_teachers_as_course_coach']);
$importAssignments = isset($_POST['import_assignments']);
SessionManager::add_courses_to_session(
$sessionId,
$courseList,
true,
$copyEvaluation,
$copyCourseTeachersAsCoach
$copyCourseTeachersAsCoach,
$importAssignments
);
Display::addFlash(Display::return_message(get_lang('Updated')));
@ -294,6 +296,10 @@ unset($Courses);
<input type="checkbox" name="import_teachers_as_course_coach">
<?php echo get_lang('ImportCourseTeachersAsCourseCoach'); ?>
</label>
<label>
<input type="checkbox" name="import_assignments">
<?php echo get_lang('SessionImportAssignments'); ?>
</label>
</div>
<?php
echo '<div class="separate-action">';

@ -1566,13 +1566,19 @@ function getWorkListTeacher(
$column,
$direction,
$where_condition,
$getCount = false
$getCount = false,
$courseInfoParam = []
) {
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
$workTableAssignment = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT);
$courseInfo = api_get_course_info();
$course_id = api_get_course_int_id();
if (!empty($courseInfoParam)) {
$courseInfo = $courseInfoParam;
$course_id = $courseInfoParam['real_id'];
}
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
$group_id = api_get_group_id();

Loading…
Cancel
Save